OSDN Git Service

Hook up the new page to PowerUsageSummary
authorjackqdyulei <jackqdyulei@google.com>
Tue, 27 Feb 2018 22:58:06 +0000 (14:58 -0800)
committerLei Yu <jackqdyulei@google.com>
Wed, 7 Mar 2018 01:20:06 +0000 (17:20 -0800)
Add a menu to point to the new page

Bug: 73300636
Test: RunSettingsRoboTests
Change-Id: I9956e349cdbbe2cd752bdf65020a540a329bdee3
Merged-In: I9956e349cdbbe2cd752bdf65020a540a329bdee3

src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
src/com/android/settings/fuelgauge/PowerUsageSummary.java
src/com/android/settings/search/SearchIndexableResourcesImpl.java
tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java

index 5028264..de01533 100644 (file)
@@ -22,6 +22,7 @@ import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.os.BatteryStats;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.os.Process;
 import android.os.UserHandle;
@@ -81,7 +82,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
     private Context mPrefContext;
     SparseArray<List<Anomaly>> mAnomalySparseArray;
 
-    private Handler mHandler = new Handler() {
+    private Handler mHandler = new Handler(Looper.getMainLooper()) {
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what) {
index 89f66bd..327a6c5 100644 (file)
@@ -171,6 +171,16 @@ public class PowerUsageAdvanced extends PowerUsageBase {
                     sir.xmlResId = R.xml.power_usage_advanced;
                     return Arrays.asList(sir);
                 }
+
+                @Override
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
+                    final List<AbstractPreferenceController> controllers = new ArrayList<>();
+                    controllers.add(new BatteryAppListPreferenceController(context,
+                            KEY_APP_LIST, null /* lifecycle */, null /* activity */,
+                            null /* fragment */));
+                    return controllers;
+                }
             };
 
 }
index 8d70e46..b64dc52 100644 (file)
@@ -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);
         }
index b9f4db2..1798d34 100644 (file)
@@ -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);
index eba6252..4a905b4 100644 (file)
@@ -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;
index 7f6e39d..6176bef 100644 (file)
@@ -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<BatterySipper> 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<Intent> 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;