Repository navigation
These are the release notes for ActivityWatch for Android version v0.14.3.
Contributors
Thanks to everyone who contributed to this release:
@0xbrayo, @ErikBjare, @TimeToBuildBob
Changelog
Changes since v0.14.2:
📦 aw-android
✨ Features (3)
- feat(sync): surface per-peer hostnames in sync report UI (#303) (
ec0233e) - feat(ui): show a banner while usage history is still importing (#316) (
59b4566) - feat(release): publish per-ABI APKs alongside the universal APK (#308) (
3cd8a38)
🐛 Fixes (16)
Click to expand
- fix(startup): rewrite bucket hostnames before anything opens the datastore (#354) (
c45a5f2) - fix(server): make startServerTask() single-instance guard atomic (#324) (
abaf09c) - fix(ci): grant /dev/kvm access so emulator jobs stop running under TCG (#353) (
854c672) - fix(sync): stop syncing twice per interval (#340) (
e223e20) - fix(web-watcher): write browser events off the accessibility main thread (#344) (
9186623) - fix(android): use light-only theme for Auth/Sync/Onboarding screens (#309) (
96372f6) - fix(strings): update welcome text for v0.14 with sync support (#314) (
9dbb63a) - fix(watcher): count the in-progress foreground session (#337) (
d811495) - fix(ci): dismiss System UI ANR dialog during release smoke onboarding (#352) (
24c04d5) - fix(server): don't crash at startup when the server socket can't be created (#315) (
b64a581) - fix(anr): defer SessionEventWatcher.rust init and dispatch heartbeats to IO (#325) (
9d6c7ed) - fix(sync): use case-insensitive filter for 'zero peers' warning (#323) (
500cc11) - fix(ui): walk WebView history on back before finishing MainActivity (#327) (
c9c651f) - fix(ui): let SyncSettingsActivity follow system dark mode (#326) (
c222740) - fix(export): stream large JSON downloads to a cache file (#304) (
6484f5c) - fix(android): follow system theme so WebView sees correct prefers-color-scheme (#301) (
6e4e92d)
🔨 Misc (8)
Click to expand
- chore: bump versionName to 0.14.3, versionCode to 48 (
968319f) - chore: bump versionName to 0.14.3b1, versionCode to 47 (
ea54faa) - chore(submodule): bump aw-server-rust to master
�(#305) (4633f23) - perf(service): construct RustInterface off the main thread (#346) (
9fd6879) - perf(sync): skip unchanged files when mirroring to the SAF directory (#347) (
1a75c72) - test(e2e): convert view bounds to screen coordinates (#320) (
a921dbe) - docs(fastlane): add phone screenshots for F-Droid/store listings (#322) (
558981d) - docs(readme): link F-Droid listing and activitywatch.net downloads (#319) (
a188544)
(excluded 3 less relevant commits)
📦 aw-server-rust
✨ Features (18)
- feat(server): serve query reads from a read-only datastore handle (#807) (
af70e58) - feat(query): per-request time budget and slow-query logging (#806) (
6f4204f) - feat(query): cache results for finished past periods (#764) (
1f2fb0b) - feat(aw-client-rust): add get_classes with fallback to the default classes (#735) (
7497182) - feat(aw-client-rust): add query_cached (name/cache query parameters) (#732) (
5621b5f) - feat(aw-client-rust): filter get_event_count by start/end (#731) (
3f574ef) - feat(aw-client-rust): add an offline request queue for heartbeats (#738) (
d7e741d) - feat(aw-client-rust): add new_with_protocol to allow https (#736) (
ab35070) - feat(aw-client-rust): add export_all, export_bucket and import_bucket (#727) (
e7c5439) - feat(aw-client-rust): expose pretty_query, querystr_to_array and escape_doublequote (#734) (
e193dce) - feat(aw-client-rust): add set_setting (#726) (
f1adc61) - feat(aw-client-rust): add an aw-client CLI behind a cli feature (#740) (
5bd198f) - feat(aw-client-rust): read aw-client.toml and add AwClient::from_config (#737) (
04d9a45) - feat(aw-client-rust): add get_event, and return 404 for missing events (#725) (
935c88f) - feat(server): add streaming CSV export endpoint for bucket events (#722) (
ae38664) - feat(aw-client-rust): pre-merge queued heartbeats with a commit interval (#739) (
515c43a) - feat(aw-sync): v2 segment writer + manifest behind sync-v2 feature flag (#719) (
11f9166) - feat(aw-sync): add dedupe subcommand for pre-#713 -synced-from- duplicates (#718) (
a5de81b)
🐛 Fixes (33)
Click to expand
- fix(android): open the JNI datastore exactly once (#801) (
faeded2) - fix(query-cache): charge timestamps-only in key weight, not query text (#799) (
4c1cda9) - fix(aw-server): dedup re-imports against the privacy-filtered form of events (#768) (
9793c91) - fix(datastore): infer schema version when a restored DB has user_version 0 (#776) (
96f4113) - fix(export): prefix CSV data keys that collide with id/timestamp/duration (#795) (
344f476) - fix(dirs): restore %LOCALAPPDATA% on Windows, migrate v0.14.0 Roaming data, pin paths (#791) (
dc01d74) - fix(server): warn at startup when the web UI has no index.html (#794) (
d059a4c) - fix(aw-server): re-importing an updated export replaces events in place (#766) (
bb7f769) - fix(query): remove duplicate clippy allow attributes on parser module (#779) (
22a77dc) - fix(datastore): commit stopwatch changes before acknowledging (#743) (
fe0dfce) - fix(aw-server): return JSON errors with a reason for 400/404/422 under /api (#772) (
fcc1ede) - fix(datastore): log why legacy import was skipped, add explicit --import-legacy (#780) (
692fa0a) - fix(aw-sync): warn on orphaned 2-level staging db in aw-sync status (#788) (
0078d8d) - fix(server): explain missing web UI instead of a bare 404 on / (#777) (
a6d7730) - fix(datastore): make v3→v4 key_value migration idempotent (#792) (
d5d848b) - fix(endpoints): reject events with negative duration and heartbeats with negative pulsetime (#785) (
acbb3ee) - fix(aw-transform): empty regex rules never match (#774) (
9008520) - fix(query): allow clippy::block_scrutinee in generated parser (#771) (
7ed5bb8) - fix(transform): return merge_events_by_keys groups in first-seen order (#757) (
09c9367) - fix(aw-server): give imported events new ids instead of replacing existing ones (#754) (
6e93380) - fix(aw-client-rust): percent-encode bucket IDs and setting keys in request URLs (#730) (
03037f6) - fix(aw-client-rust): pass start/stop to get_event_count in status_errors tests (#761) (
68c1446) - fix(aw-client-rust): return an error instead of panicking on a bad event count (#729) (
c558062) - fix(aw-sync): read v4/v5 peer databases instead of skipping them (#756) (
db2c9ce) - fix(models): reject non-finite and out-of-range durations instead of saturating (#751) (
9a51a02) - fix(aw-client-rust): restore the toml dependency; fix a Windows wait_for_start test flake (#753) (
9e766c8) - fix(aw-client-rust): wait_for_start waits for /api/0/info, not just a TCP connection (#733) (
3701776) - fix(models): round durations to the nearest nanosecond when parsing (#750) (
7e50394) - fix(transform): split union_no_overlap events around zero-duration events (#744) (
39e6bbd) - fix(transform): port aw-core's flood() so both servers agree (#748) (
84d69e0) - fix(transform): port aw-core's filter_period_intersect, keeping zero-duration events (#749) (
92b8e19) - fix(export): send HTTP headers before serializing large exports (#721) (
05c7b38) - fix(install-ndk.sh): avoid GNU-only readlink -f so the script runs on macOS (#720) (
73ba83c)
🔨 Misc (9)
Click to expand
- test(aw-client-rust): read wait_for_start mock connections concurrently (#783) (
3ebca20) - chore(transform): deprecate chunk_events_by_key (#758) (
bec71d5) - bench(transform): add flood, sort, filter_keyvals, chunk benches (#769) (
32637fa) - test(aw-client-rust): pass start/end to get_event_count in the decode-error test (#760) (
c72a82f) - perf(transform): rank-ordered rule evaluation in categorize (#762) (
541b8a7) - test(aw-client-rust): skip half-open connections in the wait_for_start mock (#759) (
cb9126f) - test(aw-sync): make test temp paths unique so parallel tests don't collide (#742) (
0fd275d) - perf(query): serialize /query results directly instead of via json!() (#741) (
a05d7ef) - perf(transform): avoid redundant allocations when grouping events (#673) (
c68d32c)
(excluded 9 less relevant commits)
📦 aw-webui
✨ Features (10)
- feat(categories): add 'Add on top of mine' option to import dialog (#1071) (
f76e1e2) - feat(bucket): show most recent events when the selected range is empty (#1030) (
47377e5) - feat(categories): layer category sets, and stop dropping edits made while layered (#1027) (
fabdeab) - feat(categories): softer default palette without breaking stored defaults (#1065) (
9bda65d) - feat(settings): add enabled toggle to notifications panel (Phase 3.1) (#1057) (
1a9f221) - feat(activity): add custom date range period (#1005) (
d65cfe1) - feat(activity): choose all devices or a subset of devices in the Activity view (#1004) (
ddf567f) - feat(activity): always show Year period, remove showYearly setting (#1003) (
eef32d5) - feat(buckets): use server-side CSV export endpoint (#997) (
f5391fe) - feat(ai-summary): typed, privacy-filtered activity context (#925) (#948) (
918ebaf)
🐛 Fixes (48)
Click to expand
- fix(activity): build the Year barchart from day chunks and show progress for every chunked load (#1098) (
655a00a) - fix(queries): match Helium in the chrome bucket when no dedicated bucket exists (#989) (
3b1c444) - fix: recover category builder loading on Android (#992) (
df9d85d) - fix(work-report): tidy action buttons and dates on narrow screens (#1041) (
2a5e91e) - fix(buckets): keep row actions inside the card on phones (#1087) (
952c697) - fix: snap period-start URL dates; fix Trends chart height and x-axis labels (#1059) (
af9d80b) - fix(timespiral): scale spiral to fit narrow screens (#1036) (
65b15e3) - fix(queries): unescape browser regex backslashes after JSON.stringify (fixes Arc.exe on Windows) (#1084) (
c8b46d6) - fix(settings): keep the uncategorized-hint toggle beside its heading (#1047) (
69da8e8) - fix(sunburst): keep category sunburst labels inside the chart box (#1040) (
226d1e0) - fix(bucket): reload events when navigating to another bucket (#1044) (
d2b4890) - fix(work-report): count sessions using the break time (#1046) (
5875847) - fix(graph): draw category graph at container width and label nodes (#1042) (
239cf0a) - fix(trends): stop category table from overflowing on narrow screens (#1038) (
919c936) - fix(views): replace stored desktop defaults with Android views on Android (#1088) (
6ce8a8c) - fix(categories): persist layered category renames and deletions (#1072) (
0755d1f) - fix(activity): show browser data on Android when only aw-watcher-web is present (#1069) (
bdbbc39) - fix(activity): align week/month/year periods to their start (#1045) (
ac2c277) - fix(sunburst): fit category labels to their ring instead of clipping them (#1064) (
db18bbc) - fix(queries): use real bucket ids for synced hosts in single-host views (#1068) (
6812979) - fix(work-report): name hosts by bucket hostname and query their real bucket ids (#1067) (
9c441bd) - fix(ui): color Top Applications by each app's dominant category (#1063) (
8493914) - fix(ui): dismissable multi-device note; drop synthetic category tag from search results (#1062) (
58abaf4) - fix(build): honour --os=android under ESM config (#1061) (
34cdfb3) - fix(timeline): consistent row labels for synced buckets; fix dark theme stripes (#1060) (
6a182d4) - fix(dark-mode): set color-scheme: normal on iframes for custom visualizations (#1050) (
e2cc882) - fix(categorization): persist Category Builder ignored words across reloads (#1031) (
7d2efba) - fix(activity): explain why 'Time active' differs from period bar totals (#1029) (
83605b0) - fix(categories): don't throw when the edit modal is destroyed before its deferred hide (#1028) (
89a8fdd) - fix(categories): treat blank regex rules as matching nothing everywhere (#1026) (
4e8789c) - fix(hosts): keep the 'unknown' pseudo-host out of device pickers (#1023) (
822c8c0) - fix(bucket): show event count and a not-found state for unknown buckets (#1022) (
64a6036) - fix(timeline): clamp hourly bar stacks to 1h (fixes y-axis > 1h) (#1021) (
dada6c7) - fix(dark-mode): restore appsummary bar-chart label contrast (#1002) (
9092392) - fix(sunburst): resolve 'auto' theme for the root circle color (#1020) (
49f21f0) - fix(bucket): show the event count again; hide empty bucket data (#1054) (
95cd6b4) - fix(settings): treat an unset aw-notify setting as defaults (#1043) (
3db1a08) - fix(deps): resolve high-severity npm audit findings (#1033) (
926c5fe) - fix(import): show success message and propagate server error to UI (carry of #874) (#1019) (
45e9c41) - fix(activity): address remaining All time review findings (#1008) (
56e8de7) - fix(timeline): bound Daily Timeline scrolling to the queried day (#998) (
a36e77c) - fix(queries): keep comments out of generated AQL (#1001) (
54ac546) - fix(mobile): wrap long tooltip data and example pattern so the page doesn't widen (#991) (
23c95ed) - fix(ci): pin CML binary instead of unauthenticated setup-cml (#994) (
7eac81a) - fix(export): stream large bucket exports without JSON.parse (#993) (
c8c0306) - fix(multidevice): include Android hosts that lack an afkstatus bucket (#988) (
22cb53b) - fix(queries): match Dia/Arc chrome forks and surface empty Browser view (#949) (
5d5378a) - fix(search,buckets): drop early-dev notice, case-insensitive search, relocate data-collection alert (#986) (
262322d)
🔨 Misc (3)
- test(queries): fix stale double-escaping in the Helium chrome-fork tests (
5e3daa4) - test(activity): add store-level tests for query_browser_only action (#1070) (
7250113) - test: tighten review follow-ups from #1001 and #1003 (#1007) (
f0b733c)
(excluded 13 less relevant commits)
Full Changelog: v0.14.2...v0.14.3