Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Tags: SysAdminDoc/OpenLumen

Tags

v0.6.1

Toggle v0.6.1's commit message
chore: release v0.6.1

Bump versionCode 8→9, versionName 0.6.0→0.6.1 for the deep-audit
hardening release. README badge and features header updated to match.

v0.6.0

Toggle v0.6.0's commit message
OpenLumen v0.6.0

v0.5.1

Toggle v0.5.1's commit message
fix(verification): add Linux classifier entries for 5 plugin-repo art…

…ifacts

CI on ubuntu-latest fetches additional Gradle Central Plugin Repository
modules / poms / classifier-bound jars that the Windows-side metadata
regen (daec0bc) didn't capture:

- guava-parent-33.3.1-jre.pom
- junit-bom-5.10.2.module
- junit-bom-5.11.0-M2.module
- kotlin-gradle-plugins-bom-2.2.10.module
- kotlin-gradle-plugins-bom-2.2.10.pom

SHA-256s were computed locally against plugins.gradle.org for each
file and added alongside the existing Windows-side entries.

v0.5.0

Toggle v0.5.0's commit message
fix(verification): regen metadata, disable PGP sig verify

The verification-metadata.xml was missing checksums for AGP 9.2.1 and ~93
transitive deps, blocking every Gradle invocation on local + CI.
Bootstrapped fresh sha256 hashes via --write-verification-metadata.

verify-signatures flipped to false because no keyring file
(verification-keyring.gpg/keys) exists in the repo — Gradle was set up to
verify PGP signatures it had no way to verify, so the hard-fail mode was
effectively a build-blocker rather than a security gate. Metadata-hash
verification (sha256) still runs, which is the meaningful gate without
keyring infrastructure.

v0.4.0

Toggle v0.4.0's commit message
Release v0.4.0 — engineering audit pass + first unit tests

Deep correctness, lifecycle, security, and UX hardening pass across the entire
codebase. Highlights:

CONCURRENCY / LIFECYCLE
- LumenService now serializes ColorEngine.apply()/clear() via Mutex; the prefs
  flow is conflate()d so rapid slider drags don't queue dozens of su calls.
- engine/lastApplied/lastShouldBeActive are @volatile.
- onDestroy clear() runs inside runBlocking { NonCancellable + withTimeoutOrNull(2s) }
  so teardown never races lifecycleScope cancellation.
- LumenTileService creates a fresh per-onCreate scope and cancels in onDestroy.
- Tile toggle now uses atomic prefs.update {} (no read-then-write race).

SU WRAPPER (core-engine/Su.kt)
- Killed the double-spawn bug in isAvailable() (Magisk no longer prompts twice).
- redirectErrorStream(true) on both commands — fixes the stderr-buffer deadlock.
- All readers in 'use {}' — no FD leaks on timeout.
- runShell got a 4s timeout and drains stdout so KCAL writes can't deadlock.
- Failures logged via android.util.Log under OpenLumen/Su.

ENGINES
- OverlayEngine guards Settings.canDrawOverlays() before addView; catches the
  throw path. Removed dead else branch in clear().
- ColorDisplayManagerEngine tries (Context) ctor before no-arg, caches the
  reflected Method handles + manager instance.

BOOT
- Drop LOCKED_BOOT_COMPLETED — DataStore is in user-protected storage. Listening
  there just deadlocked on first(). Direct-boot deferred to v0.5+.
- 8s timeout on the prefs read inside the receiver so a hung DataStore can't
  leak the PendingResult.

UI / COMPOSE / A11Y
- Home toggle Card is now whole-card-clickable (was only the Switch thumb).
- Intensity and Dim sliders carry semantics { stateDescription = 'N percent' }
  so TalkBack reads useful values.
- Bottom-nav icons get contentDescription = labelRes.
- Dialog visibility flags moved to rememberSaveable so rotations/process death
  survive in-flight dialogs.
- AboutScreen.LaunchedEffect(result) returns early on null instead of firing
  the Toast pipeline twice.

DEFENSIVE INPUT
- PreferencesStore.importFrom caps reads at 64 KB, runs sanitize() over every
  numeric field (R/G/B/dim/gamma/lat/lng/offsets/hour/minute) clamping to valid
  ranges. Preserves the user's enabled flag.
- LumenService.mapMode() coerces schedule hour/minute before LocalTime.of() so
  corrupted prefs can never throw inside the FGS.

DIAGNOSTICS
- core-engine/Log.kt: thin android.util.Log wrapper with 23-char tag cap.
- Every catch/fallback path in service + engines now logs.

TESTS (new!)
- core-engine: LumenMatrixTest covers identity / dim coercion / gamma /
  SurfaceFlinger16 layout / overlay ARGB clamping (9 tests).
- core-schedule: SolarCalculatorTest cross-checks NOAA sunrise/sunset for NY,
  Sydney, Quito, Tromso. ScheduleTest covers AlwaysOn/Off, FixedTime midnight
  wrap, nextTransition correctness — caught a real bug.
- Bug caught + fixed: nextTransition for FixedTime was returning the first
  future candidate in declaration order instead of the chronologically earliest.
  At 23:00 with a 22-7 window it returned '22:00 tomorrow' instead of
  '07:00 tomorrow'. Now sorts the candidate set first.
- JUnit 4 + Truth wired via libs.versions.toml.

VERIFIED
- ./gradlew :core-engine:test :core-schedule:test :app:assembleRelease  all green.
- Installed on Samsung Galaxy S25 Ultra (Android 16) + Galaxy S22 Ultra
  (Android 16). versionCode=5 confirmed via pm path + dumpsys. No FATAL or
  AndroidRuntime exceptions in logcat.
- v1+v2+v3 APK signing schemes.

v0.3.0

Toggle v0.3.0's commit message
Release v0.3.0 — persistence + reliability

Bumps versionCode 2->3, versionName 0.2.0->0.3.0. Updates README shields.io
badge + features list, CHANGELOG with full v0.3.0 changeset, CLAUDE.md version
history, ROADMAP v0.3 (2/3 boxes checked, schema migration and direct-boot
boot deferred with rationale).

v0.2.0

Toggle v0.2.0's commit message
Release v0.2.0 — UI completeness pass

Bumps versionCode 1->2, versionName 0.1.0->0.2.0. Updates README shields.io
badge, features list, CHANGELOG with full v0.2.0 changeset, CLAUDE.md version
history line, and ROADMAP v0.2 section to all-checked.