MyTetroid – Android приложение

Mytetroid — это Android-клиент хранилища данных настольной версии программы MyTetra.

MyTetra — полнофункциональный кроссплатформенный менеджер заметок (PIM-manager), использующийся для сбора и накопления различного рода информации. Все записи (заметки, статьи) организуются в древовидную структуру, а так же снабжаются ключевыми словами-тегами, позволяющими быстро находить нужные записи. Ссылки между записями, прикрепляемые файлы, шифрование, развернутый поиск, синхронизация, копирование из браузера, кроссплатформенность, один из лучших визуальных WYSIWYG редакторов текста – все это есть в PIM-менеджере MyTetra.

Хранилище данных реализованно в виде множества html-файлов, структура которого хранится в xml, а настройки в файлах ini. Подробнее о формате хранения данных в MyTetra здесь

Для шифрования используется открытая библиотека RC5-Simple, реализующая алгоритм RC5-32/12/16 c CBC-режимом сцепления. Также используется реализация алгоритма хеширования Pbkdf2 для хорошего перемешивания бит пароля и сильного замедления перебора. О системе шифрования в MyTetra подробнее здесь и здесь.

Лицензия: GPL v.3


Функционал

Основной функционал приложения на данный момент:

  • выбор существующего хранилища или создание нового
  • древовидная структура веток, списки записей в ветках и прикрепленных файлов к записям, как в оригинальной программе
  • просмотр, добавление, изменение, копирование, вырезание и удаление веток, записей и прикрепленных файлов
  • расшифровка закрытых веток, записей и файлов
  • сохранение прикрепленных файлов по выбранному пути
  • отдельный список меток по записям
  • открытие каталога записи (в стороннем файловом менеджере)
  • глобальный поиск по всем объектам хранилища
  • фильтрация в списках веток, записей и меток
  • получение ссылок на ветки, записи и метки
  • просмотр статистических данных о хранилище
  • некоторые опциональные возможности:
    • установка нового или измение текущего пароля хранилища с перешифровкой данных
    • хранение пароля локально на устройстве или ввод при необходимости
    • расшифровка прикрепленных файлов во временный каталог
    • запуск с открытием ветки, выбранной в прошлый раз
    • запись логов в файл
    • полноэкранный режим
    • блокировка отключения экрана при просмотре записи
    • отправка команды синхронизации сторонним приложениям (частично)

В версии Pro добавлено:

  • список избранных записей

Для проверки работы приложения можно использовать тестовое хранилище.


Скриншоты

Ветки, записи, метки, файлы:

Текст записи, редактирование, html-код:

Глобальный поиск, статистика:

Настройки:


Синхронизация хранилища

Благодаря простому устройству хранения данных, легко нстроить их синхронизацию через интернет с помощью любых систем облачного хранения или систем контроля версий. О синхронизации данных в MyTetra через интернет и с помощью Git подробнее здесь.

Если вкратце, синхронизировать данные на Android можно с помощью:

  • клиентов облачных хранилищ (например, Google Drive, Яндекс.Диск, Dropbox, Mega и др.)
  • клиентов систем контроля версий (например, Git). Описано у меня здесь и здесь.

Изначально планировалось запускать синхронизациию хранилища, посылая “команды” (Intent) другим сторонним приложениям (git-клиентам, WebDAV-клиентам), но для этого нужно реализовать поддержку этого функционала в этих приложениях, что трудновыполнимо, если вообще возможно.

Чуть подробнее об этом (развернуть)

Начиная с версии 1.14 возможен вызов стороннего приложения для синхронизации хранилища. Это удобно, например, когда нужно автоматически обновить данные перед их загрузкой, или сохранить изменения при выходе из приложения. Но функционал ПРИЕМА команд синхронизации (запроса) нужно реализовывать в каждом конкретном приложении-синхронизаторе отдельно.

На данный момент прием команд на синхронизацию от MyTetroid поддерживается в:

  • git-клиенте MGit (в моем форке). Кому нужен скомпиллированный .apk с нововведением, пока оно не внесено в официальную версию, его можно скачать отсюда.

Планируется поддержка в:

С официальными клиентами облаков, такими как Google Drive, Яндекс.Диск, Dropbox и прочими, ничего не выйдет, т.к. они закрыты (так что при их использовании запускайте синхронизацию вручную).


