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

Commit 27e9617c authored by Weien Wang's avatar Weien Wang
Browse files

Fix the battery icon on the battery page when low battery

Check power-saving state for drawing the battery icon on the battery page.
It will draw red + icon as status-bar did when battery saver is on.

Change-Id: Iee4a17c8e5cb3c8ee5d978eb23e3980597d09a1c
Fixes: 77150820
Test: Manual test, atest BatteryMeterViewTest BatteryHeaderPreferenceControllerTest
parent 429c7871
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.PowerManager;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceFragment;
import androidx.preference.PreferenceScreen;
@@ -57,6 +58,7 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl
    private final Activity mActivity;
    private final PreferenceFragment mHost;
    private final Lifecycle mLifecycle;
    private final PowerManager mPowerManager;

    private LayoutPreference mBatteryLayoutPref;

@@ -69,6 +71,7 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl
        if (mLifecycle != null) {
            mLifecycle.addObserver(this);
        }
        mPowerManager = context.getSystemService(PowerManager.class);
    }

    @Override
@@ -115,6 +118,7 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl

        mBatteryMeterView.setBatteryLevel(info.batteryLevel);
        mBatteryMeterView.setCharging(!info.discharging);
        mBatteryMeterView.setPowerSave(mPowerManager.isPowerSaveMode());
    }

    public void quickUpdateHeaderPreference() {
@@ -127,6 +131,7 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl
        // Set battery level and charging status
        mBatteryMeterView.setBatteryLevel(batteryLevel);
        mBatteryMeterView.setCharging(!discharging);
        mBatteryMeterView.setPowerSave(mPowerManager.isPowerSaveMode());
        mBatteryPercentText.setText(Utils.formatPercentage(batteryLevel));

        // clear all the summaries
+10 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ public class BatteryMeterView extends ImageView {
    ColorFilter mErrorColorFilter;
    @VisibleForTesting
    ColorFilter mAccentColorFilter;
    private boolean mPowerSaveEnabled;

    public BatteryMeterView(Context context) {
        this(context, null, 0);
@@ -73,6 +74,15 @@ public class BatteryMeterView extends ImageView {
        }
    }

    public void setPowerSave(boolean powerSave) {
        mDrawable.setPowerSave(powerSave);
        mPowerSaveEnabled = powerSave;
    }

    public boolean getPowerSave() {
        return mPowerSaveEnabled;
    }

    public int getBatteryLevel() {
        return mDrawable.getBatteryLevel();
    }
+20 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;

import android.app.Activity;
import androidx.lifecycle.LifecycleOwner;
@@ -33,6 +34,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import androidx.preference.PreferenceFragment;
import android.os.PowerManager;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
import android.widget.TextView;
@@ -52,8 +54,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowPowerManager;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = {
@@ -80,6 +83,7 @@ public class BatteryHeaderPreferenceControllerTest {
    private EntityHeaderController mEntityHeaderController;
    private BatteryHeaderPreferenceController mController;
    private Context mContext;
    private PowerManager mPowerManager;
    private BatteryMeterView mBatteryMeterView;
    private TextView mBatteryPercentText;
    private TextView mSummary;
@@ -114,6 +118,8 @@ public class BatteryHeaderPreferenceControllerTest {

        mBatteryInfo.batteryLevel = BATTERY_LEVEL;

        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);

        mController = new BatteryHeaderPreferenceController(
                mContext, mActivity, mPreferenceFragment, mLifecycle);
        mController.mBatteryMeterView = mBatteryMeterView;
@@ -187,4 +193,17 @@ public class BatteryHeaderPreferenceControllerTest {
        assertThat(mBatteryMeterView.getCharging()).isTrue();
        assertThat(mBatteryPercentText.getText()).isEqualTo("60%");
    }

    @Test
    public void testQuickUpdateHeaderPreference_showPowerSave() {
        boolean testValues[] = {false, true};

        ShadowPowerManager shadowPowerManager = shadowOf(mPowerManager);
        for (boolean value : testValues) {
            shadowPowerManager.setIsPowerSaveMode(value);
            mController.quickUpdateHeaderPreference();

            assertThat(mBatteryMeterView.getPowerSave()).isEqualTo(value);
        }
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -86,4 +86,11 @@ public class BatteryMeterViewTest {

        verify(mDrawable).setBatteryColorFilter(mAccentColorFilter);
    }

    @Test
    public void testSetBatteryInfo_powerSave_setCorrectly() {
        mBatteryMeterView.setPowerSave(true);

        assertThat(mBatteryMeterView.getPowerSave()).isEqualTo(true);
    }
}