# HG changeset patch # User Da Risk # Date 1773174922 14400 # Node ID fff5322aeb1594874144177b61d0439c86dd0638 # Parent 75cae5a2f7d9626476d8dbb39f12542021ee589f geekorum: remove deprecated battery livedata diff -r 75cae5a2f7d9 -r fff5322aeb15 geekdroid/src/main/java/com/geekorum/geekdroid/battery/LiveData.kt --- 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() { - 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() { - - 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 diff -r 75cae5a2f7d9 -r fff5322aeb15 geekdroid/src/test/java/com/geekorum/geekdroid/battery/LiveDataTest.kt --- 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 . - */ -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>(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>(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>(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>(relaxed = true) - application.sendStickyBroadcast(Intent(Intent.ACTION_BATTERY_CHANGED).apply { - putExtra(BatteryManager.EXTRA_BATTERY_LOW, true) - }) - liveData.observeForever(mockObserver) - verifySequence { - mockObserver.onChanged(true) - } - } - -} diff -r 75cae5a2f7d9 -r fff5322aeb15 geekdroid/src/test/java/com/geekorum/geekdroid/battery/PowerSaveModeFlowTest.kt --- 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) diff -r 75cae5a2f7d9 -r fff5322aeb15 gradle.properties --- 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