Отличия от MyTetra

В целом приложение повторяет функционал MyTetra. Но есть и отличия, вот некоторые из них:

Функционал MyTetroid MyTetra
Сохранение файла mytetra.xml Есть некоторые отличия от формата сохранения файла в MyTetra (не критично). Н-р, двойные/одинарные кавычки в первой строке  <?xml...  (будет исправлено)
Движок работы с html текстом записи

Стандартный механизм Android: WebView + поддержка редактирования записи с помощью JavaScript.

В некоторых случаях есть отличия в отображении текста, по сравнению с MyTetra.

Встроенный редактор WyEdit.

Используется “подмножество” синтаксиса языка html, поэтому при копировании html-текста в редактор записи, “лишние” неподдерживаемые тэги будут заменены либо удалены из кода.

Лишние файлы в каталоге записи Файлы, не принадлежащие записи, игнорируются. Любые файлы, не принадлежащие записи, будут удалены в корзину
Ссылки на объекты хранилища Ссылки на записи, а также на ветки и метки Ссылки на записи
Избранные записи

Добавлена сцециальная ветка “Избранное” для хранения избранных записей (в версии Pro). При добавлении записи в избранное сама запись никуда не перемещается и все равно хранится в исходной ветке. Id избранных записей хранятся в настройках приложения.

В идеале необходима поддержка сохранения пометки “избранности” записи в файле mytetra.xml (н-р, атрибут favor в тэге record). Но этот атрибут должен поддерживаться и MyTetra, иначе будет перезатираться.

Работа с несколькими хранилищами

На данный момент поддерживается единовременная работа только с одним хранилищем.

С помощью специальной функции в устройстве Android (н-р, в Xiaomi), или с помощью специальных приложений (например, Clone App) можно создать несколько “клонов” MyTetroid на устройстве, настроенных на использование разных хранилищ.

Поддержку удобного переключения между несколькими хранилищами планируется реализоваться в версии Pro.

Возможен запуск нескольких Portable экземпляров программы, настроенных на использование разных хранилищ
     

Скоро

Разрабатывается в данный момент:

  • панель в редакторе заметки для работы с выделением текста и буфером обмена
  • добавление команды “Инфо о ветке” для просмотра некоторой “системной” информации
  • исправление открытия каталога записи стандартными файловыми менеджероми (например, на Xiaomi)

Обнаруженные ошибки или пожелания оформляйте в виде issue на github.


Голосовалка за новый функционал
  • Добавить свой вариант

Информация

Репозиторий проекта: https://github.com/gee12/MyTetroid

Ссылка на GooglePlay: 

Доступно в Google Play

Оригинальный проект MyTetra: https://webhamster.ru/site/page/index/articles/projectcode/105

Политика конфиденциальности


Благодарность

Ускорить выход новых версий:


Changelist

3.2 (02.08.2020):

  • Добавлен пункт в контекстное меню “Инфо о записи”, где можно узнать id записи, путь к каталогу и его размер
  • Добавлена кнопка “Использовать глобальный поиск”, если ничего не найдено при фильтрации списка записей
  • Добавлено выделение цветом текущей ветки
  • Добавлена команда “Перезагрузить хранилище”

3.1 (02.07.2020):

  • Исправлены критические и не очень ошибки

3.0 (01.07.2020):

  • Исправлены ошибки в настройках, если не предоставлено разрешение на запись во внешнюю память
  • Другие исправления

2.9 (26.06.2020):

  • Исправлена ошибка при глобальном поиске
  • Добавлена команда “Сохранить как” у прикрепленных файлов
  • Исправлено: ошибка копирования/вырезания веток с нерасшифрованными подветками
  • Исправлено: принятие текста/изображения после расшифровки хранилища и в первую незашифрованную ветку
  • Другие мелкие исправления

