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

Commit e42b8f75 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB][Battery] Enable battery shield icon for all device types.

Bug: 345378052
Flag: EXEMPT bugfix
Test: `adb shell am broadcast -a com.android.systemui.demo -e command
battery -e defender true` on a phone -> shows shield
Test: atest BatteryMeterViewControllerTest BatteryMeterViewTest

Change-Id: Id16bb43b1ae3f71e5ccc3faaa95b5b55a073a369
parent d4a7ac67
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -33,9 +33,4 @@
    <!--  Whether the user switcher chip shows in the status bar. When true, the multi user
      avatar will no longer show on the lockscreen -->
    <bool name="flag_user_switcher_chip">false</bool>

    <!-- Whether the battery icon is allowed to display a shield when battery life is being
         protected. -->
    <bool name="flag_battery_shield_icon">false</bool>

</resources>
+3 −8
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
    private boolean mPowerSaveEnabled;
    private boolean mIsBatteryDefender;
    private boolean mIsIncompatibleCharging;
    private boolean mDisplayShieldEnabled;
    // Error state where we know nothing about the current battery state
    private boolean mBatteryStateUnknown;
    // Lazily-loaded since this is expected to be a rare-if-ever state
@@ -270,7 +269,7 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
        int resId = 0;
        if (mPowerSaveEnabled) {
            resId = R.drawable.battery_unified_attr_powersave;
        } else if (mIsBatteryDefender && mDisplayShieldEnabled) {
        } else if (mIsBatteryDefender) {
            resId = R.drawable.battery_unified_attr_defend;
        } else if (isCharging) {
            resId = R.drawable.battery_unified_attr_charging;
@@ -288,7 +287,7 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
    private ColorProfile getCurrentColorProfile() {
        return getColorProfile(
                mPowerSaveEnabled,
                mIsBatteryDefender && mDisplayShieldEnabled,
                mIsBatteryDefender,
                mPluggedIn,
                mLevel <= 20);
    }
@@ -410,10 +409,6 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
        mBatteryEstimateFetcher = fetcher;
    }

    void setDisplayShieldEnabled(boolean displayShieldEnabled) {
        mDisplayShieldEnabled = displayShieldEnabled;
    }

    void updatePercentText() {
        if (!newStatusBarIcons()) {
            updatePercentTextLegacy();
@@ -659,7 +654,7 @@ public class BatteryMeterView extends LinearLayout implements DarkReceiver {
        float mainBatteryWidth =
                res.getDimensionPixelSize(R.dimen.status_bar_battery_icon_width) * iconScaleFactor;

        boolean displayShield = mDisplayShieldEnabled && mIsBatteryDefender;
        boolean displayShield = mIsBatteryDefender;
        float fullBatteryIconHeight =
                BatterySpecs.getFullBatteryHeight(mainBatteryHeight, displayShield);
        float fullBatteryIconWidth =
+0 −3
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.res.R;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.StatusBarLocation;
import com.android.systemui.statusbar.phone.ui.StatusBarIconController;
@@ -153,8 +152,6 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
        mBatteryController = batteryController;

        mView.setBatteryEstimateFetcher(mBatteryController::getEstimatedTimeRemainingString);
        mView.setDisplayShieldEnabled(
                getContext().getResources().getBoolean(R.bool.flag_battery_shield_icon));

        mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery);
        mSettingObserver = new SettingObserver(mMainHandler);
+0 −24
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.res.R;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.StatusBarLocation;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -77,9 +76,6 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {

        when(mBatteryMeterView.getContext()).thenReturn(mContext);
        when(mBatteryMeterView.getResources()).thenReturn(mContext.getResources());

        mContext.getOrCreateTestableResources().addOverride(
                R.bool.flag_battery_shield_icon, false);
    }

    @Test
@@ -136,26 +132,6 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
        verify(mTunerService, never()).addTunable(any(), any());
    }

    @Test
    public void shieldFlagDisabled_viewNotified() {
        mContext.getOrCreateTestableResources().addOverride(
                R.bool.flag_battery_shield_icon, false);

        initController();

        verify(mBatteryMeterView).setDisplayShieldEnabled(false);
    }

    @Test
    public void shieldFlagEnabled_viewNotified() {
        mContext.getOrCreateTestableResources().addOverride(
                R.bool.flag_battery_shield_icon, true);

        initController();

        verify(mBatteryMeterView).setDisplayShieldEnabled(true);
    }

    private void initController() {
        mController = new BatteryMeterViewController(
                mBatteryMeterView,
+52 −89
Original line number Diff line number Diff line
@@ -22,9 +22,9 @@ import android.widget.ImageView
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.settingslib.flags.Flags.FLAG_NEW_STATUS_BAR_ICONS
import com.android.systemui.res.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.battery.BatteryMeterView.BatteryEstimateFetcher
import com.android.systemui.res.R
import com.android.systemui.statusbar.policy.BatteryController.EstimateFetchCompletion
import com.google.common.truth.Truth.assertThat
import org.junit.Before
@@ -67,9 +67,8 @@ class BatteryMeterViewTest : SysuiTestCase() {
    fun contentDescription_unknown() {
        mBatteryMeterView.onBatteryUnknownStateChanged(true)

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_unknown)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_unknown))
    }

    @Test
@@ -80,10 +79,9 @@ class BatteryMeterViewTest : SysuiTestCase() {

        mBatteryMeterView.updatePercentText()

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(
                        R.string.accessibility_battery_level_with_estimate, 15, ESTIMATE
                )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(
                context.getString(R.string.accessibility_battery_level_with_estimate, 15, ESTIMATE)
            )
    }

@@ -96,7 +94,8 @@ class BatteryMeterViewTest : SysuiTestCase() {

        mBatteryMeterView.updatePercentText()

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(
                context.getString(
                    R.string.accessibility_battery_level_charging_paused_with_estimate,
                    17,
@@ -110,27 +109,24 @@ class BatteryMeterViewTest : SysuiTestCase() {
        mBatteryMeterView.onBatteryLevelChanged(90, false)
        mBatteryMeterView.onIsBatteryDefenderChanged(true)

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level_charging_paused, 90)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level_charging_paused, 90))
    }

    @Test
    fun contentDescription_charging() {
        mBatteryMeterView.onBatteryLevelChanged(45, true)

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level_charging, 45)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level_charging, 45))
    }

    @Test
    fun contentDescription_notCharging() {
        mBatteryMeterView.onBatteryLevelChanged(45, false)

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level, 45)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level, 45))
    }

    @Test
