Merge "Change feature flag to device config flag." into udc-qpr-dev
diff --git a/res/values/config.xml b/res/values/config.xml
index 687fa15..17c3398 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -548,9 +548,6 @@
<!-- Whether to show Smooth Display feature in Settings Options -->
<bool name="config_show_smooth_display">false</bool>
- <!-- Whether to show Stay awake on fold feature in Settings Options -->
- <bool name="config_stay_awake_on_fold">false</bool>
-
<!-- Whether to show emergency settings in top-level Settings -->
<bool name="config_show_emergency_settings">true</bool>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 26738d6..07d05f9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -80,6 +80,19 @@
<!-- Description for the button that makes interface elements larger. [CHAR_LIMIT=NONE] -->
<string name="font_size_make_larger_desc">Make larger</string>
+ <!-- Title for stay awake on fold radio button. [CHAR_LIMIT=NONE] -->
+ <string name="stay_awake_on_fold_title">Always</string>
+ <!-- Summary for stay awake on fold radio button. [CHAR_LIMIT=NONE] -->
+ <string name="stay_awake_on_fold_summary">Front display turns on when you fold your device</string>
+ <!-- Title for selective stay awake radio button. [CHAR_LIMIT=NONE] -->
+ <string name="selective_stay_awake_title">Only games, videos, and more</string>
+ <!-- Summary for selective stay awake radio button. [CHAR_LIMIT=NONE] -->
+ <string name="selective_stay_awake_summary">Front display turns on for apps that stop your screen going idle</string>
+ <!-- Title for sleep on fold radio button. [CHAR_LIMIT=NONE] -->
+ <string name="sleep_on_fold_title">Never</string>
+ <!-- Summary for sleep on fold radio button. [CHAR_LIMIT=NONE] -->
+ <string name="sleep_on_fold_summary">Front display locks when you fold your device</string>
+
<!-- Auto rotate switchbar title. [CHAR_LIMIT=NONE] -->
<string name="auto_rotate_settings_primary_switch_title">Use auto-rotate</string>
@@ -2379,10 +2392,8 @@
<string name="display_white_balance_title">Display white balance</string>
<!-- Display settings screen, display white balance settings summary [CHAR LIMIT=NONE] -->
<string name="display_white_balance_summary"></string>
- <!-- Display settings screen, setting name to enable staying awake on fold [CHAR LIMIT=30] -->
- <string name="stay_awake_on_fold_title">Stay unlocked on fold</string>
- <!-- Display settings screen, setting summary to enable staying awake on fold [CHAR LIMIT=NONE] -->
- <string name="stay_awake_on_fold_summary">Keep front display unlocked when folded until screen timeout</string>
+ <!-- Display settings screen, setting option name to change Fold setting -->
+ <string name="fold_lock_behavior_title">Continue using apps on fold</string>
<!-- Display settings screen, peak refresh rate settings title [CHAR LIMIT=30] -->
<string name="peak_refresh_rate_title">Smooth Display</string>
<!-- Display settings screen, peak refresh rate settings summary [CHAR LIMIT=NONE] -->
@@ -7056,7 +7067,7 @@
<string name="keywords_app_pinning">screen pinning</string>
<string name="keywords_profile_challenge">work challenge, work, profile</string>
<string name="keywords_unification">work profile, managed profile, unify, unification, work, profile</string>
- <string name="keywords_stay_awake_on_lock">
+ <string name="keywords_fold_lock_behavior">
awake, sleep, do not lock, stay unlocked on fold, folding, closing, fold, close, screen off
</string>
<string name="keywords_gesture">gestures</string>
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index f94ba70..c5e559c 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -48,12 +48,12 @@
settings:keywords="@string/keywords_ambient_display_screen"
settings:controller="com.android.settings.security.screenlock.LockScreenPreferenceController"/>
- <SwitchPreference
- android:key="stay_awake_on_fold"
- android:title="@string/stay_awake_on_fold_title"
- android:summary="@string/stay_awake_on_fold_summary"
- settings:keywords="@string/keywords_stay_awake_on_lock"
- settings:controller="com.android.settings.display.StayAwakeOnFoldPreferenceController"/>
+ <com.android.settingslib.RestrictedPreference
+ android:fragment="com.android.settings.display.FoldLockBehaviorSettings"
+ android:key="fold_lock_behavior"
+ android:title="@string/fold_lock_behavior_title"
+ settings:controller="com.android.settings.display.FoldLockBehaviorPreferenceController"
+ settings:keywords="@string/keywords_fold_lock_behavior" />
<com.android.settingslib.RestrictedPreference
android:key="screen_timeout"
diff --git a/res/xml/fold_lock_behavior_settings.xml b/res/xml/fold_lock_behavior_settings.xml
new file mode 100644
index 0000000..46a8917
--- /dev/null
+++ b/res/xml/fold_lock_behavior_settings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/fold_lock_behavior_title"/>
diff --git a/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
index 7c16ed6..6bc9658 100644
--- a/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
+++ b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
@@ -51,10 +51,10 @@
new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
// TODO(b/288142656): Enable user aspect ratio settings by default
- private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_SETTINGS = false;
+ private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_SETTINGS = true;
@VisibleForTesting
static final String KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS =
- "enable_app_compat_user_aspect_ratio_settings";
+ "enable_app_compat_aspect_ratio_user_settings";
static final String KEY_ENABLE_USER_ASPECT_RATIO_FULLSCREEN =
"enable_app_compat_user_aspect_ratio_fullscreen";
private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_FULLSCREEN = true;
diff --git a/src/com/android/settings/display/FoldLockBehaviorPreferenceController.java b/src/com/android/settings/display/FoldLockBehaviorPreferenceController.java
new file mode 100644
index 0000000..88e78e8
--- /dev/null
+++ b/src/com/android/settings/display/FoldLockBehaviorPreferenceController.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.display;
+
+import static android.provider.Settings.System.FOLD_LOCK_BEHAVIOR;
+
+import static com.android.settings.display.FoldLockBehaviorSettings.SETTING_VALUES;
+import static com.android.settings.display.FoldLockBehaviorSettings.SETTING_VALUE_SELECTIVE_STAY_AWAKE;
+import static com.android.settings.display.FoldLockBehaviorSettings.SETTING_VALUE_SLEEP_ON_FOLD;
+import static com.android.settings.display.FoldLockBehaviorSettings.SETTING_VALUE_STAY_AWAKE_ON_FOLD;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A preference controller for the @link android.provider.Settings.System#FOLD_LOCK_BEHAVIOR
+ * setting.
+ *
+ * This preference controller allows users to control whether or not the device
+ * stays awake when it is folded.
+ */
+public class FoldLockBehaviorPreferenceController extends BasePreferenceController {
+
+ private final Resources mResources;
+
+ private static Map<String, String> KEY_TO_TEXT = new HashMap<>();
+
+ public FoldLockBehaviorPreferenceController(Context context, String key) {
+ this(context, key, context.getResources());
+ }
+
+ public FoldLockBehaviorPreferenceController(Context context, String key, Resources resources) {
+ super(context, key);
+ mResources = resources;
+ KEY_TO_TEXT.put(SETTING_VALUE_STAY_AWAKE_ON_FOLD,
+ resourceToString(R.string.stay_awake_on_fold_title));
+ KEY_TO_TEXT.put(SETTING_VALUE_SELECTIVE_STAY_AWAKE,
+ resourceToString(R.string.selective_stay_awake_title));
+ KEY_TO_TEXT.put(SETTING_VALUE_SLEEP_ON_FOLD,
+ resourceToString(R.string.sleep_on_fold_title));
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return mResources.getBoolean(com.android.internal.R.bool.config_fold_lock_behavior)
+ ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ String summary = KEY_TO_TEXT.get(getFoldSettingValue());
+ preference.setSummary(summary);
+ }
+
+ private String getFoldSettingValue() {
+ String foldSettingValue = Settings.System.getStringForUser(mContext.getContentResolver(),
+ FOLD_LOCK_BEHAVIOR, UserHandle.USER_CURRENT);
+ return (foldSettingValue != null && SETTING_VALUES.contains(foldSettingValue))
+ ? foldSettingValue : SETTING_VALUE_SELECTIVE_STAY_AWAKE;
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_display;
+ }
+
+ private String resourceToString(int resource) {
+ return mContext.getText(resource).toString();
+ }
+
+}
diff --git a/src/com/android/settings/display/FoldLockBehaviorSettings.java b/src/com/android/settings/display/FoldLockBehaviorSettings.java
new file mode 100644
index 0000000..beda52e
--- /dev/null
+++ b/src/com/android/settings/display/FoldLockBehaviorSettings.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.display;
+
+import static android.provider.Settings.System.FOLD_LOCK_BEHAVIOR;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.support.actionbar.HelpResourceProvider;
+import com.android.settings.utils.CandidateInfoExtra;
+import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.widget.CandidateInfo;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Fragment that is used to control fold setting.
+ *
+ * Keep the setting values in this class in sync with the values in
+ * {@link com.android.server.utils.FoldSettingProvider}
+ */
+public class FoldLockBehaviorSettings extends RadioButtonPickerFragment implements
+ HelpResourceProvider {
+
+ public static final String SETTING_VALUE_STAY_AWAKE_ON_FOLD = "stay_awake_on_fold_key";
+ public static final String SETTING_VALUE_SELECTIVE_STAY_AWAKE = "selective_stay_awake_key";
+ public static final String SETTING_VALUE_SLEEP_ON_FOLD = "sleep_on_fold_key";
+ private static final String SETTING_VALUE_DEFAULT = SETTING_VALUE_SELECTIVE_STAY_AWAKE;
+ public static final String TAG = "FoldLockBehaviorSetting";
+ public static final HashSet<String> SETTING_VALUES = new HashSet<>(
+ Set.of(SETTING_VALUE_STAY_AWAKE_ON_FOLD, SETTING_VALUE_SELECTIVE_STAY_AWAKE,
+ SETTING_VALUE_SLEEP_ON_FOLD));
+
+ private Context mContext;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mContext = context;
+ }
+
+ @Override
+ protected List<? extends CandidateInfo> getCandidates() {
+ List<CandidateInfoExtra> candidates = new ArrayList<>();
+ candidates.add(new CandidateInfoExtra(
+ resourceToString(R.string.stay_awake_on_fold_title),
+ resourceToString(R.string.stay_awake_on_fold_summary),
+ SETTING_VALUE_STAY_AWAKE_ON_FOLD, /* enabled */ true));
+ candidates.add(new CandidateInfoExtra(
+ resourceToString(R.string.selective_stay_awake_title),
+ resourceToString(R.string.selective_stay_awake_summary),
+ SETTING_VALUE_SELECTIVE_STAY_AWAKE, /* enabled */ true));
+ candidates.add(new CandidateInfoExtra(
+ resourceToString(R.string.sleep_on_fold_title),
+ resourceToString(R.string.sleep_on_fold_summary),
+ SETTING_VALUE_SLEEP_ON_FOLD, /* enabled */ true));
+ return candidates;
+ }
+
+ @Override
+ public void bindPreferenceExtra(SelectorWithWidgetPreference pref,
+ String key, CandidateInfo info, String defaultKey, String systemDefaultKey) {
+ if (!(info instanceof CandidateInfoExtra)) {
+ return;
+ }
+
+ pref.setSummary(((CandidateInfoExtra) info).loadSummary());
+ }
+
+ @Override
+ protected String getDefaultKey() {
+ String foldSettingValue = getCurrentFoldSettingValue();
+ foldSettingValue = (foldSettingValue != null) ? foldSettingValue : SETTING_VALUE_DEFAULT;
+ if (!SETTING_VALUES.contains(foldSettingValue)) {
+ Log.e(TAG,
+ "getDefaultKey: Invalid setting value, returning default setting value");
+ foldSettingValue = SETTING_VALUE_DEFAULT;
+ }
+
+ return foldSettingValue;
+ }
+
+ @Override
+ protected boolean setDefaultKey(String key) {
+ if (!SETTING_VALUES.contains(key)) {
+ Log.e(TAG, "setDefaultKey: Can not set invalid key: " + key);
+ key = SETTING_VALUE_SELECTIVE_STAY_AWAKE;
+ }
+ setCurrentFoldSettingValue(key);
+ return true;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.FOLD_LOCK_BEHAVIOR;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.fold_lock_behavior_settings;
+ }
+
+ private String getCurrentFoldSettingValue() {
+ return Settings.System.getStringForUser(mContext.getContentResolver(),
+ FOLD_LOCK_BEHAVIOR,
+ UserHandle.USER_CURRENT);
+ }
+
+ private void setCurrentFoldSettingValue(String key) {
+ Settings.System.putStringForUser(mContext.getContentResolver(),
+ FOLD_LOCK_BEHAVIOR,
+ key,
+ UserHandle.USER_CURRENT);
+ }
+
+ private String resourceToString(int resource) {
+ return mContext.getText(resource).toString();
+ }
+}
diff --git a/src/com/android/settings/display/StayAwakeOnFoldPreferenceController.java b/src/com/android/settings/display/StayAwakeOnFoldPreferenceController.java
deleted file mode 100644
index 9df48f3..0000000
--- a/src/com/android/settings/display/StayAwakeOnFoldPreferenceController.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.display;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.provider.Settings;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-
-/**
- * A preference controller for the "Stay unlocked on fold" setting.
- *
- * This preference controller allows users to control whether or not the device
- * stays awake when it is folded. When this setting is enabled, the device will
- * stay awake even if the device is folded.
- *
- * @link android.provider.Settings.System#STAY_AWAKE_ON_FOLD
- */
-public class StayAwakeOnFoldPreferenceController extends TogglePreferenceController {
-
- private final Resources mResources;
-
- public StayAwakeOnFoldPreferenceController(Context context, String key) {
- this(context, key, context.getResources());
- }
-
- public StayAwakeOnFoldPreferenceController(Context context, String key, Resources resources) {
- super(context, key);
- mResources = resources;
- }
-
- @Override
- public int getAvailabilityStatus() {
- return mResources.getBoolean(R.bool.config_stay_awake_on_fold) ? AVAILABLE
- : UNSUPPORTED_ON_DEVICE;
- }
-
- @Override
- public boolean isChecked() {
- return Settings.System.getInt(
- mContext.getContentResolver(),
- Settings.System.STAY_AWAKE_ON_FOLD,
- 0) == 1;
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- final int stayUnlockedOnFold = isChecked ? 1 : 0;
-
- return Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.STAY_AWAKE_ON_FOLD, stayUnlockedOnFold);
- }
-
- @Override
- public int getSliceHighlightMenuRes() {
- return R.string.menu_key_display;
- }
-
-}
diff --git a/src/com/android/settings/password/SetNewPasswordActivity.java b/src/com/android/settings/password/SetNewPasswordActivity.java
index fc664ec..e54ae7a 100644
--- a/src/com/android/settings/password/SetNewPasswordActivity.java
+++ b/src/com/android/settings/password/SetNewPasswordActivity.java
@@ -121,9 +121,7 @@
@Override
public void launchChooseLock(Bundle chooseLockFingerprintExtras) {
- final boolean isInSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
- Intent intent = isInSetupWizard ? new Intent(this, SetupChooseLockGeneric.class)
- : new Intent(this, ChooseLockGeneric.class);
+ Intent intent = new Intent(this, SetupChooseLockGeneric.class);
intent.setAction(mNewPasswordAction);
intent.putExtras(chooseLockFingerprintExtras);
if (mCallerAppName != null) {
diff --git a/src/com/android/settings/password/SetupChooseLockGeneric.java b/src/com/android/settings/password/SetupChooseLockGeneric.java
index bc6c512..a3bef83 100644
--- a/src/com/android/settings/password/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/password/SetupChooseLockGeneric.java
@@ -256,6 +256,12 @@
return InternalSetupChooseLockGenericFragment.class;
}
+ @Override
+ protected boolean isToolbarEnabled() {
+ // Hide the action bar from this page.
+ return false;
+ }
+
public static class InternalSetupChooseLockGenericFragment
extends ChooseLockGenericFragment {
@Override
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index bf95348..8871135 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -45,11 +45,14 @@
import com.android.settings.R;
import com.android.settings.Settings;
+import com.android.settings.Settings.DataUsageSummaryActivity;
import com.android.settings.Settings.TetherSettingsActivity;
import com.android.settings.Settings.WifiTetherSettingsActivity;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.gestures.OneHandedSettingsUtils;
+import com.android.settings.network.SubscriptionUtil;
+import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.WifiUtils;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -204,6 +207,12 @@
Log.d(TAG, "Skipping non-system app: " + info.activityInfo);
continue;
}
+ if (info.activityInfo.name.endsWith(DataUsageSummaryActivity.class.getSimpleName())) {
+ if (!canShowDataUsage()) {
+ Log.d(TAG, "Skipping data usage settings:" + info.activityInfo);
+ continue;
+ }
+ }
shortcuts.add(info);
}
Collections.sort(shortcuts, SHORTCUT_COMPARATOR);
@@ -211,6 +220,12 @@
}
@VisibleForTesting
+ boolean canShowDataUsage() {
+ return SubscriptionUtil.isSimHardwareVisible(mContext)
+ && !MobileNetworkUtils.isMobileNetworkUserRestricted(mContext);
+ }
+
+ @VisibleForTesting
boolean canShowWifiHotspot() {
return WifiUtils.canShowWifiHotspot(mContext);
}
diff --git a/tests/robotests/src/com/android/settings/display/FoldLockBehaviorPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/FoldLockBehaviorPreferenceControllerTest.java
new file mode 100644
index 0000000..2510bf1
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/FoldLockBehaviorPreferenceControllerTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.display;
+
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.internal.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class FoldLockBehaviorPreferenceControllerTest {
+
+ @Mock
+ private Resources mResources;
+ private Context mContext;
+ private FoldLockBehaviorPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+ mResources = Mockito.mock(Resources.class);
+ mController = new FoldLockBehaviorPreferenceController(mContext, "key", mResources);
+ }
+
+ @Test
+ public void getAvailabilityStatus_withConfigNoShow_returnUnsupported() {
+ when(mResources.getBoolean(R.bool.config_fold_lock_behavior)).thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_withConfigNoShow_returnAvailable() {
+ when(mResources.getBoolean(R.bool.config_fold_lock_behavior)).thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/display/FoldLockBehaviorSettingsTest.java b/tests/robotests/src/com/android/settings/display/FoldLockBehaviorSettingsTest.java
new file mode 100644
index 0000000..37b9391
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/FoldLockBehaviorSettingsTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.display;
+
+import static android.provider.Settings.System.FOLD_LOCK_BEHAVIOR;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+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 class FoldLockBehaviorSettingsTest {
+
+ private Context mContext;
+ private FoldLockBehaviorSettings mSetting;
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+ mSetting = new FoldLockBehaviorSettings();
+ mSetting.onAttach(mContext);
+ }
+
+ @Test
+ public void getDefaultKey_returnFoldSetting() {
+ setFoldSetting("stay_awake_on_fold_key");
+
+ String key = mSetting.getDefaultKey();
+
+ assertThat(key).isEqualTo("stay_awake_on_fold_key");
+ }
+
+ @Test
+ public void setDefaultKey_returnFoldSetting() {
+ mSetting.setDefaultKey("stay_awake_on_fold_key");
+
+ String key = getFoldSettingValue();
+
+ assertThat(key).isEqualTo("stay_awake_on_fold_key");
+ }
+
+ @Test
+ public void setInvalidDefaultKey_returnDefaultFoldSetting() {
+ setFoldSetting("invalid_fold_lock_behavior_key");
+
+ String key = mSetting.getDefaultKey();
+
+ assertThat(key).isEqualTo("selective_stay_awake_key");
+ }
+
+ private void setFoldSetting(String selectedSetting) {
+ Settings.System.putStringForUser(mContext.getContentResolver(),
+ FOLD_LOCK_BEHAVIOR, selectedSetting, UserHandle.USER_CURRENT);
+ }
+
+ private String getFoldSettingValue() {
+ return Settings.System.getStringForUser(mContext.getContentResolver(),
+ FOLD_LOCK_BEHAVIOR, UserHandle.USER_CURRENT);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/display/StayAwakeOnFoldPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/StayAwakeOnFoldPreferenceControllerTest.java
deleted file mode 100644
index c994818..0000000
--- a/tests/robotests/src/com/android/settings/display/StayAwakeOnFoldPreferenceControllerTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.display;
-
-import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.provider.Settings;
-
-import com.android.settings.R;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class StayAwakeOnFoldPreferenceControllerTest {
-
- @Mock
- private Resources mResources;
- private Context mContext;
- private StayAwakeOnFoldPreferenceController mController;
-
- @Before
- public void setUp() {
- mContext = RuntimeEnvironment.application;
- mResources = Mockito.mock(Resources.class);
- mController = new StayAwakeOnFoldPreferenceController(mContext, "key", mResources);
- }
-
- @Test
- public void getAvailabilityStatus_withConfigNoShow_returnUnsupported() {
- when(mResources.getBoolean(R.bool.config_stay_awake_on_fold)).thenReturn(false);
-
- assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
- }
-
- @Test
- public void getAvailabilityStatus_withConfigNoShow_returnAvailable() {
- when(mResources.getBoolean(R.bool.config_stay_awake_on_fold)).thenReturn(true);
-
- assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
- }
-
- @Test
- public void setChecked_enableStayAwakeOnFold_setChecked() {
- mController.setChecked(true);
-
- assertThat(isStayAwakeOnFoldEnabled())
- .isTrue();
- }
-
- @Test
- public void setChecked_disableStayAwakeOnFold_setUnchecked() {
- mController.setChecked(false);
-
- assertThat(isStayAwakeOnFoldEnabled())
- .isFalse();
- }
-
- @Test
- public void isChecked_enableStayAwakeOnFold_returnTrue() {
- enableStayAwakeOnFoldPreference();
-
- assertThat(mController.isChecked()).isTrue();
- }
-
- @Test
- public void isChecked_disableStayAwakeOnFold_returnFalse() {
- disableStayAwakeOnFoldPreference();
-
- assertThat(mController.isChecked()).isFalse();
- }
-
- private void enableStayAwakeOnFoldPreference() {
- Settings.System.putInt(
- mContext.getContentResolver(),
- Settings.System.STAY_AWAKE_ON_FOLD,
- 1);
- }
-
- private void disableStayAwakeOnFoldPreference() {
- Settings.System.putInt(
- mContext.getContentResolver(),
- Settings.System.STAY_AWAKE_ON_FOLD,
- 0);
- }
-
- private boolean isStayAwakeOnFoldEnabled() {
- return (Settings.System.getInt(
- mContext.getContentResolver(),
- Settings.System.STAY_AWAKE_ON_FOLD,
- 0) == 1);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java
index df1fec3..fdb7feb 100644
--- a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java
@@ -36,8 +36,11 @@
import android.content.pm.ResolveInfo;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
+import android.content.res.Resources;
import android.os.SystemProperties;
+import android.os.UserManager;
+import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.testutils.shadow.ShadowConnectivityManager;
@@ -69,6 +72,10 @@
private ShortcutManager mShortcutManager;
@Mock
private Activity mHost;
+ @Mock
+ private Resources mResources;
+ @Mock
+ private UserManager mUserManager;
private Context mContext;
private ShadowConnectivityManager mShadowConnectivityManager;
@@ -188,6 +195,70 @@
assertThat(mController.queryShortcuts()).hasSize(0);
}
+ @Test
+ public void queryShortcuts_configShowDataUsage_ShouldEnableShortcuts() {
+ doReturn(true).when(mController).canShowDataUsage();
+ setupActivityInfo(Settings.DataUsageSummaryActivity.class.getSimpleName());
+
+ assertThat(mController.queryShortcuts()).hasSize(1);
+ }
+
+ @Test
+ public void queryShortcuts_configNotShowDataUsage_ShouldDisableShortcuts() {
+ doReturn(false).when(mController).canShowDataUsage();
+ setupActivityInfo(Settings.DataUsageSummaryActivity.class.getSimpleName());
+
+ assertThat(mController.queryShortcuts()).hasSize(0);
+ }
+
+ @Test
+ public void canShowDataUsage_configShowDataUsage_returnTrue() {
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
+ when(mUserManager.hasUserRestriction(
+ UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)).thenReturn(false);
+
+ assertThat(mController.canShowDataUsage()).isTrue();
+ }
+
+ @Test
+ public void canShowDataUsage_noSimCapability_returnFalse() {
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(false);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
+ when(mUserManager.hasUserRestriction(
+ UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)).thenReturn(false);
+
+ assertThat(mController.canShowDataUsage()).isFalse();
+ }
+
+ @Test
+ public void canShowDataUsage_isGuestUser_returnFalse() {
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(true);
+ when(mUserManager.hasUserRestriction(
+ UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)).thenReturn(false);
+
+ assertThat(mController.canShowDataUsage()).isFalse();
+ }
+
+ @Test
+ public void canShowDataUsage_isMobileNetworkUserRestricted_returnFalse() {
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
+ when(mUserManager.hasUserRestriction(
+ UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)).thenReturn(true);
+
+ assertThat(mController.canShowDataUsage()).isFalse();
+ }
+
private void setupActivityInfo(String name) {
ResolveInfo ri = new ResolveInfo();
ri.activityInfo = new ActivityInfo();
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppPreferenceTest.kt
index 0235a7b..265d92d 100644
--- a/tests/spa_unit/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppPreferenceTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppPreferenceTest.kt
@@ -72,7 +72,7 @@
private val resources = context.resources
private val aspectRatioEnabledConfig =
- TestDeviceConfig(NAMESPACE_WINDOW_MANAGER, "enable_app_compat_user_aspect_ratio_settings")
+ TestDeviceConfig(NAMESPACE_WINDOW_MANAGER, "enable_app_compat_aspect_ratio_user_settings")
@Mock
private lateinit var packageManager: PackageManager