Activity Trace

com.activitytrace
by Zapstore Catalog

Find something you saw on your phone — privately and on-device.

Ever see something on your phone and then struggle to find it again? ActivityTrace creates a private, searchable memory of your Android activity. Search notifications, captured screen content, and indexed files from one place. No Internet permission. No cloud. No account. No telemetry. Your data stays encrypted on your device. - **Find what you saw** — one searchable timeline of notifications, screen content and files - **Search naturally** — type "yesterday", "last week" or plain keywords - **Filter precisely** — by app (_in:signal_) or content type (_type:notification_), with prefix matching, ranked results and highlighting - **You control retention** — choose how long data is kept and block individual apps - **See when and where** — statistics about captured activity over time - **Encrypted at rest** — SQLCipher AES-256-CBC + Android Keystore - **Theme support** — system default, light, dark, or OLED black - **Demo mode** — try ActivityTrace with fictional data, fully separate from your real activity Privacy isn't a promise — it's an architecture. ActivityTrace has no Internet permission, so there is no hidden analytics endpoint, no cloud sync, and no telemetry waiting to be disabled. Your data cannot leave your device. Free and open source software (GPL-3.0-only). Distributed via F-Droid: no Google Play Services, no proprietary dependencies, no AI or ML components.

First release: Nov 4, 2026, 1 total release.

Most recent release: Nov 4, 2026.

Repo

Appears in 0 app stacks.

0 sats / 0 zaps received in the past year.

Sats Received

Underlying data available via MCP: app_zaps, app_releases.

Zap Count

Underlying data available via MCP: app_zaps, app_releases.

Releases

  • Nov 4, 2026 0.11.0
    ### New - Android 17 (API 37) support — `compileSdk`/`targetSdk` raised to 37 - 16 KB page-size support — the release APK and its bundled SQLCipher native library are 16 KB aligned, so the app runs on 16 KB-page devices without compatibility mode ### Improvements - Statistics cover all matching captures even when a search matches more than one page of results - Library updates: Compose BOM 2026.09.00, Room 2.8.5, WorkManager 2.12.0, SQLCipher 4.19.1, androidx.sqlite 2.7.1, Navigation 2.10.2, Lifecycle 2.11.0 - Kotlin 2.3.21 with the Compose Compiler Gradle plugin (`composeOptions.kotlinCompilerExtensionVersion` removed) ### Technical
    More…
    - Search screen resolves localized strings with `stringResource()` instead of `context.getString()` inside click handlers - Instrumented tests run on Android 17: Espresso 3.7.0 (3.5.0 crashes on the removed `InputManager.getInstance()`), and androidTest no longer depends on MockK, whose JVMTI agent is only 4 KB aligned - `verifyNoInternetPermissionInRelease` is a typed Gradle task again (`Project.exec` was removed in Gradle 9) - Build: AGP 9.4.1 / Gradle 9.8.1 / Kotlin 2.3.21 / KSP 2.3.12 - AGP 9 stopgaps `android.builtInKotlin=false` and `android.newDsl=false` in `gradle.properties` (both removed in AGP 10); their deprecation notices are silenced with `android.sync.suppressAgpWarnings` and `kotlin.suppressGradlePluginWarnings`, so a normal build is warning-free - Deprecated-API sweep: `HorizontalDivider`, `androidx.lifecycle.compose.LocalLifecycleOwner` (new `lifecycle-runtime-compose` dependency), `BundleCompat` + `Icon.toBitmap()` for notification images, accessibility node recycling only below API 33, `@OptIn(FlowPreview::class)` for `debounce` - Build script no longer uses the deprecated legacy accessors: Room schema assets are added via `AndroidSourceDirectorySet.directories`, and the `android {}` block is configured through the `ApplicationExtension` interface - Dropped the androidx.sqlite 2.4.0 force-resolution hack; Kotlin 2.x metadata no longer needs it - `SearchEngineApi` interface extracted so UI tests can use a plain fake instead of a mocking framework - Statistics are computed by SQLite aggregates over the shared search criteria (`SearchCriteria.kt`, `SearchStatistics.kt`) instead of in-memory grouping over the loaded page; they are only queried while the statistics view is visible and never recomputed by scrolling - Robolectric 4.17, MockK 1.14.11 (JVM-only), coroutines-test 1.11.0, Turbine 1.2.1 - Database schema unchanged (version 10); no migration ### Fixes - Statistics now aggregate over every matching record in SQLite instead of only the loaded result page; the search list itself stays capped at 50 results per page