Merge "Add info string to advanced battery usage page" into oc-dr1-dev
am: 94d0a9c554

Change-Id: If9b2ac97f41d55cf93dc33bbf129d56dfd9de225
diff --git a/res/layout/battery_usage_graph.xml b/res/layout/battery_usage_graph.xml
index 1ab848e..f46ac6a 100644
--- a/res/layout/battery_usage_graph.xml
+++ b/res/layout/battery_usage_graph.xml
@@ -43,4 +43,11 @@
         android:gravity="end"
         settings:textColor="?android:attr/textColorSecondary" />
 
+    <TextView
+        android:id="@+id/bottom_summary"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="16dp"
+        android:textAppearance="?android:attr/textAppearanceSmall" />
+
 </LinearLayout>
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
index 920f0e2..2927002 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
@@ -21,6 +21,7 @@
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
+import android.view.View;
 import android.widget.TextView;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.R;
@@ -32,6 +33,10 @@
  */
 public class BatteryHistoryPreference extends Preference {
 
+    private CharSequence mSummary;
+    private TextView mSummaryView;
+    private boolean hideSummary;
+
     @VisibleForTesting
     BatteryInfo mBatteryInfo;
 
@@ -48,6 +53,20 @@
         }, batteryStats.getStats(), false);
     }
 
+    public void setBottomSummary(CharSequence text) {
+        mSummary = text;
+        if (mSummaryView != null) {
+            mSummaryView.setText(mSummary);
+        }
+    }
+
+    public void hideBottomSummary() {
+        if (mSummaryView != null) {
+            mSummaryView.setVisibility(View.GONE);
+        }
+        hideSummary = true;
+    }
+
     @Override
     public void onBindViewHolder(PreferenceViewHolder view) {
         super.onBindViewHolder(view);
@@ -56,6 +75,13 @@
         }
 
         ((TextView) view.findViewById(R.id.charge)).setText(mBatteryInfo.batteryPercentString);
+        mSummaryView = (TextView) view.findViewById(R.id.bottom_summary);
+        if (mSummary != null) {
+            mSummaryView.setText(mSummary);
+        }
+        if (hideSummary) {
+            mSummaryView.setVisibility(View.GONE);
+        }
         UsageView usageView = (UsageView) view.findViewById(R.id.battery_usage);
         usageView.findViewById(R.id.label_group).setAlpha(.7f);
         mBatteryInfo.bindHistory(usageView);
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 0940e19..fc83bed 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -69,9 +69,9 @@
             UsageType.UNACCOUNTED,
             UsageType.OVERCOUNTED};
 
+    @VisibleForTesting BatteryHistoryPreference mHistPref;
+    @VisibleForTesting PreferenceGroup mUsageListGroup;
     private BatteryUtils mBatteryUtils;
-    private BatteryHistoryPreference mHistPref;
-    private PreferenceGroup mUsageListGroup;
     private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
     private PackageManager mPackageManager;
     private UserManager mUserManager;
@@ -170,6 +170,14 @@
         }
         updatePreference(mHistPref);
         refreshPowerUsageDataList(mStatsHelper, mUsageListGroup);
+
+        if (mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) {
+            mHistPref.setBottomSummary(
+                    mPowerUsageFeatureProvider.getAdvancedUsageScreenInfoString());
+        } else {
+            mHistPref.hideBottomSummary();
+        }
+
         BatteryEntry.startRequestQueue();
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index e003e6d..732db23 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -113,4 +113,10 @@
      * @return A string containing the estimate and a label indicating it is a normal estimate
      */
     String getOldEstimateDebugString(String timeRemaining);
+
+    /**
+     * Returns the string to show in the advanced usage battery page when enhanced estimates are
+     * enabled. This string notifies users that the estimate is using enhanced prediction.
+     */
+    String getAdvancedUsageScreenInfoString();
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index c43eebd..1d8e03a 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -132,4 +132,9 @@
     public String getOldEstimateDebugString(String timeRemaining) {
         return null;
     }
+
+    @Override
+    public String getAdvancedUsageScreenInfoString() {
+        return null;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
index 5a5e28d..4f8f222 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
@@ -15,6 +15,7 @@
  */
 package com.android.settings.fuelgauge;
 
+import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.spy;
@@ -49,6 +50,7 @@
                 SettingsShadowResources.SettingsShadowTheme.class
         })
 public class BatteryHistoryPreferenceTest {
+    public static final String TEST_STRING = "test";
     @Mock
     private PreferenceViewHolder mViewHolder;
     @Mock
@@ -86,4 +88,24 @@
         verify(mTextView).setText(nullable(String.class));
         verify(mBatteryInfo).bindHistory(mUsageView);
     }
+
+    @Test
+    public void testSetBottomSummary_updatesBottomSummaryTextIfSet() {
+        mBatteryHistoryPreference.setBottomSummary(TEST_STRING);
+        mBatteryHistoryPreference.onBindViewHolder(mViewHolder);
+
+        TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary);
+        assertThat(view.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(view.getText()).isEqualTo(TEST_STRING);
+    }
+
+    @Test
+    public void testSetBottomSummary_leavesBottomSummaryTextBlankIfNotSet() {
+        mBatteryHistoryPreference.hideBottomSummary();
+        mBatteryHistoryPreference.onBindViewHolder(mViewHolder);
+
+        TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary);
+        assertThat(view.getVisibility()).isEqualTo(View.GONE);
+        assertThat(view.getText()).isEqualTo("");
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
index 8831a6c..7ab505d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
@@ -20,7 +20,9 @@
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -81,6 +83,10 @@
     private PackageManager mPackageManager;
     @Mock
     private UserManager mUserManager;
+    @Mock
+    private BatteryHistoryPreference mHistPref;
+    @Mock
+    private PreferenceGroup mUsageListGroup;
     private PowerUsageAdvanced mPowerUsageAdvanced;
     private PowerUsageData mPowerUsageData;
     private Context mShadowContext;
@@ -352,4 +358,26 @@
         assertThat(mPowerUsageAdvanced.calculateHiddenPower(powerUsageDataList)).isWithin(
                 PRECISION).of(unaccountedPower);
     }
+
+    @Test
+    public void testRefreshUi_addsSubtextWhenAppropriate() {
+        // Mock out all the battery stuff
+        mPowerUsageAdvanced.mHistPref = mHistPref;
+        mPowerUsageAdvanced.mStatsHelper = mBatteryStatsHelper;
+        doReturn(new ArrayList<PowerUsageData>())
+                .when(mPowerUsageAdvanced).parsePowerUsageData(any());
+        doReturn("").when(mPowerUsageAdvanced).getString(anyInt());
+        mPowerUsageAdvanced.mUsageListGroup = mUsageListGroup;
+
+        // refresh the ui and check that text was not updated when enhanced prediction disabled
+        when(mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(any()))
+                .thenReturn(false);
+        mPowerUsageAdvanced.refreshUi();
+        verify(mHistPref, never()).setBottomSummary(any());
+
+        // refresh the ui and check that text was updated when enhanced prediction enabled
+        when(mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(any())).thenReturn(true);
+        mPowerUsageAdvanced.refreshUi();
+        verify(mHistPref, atLeastOnce()).setBottomSummary(any());
+    }
 }