Skip to content

Repository files navigation

Trinotify

Trinotify

Умный фильтр уведомлений и звонков для Android — без root-прав

License: GPL v3 Platform Kotlin Compose Offline

Русский · English · Видео

Поддержать проект можно тут: https://boosty.to/triangle_black/


Что это

Trinotify перехватывает все уведомления и входящие звонки и по каждому событию принимает решение: пропустить со звуком, показать беззвучно или заблокировать полностью.

Одни приложения будят вас звуком, другие молчат, третьи вообще не показываются — и всё это настраивается по приложению, по отправителю или отдаётся на откуп локальному классификатору, который учится на вашей собственной разметке.

Всё работает офлайн: приложение не делает ни одного сетевого запроса.


Возможности

Уведомления

  • Перехват всех уведомлений в реальном времени.
  • Правила по приложению: со звуком · тихо · блокировать · решает ML.
  • Правила по отправителю — по подстроке в заголовке или тексте, с необязательной привязкой к конкретному приложению.
  • Блокировка несмахиваемых уведомлений — включая постоянные «демоны» сторонних приложений, которые обычно нельзя убрать.
  • Зачистка уже висящих уведомлений сразу после изменения правила.
  • Умное подавление повторов: обновления прогресса и служебные перепосты не звучат по второму разу.
  • Медиаплееры не считаются уведомлениями — музыка, голосовые и видео не вызывают срабатываний.

Звонки

  • Чёрный или белый список номеров.
  • Международные форматы: +375 29 …, 8 900 …, +998 … — сравнение по значащим цифрам, а не по строке.
  • Шаблоны вида +7900* и короткие подстроки вида 8800.
  • Правило «Пропускать» всегда сильнее правила «Блокировать».
  • Заблокированный вызов отклоняется молча.

Архив и обучение

  • Локальный архив всех уведомлений и звонков с поиском и фильтрами.
  • Ручная разметка записей — она же обучающая выборка.
  • Наивный Байес на устройстве: ключевой признак — приложение, плюс слова заголовка и текста. Обучение мгновенное, порог уверенности настраивается.
  • Объяснимость: у каждой записи видно, какое правило сработало («Правило приложения», «ML (80%)», «По умолчанию»).

Режимы и звук

  • Быстрые режимы прямо в шторке: обычный · вибро · тихий.
  • Ночной режим по расписанию с ручным приоритетом до конца ночного окна.
  • Свои мелодии для звонков и уведомлений, отдельные громкости.
  • Объединение звуков: пачка уведомлений даёт один сигнал, а не какофонию.
  • Корректный аудиофокус: чужая музыка приглушается и возвращается обратно.

Приватность

  • Никакой сети — данные не покидают устройство.
  • Опциональное шифрование архива (SQLCipher, ключ в аппаратном Keystore).
  • Опциональный вход по биометрии или пину, с защитой от съёмки экрана.
  • Облачный бэкап запрещён на уровне манифеста.
  • Экспорт и импорт правил и обучающей выборки в JSON.

Как это работает

Android не позволяет стороннему приложению отменить звук чужого уведомления: звук проигрывает система в момент публикации, раньше чем слушатель успевает среагировать. Обойти это без root невозможно.

Поэтому Trinotify использует честный компромисс:

  1. Включается системный режим «Не беспокоить» с политикой, при которой уведомления видны, но беззвучны.
  2. Все чужие уведомления таким образом замолкают.
  3. То, что прошло ваши правила, Trinotify озвучивает сам — собственным проигрывателем через поток будильника.

Побочный эффект — постоянная иконка «Не беспокоить» в статус-баре. Убрать её нельзя: системные индикаторы рисует SystemUI, стороннего API для них не существует.

Подробный разбор архитектуры, включая обход особенностей MIUI, устройство классификатора и модель угроз: ARCHITECTURE.md.


Требования

  • Android 10 (API 29) или новее
  • Root не нужен
  • Около 75 МБ свободного места (в APK входят встроенные мелодии и нативные библиотеки шифрования)

Установка

Готовый APK

  1. Скачайте APK со страницы Releases.
  2. Разрешите установку из неизвестных источников.
  3. Установите и откройте приложение.

Выдача разрешений

Откройте Настройки → Разрешения внутри приложения — там показан статус каждого доступа и кнопка выдачи:

Разрешение Зачем нужно
Доступ к уведомлениям чтение и удаление уведомлений — основа работы
Управление «Не беспокоить» системное глушение чужих звуков
Роль «Определитель номера» фильтрация входящих звонков
Состояние телефона собственный рингтон при входящем вызове
Батарея без ограничений чтобы система не выгружала сервис

