diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index 31571f6d7bd..56632a5e993 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -19,8 +19,7 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/sound_settings"
android:key="sound_settings"
- settings:keywords="@string/keywords_sounds"
- settings:initialExpandedChildrenCount="9">
+ settings:keywords="@string/keywords_sounds">
-
-
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+ android:order="-70"/>
+ android:order="-60"/>
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:fragment="com.android.settings.notification.SoundWorkSettings"
+ android:order="100"
+ settings:controller="com.android.settings.notification.WorkSoundsPreferenceController"/>
diff --git a/res/xml/sound_settings_v2.xml b/res/xml/sound_settings_v2.xml
deleted file mode 100644
index b45dd9bec99..00000000000
--- a/res/xml/sound_settings_v2.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 7c665d11e0c..85623b8a9f7 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -25,9 +25,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.UserHandle;
import android.preference.SeekBarVolumizer;
-import android.provider.SearchIndexableResource;
import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
import androidx.annotation.VisibleForTesting;
import androidx.preference.ListPreference;
@@ -35,7 +33,6 @@ import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.RingtonePreference;
-import com.android.settings.core.FeatureFlags;
import com.android.settings.core.OnActivityResultListener;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -155,9 +152,6 @@ public class SoundSettings extends DashboardFragment implements OnActivityResult
@Override
protected int getPreferenceScreenResId() {
- if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.SILKY_HOME)) {
- return R.xml.sound_settings_v2;
- }
return R.xml.sound_settings;
}
@@ -251,12 +245,6 @@ public class SoundSettings extends DashboardFragment implements OnActivityResult
controllers.add(new AlarmRingtonePreferenceController(context));
controllers.add(new NotificationRingtonePreferenceController(context));
- if (!FeatureFlagUtils.isEnabled(context, FeatureFlags.SILKY_HOME)) {
- // TODO(b/174964721): This should be removed when the flag is deprecated.
- // === Work Sound Settings ===
- controllers.add(new WorkSoundPreferenceController(context, fragment, lifecycle));
- }
-
// === Other Sound Settings ===
final DialPadTonePreferenceController dialPadTonePreferenceController =
new DialPadTonePreferenceController(context, fragment, lifecycle);
@@ -312,30 +300,8 @@ public class SoundSettings extends DashboardFragment implements OnActivityResult
return buildPreferenceControllers(context, null /* fragment */,
null /* lifecycle */);
}
-
- @Override
- public List getXmlResourcesToIndex(
- Context context, boolean enabled) {
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = FeatureFlagUtils.isEnabled(context, FeatureFlags.SILKY_HOME)
- ? R.xml.sound_settings_v2 : R.xml.sound_settings;
- return Arrays.asList(sir);
- }
};
- // === Work Sound Settings ===
-
- void enableWorkSync() {
- // TODO(b/174964721): This should be refined when the flag is deprecated.
- if (!FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.SILKY_HOME)) {
- final WorkSoundPreferenceController workSoundController =
- use(WorkSoundPreferenceController.class);
- if (workSoundController != null) {
- workSoundController.enableWorkSync();
- }
- }
- }
-
private void onPreferenceDataChanged(ListPreference preference) {
if (mDialogFragment != null) {
mDialogFragment.onListPreferenceUpdated(preference);
diff --git a/src/com/android/settings/notification/SoundWorkSettings.java b/src/com/android/settings/notification/SoundWorkSettings.java
index 9fae72d3175..d30c04f26ff 100644
--- a/src/com/android/settings/notification/SoundWorkSettings.java
+++ b/src/com/android/settings/notification/SoundWorkSettings.java
@@ -23,13 +23,11 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.RingtonePreference;
-import com.android.settings.core.FeatureFlags;
import com.android.settings.core.OnActivityResultListener;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -123,16 +121,12 @@ public class SoundWorkSettings extends DashboardFragment implements OnActivityRe
}
static final boolean isSupportWorkProfileSound(Context context) {
- // TODO(b/174964721): Feature flag should be removed when silky home launched.
- final boolean isSilkyEnabled = FeatureFlagUtils.isEnabled(context,
- FeatureFlags.SILKY_HOME);
-
final AudioHelper audioHelper = new AudioHelper(context);
final boolean hasWorkProfile = audioHelper.getManagedProfileId(
UserManager.get(context)) != UserHandle.USER_NULL;
final boolean shouldShowRingtoneSettings = !audioHelper.isSingleVolume();
- return isSilkyEnabled && hasWorkProfile && shouldShowRingtoneSettings;
+ return hasWorkProfile && shouldShowRingtoneSettings;
}
void enableWorkSync() {
diff --git a/src/com/android/settings/notification/WorkSoundPreferenceController.java b/src/com/android/settings/notification/WorkSoundPreferenceController.java
deleted file mode 100644
index e257feab2ca..00000000000
--- a/src/com/android/settings/notification/WorkSoundPreferenceController.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification;
-
-import android.annotation.UserIdInt;
-import android.app.Dialog;
-import android.app.settings.SettingsEnums;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.Settings;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.FragmentManager;
-import androidx.preference.Preference;
-import androidx.preference.Preference.OnPreferenceChangeListener;
-import androidx.preference.PreferenceGroup;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.TwoStatePreference;
-
-import com.android.settings.DefaultRingtonePreference;
-import com.android.settings.R;
-import com.android.settings.Utils;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnPause;
-import com.android.settingslib.core.lifecycle.events.OnResume;
-
-import java.util.List;
-
-/**
- * TODO(b/183670633): Remove this file when silky flag deprecated.
- */
-public class WorkSoundPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin, OnPreferenceChangeListener, LifecycleObserver,
- OnResume, OnPause {
-
- private static final String TAG = "WorkSoundPrefController";
- private static final String KEY_WORK_CATEGORY = "sound_work_settings_section";
- private static final String KEY_WORK_USE_PERSONAL_SOUNDS = "work_use_personal_sounds";
- private static final String KEY_WORK_PHONE_RINGTONE = "work_ringtone";
- private static final String KEY_WORK_NOTIFICATION_RINGTONE = "work_notification_ringtone";
- private static final String KEY_WORK_ALARM_RINGTONE = "work_alarm_ringtone";
-
- private final boolean mVoiceCapable;
- private final UserManager mUserManager;
- private final SoundSettings mParent;
- private final AudioHelper mHelper;
-
- private PreferenceGroup mWorkPreferenceCategory;
- private TwoStatePreference mWorkUsePersonalSounds;
- private Preference mWorkPhoneRingtonePreference;
- private Preference mWorkNotificationRingtonePreference;
- private Preference mWorkAlarmRingtonePreference;
-
- @UserIdInt
- private int mManagedProfileId;
-
- public WorkSoundPreferenceController(Context context, SoundSettings parent,
- Lifecycle lifecycle) {
- this(context, parent, lifecycle, new AudioHelper(context));
- }
-
- @VisibleForTesting
- WorkSoundPreferenceController(Context context, SoundSettings parent, Lifecycle lifecycle,
- AudioHelper helper) {
- super(context);
- mUserManager = UserManager.get(context);
- mVoiceCapable = Utils.isVoiceCapable(mContext);
- mParent = parent;
- mHelper = helper;
- if (lifecycle != null) {
- lifecycle.addObserver(this);
- }
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mWorkPreferenceCategory = screen.findPreference(KEY_WORK_CATEGORY);
- }
-
- @Override
- public void onResume() {
- IntentFilter managedProfileFilter = new IntentFilter();
- managedProfileFilter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
- managedProfileFilter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
- mContext.registerReceiver(mManagedProfileReceiver, managedProfileFilter);
-
- mManagedProfileId = mHelper.getManagedProfileId(mUserManager);
- updateWorkPreferences();
- }
-
- @Override
- public void onPause() {
- mContext.unregisterReceiver(mManagedProfileReceiver);
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_WORK_CATEGORY;
- }
-
- @Override
- public boolean isAvailable() {
- return mHelper.getManagedProfileId(mUserManager) != UserHandle.USER_NULL
- && shouldShowRingtoneSettings();
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- return false;
- }
-
- /**
- * Updates the summary of work preferences
- *
- * This controller listens to changes on the work ringtone preferences, identified by keys
- * "work_ringtone", "work_notification_ringtone" and "work_alarm_ringtone".
- */
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- int ringtoneType;
- if (KEY_WORK_PHONE_RINGTONE.equals(preference.getKey())) {
- ringtoneType = RingtoneManager.TYPE_RINGTONE;
- } else if (KEY_WORK_NOTIFICATION_RINGTONE.equals(preference.getKey())) {
- ringtoneType = RingtoneManager.TYPE_NOTIFICATION;
- } else if (KEY_WORK_ALARM_RINGTONE.equals(preference.getKey())) {
- ringtoneType = RingtoneManager.TYPE_ALARM;
- } else {
- return true;
- }
-
- preference.setSummary(updateRingtoneName(getManagedProfileContext(), ringtoneType));
- return true;
- }
-
- @Override
- public void updateNonIndexableKeys(List keys) {
- if (isAvailable()) {
- return;
- }
- keys.add(KEY_WORK_CATEGORY);
- keys.add(KEY_WORK_USE_PERSONAL_SOUNDS);
- keys.add(KEY_WORK_NOTIFICATION_RINGTONE);
- keys.add(KEY_WORK_PHONE_RINGTONE);
- keys.add(KEY_WORK_ALARM_RINGTONE);
- }
-
- // === Phone & notification ringtone ===
-
- private boolean shouldShowRingtoneSettings() {
- return !mHelper.isSingleVolume();
- }
-
- private CharSequence updateRingtoneName(Context context, int type) {
- if (context == null || !mHelper.isUserUnlocked(mUserManager, context.getUserId())) {
- return mContext.getString(R.string.managed_profile_not_available_label);
- }
- Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type);
- return Ringtone.getTitle(context, ringtoneUri, false /* followSettingsUri */,
- true /* allowRemote */);
- }
-
- private Context getManagedProfileContext() {
- if (mManagedProfileId == UserHandle.USER_NULL) {
- return null;
- }
- return mHelper.createPackageContextAsUser(mManagedProfileId);
- }
-
- private DefaultRingtonePreference initWorkPreference(PreferenceGroup root, String key) {
- DefaultRingtonePreference pref =
- (DefaultRingtonePreference) root.findPreference(key);
- pref.setOnPreferenceChangeListener(this);
-
- // Required so that RingtonePickerActivity lists the work profile ringtones
- pref.setUserId(mManagedProfileId);
- return pref;
- }
-
- private void updateWorkPreferences() {
- if (mWorkPreferenceCategory == null) {
- return;
- }
- final boolean isAvailable = isAvailable();
- mWorkPreferenceCategory.setVisible(isAvailable);
- if (!isAvailable) {
- return;
- }
- if (mWorkUsePersonalSounds == null) {
- mWorkUsePersonalSounds = (TwoStatePreference)
- mWorkPreferenceCategory.findPreference(KEY_WORK_USE_PERSONAL_SOUNDS);
- mWorkUsePersonalSounds.setOnPreferenceChangeListener((Preference p, Object value) -> {
- if ((boolean) value) {
- UnifyWorkDialogFragment.show(mParent);
- return false;
- } else {
- disableWorkSync();
- return true;
- }
- });
- }
- if (mWorkPhoneRingtonePreference == null) {
- mWorkPhoneRingtonePreference = initWorkPreference(mWorkPreferenceCategory,
- KEY_WORK_PHONE_RINGTONE);
- }
- if (mWorkNotificationRingtonePreference == null) {
- mWorkNotificationRingtonePreference = initWorkPreference(mWorkPreferenceCategory,
- KEY_WORK_NOTIFICATION_RINGTONE);
- }
- if (mWorkAlarmRingtonePreference == null) {
- mWorkAlarmRingtonePreference = initWorkPreference(mWorkPreferenceCategory,
- KEY_WORK_ALARM_RINGTONE);
- }
- if (!mVoiceCapable) {
- mWorkPhoneRingtonePreference.setVisible(false);
- mWorkPhoneRingtonePreference = null;
- }
-
- final Context managedProfileContext = getManagedProfileContext();
- if (Settings.Secure.getIntForUser(managedProfileContext.getContentResolver(),
- Settings.Secure.SYNC_PARENT_SOUNDS, 0, mManagedProfileId) == 1) {
- enableWorkSyncSettings();
- } else {
- disableWorkSyncSettings();
- }
- }
-
- void enableWorkSync() {
- RingtoneManager.enableSyncFromParent(getManagedProfileContext());
- enableWorkSyncSettings();
- }
-
- private void enableWorkSyncSettings() {
- mWorkUsePersonalSounds.setChecked(true);
-
- if (mWorkPhoneRingtonePreference != null) {
- mWorkPhoneRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
- }
- mWorkNotificationRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
- mWorkAlarmRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
- }
-
- private void disableWorkSync() {
- RingtoneManager.disableSyncFromParent(getManagedProfileContext());
- disableWorkSyncSettings();
- }
-
- private void disableWorkSyncSettings() {
- if (mWorkPhoneRingtonePreference != null) {
- mWorkPhoneRingtonePreference.setEnabled(true);
- }
- mWorkNotificationRingtonePreference.setEnabled(true);
- mWorkAlarmRingtonePreference.setEnabled(true);
-
- updateWorkRingtoneSummaries();
- }
-
- private void updateWorkRingtoneSummaries() {
- Context managedProfileContext = getManagedProfileContext();
-
- if (mWorkPhoneRingtonePreference != null) {
- mWorkPhoneRingtonePreference.setSummary(
- updateRingtoneName(managedProfileContext, RingtoneManager.TYPE_RINGTONE));
- }
- mWorkNotificationRingtonePreference.setSummary(
- updateRingtoneName(managedProfileContext, RingtoneManager.TYPE_NOTIFICATION));
- mWorkAlarmRingtonePreference.setSummary(
- updateRingtoneName(managedProfileContext, RingtoneManager.TYPE_ALARM));
- }
-
- public void onManagedProfileAdded(@UserIdInt int profileId) {
- if (mManagedProfileId == UserHandle.USER_NULL) {
- mManagedProfileId = profileId;
- updateWorkPreferences();
- }
- }
-
- public void onManagedProfileRemoved(@UserIdInt int profileId) {
- if (mManagedProfileId == profileId) {
- mManagedProfileId = mHelper.getManagedProfileId(mUserManager);
- updateWorkPreferences();
- }
- }
-
- private final BroadcastReceiver mManagedProfileReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- final int userId = ((UserHandle) intent.getExtra(Intent.EXTRA_USER)).getIdentifier();
- switch (intent.getAction()) {
- case Intent.ACTION_MANAGED_PROFILE_ADDED: {
- onManagedProfileAdded(userId);
- return;
- }
- case Intent.ACTION_MANAGED_PROFILE_REMOVED: {
- onManagedProfileRemoved(userId);
- return;
- }
- }
- }
- };
-
- public static class UnifyWorkDialogFragment extends InstrumentedDialogFragment
- implements DialogInterface.OnClickListener {
- private static final String TAG = "UnifyWorkDialogFragment";
- private static final int REQUEST_CODE = 200;
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.DIALOG_UNIFY_SOUND_SETTINGS;
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
- .setTitle(R.string.work_sync_dialog_title)
- .setMessage(R.string.work_sync_dialog_message)
- .setPositiveButton(R.string.work_sync_dialog_yes, UnifyWorkDialogFragment.this)
- .setNegativeButton(android.R.string.no, null)
- .create();
- }
-
- public static void show(SoundSettings parent) {
- FragmentManager fm = parent.getFragmentManager();
- if (fm.findFragmentByTag(TAG) == null) {
- UnifyWorkDialogFragment fragment = new UnifyWorkDialogFragment();
- fragment.setTargetFragment(parent, REQUEST_CODE);
- fragment.show(fm, TAG);
- }
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- SoundSettings soundSettings = (SoundSettings) getTargetFragment();
- if (soundSettings.isAdded()) {
- soundSettings.enableWorkSync();
- }
- }
- }
-
-}
diff --git a/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java
deleted file mode 100644
index fb4747c7fe7..00000000000
--- a/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.telephony.TelephonyManager;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.TwoStatePreference;
-
-import com.android.settings.DefaultRingtonePreference;
-import com.android.settings.R;
-import com.android.settings.RingtonePreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-
-@RunWith(RobolectricTestRunner.class)
-public class WorkSoundPreferenceControllerTest {
-
- private static final String KEY_WORK_CATEGORY = "sound_work_settings_section";
- private static final String KEY_WORK_USE_PERSONAL_SOUNDS = "work_use_personal_sounds";
- private static final String KEY_WORK_PHONE_RINGTONE = "work_ringtone";
- private static final String KEY_WORK_NOTIFICATION_RINGTONE = "work_notification_ringtone";
- private static final String KEY_WORK_ALARM_RINGTONE = "work_alarm_ringtone";
-
- @Mock
- private Context mContext;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private PreferenceCategory mWorkCategory;
- @Mock
- private TelephonyManager mTelephonyManager;
- @Mock
- private AudioHelper mAudioHelper;
- @Mock
- private SoundSettings mFragment;
-
- private WorkSoundPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
- when(mTelephonyManager.isVoiceCapable()).thenReturn(true);
- when(mScreen.findPreference(KEY_WORK_CATEGORY))
- .thenReturn(mWorkCategory);
- when(mWorkCategory.findPreference(KEY_WORK_USE_PERSONAL_SOUNDS))
- .thenReturn(mock(TwoStatePreference.class));
- when(mWorkCategory.findPreference(KEY_WORK_PHONE_RINGTONE))
- .thenReturn(mock(DefaultRingtonePreference.class));
- when(mWorkCategory.findPreference(KEY_WORK_NOTIFICATION_RINGTONE))
- .thenReturn(mock(DefaultRingtonePreference.class));
- when(mWorkCategory.findPreference(KEY_WORK_ALARM_RINGTONE))
- .thenReturn(mock(DefaultRingtonePreference.class));
-
- mController = new WorkSoundPreferenceController(mContext, mFragment, null, mAudioHelper);
- }
-
- @Test
- public void isAvailable_managedProfileAndNotSingleVolume_shouldReturnTrue() {
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.myUserId());
- when(mAudioHelper.isUserUnlocked(nullable(UserManager.class), anyInt())).thenReturn(true);
- when(mAudioHelper.isSingleVolume()).thenReturn(false);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_noManagedProfile_shouldReturnFalse() {
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.USER_NULL);
- when(mAudioHelper.isUserUnlocked(nullable(UserManager.class), anyInt())).thenReturn(true);
- when(mAudioHelper.isSingleVolume()).thenReturn(false);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_singleVolume_shouldReturnFalse() {
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.myUserId());
- when(mAudioHelper.isUserUnlocked(nullable(UserManager.class), anyInt())).thenReturn(true);
- when(mAudioHelper.isSingleVolume()).thenReturn(true);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void onManagedProfileAdded_shouldDisplayPreferenceCategory() {
- // Given a device without any managed profiles:
- when(mAudioHelper.isSingleVolume()).thenReturn(false);
- when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
- when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.USER_NULL);
-
- // When the fragment first displays, the category should not appear.
- mController.displayPreference(mScreen);
- verify(mWorkCategory).setVisible(false);
-
- // However, when a managed profile is added later, the category should appear.
- mController.onResume();
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.myUserId());
- mController.onManagedProfileAdded(UserHandle.myUserId());
-
- verify(mWorkCategory).setVisible(true);
- }
-
- @Test
- public void onManagedProfileRemoved_shouldHidePreferenceCategory() {
- // Given a device with a managed profile:
- when(mAudioHelper.isSingleVolume()).thenReturn(false);
- when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
- when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.myUserId());
- when(mAudioHelper.isUserUnlocked(nullable(UserManager.class), anyInt())).thenReturn(true);
-
- // Which is in resumed state:
- mController.displayPreference(mScreen);
- mController.onResume();
-
- verify(mWorkCategory, times(2)).setVisible(true);
-
- // When a managed profile is removed, the category should be hidden.
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.USER_NULL);
- mController.onManagedProfileRemoved(UserHandle.myUserId());
-
- verify(mWorkCategory).setVisible(false);
- }
-
- @Test
- public void displayPreference_isAvailable_shouldShowPreferenceCategory() {
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.myUserId());
- when(mAudioHelper.isUserUnlocked(nullable(UserManager.class), anyInt())).thenReturn(true);
- when(mAudioHelper.isSingleVolume()).thenReturn(false);
- when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
- when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
-
- mController.displayPreference(mScreen);
- verify(mWorkCategory).setVisible(true);
- }
-
- @Test
- public void displayPreference_notAvailable_shouldHidePreferenceCategory() {
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.USER_NULL);
- when(mAudioHelper.isSingleVolume()).thenReturn(true);
- when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
-
- mController.displayPreference(mScreen);
- verify(mWorkCategory).setVisible(false);
- }
-
- @Test
- public void onPreferenceChange_shouldUpdateSummary() {
- final Preference preference = mock(Preference.class);
- when(preference.getKey()).thenReturn(KEY_WORK_PHONE_RINGTONE);
-
- mController.onPreferenceChange(preference, "hello");
-
- verify(preference).setSummary(nullable(String.class));
- }
-
- @Test
- public void onResume_noVoiceCapability_shouldHidePhoneRingtone() {
- when(mTelephonyManager.isVoiceCapable()).thenReturn(false);
- mController = new WorkSoundPreferenceController(mContext, mFragment, null, mAudioHelper);
-
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.myUserId());
- when(mAudioHelper.isUserUnlocked(nullable(UserManager.class), anyInt())).thenReturn(true);
- when(mAudioHelper.isSingleVolume()).thenReturn(false);
- when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
- when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
-
- // Precondition: work profile is available.
- assertThat(mController.isAvailable()).isTrue();
-
- mController.displayPreference(mScreen);
- mController.onResume();
-
- verify((Preference) mWorkCategory.findPreference(KEY_WORK_PHONE_RINGTONE))
- .setVisible(false);
- }
-
- @Test
- public void onResume_availableButLocked_shouldRedactPreferences() {
- final String notAvailable = "(not available)";
- when(mContext.getString(R.string.managed_profile_not_available_label))
- .thenReturn(notAvailable);
-
- // Given a device with a managed profile:
- when(mAudioHelper.isSingleVolume()).thenReturn(false);
- when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
- when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(UserHandle.myUserId());
- when(mAudioHelper.isUserUnlocked(nullable(UserManager.class), anyInt())).thenReturn(false);
-
- // When resumed:
- mController.displayPreference(mScreen);
- mController.onResume();
-
- verify(mWorkCategory, times(2)).setVisible(true);
-
- // Sound preferences should explain that the profile isn't available yet.
- verify((Preference) mWorkCategory.findPreference(KEY_WORK_PHONE_RINGTONE))
- .setSummary(eq(notAvailable));
- verify((Preference) mWorkCategory.findPreference(KEY_WORK_NOTIFICATION_RINGTONE))
- .setSummary(eq(notAvailable));
- verify((Preference) mWorkCategory.findPreference(KEY_WORK_ALARM_RINGTONE))
- .setSummary(eq(notAvailable));
- }
-
- @Test
- public void onResume_shouldSetUserIdToPreference() {
- final int managedProfileUserId = 10;
- when(mAudioHelper.getManagedProfileId(nullable(UserManager.class)))
- .thenReturn(managedProfileUserId);
- when(mAudioHelper.isUserUnlocked(nullable(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);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/notification/WorkSoundsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/WorkSoundsPreferenceControllerTest.java
index 2b380311439..448dd5c1810 100644
--- a/tests/robotests/src/com/android/settings/notification/WorkSoundsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/WorkSoundsPreferenceControllerTest.java
@@ -23,9 +23,7 @@ import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.os.UserHandle;
-import android.util.FeatureFlagUtils;
-import com.android.settings.core.FeatureFlags;
import com.android.settings.testutils.shadow.ShadowAudioHelper;
import org.junit.After;
@@ -56,7 +54,6 @@ public class WorkSoundsPreferenceControllerTest {
@Test
public void getAvailabilityStatus_supportWorkProfileSound_shouldReturnAvailable() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlags.SILKY_HOME, true);
ShadowAudioHelper.setIsSingleVolume(false);
ShadowAudioHelper.setManagedProfileId(UserHandle.USER_CURRENT);