From cbefbc261f7f1f9d6a12909e66d1764a3c1031a9 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Mon, 19 Jun 2017 10:33:41 -0700 Subject: [PATCH] Add info string to advanced battery usage page This CL adds an FYI string under the battery graph to let users know that their current estimate is coming from the enhanced estimate provider when it is enabled. Test: Robotests Bug: 38399654 Change-Id: If5cd622ef0251a5a483cef870fc2261369e14845 --- res/layout/battery_usage_graph.xml | 7 +++++ .../fuelgauge/BatteryHistoryPreference.java | 26 +++++++++++++++++ .../fuelgauge/PowerUsageAdvanced.java | 12 ++++++-- .../fuelgauge/PowerUsageFeatureProvider.java | 6 ++++ .../PowerUsageFeatureProviderImpl.java | 5 ++++ .../BatteryHistoryPreferenceTest.java | 22 +++++++++++++++ .../fuelgauge/PowerUsageAdvancedTest.java | 28 +++++++++++++++++++ 7 files changed, 104 insertions(+), 2 deletions(-) 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()); + } }