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

Commit 30f92a36 authored by Wesley.CW Wang's avatar Wesley.CW Wang Committed by Wesley Wang
Browse files

Make AOD battery text field support BatteryDefender

 - Add overheat flag into BatteryStatus
 - Update AOD battery indication to support new state when BatteryDefender is enable
 Screenshot: https://screenshot.googleplex.com/BYyUYS7VGtyG3i7.png

Bug: 173080412
Test: atest SystemUITests:com.android.systemui.statusbar.KeyguardIndicationControllerTest
Merged-In: I74f32136ba034d2dea19f71e1e7cecc022cd9fa9
Change-Id: I9aee4e6408d762639818e7aac42a781f12cd69ff
parent 28829eb1
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

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;
@@ -123,6 +124,15 @@ public class BatteryStatus {
        return level < LOW_BATTERY_THRESHOLD;
    }

    /**
     * Whether battery is overheated.
     *
     * @return true if battery is overheated
     */
    public boolean isOverheated() {
        return health == BATTERY_HEALTH_OVERHEAT;
    }

    /**
     * Return current chargin speed is fast, slow or normal.
     *
+5 −0
Original line number Diff line number Diff line
@@ -2579,6 +2579,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            return true;
        }

        // change in battery overheat
        if (current.health != old.health) {
            return true;
        }

        return false;
    }

+15 −6
Original line number Diff line number Diff line
@@ -118,6 +118,8 @@ public class KeyguardIndicationController implements StateListener,
    private boolean mPowerPluggedIn;
    private boolean mPowerPluggedInWired;
    private boolean mPowerCharged;
    private boolean mBatteryOverheated;
    private boolean mEnableBatteryDefender;
    private int mChargingSpeed;
    private int mChargingWattage;
    private int mBatteryLevel;
@@ -401,7 +403,7 @@ public class KeyguardIndicationController implements StateListener,
                } else if (!TextUtils.isEmpty(mAlignmentIndication)) {
                    mTextView.switchIndication(mAlignmentIndication);
                    mTextView.setTextColor(mContext.getColor(R.color.misalignment_text_color));
                } else if (mPowerPluggedIn) {
                } else if (mPowerPluggedIn || mEnableBatteryDefender) {
                    String indication = computePowerIndication();
                    if (animate) {
                        animateText(mTextView, indication);
@@ -421,7 +423,7 @@ public class KeyguardIndicationController implements StateListener,
            String trustManagedIndication = getTrustManagedIndication();

            String powerIndication = null;
            if (mPowerPluggedIn) {
            if (mPowerPluggedIn || mEnableBatteryDefender) {
                powerIndication = computePowerIndication();
            }

@@ -451,7 +453,7 @@ public class KeyguardIndicationController implements StateListener,
            } else if (!TextUtils.isEmpty(mAlignmentIndication)) {
                mTextView.switchIndication(mAlignmentIndication);
                isError = true;
            } else if (mPowerPluggedIn) {
            } else if (mPowerPluggedIn || mEnableBatteryDefender) {
                if (DEBUG_CHARGING_SPEED) {
                    powerIndication += ",  " + (mChargingWattage / 1000) + " mW";
                }
@@ -528,8 +530,15 @@ public class KeyguardIndicationController implements StateListener,
            return mContext.getResources().getString(R.string.keyguard_charged);
        }

        final boolean hasChargingTime = mChargingTimeRemaining > 0;
        int chargingId;
        String percentage = NumberFormat.getPercentInstance().format(mBatteryLevel / 100f);

        if (mBatteryOverheated) {
            chargingId = R.string.keyguard_plugged_in_charging_limited;
            return mContext.getResources().getString(chargingId, percentage);
        }

        final boolean hasChargingTime = mChargingTimeRemaining > 0;
        if (mPowerPluggedInWired) {
            switch (mChargingSpeed) {
                case BatteryStatus.CHARGING_FAST:
@@ -554,8 +563,6 @@ public class KeyguardIndicationController implements StateListener,
                    : R.string.keyguard_plugged_in_wireless;
        }

        String percentage = NumberFormat.getPercentInstance()
                .format(mBatteryLevel / 100f);
        if (hasChargingTime) {
            // We now have battery percentage in these strings and it's expected that all
            // locales will also have it in the future. For now, we still have to support the old
@@ -685,6 +692,8 @@ public class KeyguardIndicationController implements StateListener,
            mChargingWattage = status.maxChargingWattage;
            mChargingSpeed = status.getChargingSpeed(mContext);
            mBatteryLevel = status.level;
            mBatteryOverheated = status.isOverheated();
            mEnableBatteryDefender = mBatteryOverheated && status.isPluggedIn();
            try {
                mChargingTimeRemaining = mPowerPluggedIn
                        ? mBatteryInfo.computeChargeTimeRemaining() : -1;
+62 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.text.NumberFormat;
import java.util.Collections;

@SmallTest
@@ -546,4 +547,65 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
                pluggedIndication, powerIndication);
        assertThat(mTextView.getText()).isEqualTo(pluggedIndication);
    }

    @Test
    public void onRefreshBatteryInfo_chargingWithOverheat_presentChargingLimited() {
        createController();
        BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING,
                80 /* level */, BatteryManager.BATTERY_PLUGGED_AC,
                BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */);

        mController.getKeyguardCallback().onRefreshBatteryInfo(status);
        mController.setVisible(true);

        String percentage = NumberFormat.getPercentInstance().format(80 / 100f);
        String pluggedIndication = mContext.getString(
                R.string.keyguard_plugged_in_charging_limited, percentage);
        assertThat(mTextView.getText()).isEqualTo(pluggedIndication);
    }

    @Test
    public void onRefreshBatteryInfo_pluggedWithOverheat_presentChargingLimited() {
        createController();
        BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_DISCHARGING,
                80 /* level */, BatteryManager.BATTERY_PLUGGED_AC,
                BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */);

        mController.getKeyguardCallback().onRefreshBatteryInfo(status);
        mController.setVisible(true);

        String percentage = NumberFormat.getPercentInstance().format(80 / 100f);
        String pluggedIndication = mContext.getString(
                R.string.keyguard_plugged_in_charging_limited, percentage);
        assertThat(mTextView.getText()).isEqualTo(pluggedIndication);
    }

    @Test
    public void onRefreshBatteryInfo_fullChargedWithOverheat_presentCharged() {
        createController();
        BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING,
                100 /* level */, BatteryManager.BATTERY_PLUGGED_AC,
                BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */);

        mController.getKeyguardCallback().onRefreshBatteryInfo(status);
        mController.setVisible(true);

        String chargedIndication = mContext.getString(R.string.keyguard_charged);
        assertThat(mTextView.getText()).isEqualTo(chargedIndication);
    }

    @Test
    public void onRefreshBatteryInfo_dischargingWithOverheat_presentBatteryPercentage() {
        createController();
        BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_DISCHARGING,
                90 /* level */, 0 /* plugged */, BatteryManager.BATTERY_HEALTH_OVERHEAT,
                0 /* maxChargingWattage */);

        mController.getKeyguardCallback().onRefreshBatteryInfo(status);
        mController.setDozing(true);
        mController.setVisible(true);

        String percentage = NumberFormat.getPercentInstance().format(90 / 100f);
        assertThat(mTextView.getText()).isEqualTo(percentage);
    }
}