Skip to content

Awareen

v1.24 Breaking

This release includes 1 breaking change for platform teams planning a safe upgrade.

Published 10d Productivity & Wikis
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Summary

AI summary

Updates Bug fixes, New features, and Permissions across a mixed release.

Full changelog

v1.24 - Refactor + bug fixes + Widget

The biggest internal cleanup since the project started, plus several
user-visible fixes around the overlay timer's position behavior.

Bug fixes

  • Timer position now survives screen rotation. Custom drag positions
    were stored as absolute pixel coordinates, so "top-right" in portrait
    landed somewhere unrelated in landscape. Positions are now stored as
    fractions of (screen − overlay), with edge-snapping on drag release
    so corner-pinned timers stay flush with the edge across rotation.
    Legacy pixel-based prefs are migrated silently on first launch.
  • No more accidental drag-into-custom mode. The 10-raw-pixel drag
    threshold was effectively zero on high-density screens - fingertip
    wobble during a tap-to-hide could silently flip the level into custom
    mode. Switched to the platform's density-aware touch slop.
  • Dragging from a preset no longer teleports to the top-left first.
    The touch handler used to read 0/0 from the gravity-anchored layout
    params on ACTION_DOWN; now reads the overlay's real on-screen position
    via View.getLocationOnScreen.
  • Settings position spinner only applies on Save. Picking a preset
    used to immediately overwrite a dragged custom position via
    prefs.apply(), so Cancel felt like Save. The clear now waits for Save.
  • Settings broadcasts now reach the service on API 34+. Added
    explicit setPackage on the ACTION_SETTINGS_UPDATED intent so
    RECEIVER_NOT_EXPORTED receivers actually get delivered.

Refactor

The single 800+ line ScreenTimeService and 500+ line MainActivity
have been broken up into focused, single-responsibility components.
No new features; behavior is unchanged, but the codebase is much easier
to read, test, and extend.

  • New package layout: data/, overlay/, service/, ui/.
  • ScreenTimeRepository - single I/O layer for screen-time, analytics,
    and reset bookkeeping.
  • SettingsRepository - single I/O layer for user-configurable
    settings; owns the ACTION_SETTINGS_UPDATED broadcast.
  • OverlayController - owns the WindowManager overlay view, touch
    handler, and rendering. Single entry point: render(seconds, settings).
  • ResetScheduler - owns daily-reset wall-clock math and the Doze-proof
    alarm.
  • ScreenStateMonitor - wraps isInteractive + isKeyguardLocked.
  • PermissionWizard - extracted from MainActivity; owns the four-step
    permission state machine (overlay → battery → pause-app → auto-start).
  • Typed OverlaySettings / LevelSettings snapshot replaces ad-hoc
    fields scattered across the service.

Permissions

  • Removed unused permissions (Internet and friends).

New features

  • Home-screen widget. A 2×1 widget showing today's accumulated
    screen time at a glance, color-coded by the same Level 1/2/3 system
    as the overlay. Tapping it opens the app. Pushed every ~30s by the
    service while it's running; falls back to the framework's 30-min
    cadence + a prefs read when the service is stopped, so the value
    stays current without burning battery.

  • "Never" timer display mode. A third option alongside Always and
    Interval that hides the floating overlay entirely while tracking
    continues silently. Pairs with the widget for users who want
    awareness without an always-on timer covering every app.

  • Inline timer-mode picker. Replaced the dropdown with three
    side-by-side buttons (Always / Interval / Never) so the current
    choice is visible at a glance.

  • Settings reordered. Timer Display Settings now sits above Level
    Customization - with Never mode in the mix, display mode is the
    first decision a user makes.

  • In-settings help. A small (i) icon next to each settings
    section header opens a short explainer dialog (what is Level 2,
    when does Daily Reset fire, what does Interval mean, etc.). Helps
    onboard new users to the level system without sending them to docs.

  • No more ForegroundServiceDidNotStopInTimeException crashes on
    Android 15.
    Migrated the foreground service type from dataSync
    to specialUse. Android 15 enforces a 6-hour daily cumulative cap
    on dataSync services - heavy users (mainly seen on Samsung devices)
    hit it and got killed. specialUse has no such cap and is the
    correct category for an always-on screen-time tracker.

Breaking Changes

  • Removed unused Internet and related permissions

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Awareen

Get notified when new releases ship.

Sign up free

About Awareen

All releases →

Related context

Related tools

Beta — feedback welcome: [email protected]