diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java index 89f66bd8806..327a6c58bfa 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java +++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java @@ -171,6 +171,16 @@ public class PowerUsageAdvanced extends PowerUsageBase { sir.xmlResId = R.xml.power_usage_advanced; return Arrays.asList(sir); } + + @Override + public List createPreferenceControllers( + Context context) { + final List controllers = new ArrayList<>(); + controllers.add(new BatteryAppListPreferenceController(context, + KEY_APP_LIST, null /* lifecycle */, null /* activity */, + null /* fragment */)); + return controllers; + } }; } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 8d70e46463f..b64dc526bad 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -39,6 +39,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.LayoutPreference; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.display.BatteryPercentagePreferenceController; import com.android.settings.fuelgauge.anomaly.Anomaly; @@ -49,7 +50,6 @@ import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.utils.PowerUtil; import com.android.settingslib.utils.StringUtil; @@ -68,7 +68,6 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList static final String TAG = "PowerUsageSummary"; private static final boolean DEBUG = false; - private static final String KEY_APP_LIST = "app_list"; private static final String KEY_BATTERY_HEADER = "battery_header"; private static final String KEY_BATTERY_TIP = "battery_tip"; @@ -80,7 +79,10 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList static final int BATTERY_INFO_LOADER = 1; @VisibleForTesting static final int BATTERY_TIP_LOADER = 2; - private static final int MENU_STATS_TYPE = Menu.FIRST; + @VisibleForTesting + static final int MENU_STATS_TYPE = Menu.FIRST; + @VisibleForTesting + static final int MENU_ADVANCED_BATTERY = Menu.FIRST + 1; public static final int DEBUG_INFO_LOADER = 3; @VisibleForTesting @@ -246,6 +248,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList .setAlphabeticShortcut('t'); } + menu.add(Menu.NONE, MENU_ADVANCED_BATTERY, Menu.NONE, R.string.advanced_battery_title); + super.onCreateOptionsMenu(menu, inflater); } @@ -256,11 +260,6 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList @Override public boolean onOptionsItemSelected(MenuItem item) { - final SettingsActivity sa = (SettingsActivity) getActivity(); - final Context context = getContext(); - final MetricsFeatureProvider metricsFeatureProvider = - FeatureFactory.getFactory(context).getMetricsFeatureProvider(); - switch (item.getItemId()) { case MENU_STATS_TYPE: if (mStatsType == BatteryStats.STATS_SINCE_CHARGED) { @@ -270,6 +269,13 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList } refreshUi(); return true; + case MENU_ADVANCED_BATTERY: + new SubSettingLauncher(getContext()) + .setDestination(PowerUsageAdvanced.class.getName()) + .setSourceMetricsCategory(getMetricsCategory()) + .setTitle(R.string.advanced_battery_title) + .launch(); + return true; default: return super.onOptionsItemSelected(item); } diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java index b9f4db2d017..1798d34e303 100644 --- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java +++ b/src/com/android/settings/search/SearchIndexableResourcesImpl.java @@ -49,6 +49,7 @@ import com.android.settings.display.NightDisplaySettings; import com.android.settings.display.ScreenZoomSettings; import com.android.settings.dream.DreamSettings; import com.android.settings.enterprise.EnterprisePrivacySettings; +import com.android.settings.fuelgauge.PowerUsageAdvanced; import com.android.settings.fuelgauge.PowerUsageAdvancedLegacy; import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; @@ -121,6 +122,7 @@ public class SearchIndexableResourcesImpl implements SearchIndexableResources { addIndex(SoundSettings.class); addIndex(ZenModeSettings.class); addIndex(StorageSettings.class); + addIndex(PowerUsageAdvanced.class); addIndex(PowerUsageAdvancedLegacy.class); addIndex(DefaultAppSettings.class); addIndex(ManageAssist.class); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java index eba62522b80..4a905b4603a 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java @@ -34,7 +34,6 @@ import android.view.MenuItem; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; -import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -45,10 +44,8 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class PowerUsageAdvancedTest { @Mock private PreferenceScreen mPreferenceScreen; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index 7f6e39d4096..6176bef4544 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -15,6 +15,8 @@ */ package com.android.settings.fuelgauge; +import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADVANCED_BATTERY; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; @@ -35,6 +37,8 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.SparseArray; +import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.TextView; @@ -53,7 +57,6 @@ import com.android.settingslib.core.AbstractPreferenceController; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; @@ -114,6 +117,12 @@ public class PowerUsageSummaryTest { private LoaderManager mLoaderManager; @Mock private BatteryHeaderPreferenceController mBatteryHeaderPreferenceController; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Menu mMenu; + @Mock + private MenuInflater mMenuInflater; + @Mock + private MenuItem mAdvancedPageMenu; private List mUsageList; private Context mRealContext; @@ -122,12 +131,13 @@ public class PowerUsageSummaryTest { private BatteryMeterView mBatteryMeterView; private PowerGaugePreference mScreenUsagePref; private PowerGaugePreference mLastFullChargePref; + private Intent mIntent; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mRealContext = RuntimeEnvironment.application; + mRealContext = spy(RuntimeEnvironment.application); mFeatureFactory = FakeFeatureFactory.setupForTest(); mScreenUsagePref = new PowerGaugePreference(mRealContext); mLastFullChargePref = new PowerGaugePreference(mRealContext); @@ -137,6 +147,7 @@ public class PowerUsageSummaryTest { mBatteryMeterView.mDrawable = new BatteryMeterView.BatteryMeterDrawable(mRealContext, 0); doNothing().when(mFragment).restartBatteryStatsLoader(); doReturn(mock(LoaderManager.class)).when(mFragment).getLoaderManager(); + doReturn(MENU_ADVANCED_BATTERY).when(mAdvancedPageMenu).getItemId(); when(mFragment.getActivity()).thenReturn(mSettingsActivity); when(mFeatureFactory.powerUsageFeatureProvider.getAdditionalBatteryInfoIntent()) @@ -294,6 +305,35 @@ public class PowerUsageSummaryTest { verify(mBatteryHeaderPreferenceController, never()).quickUpdateHeaderPreference(); } + @Test + public void testOptionsMenu_advancedPageEnabled() { + when(mFeatureFactory.powerUsageFeatureProvider.isPowerAccountingToggleEnabled()) + .thenReturn(true); + + mFragment.onCreateOptionsMenu(mMenu, mMenuInflater); + + verify(mMenu).add(Menu.NONE, MENU_ADVANCED_BATTERY, Menu.NONE, + R.string.advanced_battery_title); + } + + @Test + public void testOptionsMenu_clickAdvancedPage_fireIntent() { + final ArgumentCaptor captor = ArgumentCaptor.forClass(Intent.class); + doAnswer(invocation -> { + // Get the intent in which it has the app info bundle + mIntent = captor.getValue(); + return true; + }).when(mRealContext).startActivity(captor.capture()); + + mFragment.onOptionsItemSelected(mAdvancedPageMenu); + + assertThat(mIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo( + PowerUsageAdvanced.class.getName()); + assertThat( + mIntent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)).isEqualTo( + R.string.advanced_battery_title); + } + public static class TestFragment extends PowerUsageSummary { private Context mContext;