From 6423c4cd51b36e06b77aa03fc5754810132b114b Mon Sep 17 00:00:00 2001 From: Alexey Kuzmin Date: Wed, 23 Jan 2019 18:23:45 +0000 Subject: [PATCH] Update vibrator on/off status from accessibility settings menu Fix ringing and touch vibration cannot be turned off from accessibility settings menu. Bug: 116172311 Fix: 125618621 Test: Open Settings=>Accessibility=>Vibration, change every sub-item and verify the change can synced with main page, also check the settings can synced with Sounds. Test: m -j RunSettingsRoboTests Change-Id: I7a10bcda17323bce612e199bdf067363b8f9a332 --- .../VibrationPreferenceFragment.java | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java index 648acad89e1..5261daa466c 100644 --- a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java @@ -106,6 +106,31 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm } } + private boolean hasVibrationEnabledSetting() { + return !TextUtils.isEmpty(getVibrationEnabledSetting()); + } + + private void updateSettings(VibrationIntensityCandidateInfo candidate) { + boolean vibrationEnabled = candidate.getIntensity() != Vibrator.VIBRATION_INTENSITY_OFF; + if (hasVibrationEnabledSetting()) { + // Update vibration enabled setting + boolean wasEnabled = Settings.System.getInt(getContext().getContentResolver(), + getVibrationEnabledSetting(), 1) == 1; + if (vibrationEnabled != wasEnabled) { + Settings.System.putInt(getContext().getContentResolver(), + getVibrationEnabledSetting(), vibrationEnabled ? 1 : 0); + } + } + // There are two conditions that need to change the intensity. + // First: Vibration is enabled and we are changing its strength. + // Second: There is no setting to enable this vibration, change the intensity directly. + if (vibrationEnabled || !hasVibrationEnabledSetting()) { + // Update vibration intensity setting + Settings.System.putInt(getContext().getContentResolver(), + getVibrationIntensitySetting(), candidate.getIntensity()); + } + } + @Override public void onDetach() { super.onDetach(); @@ -185,11 +210,7 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm Log.e(TAG, "Tried to set unknown intensity (key=" + key + ")!"); return false; } - if (candidate.getIntensity() != Vibrator.VIBRATION_INTENSITY_OFF || - TextUtils.isEmpty(getVibrationEnabledSetting())) { - Settings.System.putInt(getContext().getContentResolver(), - getVibrationIntensitySetting(), candidate.getIntensity()); - } + updateSettings(candidate); onVibrationIntensitySelected(candidate.getIntensity()); return true; }