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

Commit e873c20a authored by YK Hung's avatar YK Hung Committed by Automerger Merge Worker
Browse files

Merge "Update battery health state intent (1/3)" into udc-dev am: 08ad2b77

parents af15f9a5 08ad2b77
Loading
Loading
Loading
Loading
+13 −12
Original line number Diff line number Diff line
@@ -16,12 +16,11 @@

package com.android.settingslib.fuelgauge;

import static android.os.BatteryManager.BATTERY_HEALTH_OVERHEAT;
import static android.os.BatteryManager.BATTERY_HEALTH_UNKNOWN;
import static android.os.BatteryManager.BATTERY_STATUS_FULL;
import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
import static android.os.BatteryManager.EXTRA_HEALTH;
import static android.os.BatteryManager.EXTRA_LEVEL;
import static android.os.BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE;
import static android.os.BatteryManager.CHARGING_POLICY_DEFAULT;
import static android.os.BatteryManager.EXTRA_CHARGING_STATUS;
import static android.os.BatteryManager.EXTRA_MAX_CHARGING_CURRENT;
import static android.os.BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE;
import static android.os.BatteryManager.EXTRA_PLUGGED;
@@ -51,7 +50,7 @@ public class BatteryStatus {
    public final int status;
    public final int level;
    public final int plugged;
    public final int health;
    public final int chargingStatus;
    public final int maxChargingWattage;
    public final boolean present;
    public final Optional<Boolean> incompatibleCharger;
@@ -62,12 +61,12 @@ public class BatteryStatus {
                ? null : new BatteryStatus(batteryChangedIntent, incompatibleCharger);
    }

    public BatteryStatus(int status, int level, int plugged, int health,
    public BatteryStatus(int status, int level, int plugged, int chargingStatus,
            int maxChargingWattage, boolean present) {
        this.status = status;
        this.level = level;
        this.plugged = plugged;
        this.health = health;
        this.chargingStatus = chargingStatus;
        this.maxChargingWattage = maxChargingWattage;
        this.present = present;
        this.incompatibleCharger = Optional.empty();
@@ -86,7 +85,8 @@ public class BatteryStatus {
        status = batteryChangedIntent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
        plugged = batteryChangedIntent.getIntExtra(EXTRA_PLUGGED, 0);
        level = getBatteryLevel(batteryChangedIntent);
        health = batteryChangedIntent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);
        chargingStatus = batteryChangedIntent.getIntExtra(EXTRA_CHARGING_STATUS,
                CHARGING_POLICY_DEFAULT);
        present = batteryChangedIntent.getBooleanExtra(EXTRA_PRESENT, true);
        this.incompatibleCharger = incompatibleCharger;

@@ -143,9 +143,9 @@ public class BatteryStatus {
        return level < LOW_BATTERY_THRESHOLD;
    }

    /** Whether battery is overheated. */
    public boolean isOverheated() {
        return health == BATTERY_HEALTH_OVERHEAT;
    /** Whether battery defender is enabled. */
    public boolean isBatteryDefender() {
        return chargingStatus == CHARGING_POLICY_ADAPTIVE_LONGLIFE;
    }

    /** Return current chargin speed is fast, slow or normal. */
@@ -163,7 +163,8 @@ public class BatteryStatus {
    @Override
    public String toString() {
        return "BatteryStatus{status=" + status + ",level=" + level + ",plugged=" + plugged
                + ",health=" + health + ",maxChargingWattage=" + maxChargingWattage + "}";
                + ",chargingStatus=" + chargingStatus + ",maxChargingWattage=" + maxChargingWattage
                + "}";
    }

    /**
+5 −3
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static android.hardware.biometrics.BiometricConstants.LockoutMode;
import static android.hardware.biometrics.BiometricSourceType.FACE;
import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT;
import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
import static android.os.BatteryManager.CHARGING_POLICY_DEFAULT;
import static android.os.PowerManager.WAKE_REASON_UNKNOWN;

import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT;
@@ -2457,7 +2458,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        }

        // Take a guess at initial SIM state, battery status and PLMN until we get an update
        mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0, 0, true);
        mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, /* level= */ 100, /* plugged= */
                0, CHARGING_POLICY_DEFAULT, /* maxChargingWattage= */0, /* present= */true);

        // Watch for interesting updates
        final IntentFilter filter = new IntentFilter();
@@ -3881,8 +3883,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            return true;
        }

        // change in battery overheat
        return current.health != old.health;
        // change in charging status
        return current.chargingStatus != old.chargingStatus;
    }

    /**
+7 −9
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
    private boolean mShowPercentAvailable;
    private String mEstimateText = null;
    private boolean mCharging;
    private boolean mIsOverheated;
    private boolean mIsBatteryDefender;
    private boolean mDisplayShieldEnabled;
    // Error state where we know nothing about the current battery state
    private boolean mBatteryStateUnknown;
@@ -213,9 +213,9 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
        mDrawable.setPowerSaveEnabled(isPowerSave);
    }

    void onIsOverheatedChanged(boolean isOverheated) {
        boolean valueChanged = mIsOverheated != isOverheated;
        mIsOverheated = isOverheated;
    void onIsBatteryDefenderChanged(boolean isBatteryDefender) {
        boolean valueChanged = mIsBatteryDefender != isBatteryDefender;
        mIsBatteryDefender = isBatteryDefender;
        if (valueChanged) {
            updateContentDescription();
            // The battery drawable is a different size depending on whether it's currently
@@ -308,12 +308,12 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
            contentDescription = context.getString(R.string.accessibility_battery_unknown);
        } else if (mShowPercentMode == MODE_ESTIMATE && !TextUtils.isEmpty(mEstimateText)) {
            contentDescription = context.getString(
                    mIsOverheated
                    mIsBatteryDefender
                            ? R.string.accessibility_battery_level_charging_paused_with_estimate
                            : R.string.accessibility_battery_level_with_estimate,
                    mLevel,
                    mEstimateText);
        } else if (mIsOverheated) {
        } else if (mIsBatteryDefender) {
            contentDescription =
                    context.getString(R.string.accessibility_battery_level_charging_paused, mLevel);
        } else if (mCharging) {
@@ -399,9 +399,7 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
        float mainBatteryWidth =
                res.getDimensionPixelSize(R.dimen.status_bar_battery_icon_width) * iconScaleFactor;

        // If the battery is marked as overheated, we should display a shield indicating that the
        // battery is being "defended".
        boolean displayShield = mDisplayShieldEnabled && mIsOverheated;
        boolean displayShield = mDisplayShieldEnabled && mIsBatteryDefender;
        float fullBatteryIconHeight =
                BatterySpecs.getFullBatteryHeight(mainBatteryHeight, displayShield);
        float fullBatteryIconWidth =
+2 −2
Original line number Diff line number Diff line
@@ -91,8 +91,8 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
                }

                @Override
                public void onIsOverheatedChanged(boolean isOverheated) {
                    mView.onIsOverheatedChanged(isOverheated);
                public void onIsBatteryDefenderChanged(boolean isBatteryDefender) {
                    mView.onIsBatteryDefenderChanged(isBatteryDefender);
                }
            };

+5 −5
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ public class KeyguardIndicationController {
    private boolean mPowerPluggedInDock;

    private boolean mPowerCharged;
    private boolean mBatteryOverheated;
    private boolean mBatteryDefender;
    private boolean mEnableBatteryDefender;
    private boolean mIncompatibleCharger;
    private int mChargingSpeed;
@@ -921,7 +921,7 @@ public class KeyguardIndicationController {
     */
    protected String computePowerIndication() {
        int chargingId;
        if (mBatteryOverheated) {
        if (mBatteryDefender) {
            chargingId = R.string.keyguard_plugged_in_charging_limited;
            String percentage = NumberFormat.getPercentInstance().format(mBatteryLevel / 100f);
            return mContext.getResources().getString(chargingId, percentage);
@@ -1093,9 +1093,9 @@ public class KeyguardIndicationController {
            mChargingSpeed = status.getChargingSpeed(mContext);
            mBatteryLevel = status.level;
            mBatteryPresent = status.present;
            mBatteryOverheated = status.isOverheated();
            mBatteryDefender = status.isBatteryDefender();
            // when the battery is overheated, device doesn't charge so only guard on pluggedIn:
            mEnableBatteryDefender = mBatteryOverheated && status.isPluggedIn();
            mEnableBatteryDefender = mBatteryDefender && status.isPluggedIn();
            mIncompatibleCharger = status.incompatibleCharger.orElse(false);
            try {
                mChargingTimeRemaining = mPowerPluggedIn
@@ -1106,7 +1106,7 @@ public class KeyguardIndicationController {
            }

            mKeyguardLogger.logRefreshBatteryInfo(isChargingOrFull, mPowerPluggedIn, mBatteryLevel,
                    mBatteryOverheated);
                    mBatteryDefender);
            updateDeviceEntryIndication(!wasPluggedIn && mPowerPluggedInWired);
        }

Loading