Владельцам Xiaomi/MIUI: дополнительно включите «Автозапуск» для Trinotify в системных настройках приложений — иначе оболочка будет выгружать фоновый сервис.

Первая настройка

  1. Включите «Режим тишины» (Настройки → Основное) — это включит системное «Не беспокоить».
  2. Выберите «Действие по умолчанию»: что делать с приложениями без правил.
  3. На вкладке «Приложения» назначьте правила важным приложениям.
  4. Через несколько часов работы откройте «Архив», разметьте десяток записей и нажмите «Переобучить модель», если хотите использовать ML.

Сборка из исходников

Что понадобится

  • JDK 17
  • Android SDK (compileSdk 34, build-tools 34+)
  • Gradle 8.7+ (или Android Studio)

Шаги

git clone <адрес-репозитория>
cd Trinotify

# Путь к вашему Android SDK
echo "sdk.dir=/путь/к/Android/Sdk" > local.properties

# Отладочная сборка
gradle assembleDebug

# Юнит-тесты (24 теста)
gradle testDebugUnitTest

Готовый APK окажется в app/build/outputs/apk/debug/.

Подписанная релизная сборка

# Создайте своё хранилище ключей
keytool -genkeypair -v -keystore trinotify.keystore -alias trinotify \
        -keyalg RSA -keysize 2048 -validity 10000

# Пропишите пароли
cp keystore.properties.example keystore.properties
# затем отредактируйте keystore.properties

gradle assembleRelease

Файлы keystore.properties, *.keystore и local.properties внесены в .gitignore и никогда не должны попадать в репозиторий. Если файла подписи нет, сборка всё равно пройдёт — APK просто останется неподписанным.


Структура проекта

app/src/main/java/com/trinotify/app/
├── data/       Room-сущности, DAO, база, настройки, хранилище ключа
├── logic/      Движок правил, кэш, режимы, экспорт/импорт
├── ml/         Наивный Байес: чистая математика + обёртка модели
├── service/    Перехватчик уведомлений, фильтр звонков, звук, DND
└── ui/         Экраны Jetpack Compose

Около 3900 строк Kotlin в основном коде и 271 строка тестов. Полная карта модулей — в ARCHITECTURE.md.


Приватность

Приложение по своей природе видит очень чувствительные данные: переписку, коды подтверждения, номера звонящих. Поэтому:

  • нет ни одного сетевого вызова — ни аналитики, ни телеметрии;
  • архив исключён из облачного бэкапа (allowBackup="false" и явные правила извлечения данных);
  • шифрование базы — опция: SQLCipher, ключ в аппаратном Android Keystore, неизвлекаемый даже при доступе к файлам;
  • вход в интерфейс можно закрыть биометрией или пином, при этом окно помечается FLAG_SECURE (нет превью в «Недавних» и скриншотов);
  • экспортируемый JSON не шифруется — он содержит тексты уведомлений, храните его осознанно.

Известное ограничение: при включённом шифровании после перезагрузки телефона и до первой разблокировки экрана база недоступна — в это окно фильтрация работает по действию по умолчанию, без записи в архив.


Ограничения

Честный список того, чего приложение не может:

  • Иконки статус-бара (луна «Не беспокоить») убрать невозможно — это система.
  • Звонки от контактов Android не передаёт в фильтр, они проходят всегда.
  • Экстренные вызовы не фильтруются — и не должны.
  • Правило отправителя без указания приложения может сработать на чужое уведомление с таким же заголовком; интерфейс об этом предупреждает.
  • Уведомление блокируется после появления, а не до — иначе на Android нельзя.

Участники

Black Triangle автор идеи, постановка задач, тестирование, владелец репозитория
Claude (Anthropic) реализация кода, архитектура, документация

Подробнее — CONTRIBUTORS.md.


Лицензия

Trinotify распространяется на условиях GNU General Public License v3.0 — см. файл LICENSE.

Copyright (C) 2026 Black Triangle

Это свободная программа: вы можете распространять её и/или изменять на условиях
GNU General Public License, опубликованной Фондом свободного программного
обеспечения, либо версии 3, либо (по вашему выбору) любой более поздней версии.

Эта программа распространяется в надежде, что она будет полезной, но БЕЗ
КАКИХ-ЛИБО ГАРАНТИЙ. Подробности см. в GNU General Public License.

Встроенные звуковые файлы являются собственностью их правообладателей и включены исключительно для личного использования.

About

Умный фильтр уведомлений и звонков для Android без root-прав / Smart notification and call filter for Android, no root required

Resources

Stars

31 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages