From 7fe07540116de752835d4d3c103d40fabf317ce9 Mon Sep 17 00:00:00 2001 From: Wilson Wu Date: Wed, 13 Mar 2024 06:33:08 +0000 Subject: [PATCH] Fix keyboard vibration settings delay The default settings observer delay is 10s for background service. It cause the apps get the settings update delay and lead a unsync behavior. Update the settings change without delay. Bug: 327094397 Test: Manual test with bug steps Test: atest KeyboardVibrationTogglePreferenceControllerTest Change-Id: Ib1c23ec9e1442e8397c7a36ffa157594ac64a9b3 (cherry picked from commit f2174611b8be192815f16e0ebc42eebfe3bfca0d) Merged-In: Ib1c23ec9e1442e8397c7a36ffa157594ac64a9b3 --- .../KeyboardVibrationTogglePreferenceController.java | 8 ++++++-- .../KeyboardVibrationTogglePreferenceControllerTest.java | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceController.java b/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceController.java index 58aa0cc45f5..21800b91921 100644 --- a/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceController.java +++ b/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceController.java @@ -22,6 +22,7 @@ import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import android.app.settings.SettingsEnums; +import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.net.Uri; @@ -159,8 +160,11 @@ public class KeyboardVibrationTogglePreferenceController extends TogglePreferenc } private boolean updateKeyboardVibrationSetting(boolean enable) { - final boolean success = Settings.System.putInt(mContext.getContentResolver(), - KEYBOARD_VIBRATION_ENABLED, enable ? ON : OFF); + final ContentResolver contentResolver = mContext.getContentResolver(); + final boolean success = Settings.System.putInt(contentResolver, + KEYBOARD_VIBRATION_ENABLED, enable ? ON : OFF); + contentResolver.notifyChange(Settings.System.getUriFor(KEYBOARD_VIBRATION_ENABLED), + null /* observer */, ContentResolver.NOTIFY_NO_DELAY); if (!success) { Log.w(TAG, "Update settings database error!"); } diff --git a/tests/robotests/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceControllerTest.java index 2d5905e8de8..832a3136d96 100644 --- a/tests/robotests/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/KeyboardVibrationTogglePreferenceControllerTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.when; import static org.mockito.Mockito.verify; import android.app.settings.SettingsEnums; +import android.content.ContentResolver; import android.content.Context; import android.content.res.Resources; import android.os.vibrator.Flags; @@ -60,6 +61,9 @@ public class KeyboardVibrationTogglePreferenceControllerTest { @Mock private PreferenceScreen mPreferenceScreen; + @Mock + private ContentResolver mContentResolver; + private Context mContext; private Resources mResources; private KeyboardVibrationTogglePreferenceController mController; @@ -72,6 +76,7 @@ public class KeyboardVibrationTogglePreferenceControllerTest { mContext = spy(ApplicationProvider.getApplicationContext()); mResources = spy(mContext.getResources()); when(mContext.getResources()).thenReturn(mResources); + when(mContext.getContentResolver()).thenReturn(mContentResolver); mFeatureFactory = FakeFeatureFactory.setupForTest(); mController = new KeyboardVibrationTogglePreferenceController(mContext, "preferenceKey"); mPreference = new SwitchPreference(mContext);