2.8 (07.06.2020):

  • Добавлены команды у веток: копировать, вырезать, вставить рядом, вставить как подветку
  • Добавлена зашифровка и сброс шифровки (расшифровка) веток
  • Добавлена установка и изменение пароля хранилища в настройках (с записью данных в database.ini)
  • Добавлена возможность создания нового хранилища
  • Добавлено автоматическое перемещение старой версии файла mytetra.xml в корзину
  • Добавлены команды “Очистить историю поиска” и “Очистить корзину” в настройки
  • Исправлено добавление в список меток объекта 2 раза, если у него добавлены 2 одинаковые метки
  • Добавлен при запуске выбор ветки, активной в прошлый раз
  • Добавлен запрет на удаление последней ветки
  • Добавлена опция “Подсвечивать зашифрованные ветки”

2.7 (08.05.2020):

  • Добавлено копирование и вырезание записей
  • Добавлена корзина (пока только для удаленных и вырезанных записей)
  • Добавлена отправка текста записи в другие приложения
  • Добавлен прием текста и изображений из других приложений
  • Добавлен диалог изменения размера при добавлении нескольких изображений
  • Теперь логи записываются всегда, но в файл только при включенной опции
  • Изменены иконки пунктов меню

2.6 (23.04.2020):

  • Добавлен поиск в тексте записи и по html-коду (как в браузере)
  • Теперь зашифрованные поля объектов не перешифровуются при каждом сохранении хранилища
  • Незначительно ускорено открытие записей
  • Исправлена автоматическая пометка редактирования записи при переходе в режим html
  • Изменено отображение кнопок и панели ToolBar
  • Исправлено: запрос пароля только при выборе ветки, если указана соответствующая опция
  • При невозможности открытия каталога записи добавлено копирование пути в буфер обмена

2.5 (09.04.2020):

  • Добавлено прикрепление файлов к записи
  • Добавлена проверка существования прикрепленных файлов, каталога для логов, а также файла и каталога записи
  • Добавлено запоминание пути к каталогу, выбранного в послений раз
  • Исправлена блокировка выключения экрана при открытии записи
  • Добавлена возможность просмотра логов в настройках
  • Реализована запись логов в буфер для последующего просмотра, если не получается их записать в файл
  • Исправлен старый баг: авто-расшифровка зашифрованных веток, когда хеш пароля сохранен локально
  • Добавлена вставка изображений в редакторе записи (выбор из галереи или захват с камеры)
  • Исправлено отображение всплывающих инструментов в редакторе записи

2.4 (31.03.2020):

  • Исправлено: сохранение/удаление записи, у которой нет каталога
  • Добавлено контекстное меню к записям, веткам и меткам
  • Добавлено формирование ссылок на записи, ветки и метки и обработка их из текста записи
  • Добавлено изменение порядка записей в списке
  • Добавлено создание веток, удаление, переименование, изменение порядка и разворот подветок

2.3 (22.03.2020):

  • Добавлено редактирование свойств записи
  • Добавлено удаление записей
  • Панель свойств записи теперь скрыта по-умолчанию

2.2 (28.02.2020):

  • Добавлено создание новых записей (при этом перезаписывается файл mytetra.xml, будьте внимательны)
  • Добавлен сброс пометки изменения записи после ее сохранения
  • Добавлен запрос сохранения перед открытием метки/внутренней ссылки из записи

2.1 (23.02.2020):

  • Убран запрос на сохранение записи, даже когда запись не менялась
  • Исправдлено обновление подписей после изменения значений опций в настройках

2.0 (19.02.2020):

  • Работа с содержимым записи вынесена в отдельную активность
  • Реализовано редактирование текста записей (в режиме тестирования)
  • Создан WYSIWYG-редактор html-текста (список команд пока не полный)
  • Добавлена возможность редактирования “сырого” html-кода
  • Добавлены опции в настройки по работе с редактором текста
  • Добавлено требование разрешения на запись во внешнее хранилище
  • Модуль выбора каталога переведен на русский язык
  • Немного изменено отображение веток

1.14 (08.12.2019):

  • Реализован запуск синхронизации хранилища с помощью сторонних приложений
  • Исправлен баг проверки database.ini, когда middle_hash_check_data был равен “” (пустым кавычкам)
  • Исправлена ошибка получения размера у файлов без расширения
  • Исправлена ошибка открытия прикрепленных файлов на API >= 24

1.13 (12.11.2019):

  • Исправлена ошибка чтения файла записи, когда в пути были пробелы
  • Исправлена ошибка при отсутствии файла mytetra.xml
  • Исправлено поведение SearchView (элемент управления для фильтрации записей)

