Snap for 7852542 from f24702f643
to sc-v2-release
Change-Id: I2dc1f8e758dae24d89be38918b646fb5c6b5025a
This commit is contained in:
@@ -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"/>
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/empty"
|
||||
@@ -55,7 +58,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?android:colorBackground"
|
||||
settings:layout_constraintTop_toTopOf="parent"/>
|
||||
settings:layout_constraintVertical_chainStyle="packed"
|
||||
settings:layout_constraintVertical_bias="0.0"
|
||||
settings:layout_constraintTop_toTopOf="parent"
|
||||
settings:layout_constraintBottom_toTopOf="@id/apps_list"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
@@ -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">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/expand_title"
|
||||
|
@@ -13600,8 +13600,10 @@
|
||||
<string name="camera_toggle_title">Camera access</string>
|
||||
<!-- Label for the camera use toggle [CHAR LIMIT=40] -->
|
||||
<string name="mic_toggle_title">Microphone access</string>
|
||||
<!-- Describes what is affected by the camera or mic toggle [CHAR LIMIT=NONE] -->
|
||||
<string name="sensor_toggle_description">For all apps and services</string>
|
||||
<!-- Describes what is affected by the camera toggle [CHAR LIMIT=NONE] -->
|
||||
<string name="cam_toggle_description">For apps and services</string>
|
||||
<!-- Describes what is affected by the mic toggle [CHAR LIMIT=NONE] -->
|
||||
<string name="mic_toggle_description">For apps and services. If this setting is off, microphone data may still be shared when you call an emergency number.</string>
|
||||
|
||||
<!-- Title for Game settings entry. [CHAR_LIMIT=NONE] -->
|
||||
<string name="game_settings_title">Game settings</string>
|
||||
|
@@ -67,14 +67,14 @@
|
||||
<com.android.settingslib.RestrictedSwitchPreference
|
||||
android:key="privacy_camera_toggle"
|
||||
android:title="@string/camera_toggle_title"
|
||||
android:summary="@string/sensor_toggle_description"
|
||||
android:summary="@string/cam_toggle_description"
|
||||
settings:controller="com.android.settings.privacy.CameraToggleController"/>
|
||||
|
||||
<!-- Microphone toggle -->
|
||||
<com.android.settingslib.RestrictedSwitchPreference
|
||||
android:key="privacy_mic_toggle"
|
||||
android:title="@string/mic_toggle_title"
|
||||
android:summary="@string/sensor_toggle_description"
|
||||
android:summary="@string/mic_toggle_description"
|
||||
settings:controller="com.android.settings.privacy.MicToggleController"/>
|
||||
|
||||
<!-- Show passwords -->
|
||||
|
@@ -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<Activity> 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();
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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 */,
|
||||
|
@@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
@@ -75,9 +68,7 @@ public final class ExpandDividerPreferenceTest {
|
||||
mExpandDividerPreference.mTextView = mTextView;
|
||||
|
||||
mExpandDividerPreference.setTitle(titleContent);
|
||||
final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
|
||||
verify(mTextView).postDelayed(captor.capture(), eq(50L));
|
||||
captor.getValue().run();
|
||||
|
||||
verify(mTextView).setText(titleContent);
|
||||
}
|
||||
|
||||
|
@@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user