diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7fd390a08ad..3a7cf8e4444 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11668,11 +11668,9 @@
Do nothing
- On (vibrate)
+ Vibrate
- On (mute)
-
- Off
+ Mute
Network details
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index fc5c3e222a2..31571f6d7bd 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -118,7 +118,7 @@
settings:controller="com.android.settings.sound.MediaControlsParentPreferenceController"
settings:keywords="@string/keywords_media_controls"/>
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java b/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
index 7c7be096841..ca1f1c775b4 100644
--- a/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
+++ b/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
@@ -20,20 +20,84 @@ import static android.provider.Settings.Secure.VOLUME_HUSH_GESTURE;
import static android.provider.Settings.Secure.VOLUME_HUSH_MUTE;
import static android.provider.Settings.Secure.VOLUME_HUSH_VIBRATE;
+import android.content.ContentResolver;
import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
import android.provider.Settings;
-import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
-public class PreventRingingParentPreferenceController extends BasePreferenceController {
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.widget.PrimarySwitchPreference;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+/** The controller manages the behaviour of the Prevent Ringing gesture setting. */
+public class PreventRingingParentPreferenceController extends TogglePreferenceController
+ implements LifecycleObserver, OnStart, OnStop {
final String SECURE_KEY = VOLUME_HUSH_GESTURE;
+ private PrimarySwitchPreference mPreference;
+ private SettingObserver mSettingObserver;
+
public PreventRingingParentPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
}
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ mSettingObserver = new SettingObserver(mPreference);
+ }
+
+ @Override
+ public boolean isChecked() {
+ final int preventRinging = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.VOLUME_HUSH_GESTURE,
+ Settings.Secure.VOLUME_HUSH_VIBRATE);
+ return preventRinging != Settings.Secure.VOLUME_HUSH_OFF;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ final int preventRingingSetting = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.VOLUME_HUSH_GESTURE, Settings.Secure.VOLUME_HUSH_VIBRATE);
+ final int newRingingSetting = preventRingingSetting == Settings.Secure.VOLUME_HUSH_OFF
+ ? Settings.Secure.VOLUME_HUSH_VIBRATE
+ : preventRingingSetting;
+
+ return Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.VOLUME_HUSH_GESTURE, isChecked
+ ? newRingingSetting
+ : Settings.Secure.VOLUME_HUSH_OFF);
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ final int value = Settings.Secure.getInt(
+ mContext.getContentResolver(), SECURE_KEY, VOLUME_HUSH_VIBRATE);
+ CharSequence summary;
+ switch (value) {
+ case VOLUME_HUSH_VIBRATE:
+ summary = mContext.getText(R.string.prevent_ringing_option_vibrate_summary);
+ break;
+ case VOLUME_HUSH_MUTE:
+ summary = mContext.getText(R.string.prevent_ringing_option_mute_summary);
+ break;
+ default:
+ summary = null;
+ }
+ preference.setSummary(summary);
+ }
+
@Override
public int getAvailabilityStatus() {
return mContext.getResources().getBoolean(
@@ -42,20 +106,45 @@ public class PreventRingingParentPreferenceController extends BasePreferenceCont
}
@Override
- public CharSequence getSummary() {
- int value = Settings.Secure.getInt(
- mContext.getContentResolver(), SECURE_KEY, VOLUME_HUSH_VIBRATE);
- int summary;
- switch (value) {
- case VOLUME_HUSH_VIBRATE:
- summary = R.string.prevent_ringing_option_vibrate_summary;
- break;
- case VOLUME_HUSH_MUTE:
- summary = R.string.prevent_ringing_option_mute_summary;
- break;
- default:
- summary = R.string.prevent_ringing_option_none_summary;
+ public void onStart() {
+ if (mSettingObserver != null) {
+ mSettingObserver.register(mContext.getContentResolver());
+ mSettingObserver.onChange(false, null);
+ }
+ }
+
+ @Override
+ public void onStop() {
+ if (mSettingObserver != null) {
+ mSettingObserver.unregister(mContext.getContentResolver());
+ }
+ }
+
+ private class SettingObserver extends ContentObserver {
+ private final Uri mVolumeHushGestureUri = Settings.Secure.getUriFor(
+ Settings.Secure.VOLUME_HUSH_GESTURE);
+
+ private final Preference mPreference;
+
+ SettingObserver(Preference preference) {
+ super(new Handler());
+ mPreference = preference;
+ }
+
+ public void register(ContentResolver cr) {
+ cr.registerContentObserver(mVolumeHushGestureUri, false, this);
+ }
+
+ public void unregister(ContentResolver cr) {
+ cr.unregisterContentObserver(this);
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ super.onChange(selfChange, uri);
+ if (uri == null || mVolumeHushGestureUri.equals(uri)) {
+ updateState(mPreference);
+ }
}
- return mContext.getText(summary);
}
}
diff --git a/src/com/android/settings/gestures/PreventRingingSwitchPreferenceController.java b/src/com/android/settings/gestures/PreventRingingSwitchPreferenceController.java
index 9545939255b..be67b5a4f9e 100644
--- a/src/com/android/settings/gestures/PreventRingingSwitchPreferenceController.java
+++ b/src/com/android/settings/gestures/PreventRingingSwitchPreferenceController.java
@@ -16,11 +16,7 @@
package com.android.settings.gestures;
-import android.content.ContentResolver;
import android.content.Context;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Handler;
import android.provider.Settings;
import android.widget.Switch;
@@ -39,7 +35,6 @@ public class PreventRingingSwitchPreferenceController extends AbstractPreference
private static final String KEY = "gesture_prevent_ringing_switch";
private final Context mContext;
- private SettingObserver mSettingObserver;
@VisibleForTesting
SwitchBar mSwitch;
@@ -60,7 +55,6 @@ public class PreventRingingSwitchPreferenceController extends AbstractPreference
if (isAvailable()) {
LayoutPreference pref = screen.findPreference(getPreferenceKey());
if (pref != null) {
- mSettingObserver = new SettingObserver(pref);
pref.setOnPreferenceClickListener(preference -> {
int preventRinging = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.VOLUME_HUSH_GESTURE,
@@ -113,32 +107,4 @@ public class PreventRingingSwitchPreferenceController extends AbstractPreference
? newRingingSetting
: Settings.Secure.VOLUME_HUSH_OFF);
}
-
- private class SettingObserver extends ContentObserver {
- private final Uri VOLUME_HUSH_GESTURE = Settings.Secure.getUriFor(
- Settings.Secure.VOLUME_HUSH_GESTURE);
-
- private final Preference mPreference;
-
- public SettingObserver(Preference preference) {
- super(new Handler());
- mPreference = preference;
- }
-
- public void register(ContentResolver cr) {
- cr.registerContentObserver(VOLUME_HUSH_GESTURE, false, this);
- }
-
- public void unregister(ContentResolver cr) {
- cr.unregisterContentObserver(this);
- }
-
- @Override
- public void onChange(boolean selfChange, Uri uri) {
- super.onChange(selfChange, uri);
- if (uri == null || VOLUME_HUSH_GESTURE.equals(uri)) {
- updateState(mPreference);
- }
- }
- }
}
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 1ad093fad35..fc209b8cff3 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -26,6 +26,7 @@ import android.os.Message;
import android.os.UserHandle;
import android.preference.SeekBarVolumizer;
import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
import androidx.annotation.VisibleForTesting;
import androidx.preference.ListPreference;
@@ -33,6 +34,7 @@ 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;
@@ -152,6 +154,9 @@ 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;
}
diff --git a/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java
index c752eb98232..9e4877c954f 100644
--- a/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java
@@ -32,6 +32,8 @@ import android.content.Context;
import android.content.res.Resources;
import android.provider.Settings;
+import androidx.preference.Preference;
+
import com.android.settings.R;
import org.junit.Before;
@@ -50,12 +52,14 @@ public class PreventRingingParentPreferenceControllerTest {
private Context mContext;
private PreventRingingParentPreferenceController mController;
+ private Preference mPreference;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
mController = new PreventRingingParentPreferenceController(mContext, "test_key");
+ mPreference = new Preference(mContext);
}
@Test
@@ -80,17 +84,43 @@ public class PreventRingingParentPreferenceControllerTest {
public void updateState_summaryUpdated() {
Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
VOLUME_HUSH_MUTE);
- assertThat(mController.getSummary()).isEqualTo(mContext.getResources().getText(
+ mController.updateState(mPreference);
+ assertThat(mPreference.getSummary()).isEqualTo(mContext.getResources().getText(
R.string.prevent_ringing_option_mute_summary));
Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
VOLUME_HUSH_VIBRATE);
- assertThat(mController.getSummary()).isEqualTo(mContext.getResources().getText(
+ mController.updateState(mPreference);
+ assertThat(mPreference.getSummary()).isEqualTo(mContext.getResources().getText(
R.string.prevent_ringing_option_vibrate_summary));
Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
VOLUME_HUSH_OFF);
- assertThat(mController.getSummary()).isEqualTo(mContext.getResources().getText(
- R.string.prevent_ringing_option_none_summary));
+ mController.updateState(mPreference);
+ assertThat(mPreference.getSummary()).isEqualTo(null);
+ }
+
+ @Test
+ public void isChecked_vibrate_shouldReturnTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
+ VOLUME_HUSH_VIBRATE);
+
+ assertThat(mController.isChecked()).isTrue();
+ }
+
+ @Test
+ public void isChecked_mute_shouldReturnTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
+ VOLUME_HUSH_MUTE);
+
+ assertThat(mController.isChecked()).isTrue();
+ }
+
+ @Test
+ public void isChecked_off_shouldReturnFalse() {
+ Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
+ VOLUME_HUSH_OFF);
+
+ assertThat(mController.isChecked()).isFalse();
}
}