OSDN Git Service

Add quickUpdate method to BatteryHeaderPrefCtrl
authorjackqdyulei <jackqdyulei@google.com>
Tue, 27 Jun 2017 00:54:09 +0000 (17:54 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Tue, 27 Jun 2017 20:35:41 +0000 (13:35 -0700)
This cl adds a method called quickUpdateHeaderPreference, which will
update the following items immediately without waiting for the
BatteryInfo:
1. Battery level
2. Battery charging status(whether to show lighting bolt)
3. Clear the charging summary

Note: this cl doesn't optimize the BatteryInfo loading time.

This cl also rename "TimeText" to "BatteryPercentText" because in
new UI that textview is used to display battery percentage.

Bug: 63029231
Test: RunSettingsRoboTests
Change-Id: I8cc886b35e937d73b46e47e303ff0994ccdcb61c

src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
src/com/android/settings/fuelgauge/BatteryMeterView.java
src/com/android/settings/fuelgauge/PowerUsageSummary.java
tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java

index bdd2413..079ab29 100644 (file)
@@ -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;
@@ -46,7 +47,7 @@ public class BatteryHeaderPreferenceController extends PreferenceController
     @VisibleForTesting
     BatteryMeterView mBatteryMeterView;
     @VisibleForTesting
-    TextView mTimeText;
+    TextView mBatteryPercentText;
     @VisibleForTesting
     TextView mSummary1;
     @VisibleForTesting
@@ -75,16 +76,11 @@ public class BatteryHeaderPreferenceController extends PreferenceController
         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
@@ -106,7 +102,7 @@ public class BatteryHeaderPreferenceController extends PreferenceController
     }
 
     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 {
@@ -119,4 +115,21 @@ public class BatteryHeaderPreferenceController extends PreferenceController
         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("");
+    }
 }
index 09f7c7a..353b3d7 100644 (file)
@@ -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 {
index 26dac41..60a48ff 100644 (file)
@@ -856,6 +856,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;
index 18c09b0..013d379 100644 (file)
@@ -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%");
+    }
 }