1.12 (05.11.2019):

  • Исправлена ошибка NPE в методе MainPageFragment.initListViews()
  • Добавлена опция в настройки “Не гасить экран при просмотре записи”
  • Добавлен пункт меню “Статистика хранилища” для просмотра статистических данных
  • Исправлена работа глобального поиска с параметром “По целым словам”

1.11 (25.10.2019):

  • Исправлена ​​ошибка при попытке повторной загрузки хранилища (empty context in function MainPageFragment.initListViews)
  • Исправлена ​​ошибка при попытке открыть файл на устройствах с API >=24 (добавлено использование FileProvider)
  • Реализовал выполнение глобального поиска в отдельном потоке
  • Метки к записи сделал интерактивными ссылками

1.10 (29.09.2019):

  • добавлен глобальным поиск по целым словам
  • исправлен фильтр веток по всем уровням вложенности
  • добавлено отображение имени ветки объекта (в списке найденных объектов)
  • добавлены в меню пункты Ветка записи, Прикрепленные файлы, Текст записи
  • добавлена проверка введенной строки формата даты создания заметок в настройках
  • добавлено масштабирования текста записи (двумя пальцами по экрану)
  • добавлено включение полноэкранного режима (в меню или двойным тапом по экрану)

1.9 (18.08.2019):

  • добавлен глобальный поиск (по веткам, меткам, записям, тексту записей, прикрепленным файлам, авторам записей, url записей)
  • добавлена шторка справа со списком всех меток в базе
  • добавлены поля SearchView для фильтрации списков веток, записей, меток
  • добавлена анимация во время загрузки хранилища
  • добавлено уведомление, если прикрепленный файл к записи отсутствует на диске
  • кастомизирован ToolBar: вывод заголовка и типа отображаемого объекта (Ветка/Запись/Файлы/Метка/Найдено)
  • исправлен переход по внешним ссылкам (чтобы открывалось в браузере) и по внутренним ссылкам на другие записи (mytetra://note/ID)

1.8 (28.05.2019):

  • добавил шторку справа для меток
  • исправил в списке записей ошибку, если тег create пуст

1.7 (18.05.2019):

  • оптимизирована расшифровка: убран отдельный этап отсечения служебной информации в начале и в конце результирующего массива байт

1.6 (15.05.2019):

  • добавлена запись логов (опционально)
  • добавлена возможность установки приложения на карту памяти

1.5 (09.05.2019):

  • добавлена команда “Открыть каталог” в контексном меню записи
  • добавлена расшифровка файлов во временный файл (опционально)
  • добавлено вычисление размера прикрепленных файлов
  • увеличена ширина кнопок (стрелок) для разворачивания веток
  • добавлен пункт меню “О программе” с указанием текущей версии и др.

1.4 (24.04.2019):

  • исправлена прокрутка в начало WebView при смене записи
  • на активити записи добавлена скрываемая панель с полями (дата, автор, url, метки)
  • добавлена опция “Формат даты” в настройки
  • исправлено пересоздание элементов управления при изменении ориентации экрана

1.3 (22.04.2019):

  • реализовано открытие файлов
  • добавлен ColorPicker в настройки для выбора цвета выделения записей с файлами

1.2 (18.04.2019):

  • добавлена иконка в приложение
  • обновлена боковая шторка

1.0 (16.04.2019):

  • долго перечислять (а нужно ли?)

 

2 thoughts on “MyTetroid – Android приложение

  1. Привет, Иван!

    Напишу здесь, что нужно доделать в первую очередь.

    – Где-то нужно отображать номер версии. Сделать пункт меню “О программе”, и там показывать.
    – Разворачивание веток – максимально расширить область кнопки “стрелка вниз”
    – Открытие зашифрованных веток – доделать, чтобы не было сегфолта
    – Поиск, для начала хотя бы по параметрам записи (название,теги…) потом и по содержимому

    Чтобы программа превратилась в полноценного клиента, а не просмоторщик:

    – Создание, удаление, редактирование веток
    – Создание, удаление и редактирование записей

    0
    1. Спасибо за замечания!!
      Показывать версию нужно однозначно.
      И по остальному – нужно дорабатывать.
      Самая большая и нужная работа – с редактированием, со временем реализую.

      1+

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *