Merge "Update Prevent Ringing setting to avoid conflict with long press power" into sc-dev am: 1d2371eecd
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15175451 Change-Id: I6da7f01d56a4abb156cf9200b3b4c04eb9ad3bfd
This commit is contained in:
@@ -12449,6 +12449,8 @@
|
|||||||
<string name="prevent_ringing_option_vibrate_summary">Vibrate</string>
|
<string name="prevent_ringing_option_vibrate_summary">Vibrate</string>
|
||||||
<!-- Summary for prevent ringing setting -->
|
<!-- Summary for prevent ringing setting -->
|
||||||
<string name="prevent_ringing_option_mute_summary">Mute</string>
|
<string name="prevent_ringing_option_mute_summary">Mute</string>
|
||||||
|
<!-- Summary for prevent ringing setting when the option itself is unavailable. [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="prevent_ringing_option_unavailable_lpp_summary">To enable, first change \"Press and hold power button\" to the power menu.</string>
|
||||||
|
|
||||||
<!-- Title for detail page of wifi network [CHAR LIMIT=30] -->
|
<!-- Title for detail page of wifi network [CHAR LIMIT=30] -->
|
||||||
<string name="pref_title_network_details">Network details</string>
|
<string name="pref_title_network_details">Network details</string>
|
||||||
|
@@ -37,10 +37,15 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
|||||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStop;
|
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||||
|
|
||||||
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
|
||||||
/** The controller manages the behaviour of the Prevent Ringing gesture setting. */
|
/** The controller manages the behaviour of the Prevent Ringing gesture setting. */
|
||||||
public class PreventRingingParentPreferenceController extends TogglePreferenceController
|
public class PreventRingingParentPreferenceController extends TogglePreferenceController
|
||||||
implements LifecycleObserver, OnStart, OnStop {
|
implements LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
static final int KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE = 1;
|
||||||
|
|
||||||
final String SECURE_KEY = VOLUME_HUSH_GESTURE;
|
final String SECURE_KEY = VOLUME_HUSH_GESTURE;
|
||||||
|
|
||||||
private PrimarySwitchPreference mPreference;
|
private PrimarySwitchPreference mPreference;
|
||||||
@@ -59,6 +64,10 @@ public class PreventRingingParentPreferenceController extends TogglePreferenceCo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
|
if (!isVolumePowerKeyChordSetToHush()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
final int preventRinging = Settings.Secure.getInt(mContext.getContentResolver(),
|
final int preventRinging = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||||
Settings.Secure.VOLUME_HUSH_GESTURE,
|
Settings.Secure.VOLUME_HUSH_GESTURE,
|
||||||
Settings.Secure.VOLUME_HUSH_VIBRATE);
|
Settings.Secure.VOLUME_HUSH_VIBRATE);
|
||||||
@@ -85,25 +94,47 @@ public class PreventRingingParentPreferenceController extends TogglePreferenceCo
|
|||||||
final int value = Settings.Secure.getInt(
|
final int value = Settings.Secure.getInt(
|
||||||
mContext.getContentResolver(), SECURE_KEY, VOLUME_HUSH_VIBRATE);
|
mContext.getContentResolver(), SECURE_KEY, VOLUME_HUSH_VIBRATE);
|
||||||
CharSequence summary;
|
CharSequence summary;
|
||||||
switch (value) {
|
if (isVolumePowerKeyChordSetToHush()) {
|
||||||
case VOLUME_HUSH_VIBRATE:
|
switch (value) {
|
||||||
summary = mContext.getText(R.string.prevent_ringing_option_vibrate_summary);
|
case VOLUME_HUSH_VIBRATE:
|
||||||
break;
|
summary = mContext.getText(R.string.prevent_ringing_option_vibrate_summary);
|
||||||
case VOLUME_HUSH_MUTE:
|
break;
|
||||||
summary = mContext.getText(R.string.prevent_ringing_option_mute_summary);
|
case VOLUME_HUSH_MUTE:
|
||||||
break;
|
summary = mContext.getText(R.string.prevent_ringing_option_mute_summary);
|
||||||
// VOLUME_HUSH_OFF
|
break;
|
||||||
default:
|
// VOLUME_HUSH_OFF
|
||||||
summary = mContext.getText(R.string.switch_off_text);
|
default:
|
||||||
|
summary = mContext.getText(R.string.switch_off_text);
|
||||||
|
}
|
||||||
|
preference.setEnabled(true);
|
||||||
|
mPreference.setSwitchEnabled(true);
|
||||||
|
} else {
|
||||||
|
summary = mContext.getText(R.string.prevent_ringing_option_unavailable_lpp_summary);
|
||||||
|
preference.setEnabled(false);
|
||||||
|
mPreference.setSwitchEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
preference.setSummary(summary);
|
preference.setSummary(summary);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return mContext.getResources().getBoolean(
|
if (!mContext.getResources().getBoolean(
|
||||||
com.android.internal.R.bool.config_volumeHushGestureEnabled)
|
com.android.internal.R.bool.config_volumeHushGestureEnabled)) {
|
||||||
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
return UNSUPPORTED_ON_DEVICE;
|
||||||
|
}
|
||||||
|
if (isVolumePowerKeyChordSetToHush()) {
|
||||||
|
return AVAILABLE;
|
||||||
|
}
|
||||||
|
if (mContext.getResources().getBoolean(
|
||||||
|
com.android.internal
|
||||||
|
.R.bool.config_longPressOnPowerForAssistantSettingAvailable)) {
|
||||||
|
// The power + volume key chord is not set to hush gesture - it's been disabled
|
||||||
|
// by long press power for Assistant.
|
||||||
|
return DISABLED_DEPENDENT_SETTING;
|
||||||
|
}
|
||||||
|
|
||||||
|
return UNSUPPORTED_ON_DEVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -121,9 +152,26 @@ public class PreventRingingParentPreferenceController extends TogglePreferenceCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if power + volume up key chord is actually set to "mute toggle". If not,
|
||||||
|
* this setting will have no effect and should be disabled.
|
||||||
|
*
|
||||||
|
* This handles the condition when long press on power for Assistant changes power + volume
|
||||||
|
* chord to power menu and this setting needs to be disabled.
|
||||||
|
*/
|
||||||
|
private boolean isVolumePowerKeyChordSetToHush() {
|
||||||
|
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Global.KEY_CHORD_POWER_VOLUME_UP,
|
||||||
|
mContext.getResources().getInteger(
|
||||||
|
com.android.internal.R.integer.config_keyChordPowerVolumeUp))
|
||||||
|
== KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE;
|
||||||
|
}
|
||||||
|
|
||||||
private class SettingObserver extends ContentObserver {
|
private class SettingObserver extends ContentObserver {
|
||||||
private final Uri mVolumeHushGestureUri = Settings.Secure.getUriFor(
|
private final Uri mVolumeHushGestureUri = Settings.Secure.getUriFor(
|
||||||
Settings.Secure.VOLUME_HUSH_GESTURE);
|
Settings.Secure.VOLUME_HUSH_GESTURE);
|
||||||
|
private final Uri mKeyChordVolumePowerUpUri = Settings.Global.getUriFor(
|
||||||
|
Settings.Global.KEY_CHORD_POWER_VOLUME_UP);
|
||||||
|
|
||||||
private final Preference mPreference;
|
private final Preference mPreference;
|
||||||
|
|
||||||
@@ -133,6 +181,7 @@ public class PreventRingingParentPreferenceController extends TogglePreferenceCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void register(ContentResolver cr) {
|
public void register(ContentResolver cr) {
|
||||||
|
cr.registerContentObserver(mKeyChordVolumePowerUpUri, false, this);
|
||||||
cr.registerContentObserver(mVolumeHushGestureUri, false, this);
|
cr.registerContentObserver(mVolumeHushGestureUri, false, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +192,8 @@ public class PreventRingingParentPreferenceController extends TogglePreferenceCo
|
|||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange, Uri uri) {
|
public void onChange(boolean selfChange, Uri uri) {
|
||||||
super.onChange(selfChange, uri);
|
super.onChange(selfChange, uri);
|
||||||
if (uri == null || mVolumeHushGestureUri.equals(uri)) {
|
if (uri == null || mVolumeHushGestureUri.equals(uri)
|
||||||
|
|| mKeyChordVolumePowerUpUri.equals(uri)) {
|
||||||
updateState(mPreference);
|
updateState(mPreference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,8 @@ import static android.provider.Settings.Secure.VOLUME_HUSH_OFF;
|
|||||||
import static android.provider.Settings.Secure.VOLUME_HUSH_VIBRATE;
|
import static android.provider.Settings.Secure.VOLUME_HUSH_VIBRATE;
|
||||||
|
|
||||||
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
|
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
|
||||||
|
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
|
||||||
|
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@@ -33,8 +35,10 @@ import android.content.res.Resources;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.widget.PrimarySwitchPreference;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -50,6 +54,9 @@ public class PreventRingingParentPreferenceControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private Resources mResources;
|
private Resources mResources;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
PreferenceScreen mScreen;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private PreventRingingParentPreferenceController mController;
|
private PreventRingingParentPreferenceController mController;
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
@@ -58,21 +65,53 @@ public class PreventRingingParentPreferenceControllerTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
|
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
|
||||||
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
|
when(mResources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_keyChordPowerVolumeUp)).thenReturn(
|
||||||
|
PreventRingingParentPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE);
|
||||||
mController = new PreventRingingParentPreferenceController(mContext, "test_key");
|
mController = new PreventRingingParentPreferenceController(mContext, "test_key");
|
||||||
mPreference = new Preference(mContext);
|
mPreference = new PrimarySwitchPreference(mContext);
|
||||||
|
when(mScreen.findPreference("test_key")).thenReturn(mPreference);
|
||||||
|
mController.displayPreference(mScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsAvailable_configIsTrue_shouldAvailableUnSearchable() {
|
public void isAvailable_configIsTrueAndKeyChordMute_shouldAvailableUnSearchable() {
|
||||||
when(mContext.getResources()).thenReturn(mResources);
|
|
||||||
when(mResources.getBoolean(
|
when(mResources.getBoolean(
|
||||||
com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(true);
|
com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(true);
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
|
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsAvailable_configIsFalse_shouldReturnFalse() {
|
public void getAvailabilityStatus_configIsTrueAndKeyNotMute_shouldReturnDisabledDependent() {
|
||||||
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
|
when(mResources.getBoolean(
|
||||||
|
com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(true);
|
||||||
|
when(mResources.getBoolean(
|
||||||
|
com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
|
||||||
|
.thenReturn(true);
|
||||||
|
when(mResources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_keyChordPowerVolumeUp)).thenReturn(2);
|
||||||
|
|
||||||
|
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_configIsTrueLppDisabled_shouldReturnUnsupportedOnDevice() {
|
||||||
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
|
when(mResources.getBoolean(
|
||||||
|
com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(true);
|
||||||
|
when(mResources.getBoolean(
|
||||||
|
com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
|
||||||
|
.thenReturn(false);
|
||||||
|
when(mResources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_keyChordPowerVolumeUp)).thenReturn(2);
|
||||||
|
|
||||||
|
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isAvailable_configIsFalse_shouldReturnFalse() {
|
||||||
when(mContext.getResources()).thenReturn(mResources);
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
when(mResources.getBoolean(
|
when(mResources.getBoolean(
|
||||||
com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(false);
|
com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(false);
|
||||||
@@ -101,6 +140,21 @@ public class PreventRingingParentPreferenceControllerTest {
|
|||||||
R.string.switch_off_text));
|
R.string.switch_off_text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateState_keyChordDisabled_summaryUpdated() {
|
||||||
|
when(mResources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_keyChordPowerVolumeUp)).thenReturn(2);
|
||||||
|
// Ensure that the state displays unchecked even if the underlying field is set.
|
||||||
|
Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
|
||||||
|
VOLUME_HUSH_MUTE);
|
||||||
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
|
assertThat(mPreference.isEnabled()).isFalse();
|
||||||
|
assertThat(mPreference.getSummary()).isEqualTo(mContext.getResources().getText(
|
||||||
|
R.string.prevent_ringing_option_unavailable_lpp_summary));
|
||||||
|
assertThat(mController.isChecked()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isChecked_vibrate_shouldReturnTrue() {
|
public void isChecked_vibrate_shouldReturnTrue() {
|
||||||
Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
|
Settings.Secure.putInt(mContext.getContentResolver(), VOLUME_HUSH_GESTURE,
|
||||||
|
Reference in New Issue
Block a user