Prepare public project for distribution

This commit is contained in:
ajp_anton
2026-07-25 04:09:04 +00:00
parent 4d99c199dd
commit 48e61e3be7
3 changed files with 80 additions and 48 deletions
+28 -46
View File
@@ -1,61 +1,43 @@
# 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.
Notification Log keeps a private history of the notifications that appear on
your Android device. It works as a standard Android notification listener; it
does not need root or an Xposed module.
## Privacy and capture limits
## What it records
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.
- Notifications appearing, changing, and disappearing.
- Whether a notification was dismissed by you or cancelled by its app.
- Available text, messaging-style content, and readable notification images.
- Common removal reasons such as timeouts and channel changes.
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.
You can choose which event types to record, set app-specific allow/block lists,
and suppress routine progress or timer updates. The log view can be tailored,
expanded for long entries, and exported as CSV, aligned text, or an HTML ZIP.
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.
## Privacy
## Background behavior
Logs and retained notification images are encrypted on the device with an
Android Keystore key. Exporting is an explicit action and produces an
unencrypted file at the location you choose. Android may withhold sensitive or
custom notification content; this app records only what Android makes available
to a notification listener.
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.
When all logging types are disabled, the notification listener is disabled too:
the app has no polling, scheduled job, or background service to run.
## Notification update policy
## Requirements
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.
Notification Log supports Android 14 through Android 16 (API levels 3436).
After installation, grant **Notification access** when prompted. The optional
app lock uses your device's biometric or credential prompt.
## Development checks
## Development
Build a debug APK with:
```bash
./gradlew test assembleDebug
./scripts/run-aosp-api36-notification-smoke.sh
./gradlew assembleDebug
```
The AOSP API 36 smoke scenario starts from a clean emulator snapshot, grants
listener access, drives all helper notification variants, verifies encrypted
event and image persistence, and verifies that the listener records another
event after an emulator reboot. It deliberately leaves user swipe dismissal,
biometric lock behavior, and OEM/foldable rendering to device testing.
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.
This project has been developed with substantial assistance from AI tools.