diff --git a/res/values/strings.xml b/res/values/strings.xml
index a72794d..9c713f6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10564,7 +10564,7 @@
     <string name="change_nfc_tag_apps_detail_switch">Allow launch on NFC scan</string>
 
     <!-- Special app access > Launch via NFC > Description. [CHAR LIMIT=NONE] -->
-    <string name="change_nfc_tag_apps_detail_summary">Allow this app to launch when a NFC tag is scanned.\nIf this permission is on, the app will be available as an option whenever a tag is detected.</string>
+    <string name="change_nfc_tag_apps_detail_summary">Allow this app to launch when an NFC tag is scanned.\nIf this permission is on, the app will be available as an option whenever a tag is detected.</string>
 
     <!-- Title for media output settings -->
     <string name="media_output_title">Play media to</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 53766e7..fe15226 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -420,7 +420,7 @@
 
     <style name="WorkChallengeEmergencyButtonStyle">
         <item name="android:background">@drawable/work_challenge_emergency_button_background</item>
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:textColor">@android:color/system_accent3_900</item>
         <item name="android:outlineProvider">none</item>
         <item name="android:paddingTop">15dp</item>
         <item name="android:paddingBottom">15dp</item>
diff --git a/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java b/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java
index b443047..93a2747 100644
--- a/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java
+++ b/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java
@@ -113,15 +113,27 @@
 
     @Override
     public void onStart() {
-        if (mLiveData != null) {
+        if (mLiveData == null) {
+            return;
+        }
+
+        try {
             mLiveData.observeForever(this);
+        } catch (SecurityException e) {
+            Log.w(TAG, "observeForever - no permission");
         }
     }
 
     @Override
     public void onStop() {
-        if (mLiveData != null) {
+        if (mLiveData == null) {
+            return;
+        }
+
+        try {
             mLiveData.removeObserver(this);
+        } catch (SecurityException e) {
+            Log.w(TAG, "removeObserver - no permission");
         }
     }
 
diff --git a/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java b/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java
index 01f37b1..cd9f266 100644
--- a/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java
+++ b/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java
@@ -16,9 +16,14 @@
 
 package com.android.settings.language;
 
+import android.app.Dialog;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.text.TextUtils;
 import android.util.Log;
 
 import androidx.annotation.Nullable;
@@ -26,8 +31,12 @@
 
 import com.android.internal.R;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.dashboard.profileselector.ProfileSelectDialog;
+import com.android.settings.dashboard.profileselector.UserAdapter;
 
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 
 /** Controller of the On-device recognition preference. */
@@ -37,6 +46,8 @@
 
     private Optional<Intent> mIntent;
 
+    private WeakReference<Dialog> mProfileSelectDialog = new WeakReference<>(null);
+
     public OnDeviceRecognitionPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
     }
@@ -59,6 +70,48 @@
         }
     }
 
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
+            return super.handlePreferenceTreeClick(preference);
+        }
+        show(preference);
+        return true;
+    }
+
+    private void show(Preference preference) {
+        final List<UserHandle> userHandles = new ArrayList<>();
+        for (UserInfo userInfo : UserManager.get(mContext).getUsers()) {
+            userHandles.add(userInfo.getUserHandle());
+        }
+
+        // Only a single profile is installed. Proceed with its settings.
+        if (userHandles.size() == 1) {
+            mContext.startActivityAsUser(preference.getIntent(), userHandles.get(0));
+            return;
+        }
+
+        // Multiple profiles are installed. Show a dialog to the user to pick one to proceed with.
+        createAndShowProfileSelectDialog(preference.getIntent(), userHandles);
+    }
+
+    private UserAdapter.OnClickListener createProfileDialogClickCallback(
+            Intent intent, List<UserHandle> userHandles) {
+        return (int position) -> {
+            mContext.startActivityAsUser(intent, userHandles.get(position));
+            if (mProfileSelectDialog.get() != null) {
+                mProfileSelectDialog.get().dismiss();
+            }
+        };
+    }
+
+    private void createAndShowProfileSelectDialog(Intent intent, List<UserHandle> userHandles) {
+        Dialog profileSelectDialog = ProfileSelectDialog.createDialog(
+                mContext, userHandles, createProfileDialogClickCallback(intent, userHandles));
+        mProfileSelectDialog = new WeakReference<>(profileSelectDialog);
+        profileSelectDialog.show();
+    }
+
     /**
      * Create an {@link Intent} for the activity in the default on-device recognizer service if
      * there is a properly defined speech recognition xml meta-data for that service.
diff --git a/src/com/android/settings/slices/SlicePreferenceController.java b/src/com/android/settings/slices/SlicePreferenceController.java
index eb10bd4..9a88b56 100644
--- a/src/com/android/settings/slices/SlicePreferenceController.java
+++ b/src/com/android/settings/slices/SlicePreferenceController.java
@@ -44,7 +44,6 @@
     LiveData<Slice> mLiveData;
     @VisibleForTesting
     SlicePreference mSlicePreference;
-    private boolean mIsObservering = false;
     private Uri mUri;
 
     public SlicePreferenceController(Context context, String preferenceKey) {
@@ -74,9 +73,14 @@
 
     @Override
     public void onStart() {
-        if (mLiveData != null && !mIsObservering) {
-            mIsObservering = true;
+        if (mLiveData == null) {
+            return;
+        }
+
+        try {
             mLiveData.observeForever(this);
+        } catch (SecurityException e) {
+            Log.w(TAG, "observeForever - no permission");
         }
     }
 
@@ -91,9 +95,14 @@
     }
 
     private void removeLiveDataObserver() {
-        if (mLiveData != null && mIsObservering && mLiveData.hasActiveObservers()) {
-            mIsObservering = false;
+        if (mLiveData == null) {
+            return;
+        }
+
+        try {
             mLiveData.removeObserver(this);
+        } catch (SecurityException e) {
+            Log.w(TAG, "removeLiveDataObserver - no permission");
         }
     }
 }
