From 12f38c19ab3c7ab827dfe626e5aaeeac11ee40e6 Mon Sep 17 00:00:00 2001 From: Jeena Date: Mon, 9 Mar 2026 12:05:41 +0000 Subject: [PATCH] feat(US-12, US-13): request battery exemption on launch, verify test coverage MainActivity now requests battery optimization exemption on first launch so the foreground service survives Doze mode during long walks. The REQUEST_IGNORE_BATTERY_OPTIMIZATIONS permission was already declared in the manifest. Unit test coverage confirmed across all core logic: BeepGeneratorTest (4), BpmCalculatorTest (6), SettingsRepositoryTest (6). --- .../main/kotlin/net/jeena/pacer/MainActivity.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/src/main/kotlin/net/jeena/pacer/MainActivity.kt b/app/src/main/kotlin/net/jeena/pacer/MainActivity.kt index fab4874..a03095a 100644 --- a/app/src/main/kotlin/net/jeena/pacer/MainActivity.kt +++ b/app/src/main/kotlin/net/jeena/pacer/MainActivity.kt @@ -1,6 +1,10 @@ package net.jeena.pacer +import android.content.Intent +import android.net.Uri import android.os.Bundle +import android.os.PowerManager +import android.provider.Settings import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge @@ -18,6 +22,7 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + requestBatteryOptimizationExemption() enableEdgeToEdge() setContent { PacerTheme { @@ -30,4 +35,15 @@ class MainActivity : ComponentActivity() { } } } + + private fun requestBatteryOptimizationExemption() { + val pm = getSystemService(PowerManager::class.java) + if (!pm.isIgnoringBatteryOptimizations(packageName)) { + startActivity( + Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { + data = Uri.parse("package:$packageName") + } + ) + } + } }