Merge "[DO NOT MERGE] Update title for null uri when setting changes" into qt-r1-dev
diff --git a/res/drawable-nodpi/color_mode_preview.jpg b/res/drawable-nodpi/color_mode_preview.jpg
index 51dedbf..804bcf1 100644
--- a/res/drawable-nodpi/color_mode_preview.jpg
+++ b/res/drawable-nodpi/color_mode_preview.jpg
Binary files differ
diff --git a/res/xml/configure_notification_settings.xml b/res/xml/configure_notification_settings.xml
index 63f6751..89464fb 100644
--- a/res/xml/configure_notification_settings.xml
+++ b/res/xml/configure_notification_settings.xml
@@ -72,6 +72,13 @@
             android:summary="@string/lock_screen_notifs_redact_work_summary"
             settings:controller="com.android.settings.notification.RedactNotificationPreferenceController" />
 
+        <SwitchPreference
+            android:key="notification_lockscreen_bypass"
+            android:title="@string/lockscreen_bypass_title"
+            android:summary="@string/lockscreen_bypass_summary"
+            settings:searchable="false"
+            settings:controller="com.android.settings.biometrics.face.FaceSettingsLockscreenBypassPreferenceController" />
+
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/res/xml/security_lockscreen_settings.xml b/res/xml/security_lockscreen_settings.xml
index fdbee40..8cd4d76 100644
--- a/res/xml/security_lockscreen_settings.xml
+++ b/res/xml/security_lockscreen_settings.xml
@@ -30,6 +30,13 @@
             android:summary="@string/summary_placeholder"
             settings:keywords="@string/keywords_lock_screen_notif"/>
 
+        <SwitchPreference
+            android:key="security_dispaly_lockscreen_bypass"
+            android:title="@string/lockscreen_bypass_title"
+            android:summary="@string/lockscreen_bypass_summary"
+            settings:searchable="false"
+            settings:controller="com.android.settings.biometrics.face.FaceSettingsLockscreenBypassPreferenceController" />
+
         <com.android.settingslib.RestrictedSwitchPreference
             android:key="security_lockscreen_add_users_when_locked"
             android:title="@string/user_add_on_lockscreen_menu"
diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java
index ebf49c9..902d9a1 100644
--- a/src/com/android/settings/biometrics/face/FaceSettings.java
+++ b/src/com/android/settings/biometrics/face/FaceSettings.java
@@ -149,7 +149,6 @@
         // Don't show keyguard controller for work profile settings.
         if (mUserManager.isManagedProfile(mUserId)) {
             removePreference(FaceSettingsKeyguardPreferenceController.KEY);
-            removePreference(FaceSettingsLockscreenBypassPreferenceController.KEY);
         }
 
         if (savedInstanceState != null) {
@@ -261,7 +260,6 @@
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new FaceSettingsVideoPreferenceController(context));
         controllers.add(new FaceSettingsKeyguardPreferenceController(context));
-        controllers.add(new FaceSettingsLockscreenBypassPreferenceController(context));
         controllers.add(new FaceSettingsAppPreferenceController(context));
         controllers.add(new FaceSettingsAttentionPreferenceController(context));
         controllers.add(new FaceSettingsRemoveButtonPreferenceController(context));
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java
index 8d1b543..15fab26 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java
@@ -19,6 +19,8 @@
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.hardware.face.FaceManager;
+import android.os.UserHandle;
+import android.os.UserManager;
 import android.provider.Settings;
 
 import androidx.preference.Preference;
@@ -32,16 +34,15 @@
 
     @VisibleForTesting
     protected FaceManager mFaceManager;
-
-    public FaceSettingsLockscreenBypassPreferenceController(Context context) {
-        this(context, KEY);
-    }
+    private UserManager mUserManager;
 
     public FaceSettingsLockscreenBypassPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
             mFaceManager = context.getSystemService(FaceManager.class);
         }
+
+        mUserManager = context.getSystemService(UserManager.class);
     }
 
     @Override
