summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Mak <tonymak@google.com> 2017-04-11 20:07:39 +0100
committer Tony Mak <tonymak@google.com> 2017-04-12 15:12:44 +0100
commit007dc1abe62e73a5f84c8e3a1f7564ea1f3a55fc (patch)
tree4e42cd01fd99e93db825abc967404a52c3a2c037
parent44cfdcc9a74ffc5ca260c0b7e888eb8ed2392b53 (diff)
Show RingtonePickerActivity in work user instead
Test: make RunSettingsRoboTests Test: Try to import custom ringtone in work profile, no crash observed Test: Set the custom ringtone as default. Tested both work gmail and calendar can play that ringtone. Test: Try to import the peresonal ringtone, it is still working. Bug: 37197930 Change-Id: I2b662247d7e70b59bae08e082e9682d74d797484
-rw-r--r--src/com/android/settings/DefaultRingtonePreference.java28
-rw-r--r--src/com/android/settings/RingtonePreference.java13
-rw-r--r--src/com/android/settings/notification/SoundSettings.java7
-rw-r--r--tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java23
4 files changed, 42 insertions, 29 deletions
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);
+ }
+
}