--- a/geekdroid/src/main/java/com/geekorum/geekdroid/battery/LiveData.kt Tue Mar 10 16:26:45 2026 -0400
+++ b/geekdroid/src/main/java/com/geekorum/geekdroid/battery/LiveData.kt Tue Mar 10 16:35:22 2026 -0400
@@ -29,49 +29,10 @@
import android.os.BatteryManager
import android.os.Build
import android.os.PowerManager
-import androidx.lifecycle.LiveData
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow
import kotlin.math.roundToInt
-/**
- * Observe the battery to know if a low level was reached
- */
-@Deprecated("Use Application.lowBatteryFlow()")
-class LowBatteryLiveData(
- private val application: Application
-) : LiveData<Boolean>() {
- private val intentFilter = IntentFilter().apply {
- addAction(Intent.ACTION_BATTERY_LOW)
- addAction(Intent.ACTION_BATTERY_OKAY)
- }
-
- private val broadcastReceiver = object : BroadcastReceiver() {
- override fun onReceive(context: Context?, intent: Intent?) {
- when (intent?.action) {
- Intent.ACTION_BATTERY_OKAY -> value = false
- Intent.ACTION_BATTERY_LOW -> value = true
- }
- }
- }
-
- override fun onActive() {
- application.registerReceiver(broadcastReceiver, intentFilter)
- val batteryStatus = application.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
- value = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- batteryStatus?.getBooleanExtra(BatteryManager.EXTRA_BATTERY_LOW, false) ?: false
- } else {
- val level = batteryStatus?.getIntExtra(BatteryManager.EXTRA_LEVEL, 0) ?: 0
- val scale = batteryStatus?.getIntExtra(BatteryManager.EXTRA_SCALE, 100) ?: 100
- val percent = level.toFloat() / scale * 100
- percent.roundToInt() <= 15
- }
- }
-
- override fun onInactive() {
- application.unregisterReceiver(broadcastReceiver)
- }
-}
fun Application.lowBatteryFlow() = callbackFlow {
val broadcastReceiver = object : BroadcastReceiver() {
@@ -105,44 +66,17 @@
}
-/**
- * Observe the [PowerManager] to know if the system is in Power saving mode.
- */
-@Deprecated("Use isPowerSaveModeFlow(application, powerManager)")
-class BatterySaverLiveData(
- private val application: Application,
- private val powerManager: PowerManager
-) : LiveData<Boolean>() {
-
- private val intentFilter = IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)
-
- private val broadcastReceiver = object : BroadcastReceiver() {
- override fun onReceive(context: Context?, intent: Intent?) {
- value = powerManager.isPowerSaveMode
- }
- }
-
- override fun onActive() {
- application.registerReceiver(broadcastReceiver, intentFilter)
- value = powerManager.isPowerSaveMode
- }
-
- override fun onInactive() {
- application.unregisterReceiver(broadcastReceiver)
- }
-}
-
-fun isPowerSaveModeFlow(application: Application, powerManager: PowerManager) = callbackFlow {
+fun Application.isPowerSaveModeFlow(powerManager: PowerManager) = callbackFlow {
val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
trySend(powerManager.isPowerSaveMode)
}
}
- application.registerReceiver(broadcastReceiver, IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED))
+ registerReceiver(broadcastReceiver, IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED))
trySend(powerManager.isPowerSaveMode)
awaitClose {
- application.unregisterReceiver(broadcastReceiver)
+ unregisterReceiver(broadcastReceiver)
}
}
\ No newline at end of file
--- a/geekdroid/src/test/java/com/geekorum/geekdroid/battery/LiveDataTest.kt Tue Mar 10 16:26:45 2026 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-/*
- * Geekdroid is a utility library for development on the Android
- * Platform.
- *
- * Copyright (C) 2017-2025 by Frederic-Charles Barthelery.
- *
- * This file is part of Geekdroid.
- *
- * Geekdroid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Geekdroid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Geekdroid. If not, see <http://www.gnu.org/licenses/>.
- */
-package com.geekorum.geekdroid.battery
-
-import android.app.Application
-import android.content.Intent
-import android.os.BatteryManager
-import android.os.Build
-import android.os.Looper.getMainLooper
-import android.os.PowerManager
-import androidx.arch.core.executor.testing.InstantTaskExecutorRule
-import androidx.core.content.getSystemService
-import androidx.lifecycle.Observer
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import io.mockk.mockk
-import io.mockk.verifySequence
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.robolectric.Shadows
-import org.robolectric.Shadows.shadowOf
-import org.robolectric.annotation.Config
-import org.robolectric.shadows.ShadowPowerManager
-import kotlin.test.BeforeTest
-
-@RunWith(AndroidJUnit4::class)
-@Config(minSdk = Build.VERSION_CODES.Q)
-class BatterySaverLiveDataTest {
-
- lateinit var liveData: BatterySaverLiveData
- lateinit var shadowPowerManager: ShadowPowerManager
- lateinit var application: Application
-
- @get:Rule
- val rule = InstantTaskExecutorRule()
-
- @BeforeTest
- fun setUp() {
- application = ApplicationProvider.getApplicationContext()
- val powerManager: PowerManager = application.getSystemService()!!
- shadowPowerManager = Shadows.shadowOf(powerManager)
- liveData = BatterySaverLiveData(application, powerManager)
- }
-
- @Test
- fun testThatWhenPowerSaveModeChangedLiveDataIsUpdated() {
- val mockObserver = mockk<Observer<Boolean>>(relaxed = true)
- liveData.observeForever(mockObserver)
- shadowPowerManager.setIsPowerSaveMode(true)
- application.sendBroadcast(Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED))
- shadowOf(getMainLooper()).idle()
- shadowPowerManager.setIsPowerSaveMode(false)
- application.sendBroadcast(Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED))
- shadowOf(getMainLooper()).idle()
- verifySequence {
- mockObserver.onChanged(false)
- mockObserver.onChanged(true)
- mockObserver.onChanged(false)
- }
- }
-
-}
-
-@RunWith(AndroidJUnit4::class)
-@Config(minSdk = Build.VERSION_CODES.Q)
-class LowBatteryLiveDataTest {
-
- lateinit var liveData: LowBatteryLiveData
- lateinit var application: Application
-
- @get:Rule
- val rule = InstantTaskExecutorRule()
-
- @BeforeTest
- fun setUp() {
- application = ApplicationProvider.getApplicationContext()
- liveData = LowBatteryLiveData(application)
- }
-
- @Test
- fun testThatBatteryGetLowLiveDataIsUpdated() {
- val mockObserver = mockk<Observer<Boolean>>(relaxed = true)
- liveData.observeForever(mockObserver)
- application.sendBroadcast(Intent(Intent.ACTION_BATTERY_LOW))
- shadowOf(getMainLooper()).idle()
- verifySequence {
- // first battery is okay
- mockObserver.onChanged(false)
- mockObserver.onChanged(true)
- }
- }
-
- @Test
- fun testThatBatteryGetOkayLiveDataIsUpdated() {
- val mockObserver = mockk<Observer<Boolean>>(relaxed = true)
- liveData.observeForever(mockObserver)
- application.sendBroadcast(Intent(Intent.ACTION_BATTERY_OKAY))
- shadowOf(getMainLooper()).idle()
- verifySequence {
- // first battery is okay
- mockObserver.onChanged(false)
- // second when broadcast
- mockObserver.onChanged(false)
- }
- }
-
- @Test
- @Config(minSdk = Build.VERSION_CODES.P)
- fun testThatOnPWhenBatteryIsAlreadyLowLivedataIsCorrect() {
- val mockObserver = mockk<Observer<Boolean>>(relaxed = true)
- application.sendStickyBroadcast(Intent(Intent.ACTION_BATTERY_CHANGED).apply {
- putExtra(BatteryManager.EXTRA_BATTERY_LOW, true)
- })
- liveData.observeForever(mockObserver)
- verifySequence {
- mockObserver.onChanged(true)
- }
- }
-
-}
--- a/geekdroid/src/test/java/com/geekorum/geekdroid/battery/PowerSaveModeFlowTest.kt Tue Mar 10 16:26:45 2026 -0400
+++ b/geekdroid/src/test/java/com/geekorum/geekdroid/battery/PowerSaveModeFlowTest.kt Tue Mar 10 16:35:22 2026 -0400
@@ -56,7 +56,7 @@
@Test
fun testThatWhenPowerSaveModeChangedEmitValue() = runTest {
- isPowerSaveModeFlow(application, powerManager).test {
+ application.isPowerSaveModeFlow(powerManager).test {
assertThat(awaitItem()).isFalse()
shadowPowerManager.setIsPowerSaveMode(true)
--- a/gradle.properties Tue Mar 10 16:26:45 2026 -0400
+++ b/gradle.properties Tue Mar 10 16:35:22 2026 -0400
@@ -18,7 +18,6 @@
# use androidx
android.useAndroidX=true
-android.enableJetifier=true
# check licenses headers
# CHECK_LICENSE_HEADERS=true