diff --git a/res/values/strings.xml b/res/values/strings.xml index 1b13e2b63e9..6900f0a8b94 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7051,6 +7051,12 @@ Usage alerts + + Show all apps + + + Hide extra apps + Not optimized diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index 4bcdc922e3d..3dab38e062c 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -46,4 +46,9 @@ public interface PowerUsageFeatureProvider { * Check whether it is type service */ boolean isTypeService(String[] packages); + + /** + * Check whether the toggle for power accounting is enabled + */ + boolean isPowerAccountingToggleEnabled(); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index 644294560c6..7f843e201d1 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -43,4 +43,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider public boolean isTypeService(String[] packages) { return false; } + + @Override + public boolean isPowerAccountingToggleEnabled() { + return false; + } } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 92bfd031e7e..44499109809 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -72,31 +72,32 @@ import java.util.List; */ public class PowerUsageSummary extends PowerUsageBase { - private static final boolean DEBUG = false; - - private static final boolean USE_FAKE_DATA = false; - static final String TAG = "PowerUsageSummary"; + private static final boolean DEBUG = false; + private static final boolean USE_FAKE_DATA = false; private static final String KEY_APP_LIST = "app_list"; private static final String KEY_BATTERY_HEADER = "battery_header"; + private static final int MIN_POWER_THRESHOLD_MILLI_AMP = 5; + private static final int MAX_ITEMS_TO_LIST = USE_FAKE_DATA ? 30 : 10; + private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10; + private static final int SECONDS_IN_HOUR = 60 * 60; private static final int MENU_STATS_TYPE = Menu.FIRST; private static final int MENU_HIGH_POWER_APPS = Menu.FIRST + 3; @VisibleForTesting static final int MENU_ADDITIONAL_BATTERY_INFO = Menu.FIRST + 4; - private static final int MENU_HELP = Menu.FIRST + 5; + @VisibleForTesting + static final int MENU_TOGGLE_APPS = Menu.FIRST + 5; + private static final int MENU_HELP = Menu.FIRST + 6; + @VisibleForTesting + boolean mShowAllApps = false; private LayoutPreference mBatteryLayoutPref; private PreferenceGroup mAppListGroup; private int mStatsType = BatteryStats.STATS_SINCE_CHARGED; - private static final int MIN_POWER_THRESHOLD_MILLI_AMP = 5; - private static final int MAX_ITEMS_TO_LIST = USE_FAKE_DATA ? 30 : 10; - private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10; - private static final int SECONDS_IN_HOUR = 60 * 60; - @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -183,6 +184,11 @@ public class PowerUsageSummary extends PowerUsageBase { menu.add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO, Menu.NONE, R.string.additional_battery_info); } + if (powerUsageFeatureProvider.isPowerAccountingToggleEnabled()) { + menu.add(Menu.NONE, MENU_TOGGLE_APPS, Menu.NONE, + mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps); + } + super.onCreateOptionsMenu(menu, inflater); } @@ -215,6 +221,11 @@ public class PowerUsageSummary extends PowerUsageBase { .getPowerUsageFeatureProvider(getContext()) .getAdditionalBatteryInfoIntent()); return true; + case MENU_TOGGLE_APPS: + mShowAllApps = !mShowAllApps; + item.setTitle(mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps); + refreshStats(); + return true; default: return super.onOptionsItemSelected(item); } @@ -378,7 +389,7 @@ public class PowerUsageSummary extends PowerUsageBase { final List usageList = getCoalescedUsageList( USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList()); - final double hiddenPowerMah = removeHiddenBatterySippers(usageList); + double hiddenPowerMah = mShowAllApps ? 0 : removeHiddenBatterySippers(usageList); final int dischargeAmount = USE_FAKE_DATA ? 5000 : stats != null ? stats.getDischargeAmount(mStatsType) : 0; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index ec850cdf490..dd849737cbd 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -47,6 +47,7 @@ import java.util.List; import static com.android.settings.fuelgauge.PowerUsageBase.MENU_STATS_REFRESH; import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_BATTERY_INFO; +import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_TOGGLE_APPS; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.never; @@ -81,6 +82,8 @@ public class PowerUsageSummaryTest { @Mock private MenuItem mAdditionalBatteryInfoMenu; @Mock + private MenuItem mToggleAppsMenu; + @Mock private MenuInflater mMenuInflater; @Mock private BatterySipper mNormalBatterySipper; @@ -123,6 +126,7 @@ public class PowerUsageSummaryTest { .thenReturn(mRefreshMenu); when(mAdditionalBatteryInfoMenu.getItemId()) .thenReturn(MENU_ADDITIONAL_BATTERY_INFO); + when(mToggleAppsMenu.getItemId()).thenReturn(MENU_TOGGLE_APPS); when(mFeatureFactory.powerUsageFeatureProvider.getAdditionalBatteryInfoIntent()) .thenReturn(ADDITIONAL_BATTERY_INFO_INTENT); @@ -173,6 +177,23 @@ public class PowerUsageSummaryTest { Menu.NONE, R.string.additional_battery_info); } + @Test + public void testOptionsMenu_ToggleAppsEnabled() { + when(mFeatureFactory.powerUsageFeatureProvider.isPowerAccountingToggleEnabled()) + .thenReturn(true); + mFragment.mShowAllApps = false; + + mFragment.onCreateOptionsMenu(mMenu, mMenuInflater); + + verify(mMenu).add(Menu.NONE, MENU_TOGGLE_APPS, Menu.NONE, R.string.show_all_apps); + } + + @Test + public void testOptionsMenu_ClickToggleAppsMenu_DataChanged() { + testToggleAllApps(true); + testToggleAllApps(false); + } + @Test public void testExtractKeyFromSipper_TypeAPPUidObjectNull_ReturnPackageNames() { mNormalBatterySipper.uidObj = null; @@ -305,6 +326,13 @@ public class PowerUsageSummaryTest { verify(mSummary1).setText(R.string.estimated_time_left); } + private void testToggleAllApps(final boolean isShowApps) { + mFragment.mShowAllApps = isShowApps; + + mFragment.onOptionsItemSelected(mToggleAppsMenu); + assertThat(mFragment.mShowAllApps).isEqualTo(!isShowApps); + } + public static class TestFragment extends PowerUsageSummary { private Context mContext; @@ -325,5 +353,10 @@ public class PowerUsageSummaryTest { mStartActivityCalled = true; mStartActivityIntent = intent; } + + @Override + protected void refreshStats() { + // Leave it empty for toggle apps menu test + } } }