diff --git a/src/com/android/settings/DefaultRingtonePreference.java b/src/com/android/settings/DefaultRingtonePreference.java index 823c970f63a..9f9f832b100 100644 --- a/src/com/android/settings/DefaultRingtonePreference.java +++ b/src/com/android/settings/DefaultRingtonePreference.java @@ -19,40 +19,15 @@ package com.android.settings; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.media.RingtoneManager; -import android.os.UserHandle; -import android.os.UserManager; import android.net.Uri; import android.util.AttributeSet; -import android.util.Log; public class DefaultRingtonePreference extends RingtonePreference { private static final String TAG = "DefaultRingtonePreference"; - private int mUserId = UserHandle.USER_CURRENT; - protected Context mUserContext; - public DefaultRingtonePreference(Context context, AttributeSet attrs) { super(context, attrs); - mUserContext = getContext(); - } - - public void setUserId(int userId) { - mUserId = userId; - mUserContext = Utils.createPackageContextAsUser(getContext(), mUserId); - } - - @Override - public void performClick() { - if (mUserId != UserHandle.USER_CURRENT) { - if (Utils.confirmWorkProfileCredentialsIfNecessary(getContext(), mUserId) || - Utils.startQuietModeDialogIfNecessary(getContext(), - UserManager.get(getContext()), mUserId)) { - return; - } - } - super.performClick(); } @Override @@ -64,9 +39,6 @@ public class DefaultRingtonePreference extends RingtonePreference { * doesn't make sense to show a 'Default' item. */ ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false); - if (mUserId != UserHandle.USER_CURRENT) { - ringtonePickerIntent.putExtra(Intent.EXTRA_USER_ID, mUserId); - } } @Override diff --git a/src/com/android/settings/RingtonePreference.java b/src/com/android/settings/RingtonePreference.java index 41318f0d73c..52ab65bd443 100644 --- a/src/com/android/settings/RingtonePreference.java +++ b/src/com/android/settings/RingtonePreference.java @@ -22,6 +22,7 @@ import android.content.res.TypedArray; import android.media.AudioAttributes; import android.media.RingtoneManager; import android.net.Uri; +import android.os.UserHandle; import android.provider.Settings.System; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceManager; @@ -54,6 +55,8 @@ public class RingtonePreference extends Preference { private boolean mShowSilent; private int mRequestCode; + protected int mUserId; + protected Context mUserContext; public RingtonePreference(Context context, AttributeSet attrs) { super(context, attrs); @@ -67,9 +70,19 @@ public class RingtonePreference extends Preference { mShowSilent = a.getBoolean(com.android.internal.R.styleable.RingtonePreference_showSilent, true); setIntent(new Intent(RingtoneManager.ACTION_RINGTONE_PICKER)); + setUserId(UserHandle.myUserId()); a.recycle(); } + public void setUserId(int userId) { + mUserId = userId; + mUserContext = Utils.createPackageContextAsUser(getContext(), mUserId); + } + + public int getUserId() { + return mUserId; + } + /** * Returns the sound type(s) that are shown in the picker. * diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java index 79a89702f5c..552c4d3768b 100644 --- a/src/com/android/settings/notification/SoundSettings.java +++ b/src/com/android/settings/notification/SoundSettings.java @@ -22,6 +22,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.os.UserHandle; import android.preference.SeekBarVolumizer; import android.provider.SearchIndexableResource; import android.support.v7.preference.Preference; @@ -85,7 +86,11 @@ public class SoundSettings extends DashboardFragment { if (preference instanceof RingtonePreference) { mRequestPreference = (RingtonePreference) preference; mRequestPreference.onPrepareRingtonePickerIntent(mRequestPreference.getIntent()); - startActivityForResult(preference.getIntent(), REQUEST_CODE); + startActivityForResultAsUser( + mRequestPreference.getIntent(), + REQUEST_CODE, + null, + UserHandle.of(mRequestPreference.getUserId())); return true; } return super.onPreferenceTreeClick(preference); diff --git a/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java index d996750ba12..520e1f07add 100644 --- a/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java @@ -27,6 +27,7 @@ import android.telephony.TelephonyManager; import com.android.settings.DefaultRingtonePreference; import com.android.settings.R; +import com.android.settings.RingtonePreference; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; @@ -251,4 +252,26 @@ public class WorkSoundPreferenceControllerTest { verify(mWorkCategory.findPreference(KEY_WORK_ALARM_RINGTONE)) .setSummary(eq(notAvailable)); } + + @Test + public void onResume_shouldSetUserIdToPreference() { + final int managedProfileUserId = 10; + when(mAudioHelper.getManagedProfileId(any(UserManager.class))) + .thenReturn(managedProfileUserId); + when(mAudioHelper.isUserUnlocked(any(UserManager.class), anyInt())).thenReturn(true); + when(mAudioHelper.isSingleVolume()).thenReturn(false); + when(mFragment.getPreferenceScreen()).thenReturn(mScreen); + when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext); + + mController.displayPreference(mScreen); + mController.onResume(); + + verify((RingtonePreference) mWorkCategory.findPreference(KEY_WORK_PHONE_RINGTONE)) + .setUserId(managedProfileUserId); + verify((RingtonePreference) mWorkCategory.findPreference(KEY_WORK_NOTIFICATION_RINGTONE)) + .setUserId(managedProfileUserId); + verify((RingtonePreference) mWorkCategory.findPreference(KEY_WORK_ALARM_RINGTONE)) + .setUserId(managedProfileUserId); + } + }