From 1e0f8ff5e549636e98b7fa0f12761be934f8f36b Mon Sep 17 00:00:00 2001 From: Jaewoong Jung Date: Mon, 12 Dec 2016 17:32:31 -0800 Subject: [PATCH] Adds a menu item for additional battery info to battery settings. Bug: 33352540 Test: No additional test failures. Change-Id: Ibfc1a9463c93d3c087ed712fe45d3d0717472c6a --- res/values/strings.xml | 3 + .../settings/fuelgauge/PowerUsageBase.java | 4 +- .../settings/fuelgauge/PowerUsageDetail.java | 8 +- .../fuelgauge/PowerUsageFeatureProvider.java | 2 + .../settings/fuelgauge/PowerUsageSummary.java | 18 +++- .../settings/overlay/FeatureFactory.java | 2 +- .../settings/overlay/FeatureFactoryImpl.java | 2 +- .../fuelgauge/PowerUsageSummaryTest.java | 94 +++++++++++++++++++ .../testutils/FakeFeatureFactory.java | 2 +- 9 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 4d872b1b278..1ea9c561050 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6985,6 +6985,9 @@ Battery optimization + + Additional battery info + Not optimized diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java index 269249ac3ad..1af9df1d372 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageBase.java +++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java @@ -25,6 +25,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.UserManager; +import android.support.annotation.VisibleForTesting; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -39,7 +40,8 @@ import com.android.settings.SettingsPreferenceFragment; public abstract class PowerUsageBase extends SettingsPreferenceFragment { // +1 to allow ordering for PowerUsageSummary. - private static final int MENU_STATS_REFRESH = Menu.FIRST + 1; + @VisibleForTesting + static final int MENU_STATS_REFRESH = Menu.FIRST + 1; protected BatteryStatsHelper mStatsHelper; protected UserManager mUm; diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java index 003c7f684bd..5f9a305bc86 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java @@ -350,8 +350,10 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - mPm = getActivity().getPackageManager(); - mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE); + + Activity activity = getActivity(); + mPm = activity.getPackageManager(); + mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE); addPreferencesFromResource(R.xml.power_usage_details); mDetailsParent = (PreferenceCategory) findPreference(KEY_DETAILS_PARENT); @@ -360,7 +362,7 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi mPackagesParent = (PreferenceCategory) findPreference(KEY_PACKAGES_PARENT); mPowerUsageFeatureProvider = - FeatureFactory.getFactory(getActivity()).getPowerUsageFeatureProvider(); + FeatureFactory.getFactory(activity).getPowerUsageFeatureProvider(activity); createDetails(); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index f58f635ec68..2219e3396bf 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -24,4 +24,6 @@ public interface PowerUsageFeatureProvider { * Check whether location setting is enabled */ boolean isLocationSettingEnabled(String[] packages); + + boolean isAdditionalBatteryInfoEnabled(); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 3ed9bee24b9..1100a2caec2 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -26,6 +26,7 @@ import android.os.Handler; import android.os.Message; import android.os.Process; import android.os.UserHandle; +import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.text.TextUtils; @@ -43,6 +44,7 @@ import com.android.settings.Settings.HighPowerApplicationsActivity; import com.android.settings.SettingsActivity; import com.android.settings.applications.ManageApplications; import com.android.settings.dashboard.SummaryLoader; +import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.BatteryInfo; import java.util.ArrayList; @@ -67,7 +69,9 @@ public class PowerUsageSummary extends PowerUsageBase { private static final int MENU_STATS_TYPE = Menu.FIRST; private static final int MENU_HIGH_POWER_APPS = Menu.FIRST + 3; - private static final int MENU_HELP = Menu.FIRST + 4; + @VisibleForTesting + static final int MENU_ADDITIONAL_BATTERY_INFO = Menu.FIRST + 4; + private static final int MENU_HELP = Menu.FIRST + 5; private BatteryHistoryPreference mHistPref; private PreferenceGroup mAppListGroup; @@ -130,12 +134,20 @@ public class PowerUsageSummary extends PowerUsageBase { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if (DEBUG) { - menu.add(0, MENU_STATS_TYPE, 0, R.string.menu_stats_total) + menu.add(Menu.NONE, MENU_STATS_TYPE, Menu.NONE, R.string.menu_stats_total) .setIcon(com.android.internal.R.drawable.ic_menu_info_details) .setAlphabeticShortcut('t'); } - menu.add(0, MENU_HIGH_POWER_APPS, 0, R.string.high_power_apps); + menu.add(Menu.NONE, MENU_HIGH_POWER_APPS, Menu.NONE, R.string.high_power_apps); + + PowerUsageFeatureProvider powerUsageFeatureProvider = + FeatureFactory.getFactory(getContext()).getPowerUsageFeatureProvider(getContext()); + if (powerUsageFeatureProvider != null && + powerUsageFeatureProvider.isAdditionalBatteryInfoEnabled()) { + menu.add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO, + Menu.NONE, R.string.additional_battery_info); + } super.onCreateOptionsMenu(menu, inflater); } diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java index 35322742571..364d5ed31e8 100644 --- a/src/com/android/settings/overlay/FeatureFactory.java +++ b/src/com/android/settings/overlay/FeatureFactory.java @@ -70,7 +70,7 @@ public abstract class FeatureFactory { public abstract MetricsFeatureProvider getMetricsFeatureProvider(); - public abstract PowerUsageFeatureProvider getPowerUsageFeatureProvider(); + public abstract PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context); public abstract DashboardFeatureProvider getDashboardFeatureProvider(Context context); diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java index 313c2703b4b..2aa9b34ca86 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.java +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java @@ -63,7 +63,7 @@ public class FeatureFactoryImpl extends FeatureFactory { } @Override - public PowerUsageFeatureProvider getPowerUsageFeatureProvider() { + public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) { return null; } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java new file mode 100644 index 00000000000..ba4a9e38a45 --- /dev/null +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -0,0 +1,94 @@ +package com.android.settings.fuelgauge; + +import android.content.Context; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.FakeFeatureFactory; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import static com.android.settings.fuelgauge.PowerUsageBase.MENU_STATS_REFRESH; +import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_BATTERY_INFO; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * Unit tests for {@link PowerUsageSummary}. + */ +@RunWith(RobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class PowerUsageSummaryTest { + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Context mContext; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Menu mMenu; + @Mock + private MenuItem mRefresh; + @Mock + private MenuInflater mMenuInflater; + + private TestFragment mFragment; + private FakeFeatureFactory mFeatureFactory; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + FakeFeatureFactory.setupForTest(mContext); + mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); + + mFragment = new TestFragment(mContext); + + when(mMenu.add(Menu.NONE, PowerUsageBase.MENU_STATS_REFRESH, Menu.NONE, + R.string.menu_stats_refresh) + .setIcon(com.android.internal.R.drawable.ic_menu_refresh) + .setAlphabeticShortcut('r')) + .thenReturn(mRefresh); + } + + @Test + public void testOnCreateOptionsMenu_additionalBatteryInfoEnabled() { + when(mFeatureFactory.powerUsageFeatureProvider.isAdditionalBatteryInfoEnabled()) + .thenReturn(true); + + mFragment.onCreateOptionsMenu(mMenu, mMenuInflater); + + verify(mMenu).add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO, + Menu.NONE, R.string.additional_battery_info); + } + + @Test + public void testOnCreateOptionsMenu_additionalBatteryInfoDisabled() { + when(mFeatureFactory.powerUsageFeatureProvider.isAdditionalBatteryInfoEnabled()) + .thenReturn(false); + + mFragment.onCreateOptionsMenu(mMenu, mMenuInflater); + + verify(mMenu, never()).add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO, + Menu.NONE, R.string.additional_battery_info); + } + + public static class TestFragment extends PowerUsageSummary { + + private Context mContext; + + public TestFragment(Context context) { + mContext = context; + } + + @Override + public Context getContext() { + return mContext; + } + } +} diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java index dc63ca616c0..a9c1764129a 100644 --- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -91,7 +91,7 @@ public class FakeFeatureFactory extends FeatureFactory { } @Override - public PowerUsageFeatureProvider getPowerUsageFeatureProvider() { + public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) { return powerUsageFeatureProvider; }