diff --git a/res/layout/battery_usage_graph.xml b/res/layout/battery_usage_graph.xml
index 1ab848edcf6..f46ac6afae8 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" />
+
+
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
index 920f0e22fbc..2927002eed1 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
@@ -21,6 +21,7 @@ import android.support.annotation.VisibleForTesting;
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 @@ import com.android.settings.graph.UsageView;
*/
public class BatteryHistoryPreference extends Preference {
+ private CharSequence mSummary;
+ private TextView mSummaryView;
+ private boolean hideSummary;
+
@VisibleForTesting
BatteryInfo mBatteryInfo;
@@ -48,6 +53,20 @@ public class BatteryHistoryPreference extends Preference {
}, 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 @@ public class BatteryHistoryPreference extends Preference {
}
((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 0940e19d480..fc83bedf6e3 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -69,9 +69,9 @@ public class PowerUsageAdvanced extends PowerUsageBase {
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 @@ public class PowerUsageAdvanced extends PowerUsageBase {
}
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 e003e6d806f..732db23b780 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -113,4 +113,10 @@ public interface PowerUsageFeatureProvider {
* @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 c43eebd2034..1d8e03ac7b5 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -132,4 +132,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
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 5a5e28db2f8..4f8f2221da8 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 @@ import org.robolectric.annotation.Config;
SettingsShadowResources.SettingsShadowTheme.class
})
public class BatteryHistoryPreferenceTest {
+ public static final String TEST_STRING = "test";
@Mock
private PreferenceViewHolder mViewHolder;
@Mock
@@ -86,4 +88,24 @@ public class BatteryHistoryPreferenceTest {
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 8831a6c4791..7ab505d6652 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 com.google.common.truth.Truth.assertThat;
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 @@ public class PowerUsageAdvancedTest {
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 @@ public class PowerUsageAdvancedTest {
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())
+ .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());
+ }
}