Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf9ebf8c authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 13444741 from 94691748 to 25Q3-release

Change-Id: I1f031b2b1fd85368f6b7b0af4b3106f1634f185b
parents 724b3f3c 94691748
Loading
Loading
Loading
Loading
+23 −13
Original line number Diff line number Diff line
@@ -23,25 +23,24 @@ import android.os.PowerManager
import java.util.concurrent.atomic.AtomicBoolean

/**
 * PowerSaveController registers a BroadcastReceiver that listens to
 * changes in Power Save Mode provided by the OS.
 * Forwards received broadcasts to be handled by a [PowerSaveListener].
 * PowerSaveController registers a BroadcastReceiver that listens to changes in Power Save Mode
 * provided by the OS. Forwards received broadcasts to be handled by a [PowerSaveListener].
 */
class PowerSaveController(
    context: Context,
    private val listener: PowerSaveListener?
) : BroadcastEventController(context) {
class PowerSaveController(context: Context, listener: PowerSaveListener?) :
    BroadcastEventController(context) {
    companion object {
        const val DEFAULT_POWER_SAVE_MODE = false
    }

    private val listeners = mutableListOf<PowerSaveListener>()

    private var powerSaving: AtomicBoolean? = null
    private var powerManager: PowerManager? = null

    override fun initResources(): Boolean {
        if (powerSaving == null) powerSaving = AtomicBoolean(DEFAULT_POWER_SAVE_MODE)
        if (powerManager == null) powerManager =
                context.getSystemService(Context.POWER_SERVICE) as PowerManager?
        if (powerManager == null)
            powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager?
        return powerManager != null
    }

@@ -59,21 +58,32 @@ class PowerSaveController(

    override fun onUnregister() {}

    init {
        if (listener != null) {
            listeners.add(listener)
        }
    }

    private fun setPowerSave(isPowerSave: Boolean, fire: Boolean) {
        powerSaving?.let {
            if (it.get() == isPowerSave) return
            it.set(isPowerSave)
        }

        listener?.let {
            if (fire) listener.onPowerSaveModeChanged(isPowerSave)
        }
        listeners.forEach { listener -> if (fire) listener.onPowerSaveModeChanged(isPowerSave) }
    }

    fun isPowerSaving(): Boolean = powerSaving?.get() ?: false

    fun registerListener(listener: PowerSaveListener) {
        listeners += listener
    }

    fun unregisterListener(listener: PowerSaveListener) {
        listeners -= listener
    }

    interface PowerSaveListener {
        fun onPowerSaveModeChanged(isPowerSaveMode: Boolean)
    }

}