Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Releases: SysAdminDoc/AlarmClockXtreme

v1.14.18 — YouTube engine update fix + audit reliability fixes

15 Jun 07:15
@SysAdminDoc SysAdminDoc

Choose a tag to compare

What's new

YouTube downloader fix:

  • Engine update now works — the library's built-in updater was broken because
    GitHub rejects bare URL.openStream() requests. The app now falls back to
    an OkHttp-based updater with proper headers.
  • Preview loading is now clearly visible: a 36dp spinning circle replaces the
    play icon during the 30-60s resolve phase, with a "Loading preview..." label.

Deep audit reliability fixes (v1.14.17):

  • Alarm event analytics: fixed wrong scheduledTime for repeating alarms
  • SmartAlarmService: fixed race condition in session teardown (AtomicBoolean)
  • AlarmService: fixed audio-start reentry guard race (AtomicBoolean)
  • Guardian Angel: stripped USSD-injectable *# chars from phone sanitizer
  • Dashboard: added stale-location guard on tornado alert fetch
  • AppMetricTile: value text clips with ellipsis on overflow

Install

adb install AlarmClockXtreme-v1.14.18-play.apk
Assets 4
Loading

v1.14.6 — Audit hardening + reliability

14 Jun 07:54
@SysAdminDoc SysAdminDoc

Choose a tag to compare

First signed public release since v1.9.5 — a large feature and reliability jump, capped by an end-to-end engineering, accessibility, and performance audit.

Install (sideload)

  1. Download an APK below.
  2. On your phone, allow "Install unknown apps" for your browser/file manager.
  3. Open the APK and install.

Both APKs are release-signed with the project key, so they install for everyone with no extra steps — no developer keys, no special setup.

Which one?

  • AlarmClockXtreme-v1.14.6-play.apk — full build: YouTube alarm-sound downloader, Wear OS bridge, optional Health Connect. Best on phones with Google Play Services.
  • AlarmClockXtreme-v1.14.6-fdroid.apk — universal, no-Google build (3.9 MB). Installs on any Android 8.0+ device, including de-Googled/AOSP ROMs.

Minimum Android: 8.0 (API 26).

Verify the download (optional)

SHA-256 sums are in SHA256SUMS.txt. Signing certificate SHA-256:
9e2c13923a20bad3a5a3b8896095b390c8a78c6c44f185e419e6dbfed1437303

Highlights

  • Reliability: fixed a smart-wake bug that could double-fire one-shot alarms; backup-import and Direct Boot hardening with regression tests.
  • Sleep insights: per-night sleep score and a rolling sleep-debt accumulator on the Statistics tab.
  • Dismiss challenges: physical-challenge readiness preflight blocks saving an alarm that could never be dismissed; colorblind/TalkBack support for the Wordle challenge.
  • Accessibility & polish: WCAG-AA contrast pass on muted text, button semantics for date pickers, framed empty states, clearer copy.
  • Performance: removed steady background churn in the World Clock and Timer.
  • Wear OS: next-alarm tile + complication, now with unit-test coverage.

Plus everything added across v1.10–v1.14: adaptive navigation, Philips Hue v2 + TLS pinning, telephony-aware muting, per-alarm vibration delay, encrypted backups, weather-conditional alarms, and more.

Loading

v1.9.5 — Premium settings trust pass

13 May 17:17
@SysAdminDoc SysAdminDoc

Choose a tag to compare

AlarmClockXtreme v1.9.5

Premium settings trust pass for wake reliability.

  • Adds a Wake readiness checklist for exact alarm access, notification permission, and battery protection.
  • Adds direct recovery actions for the Android system settings that affect alarm precision and visibility.
  • Updates Settings reliability summary so it reflects all wake-critical system switches.
  • Splits alarm-critical notification readiness from optional calendar/location context permissions.
  • Includes v1.9.4 next-alarm notification timing refresh improvements for users upgrading from earlier builds.

Verification:

  • Signed Play release APK built with R8 and resource shrinking.
  • Signature verified with apksigner.
  • Manifest verified as com.sysadmindoc.alarmclock, versionName 1.9.5, versionCode 42.
Loading

v1.9.0 — Living sky on the Today tab

29 Apr 23:47
@SysAdminDoc SysAdminDoc

Choose a tag to compare

A living sky behind the Today tab

The Today tab background is now a real sky — interpolated minute-by-minute through a 15-keyframe gradient anchored to your actual sunrise (t = 0) and sunset (t = 1). Storms swap the sky to overcast blue-gray with subtle lightning flashes at night. Active NWS tornado warnings paint a rotating funnel-cloud silhouette plus a red TORNADO WARNING banner.