@@ -75,6 +76,10 @@
 
     @Override
     public int getAvailabilityStatus() {
+        if (mUserManager.isManagedProfile(UserHandle.myUserId())) {
+            return UNSUPPORTED_ON_DEVICE;
+        }
+
         if (mFaceManager != null && mFaceManager.isHardwareDetected()) {
             return mFaceManager.hasEnrolledTemplates() ? AVAILABLE : DISABLED_DEPENDENT_SETTING;
         } else {
diff --git a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
index 4d4d3ef..5998483 100644
--- a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
@@ -61,16 +61,12 @@
     PhoneAccountHandle mSimCallManager;
     private PhoneCallStateListener mPhoneStateListener;
     private Preference mPreference;
-    private boolean mEditableWfcRoamingMode;
-    private boolean mUseWfcHomeModeForRoaming;
 
     public WifiCallingPreferenceController(Context context, String key) {
         super(context, key);
         mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
         mTelephonyManager = context.getSystemService(TelephonyManager.class);
         mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
-        mEditableWfcRoamingMode = true;
-        mUseWfcHomeModeForRoaming = false;
     }
 
     @Override
@@ -129,9 +125,18 @@
             preference.setTitle(title);
             int resId = com.android.internal.R.string.wifi_calling_off_summary;
             if (mImsManager.isWfcEnabledByUser()) {
-                boolean wfcRoamingEnabled = mEditableWfcRoamingMode && !mUseWfcHomeModeForRoaming;
+                boolean useWfcHomeModeForRoaming = false;
+                if (mCarrierConfigManager != null) {
+                    final PersistableBundle carrierConfig =
+                            mCarrierConfigManager.getConfigForSubId(mSubId);
+                    if (carrierConfig != null) {
+                        useWfcHomeModeForRoaming = carrierConfig.getBoolean(
+                                CarrierConfigManager
+                                        .KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL);
+                    }
+                }
                 final boolean isRoaming = mTelephonyManager.isNetworkRoaming();
-                int wfcMode = mImsManager.getWfcMode(isRoaming && wfcRoamingEnabled);
+                int wfcMode = mImsManager.getWfcMode(isRoaming && !useWfcHomeModeForRoaming);
                 switch (wfcMode) {
                     case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
                         resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
@@ -159,16 +164,6 @@
         mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
         mSimCallManager = mContext.getSystemService(TelecomManager.class)
                 .getSimCallManagerForSubscription(mSubId);
-        if (mCarrierConfigManager != null) {
-            final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
-            if (carrierConfig != null) {
-                mEditableWfcRoamingMode = carrierConfig.getBoolean(
-                        CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
-                mUseWfcHomeModeForRoaming = carrierConfig.getBoolean(
-                        CarrierConfigManager
-                                .KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL);
-            }
-        }
     }
 
     private class PhoneCallStateListener extends PhoneStateListener {
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java
index cbcebfc..7f7fa4f 100644
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java
@@ -18,10 +18,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
 import android.hardware.face.FaceManager;
+import android.os.UserManager;
 import android.provider.Settings;
 
 import androidx.preference.SwitchPreference;
@@ -41,6 +43,8 @@
     @Mock
     private FaceManager mFaceManager;
     private SwitchPreference mPreference;
+    @Mock
+    private UserManager mUserManager;
 
     private Context mContext;
     private FaceSettingsLockscreenBypassPreferenceController mController;
@@ -51,8 +55,9 @@
         mContext = RuntimeEnvironment.application;
         mPreference = new SwitchPreference(mContext);
 
-        mController = new FaceSettingsLockscreenBypassPreferenceController(mContext);
+        mController = new FaceSettingsLockscreenBypassPreferenceController(mContext, "test_key");
         ReflectionHelpers.setField(mController, "mFaceManager", mFaceManager);
+        ReflectionHelpers.setField(mController, "mUserManager", mUserManager);
     }
 
     @Test
@@ -63,6 +68,13 @@
     }
 
     @Test
+    public void isAvailable_isManagedProfile_shouldReturnUnsupported() {
+        when(mUserManager.isManagedProfile(anyInt())).thenReturn(true);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
     public void onPreferenceChange_settingIsUpdated() {
         boolean defaultValue = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_faceAuthDismissesKeyguard);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
index 42422f9..f795d61 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
@@ -127,10 +127,10 @@
     }
 
     @Test
-    public void updateState_wfcNonRoaming() {
+    public void updateState_nonRoaming_wfcCellularPreferred() {
         assertNull(mController.mSimCallManager);
-        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false);
-        // update the config value by calling init again.
+        mCarrierConfig.putBoolean(
+                CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, true);
         mController.init(SUB_ID);
         mController.mImsManager = mImsManager;
 
@@ -147,9 +147,10 @@
     }
 
     @Test
-    public void updateState_wfcRoaming() {
+    public void updateState_roaming_wfcWifiPreferred() {
         assertNull(mController.mSimCallManager);
-
+        // useWfcHomeModeForRoaming is false by default. In order to check wfc in roaming mode. We
+        // need the device roaming, and not using home mode in roaming network.
         when(mImsManager.getWfcMode(true)).thenReturn(
                 ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED);
         when(mImsManager.getWfcMode(false)).thenReturn(