aka Alarm
com.aka.alarm
Zapstore _@zapstore.dev Republished from GitHub / F-Droid by the Zapstore main account.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Aug 17, 2026 1.2.0**Store "What's new" copy (paste-ready):** > aka Alarm 1.2.0 — kinder to your battery, and runs on far more phones. > > • New "Start listening" setting: the microphone now stays off until shortly before your wake-up window (1 hour by default, adjustable from "right away" to "5 minutes before"). Less battery use, less mic time. > • Android: now installs on Android 8.0 and newer (was Android 12+). > • iOS: fixed the microphone going deaf while AirPods are connected, and a slow freeze when starting the alarm. > • Fixed buttons hiding behind the navigation bar on phones with 3-button navigation.
More…
**Android 8.0+ support (minSdk 34→31→26)** - Lowered `minSdk` to 26, fulfilling the promise on issue #1. Legacy `Vibrator` fallback below API 31 (`VibratorManager` is 31+), SDK-gated `canScheduleExactAlarms()` (the API itself is 31+; below that exact alarms need no permission), `ServiceCompat.startForeground` (the typed overload is 29+), and API-27 theme attributes annotated. Verified on a genuine Android 8.0 emulator: install, foreground service, monitoring, alarming with vibration. - Interactive content is now lifted above the navigation bar (`navigationBarsPadding`) — on API 26–28's opaque 3-button navbar the Start button and slide hints were half-hidden behind it. **Configurable mic activation window (iOS + Android)** — built on [PR #3](https://github.com/seeingred/aka-alarm/pull/3) by @nullptroma, who contributed the deferred-mic architecture (Armed phase + Doze-proof exact alarm + unit tests). - New Armed phase: after tapping Start the mic stays **off** — the app just holds its foreground notification — until the configurable activation lead before the wake window. Saves battery and keeps the mic dark overnight. - New "Start listening" setting in the gear sheet: Right away → 8 h → 4 h → 2 h → 1 h (default) → 30 min → 15 min → 5 min before the window. Persisted, and applies live: changing it while armed re-computes the phase on the spot (mic starts/stops immediately and the scheduled wakeup is re-armed). - Android wakes from the Armed phase via `AlarmManager.setExactAndAllowWhileIdle` (`USE_EXACT_ALARM` on 13+, `SCHEDULE_EXACT_ALARM` on 12), with stale-alarm validation when re-arming. On top of the PR: - Guarded against `SecurityException` when the exact-alarm permission is revoked (possible on Android 12) — falls back to inexact allow-while-idle delivery. - Added an in-process fallback timer and an on-foreground catch-up check so a single dropped OEM alarm can't leave the app armed forever with no wake-up — the alarm always fires by the end of the window. - iOS mirrors the same phase machine with in-process timers plus a foreground catch-up (iOS keeps the screen on while armed, so timers tick). - Notification and status line show the plan: "Alarm armed — mic off until HH:MM". **iOS mic reliability (found during on-device testing of the above)** - **Bluetooth is now output-only.** The audio session used `.allowBluetoothHFP`, so connected AirPods became the session *input* — and their low-bandwidth HFP mic delivers no usable buffers in `.measurement` mode, leaving the app completely deaf until the AirPods happened to switch to another device. Session options now use `.allowBluetoothA2DP` (alarm audio can still play through AirPods when worn) and the input is pinned to the built-in mic via `setPreferredInput` — the phone on the nightstand is the sensor, always. Also removes the ~3 s HFP-negotiation freeze when tapping Start. - The mic watchdog now retries the engine rebuild on every tick while stuck (previously one attempt on the edge into stuckness — if that single rebuild landed while the route was still settling, the mic stayed dead), with a liveness grace period after each attempt so the retry loop can't tear the engine down faster than it can deliver its first buffer. - Fixed the settings gear drifting toward the screen centre on the armed screen (the hidden level bar let the container shrink to the status text's width; it's now pinned full-width). - Aug 8, 2026 1.1.4Feature release — adjustable microphone sensitivity (iOS + Android). **Store "What's new" copy (paste-ready):** > aka Alarm 1.1.4 — tune how sensitive the wake-up listener is. > > • New sensitivity setting: tap the gear in the top-right corner and drag the slider from Very low to Very high. Saves automatically and applies instantly, even while an alarm is armed. > • The mic level bar now shows a red trigger line, so you can see exactly how loud a sound must be to wake you — and calibrate it live from the settings sheet. > • Fixed time labels wrapping and overlapping on devices with large font sizes.
More…
**Adjustable sensitivity (iOS + Android)** - New settings gear in the top-right corner opens a sensitivity sheet with a 15-step slider from Very low to Very high. It maps to the spike threshold: Very low = peak must exceed baseline by 8 dB, Very high = 1 dB, default midpoint = the historical 4.5 dB (0.5 dB per step). Motivated by real-world hardware variance — e.g. a Nothing Phone on a bedside cabinet whose mic never registered stirring at the fixed 4.5 dB threshold. - The value saves automatically on every change (SharedPreferences / UserDefaults), persists across sessions, and applies live to a running monitor — no restart needed. - The mic level bar now also shows a red trigger marker at baseline + threshold (hidden until the baseline rises above the display floor), and the sensitivity sheet embeds the same live bar while monitoring so the trigger point can be calibrated against real room noise. **Fixes** - Android: time labels (wake-window range on the set-alarm screen, clock on the monitoring screen) no longer wrap and overlap under large system font scales — new `AutoShrinkText` shrinks the text to fit one line, mirroring the `minimumScaleFactor` treatment the iOS side already had. - Android: the sensitivity slider uses 15 discrete steps rather than a continuous track; a continuous Material 3 `Slider` pixel-snaps its value and fires a spurious `onValueChange` on first composition, silently overwriting the stored default.