diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java index 4a342ab60a5..139c8f48c93 100644 --- a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java @@ -21,6 +21,7 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.BatteryManager; import android.support.annotation.VisibleForTesting; import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.PreferenceScreen; @@ -47,7 +48,7 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl @VisibleForTesting BatteryMeterView mBatteryMeterView; @VisibleForTesting - TextView mTimeText; + TextView mBatteryPercentText; @VisibleForTesting TextView mSummary1; @VisibleForTesting @@ -76,16 +77,11 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl mBatteryLayoutPref = (LayoutPreference) screen.findPreference(KEY_BATTERY_HEADER); mBatteryMeterView = (BatteryMeterView) mBatteryLayoutPref .findViewById(R.id.battery_header_icon); - mTimeText = mBatteryLayoutPref.findViewById(R.id.battery_percent); + mBatteryPercentText = mBatteryLayoutPref.findViewById(R.id.battery_percent); mSummary1 = mBatteryLayoutPref.findViewById(R.id.summary1); mSummary2 = mBatteryLayoutPref.findViewById(R.id.summary2); - Intent batteryBroadcast = mContext.registerReceiver(null, - new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); - final int batteryLevel = Utils.getBatteryLevel(batteryBroadcast); - - mBatteryMeterView.setBatteryLevel(batteryLevel); - mTimeText.setText(Utils.formatPercentage(batteryLevel)); + quickUpdateHeaderPreference(); } @Override @@ -107,7 +103,7 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl } public void updateHeaderPreference(BatteryInfo info) { - mTimeText.setText(Utils.formatPercentage(info.batteryLevel)); + mBatteryPercentText.setText(Utils.formatPercentage(info.batteryLevel)); if (info.remainingLabel == null) { mSummary1.setText(info.statusLabel); } else { @@ -120,4 +116,21 @@ public class BatteryHeaderPreferenceController extends AbstractPreferenceControl mBatteryMeterView.setBatteryLevel(info.batteryLevel); mBatteryMeterView.setCharging(!info.discharging); } + + public void quickUpdateHeaderPreference() { + Intent batteryBroadcast = mContext.registerReceiver(null, + new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + final int batteryLevel = Utils.getBatteryLevel(batteryBroadcast); + final boolean discharging = + batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0; + + // Set battery level and charging status + mBatteryMeterView.setBatteryLevel(batteryLevel); + mBatteryMeterView.setCharging(!discharging); + mBatteryPercentText.setText(Utils.formatPercentage(batteryLevel)); + + // clear all the summaries + mSummary1.setText(""); + mSummary2.setText(""); + } } diff --git a/src/com/android/settings/fuelgauge/BatteryMeterView.java b/src/com/android/settings/fuelgauge/BatteryMeterView.java index 09f7c7a1475..353b3d7ab69 100644 --- a/src/com/android/settings/fuelgauge/BatteryMeterView.java +++ b/src/com/android/settings/fuelgauge/BatteryMeterView.java @@ -78,6 +78,11 @@ public class BatteryMeterView extends ImageView { public void setCharging(boolean charging) { mDrawable.setCharging(charging); + postInvalidate(); + } + + public boolean getCharging() { + return mDrawable.getCharging(); } public static class BatteryMeterDrawable extends BatteryMeterDrawableBase { diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 48bc52b8a2a..cbd4d43cd7d 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -848,6 +848,12 @@ public class PowerUsageSummary extends PowerUsageBase implements performBatteryHeaderClick(); } + @Override + protected void restartBatteryStatsLoader() { + super.restartBatteryStatsLoader(); + mBatteryHeaderPreferenceController.quickUpdateHeaderPreference(); + } + private static class SummaryProvider implements SummaryLoader.SummaryProvider { private final Context mContext; private final SummaryLoader mLoader; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java index 18c09b0cbd3..013d379b8b1 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java @@ -46,6 +46,7 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; @@ -81,7 +82,7 @@ public class BatteryHeaderPreferenceControllerTest { private BatteryHeaderPreferenceController mController; private Context mContext; private BatteryMeterView mBatteryMeterView; - private TextView mTimeText; + private TextView mBatteryPercentText; private TextView mSummary; private TextView mSummary2; private LayoutPreference mBatteryLayoutPref; @@ -95,7 +96,7 @@ public class BatteryHeaderPreferenceControllerTest { mLifecycle = new Lifecycle(); mContext = spy(RuntimeEnvironment.application); mBatteryMeterView = new BatteryMeterView(mContext); - mTimeText = new TextView(mContext); + mBatteryPercentText = new TextView(mContext); mSummary = new TextView(mContext); ShadowEntityHeaderController.setUseMock(mEntityHeaderController); mSummary2 = new TextView(mContext); @@ -103,6 +104,7 @@ public class BatteryHeaderPreferenceControllerTest { mBatteryIntent = new Intent(); mBatteryIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_LEVEL); mBatteryIntent.putExtra(BatteryManager.EXTRA_SCALE, 100); + mBatteryIntent.putExtra(BatteryManager.EXTRA_PLUGGED, 1); doReturn(mBatteryIntent).when(mContext).registerReceiver(any(), any()); mBatteryLayoutPref = new LayoutPreference(mContext, R.layout.battery_header); @@ -114,7 +116,7 @@ public class BatteryHeaderPreferenceControllerTest { mController = new BatteryHeaderPreferenceController( mContext, mActivity, mPreferenceFragment, mLifecycle); mController.mBatteryMeterView = mBatteryMeterView; - mController.mTimeText = mTimeText; + mController.mBatteryPercentText = mBatteryPercentText; mController.mSummary1 = mSummary; mController.mSummary2 = mSummary2; } @@ -175,4 +177,13 @@ public class BatteryHeaderPreferenceControllerTest { verify(mEntityHeaderController).styleActionBar(mActivity); } + + @Test + public void testQuickUpdateHeaderPreference_showBatteryLevelAndChargingState() { + mController.quickUpdateHeaderPreference(); + + assertThat(mBatteryMeterView.getBatteryLevel()).isEqualTo(BATTERY_LEVEL); + assertThat(mBatteryMeterView.getCharging()).isTrue(); + assertThat(mBatteryPercentText.getText()).isEqualTo("60%"); + } }