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;
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) {
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;
+ }
};
}
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;
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;
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";
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
.setAlphabeticShortcut('t');
}
+ menu.add(Menu.NONE, MENU_ADVANCED_BATTERY, Menu.NONE, R.string.advanced_battery_title);
+
super.onCreateOptionsMenu(menu, inflater);
}
@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) {
}
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);
}
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;
addIndex(SoundSettings.class);
addIndex(ZenModeSettings.class);
addIndex(StorageSettings.class);
+ addIndex(PowerUsageAdvanced.class);
addIndex(PowerUsageAdvancedLegacy.class);
addIndex(DefaultAppSettings.class);
addIndex(ManageAssist.class);
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;
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;
*/
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;
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;
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;
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;
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);
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())
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;