TimeOfDaySky engine

15 hand-tuned keyframes covering t = -0.40 (deep night before dawn) through t = 1.40 (post-dusk night), each carrying a 3-stop gradient (zenith / mid-band / horizon). Verified on device at 7:43 PM with sunset at 8:01 PM (t ≈ 0.977) — interpolation produced deep violet zenith, burgundy mid, dusky orange horizon, exactly between the golden hour (t = 0.93) and sunset starting (t = 0.98) keyframes at frac = 0.94.

Weather-aware overrides

  • Storm (Open-Meteo codes 95-99) swaps the time-of-day sky for STORM_DAY (gray-blue overcast) or STORM_NIGHT (near-black) depending on time.
  • Lightning flashes layer on top of any storm sky — stochastic 4-9-second cadence, 60ms ramp / 220ms decay to ~28% white, ~30% chance of a double-strike aftershock.
  • NWS tornado warnings trigger TORNADO_SKY (dark olive ceiling / sickly yellow-green horizon — the classic plains-state warning sky), a rotating Canvas-drawn funnel cloud silhouette with drift animation, and a red TORNADO WARNING banner pinned below the status bar.

NWS alerts integration

New WeatherAlertsApi + WeatherAlertsRepository against api.weather.gov/alerts/active. Free, no key, US-only by API design (returns empty features for non-US lat/lon, so it's safe to call unconditionally). Sends a User-Agent identifying the app + repo URL per NWS rate-limit policy. Failures absorbed silently — alerts are bonus context, never the critical path.

Architecture

  • ui/theme/WeatherSky.kt — keyframe table, RGB lerp, computeT(now, sunrise, sunset), weather overrides.
  • ui/components/WeatherSkyBackground.kt — 5-layer stack: sky gradient → fade to SurfaceDark below the hero → lightning → tornado funnel → content.
  • AlarmClockHeroHeader gains a transparent: Boolean = false parameter; when true, skips its own gradient so the parent sky backdrop shows through. Other tabs unchanged.
  • DashboardUiState plumbs sunriseLocal, sunsetLocal, currentWeatherCode, tornadoAlertActive, severeWeatherHeadline.
  • The hero shows an inline Tornado warning status chip when active so the signal is visible before the user scrolls.

Privacy

  • Alerts call sends only your latitude/longitude to NWS — no other data, no auth, no fingerprinting.
  • Tornado coverage is US-only because NWS only issues alerts for the United States. International users get the time-of-day sky and storm/lightning visuals; the tornado overlay never triggers.

Download: AlarmClockXtreme-v1.9.0-play.apk — signed Play-flavor APK, ~62 MB.

Loading

v1.8.1 — Premium polish pass

29 Apr 23:32
@SysAdminDoc SysAdminDoc

Choose a tag to compare

Premium polish pass

A top-to-bottom design audit. No new features, no schema changes — every change in this release sharpens an interaction or surface that already worked but felt rough on close inspection.

Bottom navigation (the most visible change)

alwaysShowLabel = false. With six tabs in 1080 px, every label was ellipsizing ("Weath..." / "Setti...") which read as broken layout. The Material 3 idiom for crowded bars is exactly this: the selected tab carries its label inside the indicator pill, the rest sit as confident icons. The pill becomes the focal affordance.

Live radar (Today tab)

  • Skeleton + fade-in. The 360 dp WebView slab used to flash dark for 1–3 s on cold connections. New WebViewClient hooks drive a loaded flag; a shimmering skeleton fills the slot and cross-fades out (240 ms) as the WebView fades in (280 ms).
  • "Open in Windy" relocated from a left-aligned TextButton under the map to a header-aligned chip — no more orphaned link below a centered map.

News tab

  • Pull-to-refresh via Material 3 PullToRefreshBox — the canonical RSS gesture.
  • Skeleton list (4 placeholder cards) on first load instead of a single spinner card.
  • AppFilterChip primitive on the feed picker — consistent geometry with the rest of the app's chips.
  • News card title clamped to 3 lines so very long Google News headlines don't blow out the card height.

Design system

  • AppIconSize tokens (xs/sm/md/lg = 14/18/22/32 dp) replace ad-hoc 13/15/18/20/22 dp drift across cards, chips, tiles, and metric tiles.
  • AppFilterChip primitive matches AppStatusChip geometry. AlarmList's group filter row + News's feed picker migrated off raw Material FilterChip.
  • AppSkeletonBlock primitive for shimmering placeholder rows.

Microcopy

Every hero subtitle, section description, and empty-state copy went through a "≤12 words and only what's true" pass. Alarms idle subtitle, Groups description, Quick alarms description, Today calendar empty states, News empty/error states all rewrote.

Typography rhythm

In-card section headers ("Next few hours", "Next 3 days", "Today's schedule", "Live radar") promoted from titleSmall (15 sp) to titleMedium (17 sp SemiBold) so card-level titles hold one tier above metric-tile values.

What's New refresh

The "What's New" dialog had been showing v1.6.0 highlights through three minor releases. Now reflects v1.8.0 actuals.


Download: AlarmClockXtreme-v1.8.1-play.apk — signed Play-flavor APK, ~62 MB.

Loading

v1.8.0 — Weather hub + News tab + live radar

29 Apr 23:12
@SysAdminDoc SysAdminDoc

Choose a tag to compare

Two new tabs and a live radar

The former "Today" tab graduates into a full Weather hub with an animated precipitation radar embedded from Windy.com, and a brand-new News tab pulls public RSS feeds (Google News, BBC, NPR, Hacker News). Both follow the existing no-account / no-API-key rule.

Live radar (Weather tab)

  • New WindyRadarCard composable — fixed-height (360 dp) WebView pointed at embed.windy.com/embed2.html with overlay=radar + radarRange=-1 for animated playback.
  • Auto-centers on the user's weather location (lat/lon already plumbed for forecast).
  • Hardware-accel default kept (software-layer tore the radar in early prototypes).
  • Secondary Open full map in Windy button hands off to the system browser via LocalUriHandler for users who want pan/zoom past what the embed allows.

News tab

  • Six predefined feeds: Google News (Top / World / Tech), BBC, NPR, Hacker News. Selectable via filter chips.
  • Active feed persisted to DataStore.
  • Each headline renders as a tappable card with title, 3-line snippet, source chip, relative-time chip ("58m ago"), open-in-new icon.
  • Pull-to-refresh via the hero refresh button.
  • External links open in the system browser via LocalUriHandler.
  • Custom feed URLs supported by overwriting newsFeedUrl in DataStore (UI-level picker arrives in a follow-up).

Architecture

  • Zero new external dependencies. Reuses the existing OkHttp 4.12.0 client (15 s timeouts, shared with weather + holiday + webhook calls).
  • RssParser is pure platform XmlPullParser — no Rome (~600 KB JAXB skipped). Handles RSS 2.0 + Atom from one entry point, descends into <channel> / <feed> containers, falls back to channel title for missing source. RFC-822 + ISO-8601 dates.
  • News stack totals ~250 lines of Kotlin.

Nav + settings

  • "Today" tab → Weather label + hero retitled.
  • News added as a sibling tab — bottom nav now hosts 6 tabs (Weather / Alarms / Timer / World / News / Settings).
  • Tab labels clamped to one line + ellipsis so a 1080-px phone doesn't wrap "Weather" / "Settings" to two lines.
  • New Settings toggles: Show News tab, Live radar on Weather tab. The renamed Show Weather tab replaces "Show Today tab".

Privacy

The radar embed loads inside Windy's iframe — Windy's privacy policy applies inside that surface. RSS calls go straight to the publisher, no auth, no tracking. The app itself still has no analytics, no accounts.


Download: AlarmClockXtreme-v1.8.0-play.apk — signed Play-flavor APK, ~62 MB. Includes the YouTube alarm-sound downloader (yt-dlp + NewPipe Extractor) plus the new Weather + News features.

Loading

v1.7.5 — Visual UX uniformity pass

29 Apr 22:08
@SysAdminDoc SysAdminDoc

Choose a tag to compare

Visual UX uniformity pass

Real-device tour exposed three GUI/UX regressions in v1.7.4. All fixed without schema or feature changes.

Fixed

  • Timer tab — empty area below hero on devices with no active timers. Switched the parent Column to verticalScroll, dropped weight(1f) on TimerInputView (Card wraps to content height regardless of weight), and replaced the inner LazyColumn for active timers with a forEach Column. 24dp Spacer at the bottom keeps the input card breathing above the floating nav.
  • World Clock tab — saved cities not rendering despite the "N cities" hero chip. Replaced the inner Scaffold (which competed for system insets with the outer AppNavigation Scaffold) with a Box that hosts a single LazyColumn (hero is the first item, mirroring AlarmListScreen). FAB overlaid via Box BottomEnd alignment. contentPadding.bottom = 96.dp keeps the last city out from under the FAB. The "N cities" chip is hidden in the empty state.
  • Alarms tab — "Swipe to delete" text bleeding through disabled alarm cards. AlarmCard uses SurfaceCard.copy(alpha = 0.55f) for disabled alarms, so the SwipeToDismissBox background (always rendered, just transparent when not swiping) showed through. Looked like a stuck swipe gesture. Now gated on isSwiping = currentValue != Settled || targetValue != Settled so the affordance only paints during an active gesture. Added LaunchedEffect(Unit) snap-to-Settled so a saved partial-drag offset can't survive across navigation.
  • Today tab — duplicate "Now" cells in the hourly strip. The isFirstFutureSlot predicate ran a 45-minute window check on every cell, tagging two or three adjacent hours all as "Now". Replaced with a single-flag firstNowAssigned toggled after the first matching cell.

Build

  • R8 release build now succeeds with NewPipe Extractor's Mozilla Rhino dependency on board. Added -dontwarn javax.script.**, -dontwarn org.mozilla.javascript.**, and explicit keeps for Rhino's reflection-loaded classes so YouTube signature decoding still works in minified release builds.

Download: AlarmClockXtreme-v1.7.5-play.apk — signed Play-flavor APK, ~62 MB. Includes yt-dlp + NewPipe Extractor for the YouTube alarm-sound downloader.

Loading

v1.5.4 — Reliability hardening

22 Apr 10:34
@SysAdminDoc SysAdminDoc

Choose a tag to compare

v1.5.4 — Reliability hardening

No new features, no schema changes. Targets real bug classes that became visible under Android 14+ foreground-service timing rules and rarer OEM device quirks.

Fixed

  • FGS start timing on Android 14+. AlarmService.onStartCommand now promotes startForeground() out of the Dispatchers.IO coroutine. A placeholder notification is posted synchronously; the labelled version replaces it via NotificationManager.notify() once the alarm row is fetched. Prevents ForegroundServiceDidNotStartInTimeException under Doze cold-start with heavy IO contention.
  • BootReceiver ANR window. withTimeout(30s)withTimeout(8s) around AlarmScheduler.rescheduleAll. goAsync() caps at ~10 s on most Android versions, so the old ceiling would trip ANR before the timeout fired.
  • Null-safe getSystemService(...) casts across AlarmService, SmartAlarmService, FlipDetector, ShakeDetector, SquatDetector, StepCounterListener, and ProximityCoverDetector. Stripped-down AOSP and managed-profile devices have been seen to return null for sensor / power services; hard casts would crash at construction.
  • Wake-lock acquisition guarded. Rare OEM SecurityException from PowerManager.newWakeLock() no longer kills the service before it can foreground.

Artifacts

  • AlarmClockXtreme-1.5.4-play-release.apk — R8 minified, release-signed
  • AlarmClockXtreme-1.5.4-play-debug.apk — debug build for local install

See CHANGELOG.md for the full version history.

Loading

v1.5.3

21 Apr 06:35
@github-actions github-actions

Choose a tag to compare

v1.5.3: premium UX/UI polish pass
- Add slide+fade transitions between all nav screens (AppNavigation)
- AlarmCard: remove redundant Enabled/Paused chip; Switch communicates state
- AlarmCard: add animateItem() for smooth reorder animation
- AlarmCard: replace raw challenge enum labels with polished display names
- AlarmList: remove redundant Search section title from search card
- QuickAlarms: add divider above Power nap sub-section
- AlarmEdit: remove duplicate Save button from TopAppBar
- AlarmEdit: group field only shows custom text input when needed
- Settings: remove On/Off text labels from toggle rows
- Settings: fix time format showing '0m 15s' instead of '15s'
- Onboarding: animate pager indicator dot width with animateDpAsState
- Theme: add ClockTimeSmall/Display/Large named TextStyles; replace 3
 hardcoded fontSize values across AlarmListScreen, AlarmEditScreen,
 DashboardScreen
Loading

v1.2.1

16 Apr 03:27
@SysAdminDoc SysAdminDoc

Choose a tag to compare

Bug Fixes

  • Fixed unsolvable maze challenge — maze generator now validates path solvability via BFS before presenting to user, preventing permanent alarm lock-out
  • Fixed DashboardViewModel state race conditions — replaced 18 non-atomic StateFlow mutations with update {} to prevent lost state when weather and calendar load concurrently
  • Fixed exact alarm SecurityException on API 31-32 — bedtime reminder now checks canScheduleExactAlarms() before scheduling
  • Fixed alarm group filtering — selecting a group now actually filters the alarm list (was tracked in state but never applied)

Improvements

  • Updated launcher icon with new vector design + rasterized PNGs for all densities
  • Added Room database schema exports (v4-v6) for migration testing
  • Added project branding assets (banner, favicon, icons)
  • Cleaned up stale version defaults and proguard comments
Loading
Previous 1
Previous

AltStyle によって変換されたページ (->オリジナル) /