Prompt to start user before choosing a new ringtone

Dead users can't hear, nor see, ringtones. Let's wake them up and give
them a good shake first.

Until then, show a nice friendly "work profile isn't available" message.
Or depending on locale something confusing, egregious, and mismatched
like "work profile isn't available" instead.

Fix: 34735015
Bug: 34734809
Test: make RunSettingsRoboTests && make Settings && adb install -r $OUT/system/priv-app/Settings/Settings.apk && then reboot the device to see what happens
Change-Id: I86e61a7f3f654d7f38f04c43227a31e2f288e18f
diff --git a/src/com/android/settings/DefaultRingtonePreference.java b/src/com/android/settings/DefaultRingtonePreference.java
index 6893a21..09f5af4 100644
--- a/src/com/android/settings/DefaultRingtonePreference.java
+++ b/src/com/android/settings/DefaultRingtonePreference.java
@@ -30,7 +30,7 @@
 public class DefaultRingtonePreference extends RingtonePreference {
     private static final String TAG = "DefaultRingtonePreference";
 
-    private int mUserId;
+    private int mUserId = UserHandle.USER_CURRENT;
     protected Context mUserContext;
 
     public DefaultRingtonePreference(Context context, AttributeSet attrs) {
@@ -40,21 +40,19 @@
 
     public void setUserId(int userId) {
         mUserId = userId;
-        Context context = getContext();
-        mUserContext = Utils.createPackageContextAsUser(context, mUserId);
+        mUserContext = Utils.createPackageContextAsUser(getContext(), mUserId);
     }
 
     @Override
     public void performClick() {
-        if (!Utils.startQuietModeDialogIfNecessary(getContext(), UserManager.get(getContext()),
-                mUserId)) {
-            super.performClick();
+        if (mUserId != UserHandle.USER_CURRENT) {
+            if (Utils.unlockWorkProfileIfNecessary(getContext(), mUserId) ||
+                    Utils.startQuietModeDialogIfNecessary(getContext(),
+                            UserManager.get(getContext()), mUserId)) {
+                return;
+            }
         }
-    }
-
-    public void clearUserId(int userId) {
-        mUserId = UserHandle.USER_CURRENT;
-        mUserContext = getContext();
+        super.performClick();
     }
 
     @Override
diff --git a/src/com/android/settings/notification/WorkSoundPreferenceController.java b/src/com/android/settings/notification/WorkSoundPreferenceController.java
index cc671ad..3053f2a 100644
--- a/src/com/android/settings/notification/WorkSoundPreferenceController.java
+++ b/src/com/android/settings/notification/WorkSoundPreferenceController.java
@@ -157,9 +157,8 @@
     }
 
     private CharSequence updateRingtoneName(Context context, int type) {
-        if (context == null) {
-            Log.e(TAG, "Unable to update ringtone name, no context provided");
-            return null;
+        if (context == null || !UserManager.get(context).isUserUnlocked(context.getUserId())) {
+            return context.getString(R.string.managed_profile_not_available_label);
         }
         Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type);
         return Ringtone.getTitle(context, ringtoneUri, false /* followSettingsUri */,