Notification Log

Notification Log is a private, non-root Android notification listener for API 3436. It keeps an encrypted local history of notification appearances, edits, and removal reasons, including a distinction between an app cancelling its own notification and a user dismissing it.

Privacy and capture limits

The event log and copied image files are encrypted at rest with an Android Keystore-backed AES-GCM key. Export is deliberately unencrypted only after the user acknowledges a warning and chooses a destination through Android's Storage Access Framework.

Android exposes standard notification extras such as title, text, big text, inbox lines, messaging-style messages, and readable big-picture content. This app copies a readable bitmap at post time when Android provides one. It cannot reconstruct opaque custom RemoteViews, OTP content Android redacts, or image URIs/Icons which Android does not allow it to load. Such images remain marked as [image] without causing the text event to be lost.

The app declares QUERY_ALL_PACKAGES solely to implement the settings pages' “all installed apps” list. A Play-distributed build must meet Google Play's restricted package-visibility policy and provide the required declaration; a future distribution variant may need a narrower app-selection flow.

Background behavior

Android owns the notification-listener connection; this app has no polling, scheduled job, alarm, or boot receiver. When one or more logging types are enabled and notification access has been granted, Android binds the listener again after device boot. When every logging type is disabled, the app disables that listener component: it has no background service and does not start at boot. Re-enabling any logging type re-enables and asks Android to rebind it.

Notification update policy

Each platform notification key is tracked independently. Group summaries are logged as their own platform notifications; the app does not invent extra group events. Ongoing notifications are recorded when Android posts, updates, or removes them, but are never treated as user-dismissible. Identical reposts are ignored. With the default Ignore routine updates setting, standard progress/chronometer notifications do not create edit rows; non-routine content changes do. Disabling that setting records the updates as edits.

Development checks

./gradlew test assembleDebug

The local Android test lab has been checked on AOSP API 34/35/36, Google APIs API 35/36, and LineageOS API 35/36 using clean LSPosed snapshots. Root and Xposed are not used by this application.

S
Description
No description provided
Readme
774 KiB
2026-08-08 08:55:34 +02:00
Languages
Kotlin 100%