@@ -138,9 +134,8 @@ class BatteryMeterViewTest : SysuiTestCase() {
        mBatteryMeterView.onBatteryLevelChanged(45, true)
        mBatteryMeterView.onIsIncompatibleChargingChanged(true)

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level, 45)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level, 45))
    }

    @Test
@@ -152,19 +147,17 @@ class BatteryMeterViewTest : SysuiTestCase() {

        mBatteryMeterView.updatePercentText()

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(
                        R.string.accessibility_battery_level_with_estimate, 15, ESTIMATE
                )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(
                context.getString(R.string.accessibility_battery_level_with_estimate, 15, ESTIMATE)
            )

        // Update the show mode from estimate to percent
        mBatteryMeterView.setPercentShowMode(BatteryMeterView.MODE_ON)

        assertThat(mBatteryMeterView.batteryPercentViewText).isEqualTo("15%")
        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level, 15)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level, 15))
    }

    @Test
@@ -176,19 +169,17 @@ class BatteryMeterViewTest : SysuiTestCase() {

        mBatteryMeterView.updatePercentText()

        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
            context.getString(
                R.string.accessibility_battery_level_with_estimate, 15, ESTIMATE
            )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(
                context.getString(R.string.accessibility_battery_level_with_estimate, 15, ESTIMATE)
            )

        // Update the show mode from estimate to percent
        mBatteryMeterView.setPercentShowMode(BatteryMeterView.MODE_ON)

        assertThat(mBatteryMeterView.batteryPercentView).isNull()
        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
            context.getString(R.string.accessibility_battery_level, 15)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level, 15))
        assertThat(mBatteryMeterView.unifiedBatteryState.showPercent).isTrue()
    }

