From 27e9617c168f39220a01bc545b8866c62b864bf2 Mon Sep 17 00:00:00 2001 From: Weien Wang Date: Mon, 21 May 2018 12:10:11 +0800 Subject: [PATCH] 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 --- .../BatteryHeaderPreferenceController.java | 5 +++++ .../settings/fuelgauge/BatteryMeterView.java | 10 +++++++++ ...BatteryHeaderPreferenceControllerTest.java | 21 ++++++++++++++++++- .../fuelgauge/BatteryMeterViewTest.java | 7 +++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java index 7038fade345..d1ce8b8c361 100644 --- a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java @@ -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 diff --git a/src/com/android/settings/fuelgauge/BatteryMeterView.java b/src/com/android/settings/fuelgauge/BatteryMeterView.java index bd7586b219f..35045c80247 100644 --- a/src/com/android/settings/fuelgauge/BatteryMeterView.java +++ b/src/com/android/settings/fuelgauge/BatteryMeterView.java @@ -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(); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java index 8f94ffb6412..0647887dcc7 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java @@ -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); + } + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java index bc91e17b204..3497e439639 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java @@ -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); + } }