Hook up the new page to PowerUsageSummary

Add a menu to point to the new page

Bug: 73300636
Test: RunSettingsRoboTests
Change-Id: I9956e349cdbbe2cd752bdf65020a540a329bdee3
Merged-In: I9956e349cdbbe2cd752bdf65020a540a329bdee3
This commit is contained in:
jackqdyulei
2018-02-27 14:58:06 -08:00
committed by Lei Yu
parent 31a5960424
commit 094278e636
6 changed files with 70 additions and 14 deletions

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.BatteryStats; import android.os.BatteryStats;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.os.Process; import android.os.Process;
import android.os.UserHandle; import android.os.UserHandle;
@@ -81,7 +82,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
private Context mPrefContext; private Context mPrefContext;
SparseArray<List<Anomaly>> mAnomalySparseArray; SparseArray<List<Anomaly>> mAnomalySparseArray;
private Handler mHandler = new Handler() { private Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
switch (msg.what) { switch (msg.what) {

View File

@@ -171,6 +171,16 @@ public class PowerUsageAdvanced extends PowerUsageBase {
sir.xmlResId = R.xml.power_usage_advanced; sir.xmlResId = R.xml.power_usage_advanced;
return Arrays.asList(sir); 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;
}
}; };
} }

View File

@@ -39,6 +39,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.SummaryLoader; import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.display.BatteryPercentagePreferenceController; import com.android.settings.display.BatteryPercentagePreferenceController;
import com.android.settings.fuelgauge.anomaly.Anomaly; 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.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.utils.PowerUtil; import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
@@ -68,7 +68,6 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
static final String TAG = "PowerUsageSummary"; static final String TAG = "PowerUsageSummary";
private static final boolean DEBUG = false; 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_HEADER = "battery_header";
private static final String KEY_BATTERY_TIP = "battery_tip"; 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; static final int BATTERY_INFO_LOADER = 1;
@VisibleForTesting @VisibleForTesting
static final int BATTERY_TIP_LOADER = 2; 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; public static final int DEBUG_INFO_LOADER = 3;
@VisibleForTesting @VisibleForTesting
@@ -246,6 +248,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
.setAlphabeticShortcut('t'); .setAlphabeticShortcut('t');
} }
menu.add(Menu.NONE, MENU_ADVANCED_BATTERY, Menu.NONE, R.string.advanced_battery_title);
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
} }
@@ -256,11 +260,6 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
final SettingsActivity sa = (SettingsActivity) getActivity();
final Context context = getContext();
final MetricsFeatureProvider metricsFeatureProvider =
FeatureFactory.getFactory(context).getMetricsFeatureProvider();
switch (item.getItemId()) { switch (item.getItemId()) {
case MENU_STATS_TYPE: case MENU_STATS_TYPE:
if (mStatsType == BatteryStats.STATS_SINCE_CHARGED) { if (mStatsType == BatteryStats.STATS_SINCE_CHARGED) {
@@ -270,6 +269,13 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
} }
refreshUi(); refreshUi();
return true; 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: default:
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }

View File

@@ -49,6 +49,7 @@ import com.android.settings.display.NightDisplaySettings;
import com.android.settings.display.ScreenZoomSettings; import com.android.settings.display.ScreenZoomSettings;
import com.android.settings.dream.DreamSettings; import com.android.settings.dream.DreamSettings;
import com.android.settings.enterprise.EnterprisePrivacySettings; import com.android.settings.enterprise.EnterprisePrivacySettings;
import com.android.settings.fuelgauge.PowerUsageAdvanced;
import com.android.settings.fuelgauge.PowerUsageAdvancedLegacy; import com.android.settings.fuelgauge.PowerUsageAdvancedLegacy;
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings; import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.fuelgauge.PowerUsageSummary;
@@ -121,6 +122,7 @@ public class SearchIndexableResourcesImpl implements SearchIndexableResources {
addIndex(SoundSettings.class); addIndex(SoundSettings.class);
addIndex(ZenModeSettings.class); addIndex(ZenModeSettings.class);
addIndex(StorageSettings.class); addIndex(StorageSettings.class);
addIndex(PowerUsageAdvanced.class);
addIndex(PowerUsageAdvancedLegacy.class); addIndex(PowerUsageAdvancedLegacy.class);
addIndex(DefaultAppSettings.class); addIndex(DefaultAppSettings.class);
addIndex(ManageAssist.class); addIndex(ManageAssist.class);

View File

@@ -34,7 +34,6 @@ import android.view.MenuItem;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -45,10 +44,8 @@ import org.mockito.Answers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class PowerUsageAdvancedTest { public class PowerUsageAdvancedTest {
@Mock @Mock
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;

View File

@@ -15,6 +15,8 @@
*/ */
package com.android.settings.fuelgauge; 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 com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyInt;
@@ -35,6 +37,8 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
@@ -53,7 +57,6 @@ import com.android.settingslib.core.AbstractPreferenceController;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Answers; import org.mockito.Answers;
@@ -114,6 +117,12 @@ public class PowerUsageSummaryTest {
private LoaderManager mLoaderManager; private LoaderManager mLoaderManager;
@Mock @Mock
private BatteryHeaderPreferenceController mBatteryHeaderPreferenceController; 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 List<BatterySipper> mUsageList;
private Context mRealContext; private Context mRealContext;
@@ -122,12 +131,13 @@ public class PowerUsageSummaryTest {
private BatteryMeterView mBatteryMeterView; private BatteryMeterView mBatteryMeterView;
private PowerGaugePreference mScreenUsagePref; private PowerGaugePreference mScreenUsagePref;
private PowerGaugePreference mLastFullChargePref; private PowerGaugePreference mLastFullChargePref;
private Intent mIntent;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mRealContext = RuntimeEnvironment.application; mRealContext = spy(RuntimeEnvironment.application);
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mScreenUsagePref = new PowerGaugePreference(mRealContext); mScreenUsagePref = new PowerGaugePreference(mRealContext);
mLastFullChargePref = new PowerGaugePreference(mRealContext); mLastFullChargePref = new PowerGaugePreference(mRealContext);
@@ -137,6 +147,7 @@ public class PowerUsageSummaryTest {
mBatteryMeterView.mDrawable = new BatteryMeterView.BatteryMeterDrawable(mRealContext, 0); mBatteryMeterView.mDrawable = new BatteryMeterView.BatteryMeterDrawable(mRealContext, 0);
doNothing().when(mFragment).restartBatteryStatsLoader(); doNothing().when(mFragment).restartBatteryStatsLoader();
doReturn(mock(LoaderManager.class)).when(mFragment).getLoaderManager(); doReturn(mock(LoaderManager.class)).when(mFragment).getLoaderManager();
doReturn(MENU_ADVANCED_BATTERY).when(mAdvancedPageMenu).getItemId();
when(mFragment.getActivity()).thenReturn(mSettingsActivity); when(mFragment.getActivity()).thenReturn(mSettingsActivity);
when(mFeatureFactory.powerUsageFeatureProvider.getAdditionalBatteryInfoIntent()) when(mFeatureFactory.powerUsageFeatureProvider.getAdditionalBatteryInfoIntent())
@@ -294,6 +305,35 @@ public class PowerUsageSummaryTest {
verify(mBatteryHeaderPreferenceController, never()).quickUpdateHeaderPreference(); 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 { public static class TestFragment extends PowerUsageSummary {
private Context mContext; private Context mContext;