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(); } }