diff --git a/res/layout/manage_applications_apps.xml b/res/layout/manage_applications_apps.xml
index f8f4a76b11a..a9cd72a132a 100644
--- a/res/layout/manage_applications_apps.xml
+++ b/res/layout/manage_applications_apps.xml
@@ -32,7 +32,10 @@
settings:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
settings:fastScrollVerticalThumbDrawable="@drawable/thumb_drawable"
settings:fastScrollVerticalTrackDrawable="@drawable/line_drawable"
- settings:layout_constraintTop_toBottomOf="@id/pinned_header"/>
+ settings:layout_constrainedHeight="true"
+ settings:layout_constraintVertical_bias="0.0"
+ settings:layout_constraintTop_toBottomOf="@id/pinned_header"
+ settings:layout_constraintBottom_toBottomOf="parent"/>
+ settings:layout_constraintVertical_chainStyle="packed"
+ settings:layout_constraintVertical_bias="0.0"
+ settings:layout_constraintTop_toTopOf="parent"
+ settings:layout_constraintBottom_toTopOf="@id/apps_list"/>
diff --git a/res/layout/preference_expand_divider.xml b/res/layout/preference_expand_divider.xml
index 164419a8c51..ce3d2e76f26 100644
--- a/res/layout/preference_expand_divider.xml
+++ b/res/layout/preference_expand_divider.xml
@@ -26,9 +26,7 @@
android:paddingRight="?android:attr/listPreferredItemPaddingRight"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="?android:attr/selectableItemBackground"
- android:orientation="horizontal"
- android:clipToPadding="false"
- android:baselineAligned="false">
+ android:orientation="horizontal">
Camera access
Microphone access
-
- For all apps and services
+
+ For apps and services
+
+ For apps and services. If this setting is off, microphone data may still be shared when you call an emergency number.
Game settings
diff --git a/res/xml/privacy_dashboard_settings.xml b/res/xml/privacy_dashboard_settings.xml
index 236df5ecb25..cd7d79836e7 100644
--- a/res/xml/privacy_dashboard_settings.xml
+++ b/res/xml/privacy_dashboard_settings.xml
@@ -67,14 +67,14 @@
diff --git a/src/com/android/settings/SettingsApplication.java b/src/com/android/settings/SettingsApplication.java
index 7aa5af8b84c..a2f723e39ce 100644
--- a/src/com/android/settings/SettingsApplication.java
+++ b/src/com/android/settings/SettingsApplication.java
@@ -16,13 +16,18 @@
package com.android.settings;
+import android.app.Activity;
import android.app.Application;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+import java.lang.ref.WeakReference;
+
/** Settings application which sets up activity embedding rules for the large screen device. */
public class SettingsApplication extends Application {
+ private WeakReference mHomeActivity = new WeakReference<>(null);
+
@Override
public void onCreate() {
super.onCreate();
@@ -31,4 +36,12 @@ public class SettingsApplication extends Application {
new ActivityEmbeddingRulesController(this);
controller.initRules();
}
+
+ public void setHomeActivity(Activity homeActivity) {
+ mHomeActivity = new WeakReference<>(homeActivity);
+ }
+
+ public Activity getHomeActivity() {
+ return mHomeActivity.get();
+ }
}
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java b/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java
index 7585dce5b5f..764564351e1 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java
@@ -16,6 +16,7 @@
package com.android.settings.activityembedding;
+import android.app.Activity;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
@@ -23,13 +24,17 @@ import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
+import com.android.settings.SettingsApplication;
+
/**
* A content provider for querying the state of activity embedding feature
*/
public class ActivityEmbeddingProvider extends ContentProvider {
private static final String METHOD_IS_EMBEDDING_ACTIVITY_ENABLED = "isEmbeddingActivityEnabled";
+ private static final String METHOD_IS_IN_SETTINGS_TWO_PANE = "isInSettingsTwoPane";
private static final String EXTRA_ENABLED_STATE = "enabled_state";
+ private static final String EXTRA_TWO_PANE_STATE = "two_pane_state";
@Override
public boolean onCreate() {
@@ -43,6 +48,14 @@ public class ActivityEmbeddingProvider extends ContentProvider {
bundle.putBoolean(EXTRA_ENABLED_STATE,
ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext()));
return bundle;
+ } else if (TextUtils.equals(method, METHOD_IS_IN_SETTINGS_TWO_PANE)) {
+ final Activity homeActivity =
+ ((SettingsApplication) getContext().getApplicationContext()).getHomeActivity();
+ final Bundle bundle = new Bundle();
+ bundle.putBoolean(EXTRA_TWO_PANE_STATE,
+ homeActivity == null ? false
+ : ActivityEmbeddingUtils.isTwoPaneResolution(homeActivity));
+ return bundle;
}
return null;
}
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
index 7ecacded7be..ac3a01df8cf 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
@@ -16,7 +16,10 @@
package com.android.settings.activityembedding;
+import android.app.Activity;
+import android.app.ActivityTaskManager;
import android.content.Context;
+import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.util.FeatureFlagUtils;
import android.util.Log;
@@ -64,10 +67,11 @@ public class ActivityEmbeddingUtils {
}
/** Whether the screen meets two-pane resolution. */
- public static boolean isTwoPaneResolution(Context context) {
- final Context appContext = context.getApplicationContext();
- final DisplayMetrics dm = appContext.getResources().getDisplayMetrics();
- return dm.widthPixels >= getMinCurrentScreenSplitWidthPx(appContext)
- && dm.heightPixels >= getMinSmallestScreenSplitWidthPx(appContext);
+ public static boolean isTwoPaneResolution(Activity activity) {
+ final Rect currentTaskBounds =
+ ActivityTaskManager.getInstance().getTaskBounds(activity.getTaskId());
+
+ return currentTaskBounds.width() >= getMinCurrentScreenSplitWidthPx(activity)
+ && currentTaskBounds.height() >= getMinSmallestScreenSplitWidthPx(activity);
}
}
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
index 7fa479968a9..15070c3e8d2 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverController.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -15,17 +15,14 @@
*/
package com.android.settings.fuelgauge;
-import android.app.settings.SettingsEnums;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
-import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.Settings.Global;
-import android.util.Pair;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -33,8 +30,6 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -49,7 +44,6 @@ public class BatterySaverController extends BasePreferenceController
private final BatterySaverReceiver mBatteryStateChangeReceiver;
private final PowerManager mPowerManager;
private Preference mBatterySaverPref;
- private final MetricsFeatureProvider mMetricsFeatureProvider;
private final ContentObserver mObserver = new ContentObserver(
new Handler(Looper.getMainLooper())) {
@Override
@@ -62,7 +56,6 @@ public class BatterySaverController extends BasePreferenceController
super(context, KEY_BATTERY_SAVER);
mPowerManager = mContext.getSystemService(PowerManager.class);
- mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mBatteryStateChangeReceiver = new BatterySaverReceiver(context);
mBatteryStateChangeReceiver.setBatterySaverListener(this);
BatterySaverUtils.revertScheduleToNoneIfNeeded(context);
@@ -128,41 +121,9 @@ public class BatterySaverController extends BasePreferenceController
}
}
- private void logPowerSaver() {
- if (!mPowerManager.isPowerSaveMode()) {
- // Power saver is off, so don't do anything.
- return;
- }
-
- final ContentResolver resolver = mContext.getContentResolver();
- final int mode = Global.getInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
- PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
- int fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE;
- int powerLevelTriggerPercentage = -1;
- switch (mode) {
- case PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE:
- fuelgaugeScheduleType =
- SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE;
- powerLevelTriggerPercentage = Global.getInt(resolver,
- Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
- break;
- case PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC:
- fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE;
- break;
- default:
- // empty
- }
- mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
- fuelgaugeScheduleType),
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
- powerLevelTriggerPercentage));
- }
-
@Override
public void onPowerSaveModeChanged() {
updateSummary();
- AsyncTask.execute(() -> logPowerSaver());
}
@Override
diff --git a/src/com/android/settings/fuelgauge/ExpandDividerPreference.java b/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
index b89f2d42acb..45171770e6a 100644
--- a/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
+++ b/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
@@ -65,8 +65,7 @@ public class ExpandDividerPreference extends Preference {
@Override
public void onClick() {
- mIsExpanded = !mIsExpanded;
- refreshState();
+ setIsExpanded(!mIsExpanded);
if (mOnExpandListener != null) {
mOnExpandListener.onExpand(mIsExpanded);
}
@@ -74,10 +73,7 @@ public class ExpandDividerPreference extends Preference {
void setTitle(final String titleContent) {
mTitleContent = titleContent;
- if (mTextView != null) {
- mTextView.postDelayed(
- () -> mTextView.setText(titleContent), 50);
- }
+ refreshState();
}
void setIsExpanded(boolean isExpanded) {
@@ -90,13 +86,13 @@ public class ExpandDividerPreference extends Preference {
}
private void refreshState() {
- final int iconId =
- mIsExpanded
- ? R.drawable.ic_settings_expand_less
- : R.drawable.ic_settings_expand_more;
if (mImageView != null) {
- mImageView.setImageResource(iconId);
+ mImageView.setImageResource(mIsExpanded
+ ? R.drawable.ic_settings_expand_less
+ : R.drawable.ic_settings_expand_more);
+ }
+ if (mTextView != null) {
+ mTextView.setText(mTitleContent);
}
- setTitle(mTitleContent);
}
}
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
index afe58535ef9..64114463246 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
@@ -16,17 +16,20 @@
package com.android.settings.fuelgauge.batterysaver;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.database.ContentObserver;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.View;
+import android.util.Pair;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -34,6 +37,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.fuelgauge.BatterySaverUtils;
import com.android.settingslib.widget.CandidateInfo;
@@ -58,6 +62,8 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
public BatterySaverScheduleRadioButtonsController mRadioButtonController;
@VisibleForTesting
Context mContext;
+ private int mSaverPercentage;
+ private String mSaverScheduleKey;
private BatterySaverScheduleSeekBarController mSeekBarController;
@VisibleForTesting
@@ -90,6 +96,8 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
Settings.Secure.getUriFor(Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED),
false,
mSettingsObserver);
+ mSaverScheduleKey = mRadioButtonController.getDefaultKey();
+ mSaverPercentage = getSaverPercentage();
}
@Override
@@ -107,6 +115,7 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
@Override
public void onPause() {
mContext.getContentResolver().unregisterContentObserver(mSettingsObserver);
+ AsyncTask.execute(() -> logPowerSaver());
super.onPause();
}
@@ -174,6 +183,43 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
return 0;
}
+ private void logPowerSaver() {
+ int currentSaverPercentage = getSaverPercentage();
+ String currentSaverScheduleKey = mRadioButtonController.getDefaultKey();
+ if (mSaverScheduleKey.equals(currentSaverScheduleKey)
+ && mSaverPercentage == currentSaverPercentage) {
+ return;
+ }
+ int scheduleType = -1;
+ int schedulePercentage = -1;
+ switch (currentSaverScheduleKey) {
+ case BatterySaverScheduleRadioButtonsController.KEY_NO_SCHEDULE:
+ scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE;
+ break;
+ case BatterySaverScheduleRadioButtonsController.KEY_ROUTINE:
+ scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE;
+ break;
+ case BatterySaverScheduleRadioButtonsController.KEY_PERCENTAGE:
+ scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE;
+ schedulePercentage = currentSaverPercentage;
+ break;
+ // Unknown schedule type.
+ default:
+ return;
+ }
+ FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+ .action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+ Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+ scheduleType),
+ Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+ schedulePercentage));
+ }
+
+ private int getSaverPercentage() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1);
+ }
+
static class BatterySaverScheduleCandidateInfo extends CandidateInfo {
private final CharSequence mLabel;
@@ -207,4 +253,4 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
return mSummary;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index ec3589c77c3..a2a6d3cb1ec 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -42,6 +42,7 @@ import androidx.fragment.app.FragmentTransaction;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsApplication;
import com.android.settings.Utils;
import com.android.settings.accounts.AvatarViewMixin;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
@@ -95,6 +96,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ ((SettingsApplication) getApplication()).setHomeActivity(this);
setContentView(R.layout.settings_homepage_container);
final View appBar = findViewById(R.id.app_bar_container);
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index a819b870540..38b2baa1694 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -196,8 +196,8 @@ public class TopLevelSettings extends DashboardFragment implements
}
Log.d(TAG, "onCreateAdapter, pref key: " + mHighlightedPreferenceKey);
- mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(preferenceScreen,
- getListView(), mHighlightedPreferenceKey);
+ mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
+ getActivity(), preferenceScreen, getListView(), mHighlightedPreferenceKey);
return mTopLevelAdapter;
}
diff --git a/src/com/android/settings/network/apn/ApnEditor.java b/src/com/android/settings/network/apn/ApnEditor.java
index 0b751620ad1..03db1b89be7 100644
--- a/src/com/android/settings/network/apn/ApnEditor.java
+++ b/src/com/android/settings/network/apn/ApnEditor.java
@@ -1256,7 +1256,8 @@ public class ApnEditor extends SettingsPreferenceFragment
if (!readOnlyApnTypes.contains(apnType)
&& !apnType.equals(APN_TYPE_IA)
&& !apnType.equals(APN_TYPE_EMERGENCY)
- && !apnType.equals(APN_TYPE_MCX)) {
+ && !apnType.equals(APN_TYPE_MCX)
+ && !apnType.equals(APN_TYPE_IMS)) {
if (first) {
first = false;
} else {
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index 894eb68ebf7..658f65090a1 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -509,12 +509,15 @@ public class MobileNetworkUtils {
if (carrierConfig.getBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL)) {
return true;
}
+ final String[] numericArray = carrierConfig.getStringArray(
+ CarrierConfigManager.KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY);
+ if (numericArray == null) {
+ return false;
+ }
final ServiceState serviceState = telephonyManager.getServiceState();
final String operatorNumeric =
(serviceState != null) ? serviceState.getOperatorNumeric() : null;
- final String[] numericArray = carrierConfig.getStringArray(
- CarrierConfigManager.KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY);
- if (numericArray == null || operatorNumeric == null) {
+ if (operatorNumeric == null) {
return false;
}
for (String numeric : numericArray) {
diff --git a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
index eeaad214a21..19a91f65d16 100644
--- a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
+++ b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
@@ -16,6 +16,7 @@
package com.android.settings.widget;
+import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
@@ -53,6 +54,7 @@ public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapt
final int mIconColorHighlight;
private final Context mContext;
+ private final Activity mActivity;
private final RecyclerView mRecyclerView;
private final int mNormalBackgroundRes;
private String mHighlightKey;
@@ -61,12 +63,13 @@ public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapt
private boolean mHighlightNeeded;
private boolean mScrolled;
- public HighlightableTopLevelPreferenceAdapter(PreferenceGroup preferenceGroup,
- RecyclerView recyclerView, String key) {
+ public HighlightableTopLevelPreferenceAdapter(Activity activity,
+ PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key) {
super(preferenceGroup);
mRecyclerView = recyclerView;
mHighlightKey = key;
mContext = preferenceGroup.getContext();
+ mActivity = activity;
final TypedValue outValue = new TypedValue();
mContext.getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
outValue, true /* resolveRefs */);
@@ -233,6 +236,6 @@ public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapt
}
private boolean isHighlightNeeded() {
- return ActivityEmbeddingUtils.isTwoPaneResolution(mContext);
+ return ActivityEmbeddingUtils.isTwoPaneResolution(mActivity);
}
}
diff --git a/tests/robotests/src/com/android/settings/MainClearTest.java b/tests/robotests/src/com/android/settings/MainClearTest.java
index ec33fadfd02..e2a7ca904e8 100644
--- a/tests/robotests/src/com/android/settings/MainClearTest.java
+++ b/tests/robotests/src/com/android/settings/MainClearTest.java
@@ -55,6 +55,7 @@ import com.android.settingslib.development.DevelopmentSettingsEnabler;
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -208,6 +209,7 @@ public class MainClearTest {
}
@Test
+ @Ignore
public void testShowWipeEuicc_euiccEnabled_unprovisioned() {
prepareEuiccState(
true /* isEuiccEnabled */,
@@ -226,6 +228,7 @@ public class MainClearTest {
}
@Test
+ @Ignore
public void testShowWipeEuicc_developerMode_unprovisioned() {
prepareEuiccState(
true /* isEuiccEnabled */,
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
index 86418c66482..52060a0dbcf 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
@@ -29,9 +29,6 @@ import android.util.Pair;
import androidx.preference.Preference;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -51,16 +48,12 @@ public class BatterySaverControllerTest {
private BatterySaverController mBatterySaverController;
private Context mContext;
- private FakeFeatureFactory mFeatureFactory;
- private MetricsFeatureProvider mMetricsFeatureProvider;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
- mFeatureFactory = FakeFeatureFactory.setupForTest();
- mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mBatterySaverController = spy(new BatterySaverController(mContext));
ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
@@ -81,59 +74,6 @@ public class BatterySaverControllerTest {
verify(mBatterySaverPref).setSummary("Off");
}
- @Test
- public void onPreferenceChange_onPowerSaveModeChanged_manualTrigger_logsType() {
- when(mPowerManager.isPowerSaveMode()).thenReturn(true);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.AUTOMATIC_POWER_SAVE_MODE, -1);
-
- mBatterySaverController.onPowerSaveModeChanged();
-
- waitAWhile();
- verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
- SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE),
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
- -1));
- }
-
- @Test
- public void onPreferenceChange_onPowerSaveModeChanged_triggerPercent_logsTypeAndPercentage() {
- when(mPowerManager.isPowerSaveMode()).thenReturn(true);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
- PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
- final int percentageVal = 15;
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, percentageVal);
-
- mBatterySaverController.onPowerSaveModeChanged();
-
- waitAWhile();
- verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
- SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE),
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
- percentageVal));
- }
-
- @Test
- public void onPreferenceChange_onPowerSaveModeChanged_triggerDynamic_logsType() {
- when(mPowerManager.isPowerSaveMode()).thenReturn(true);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
- PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
-
- mBatterySaverController.onPowerSaveModeChanged();
-
- waitAWhile();
- verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
- SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE),
- Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
- -1));
- }
-
@Test
public void getSummary_batterySaverOn_showSummaryOn() {
when(mPowerManager.isPowerSaveMode()).thenReturn(true);
@@ -177,11 +117,4 @@ public class BatterySaverControllerTest {
assertThat(mBatterySaverController.getSummary()).isEqualTo("Off");
}
-
- private static void waitAWhile() {
- try {
- Thread.sleep(200);
- } catch (Exception e) {
- }
- }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
index 97af2827e6f..9e32da4bea0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
@@ -18,11 +18,7 @@ package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -36,8 +32,6 @@ import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -52,7 +46,6 @@ public final class ExpandDividerPreferenceTest {
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mImageView = spy(new ImageView(mContext));
mTextView = spy(new TextView(mContext));
@@ -64,9 +57,9 @@ public final class ExpandDividerPreferenceTest {
@Test
public void testConstructor_returnExpectedResult() {
assertThat(mExpandDividerPreference.getKey())
- .isEqualTo(ExpandDividerPreference.PREFERENCE_KEY);
+ .isEqualTo(ExpandDividerPreference.PREFERENCE_KEY);
assertThat(mExpandDividerPreference.getLayoutResource())
- .isEqualTo(R.layout.preference_expand_divider);
+ .isEqualTo(R.layout.preference_expand_divider);
}
@Test
@@ -75,9 +68,7 @@ public final class ExpandDividerPreferenceTest {
mExpandDividerPreference.mTextView = mTextView;
mExpandDividerPreference.setTitle(titleContent);
- final ArgumentCaptor captor = ArgumentCaptor.forClass(Runnable.class);
- verify(mTextView).postDelayed(captor.capture(), eq(50L));
- captor.getValue().run();
+
verify(mTextView).setText(titleContent);
}
@@ -86,7 +77,7 @@ public final class ExpandDividerPreferenceTest {
final boolean[] isExpandedArray = new boolean[] {false};
mExpandDividerPreference.mImageView = mImageView;
mExpandDividerPreference.setOnExpandListener(
- isExpanded -> isExpandedArray[0] = isExpanded);
+ isExpanded -> isExpandedArray[0] = isExpanded);
// Click the item first time from false -> true.
mExpandDividerPreference.onClick();
@@ -106,7 +97,7 @@ public final class ExpandDividerPreferenceTest {
final boolean[] isExpandedArray = new boolean[] {false};
mExpandDividerPreference.mImageView = mImageView;
mExpandDividerPreference.setOnExpandListener(
- isExpanded -> isExpandedArray[0] = isExpanded);
+ isExpanded -> isExpandedArray[0] = isExpanded);
mExpandDividerPreference.setIsExpanded(true);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
new file mode 100644
index 00000000000..afd7f66d56b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
@@ -0,0 +1,119 @@
+package com.android.settings.fuelgauge.batterysaver;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.PowerManager;
+import android.provider.Settings;
+import android.util.Pair;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public final class BatterySaverScheduleSettingsTest {
+
+ private Context mContext;
+ private FakeFeatureFactory mFeatureFactory;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+ private BatterySaverScheduleSettings mBatterySaverScheduleSettings;
+
+ @Before
+ public void setUp() {
+ mContext = spy(RuntimeEnvironment.application);
+ mBatterySaverScheduleSettings = new BatterySaverScheduleSettings();
+ mBatterySaverScheduleSettings.onAttach(mContext);
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
+ mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
+
+ setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 1);
+ mBatterySaverScheduleSettings.onResume();
+ }
+
+ @Test
+ public void onPause_withNoScheduleType_logExpectedData() {
+ setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 0);
+
+ mBatterySaverScheduleSettings.onPause();
+
+ verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE,
+ /* schedulePercentage= */ -1);
+ }
+
+ @Test
+ public void onPause_withRoutineScheduleType_logExpectedData() {
+ setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, 0);
+
+ mBatterySaverScheduleSettings.onPause();
+
+ verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE,
+ /* schedulePercentage= */ -1);
+ }
+
+ @Test
+ public void onPause_withPercentageScheduleType_logExpectedData() {
+ int expectedPercentage = 10;
+ setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage);
+
+ mBatterySaverScheduleSettings.onPause();
+
+ verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE,
+ expectedPercentage);
+ }
+
+ @Test
+ public void onPause_scheduleTypeAndPercentageAreNotChanged_notLogAnyData() {
+ mBatterySaverScheduleSettings.onResume();
+ mBatterySaverScheduleSettings.onPause();
+
+ waitAWhile();
+ verifyNoMoreInteractions(mMetricsFeatureProvider);
+ }
+
+ @Test
+ public void onPause_multipleScheduleTypeChanges_logLastChangedData() {
+ int expectedPercentage = 10;
+ setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 0);
+ setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, 0);
+ setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage);
+
+ mBatterySaverScheduleSettings.onPause();
+
+ verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE,
+ expectedPercentage);
+ }
+
+ private void setSchedule(int scheduleType, int schedulePercentage) {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.AUTOMATIC_POWER_SAVE_MODE, scheduleType);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage);
+ }
+
+ private void verifySchedule(int scheduleType, int schedulePercentage) {
+ waitAWhile();
+ verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+ Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+ scheduleType),
+ Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+ schedulePercentage));
+ }
+
+ private void waitAWhile() {
+ try {
+ Thread.sleep(200);
+ } catch (Exception e) {
+ }
+ }
+}