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
+ }
}
}