🔋 Battery

Monitor stanu baterii z callbackami i integracją z reklamami.

Przegląd

Moduł Battery pozwala dostosować zachowanie aplikacji do stanu baterii:

Podstawowe użycie

Sprawdzenie stanu

// Poziom baterii (0-100)
val level = ADict.Battery.getLevel()

// Czy ładuje się
val isCharging = ADict.Battery.isCharging()

// Czy niski poziom
val isLow = ADict.Battery.isLowBattery()

// Czy krytycznie niski
val isCritical = ADict.Battery.isCriticalBattery()

// Tryb oszczędzania baterii (systemowy)
val powerSave = ADict.Battery.isPowerSaveMode()

// Pełny stan
val state = ADict.Battery.getState()
Log.d("Battery", """
    Poziom: ${state.level}%
    Ładowanie: ${state.isCharging}
    Typ ładowania: ${state.chargingType}
    Temperatura: ${state.temperature}°C
    Zdrowie: ${state.health}
""")

Konfiguracja

ADict.Battery.configure(
    lowBatteryThreshold = 20,      // Próg "niskiej" baterii (domyślnie 15%)
    criticalBatteryThreshold = 10, // Próg "krytycznej" baterii (domyślnie 5%)
    skipAdsWhenLow = true          // Automatycznie pomijaj reklamy przy niskiej baterii
)

Obserwowanie stanu (Flow)

lifecycleScope.launch {
    ADict.Battery.batteryState.collect { state ->
        updateBatteryUI(state.level, state.isCharging)

        if (state.isLow) {
            reducePowerConsumption()
        }

        if (state.isCritical) {
            pauseBackgroundTasks()
        }
    }
}

Callbacks

Niska bateria

ADict.Battery.onLowBattery {
    // Wywoływane gdy bateria spadnie poniżej progu
    disableAnimations()
    reduceAdFrequency()
    showLowBatteryWarning()
}

Zmiana stanu ładowania

ADict.Battery.onChargingChanged { isCharging ->
    if (isCharging) {
        enableFullFeatures()
        startBackgroundSync()
    } else {
        enablePowerSaveMode()
    }
}

Zmiana poziomu

ADict.Battery.onLevelChanged { level ->
    updateBatteryIndicator(level)
}

Integracja z reklamami

// Automatyczne sprawdzenie przed reklamą
fun showAd() {
    if (ADict.Battery.shouldShowAd()) {
        // Bateria OK - pokaż reklamę
        ADict.ADS.showInterstitial(activity)
    } else {
        // Bateria za niska - pomiń
        Log.d("Ads", "Ad skipped due to low battery")
        continueWithoutAd()
    }
}

// Lub konfiguracja globalna
ADict.Battery.configure(skipAdsWhenLow = true)

// Teraz ADict.Battery.shouldShowAd() zwróci false przy niskiej baterii

Typy ładowania

ChargingType Opis
NONE Nie ładuje
USB Ładowanie przez USB
AC Ładowarka sieciowa
WIRELESS Ładowanie bezprzewodowe

Stan zdrowia baterii

BatteryHealth Opis
GOOD Bateria w dobrym stanie
OVERHEAT Przegrzanie
DEAD Bateria martwa
COLD Bateria za zimna

Przykład: Adaptacyjna aplikacja

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Konfiguracja
        ADict.Battery.configure(
            lowBatteryThreshold = 20,
            skipAdsWhenLow = true
        )

        // Callback na niską baterię
        ADict.Battery.onLowBattery {
            // Wyłącz animacje
            window.setWindowAnimations(0)

            // Zmniejsz częstotliwość odświeżania
            setRefreshRate(30)

            // Powiadom użytkownika
            showSnackbar("Tryb oszczędzania baterii włączony")
        }

        // Obserwuj zmiany
        lifecycleScope.launch {
            ADict.Battery.batteryState.collect { state ->
                // Dostosuj UI
                when {
                    state.isCritical -> setTheme(R.style.Theme_PowerSave)
                    state.isLow -> reduceVisualEffects()
                    state.isCharging -> enableAllFeatures()
                }
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        ADict.Battery.cleanup()
    }
}