geekorum: remove deprecated battery livedata default tip master
authorDa Risk <da_risk@geekorum.com>
Tue, 10 Mar 2026 16:35:22 -0400
changeset 102 fff5322aeb15
parent 101 75cae5a2f7d9
geekorum: remove deprecated battery livedata
geekdroid/src/main/java/com/geekorum/geekdroid/battery/LiveData.kt
geekdroid/src/test/java/com/geekorum/geekdroid/battery/LiveDataTest.kt
geekdroid/src/test/java/com/geekorum/geekdroid/battery/PowerSaveModeFlowTest.kt
gradle.properties
--- 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