@@ -225,15 +216,15 @@ class BatteryMeterViewTest : SysuiTestCase() {
        // BatteryDefender
        mBatteryMeterView.onBatteryLevelChanged(90, false)
        mBatteryMeterView.onIsBatteryDefenderChanged(true)
        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level_charging_paused, 90)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level_charging_paused, 90))

        // BatteryDefender & estimate
        mBatteryMeterView.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE)
        mBatteryMeterView.setBatteryEstimateFetcher(Fetcher())
        mBatteryMeterView.updatePercentText()
        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(
                context.getString(
                    R.string.accessibility_battery_level_charging_paused_with_estimate,
                    90,
@@ -243,7 +234,8 @@ class BatteryMeterViewTest : SysuiTestCase() {

        // Just estimate
        mBatteryMeterView.onIsBatteryDefenderChanged(false)
        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(
                context.getString(
                    R.string.accessibility_battery_level_with_estimate,
                    90,
@@ -253,21 +245,18 @@ class BatteryMeterViewTest : SysuiTestCase() {

        // Just percent
        mBatteryMeterView.setPercentShowMode(BatteryMeterView.MODE_ON)
        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level, 90)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level, 90))

        // Charging
        mBatteryMeterView.onBatteryLevelChanged(90, true)
        assertThat(mBatteryMeterView.contentDescription).isEqualTo(
                context.getString(R.string.accessibility_battery_level_charging, 90)
        )
        assertThat(mBatteryMeterView.contentDescription)
            .isEqualTo(context.getString(R.string.accessibility_battery_level_charging, 90))
    }

    @Test
    @DisableFlags(FLAG_NEW_STATUS_BAR_ICONS)
    fun isBatteryDefenderChanged_true_drawableGetsTrue_flagOff() {
        mBatteryMeterView.setDisplayShieldEnabled(true)
        val drawable = getBatteryDrawable()

        mBatteryMeterView.onIsBatteryDefenderChanged(true)
@@ -278,8 +267,6 @@ class BatteryMeterViewTest : SysuiTestCase() {
    @Test
    @EnableFlags(FLAG_NEW_STATUS_BAR_ICONS)
    fun isBatteryDefenderChanged_true_drawableGetsTrue_flagOn() {
        mBatteryMeterView.setDisplayShieldEnabled(true)

        mBatteryMeterView.onIsBatteryDefenderChanged(true)

        assertThat(mBatteryMeterView.unifiedBatteryState.attribution).isNotNull()
@@ -288,7 +275,6 @@ class BatteryMeterViewTest : SysuiTestCase() {
    @Test
    @DisableFlags(FLAG_NEW_STATUS_BAR_ICONS)
    fun isBatteryDefenderChanged_false_drawableGetsFalse_flagOff() {
        mBatteryMeterView.setDisplayShieldEnabled(true)
        val drawable = getBatteryDrawable()

        // Start as true
@@ -303,8 +289,6 @@ class BatteryMeterViewTest : SysuiTestCase() {
    @Test
    @EnableFlags(FLAG_NEW_STATUS_BAR_ICONS)
    fun isBatteryDefenderChanged_false_drawableGetsFalse_flagOn() {
        mBatteryMeterView.setDisplayShieldEnabled(true)

        // Start as true
        mBatteryMeterView.onIsBatteryDefenderChanged(true)

@@ -314,27 +298,6 @@ class BatteryMeterViewTest : SysuiTestCase() {
        assertThat(mBatteryMeterView.unifiedBatteryState.attribution).isNull()
    }

    @Test
    @DisableFlags(FLAG_NEW_STATUS_BAR_ICONS)
    fun isBatteryDefenderChanged_true_featureflagOff_drawableGetsFalse_flagOff() {
        mBatteryMeterView.setDisplayShieldEnabled(false)
        val drawable = getBatteryDrawable()

        mBatteryMeterView.onIsBatteryDefenderChanged(true)

        assertThat(drawable.displayShield).isFalse()
    }

    @Test
    @EnableFlags(FLAG_NEW_STATUS_BAR_ICONS)
    fun isBatteryDefenderChanged_true_featureflagOff_drawableGetsFalse_flagOn() {
        mBatteryMeterView.setDisplayShieldEnabled(false)

        mBatteryMeterView.onIsBatteryDefenderChanged(true)

        assertThat(mBatteryMeterView.unifiedBatteryState.attribution).isNull()
    }

    @Test
    @DisableFlags(FLAG_NEW_STATUS_BAR_ICONS)
    fun isIncompatibleChargingChanged_true_drawableGetsChargingFalse_flagOff() {
@@ -381,8 +344,8 @@ class BatteryMeterViewTest : SysuiTestCase() {
    }

    private fun getBatteryDrawable(): AccessorizedBatteryDrawable {
        return (mBatteryMeterView.getChildAt(0) as ImageView)
                .drawable as AccessorizedBatteryDrawable
        return (mBatteryMeterView.getChildAt(0) as ImageView).drawable
            as AccessorizedBatteryDrawable
    }

    private class Fetcher : BatteryEstimateFetcher {