Loading core/java/android/os/vibrator/VibrationConfig.java +12 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,8 @@ public class VibrationConfig { private final boolean mDefaultKeyboardVibrationEnabled; private final boolean mHasFixedKeyboardAmplitude; /** @hide */ public VibrationConfig(@Nullable Resources resources) { mHapticChannelMaxVibrationAmplitude = loadFloat(resources, Loading @@ -87,6 +89,8 @@ public class VibrationConfig { com.android.internal.R.bool.config_ignoreVibrationsOnWirelessCharger, false); mDefaultKeyboardVibrationEnabled = loadBoolean(resources, com.android.internal.R.bool.config_defaultKeyboardVibrationEnabled, true); mHasFixedKeyboardAmplitude = loadFloat(resources, com.android.internal.R.dimen.config_keyboardHapticFeedbackFixedAmplitude, -1) > 0; mDefaultAlarmVibrationIntensity = loadDefaultIntensity(resources, com.android.internal.R.integer.config_defaultAlarmVibrationIntensity); Loading Loading @@ -197,6 +201,14 @@ public class VibrationConfig { return mDefaultKeyboardVibrationEnabled; } /** * Whether the device has a fixed amplitude for keyboard. * @hide */ public boolean hasFixedKeyboardAmplitude() { return mHasFixedKeyboardAmplitude; } /** Get the default vibration intensity for given usage. */ @VibrationIntensity public int getDefaultVibrationIntensity(@VibrationAttributes.Usage int usage) { Loading services/core/java/com/android/server/vibrator/VibrationSettings.java +1 −1 Original line number Diff line number Diff line Loading @@ -532,7 +532,7 @@ final class VibrationSettings { return false; } if (Flags.keyboardCategoryEnabled()) { if (Flags.keyboardCategoryEnabled() && mVibrationConfig.hasFixedKeyboardAmplitude()) { int category = callerInfo.attrs.getCategory(); if (usage == USAGE_TOUCH && category == CATEGORY_KEYBOARD) { // Keyboard touch has a different user setting. Loading services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java +27 −2 Original line number Diff line number Diff line Loading @@ -604,7 +604,8 @@ public class VibrationSettingsTest { @RequiresFlagsEnabled(Flags.FLAG_KEYBOARD_CATEGORY_ENABLED) public void shouldIgnoreVibration_withKeyboardSettingsOff_shouldIgnoreKeyboardVibration() { setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 0); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 0 /* OFF*/); setHasFixedKeyboardAmplitudeIntensity(true); // Keyboard touch ignored. assertVibrationIgnoredForAttributes( Loading @@ -628,7 +629,8 @@ public class VibrationSettingsTest { @RequiresFlagsEnabled(Flags.FLAG_KEYBOARD_CATEGORY_ENABLED) public void shouldIgnoreVibration_withKeyboardSettingsOn_shouldNotIgnoreKeyboardVibration() { setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1 /* ON */); setHasFixedKeyboardAmplitudeIntensity(true); // General touch ignored. assertVibrationIgnoredForUsage(USAGE_TOUCH, Vibration.Status.IGNORED_FOR_SETTINGS); Loading @@ -641,6 +643,25 @@ public class VibrationSettingsTest { .build()); } @Test @RequiresFlagsEnabled(Flags.FLAG_KEYBOARD_CATEGORY_ENABLED) public void shouldIgnoreVibration_noFixedKeyboardAmplitude_ignoresKeyboardTouchVibration() { setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1 /* ON */); setHasFixedKeyboardAmplitudeIntensity(false); // General touch ignored. assertVibrationIgnoredForUsage(USAGE_TOUCH, Vibration.Status.IGNORED_FOR_SETTINGS); // Keyboard touch ignored. assertVibrationIgnoredForAttributes( new VibrationAttributes.Builder() .setUsage(USAGE_TOUCH) .setCategory(VibrationAttributes.CATEGORY_KEYBOARD) .build(), Vibration.Status.IGNORED_FOR_SETTINGS); } @Test public void shouldIgnoreVibrationFromVirtualDevices_defaultDevice_neverIgnored() { // Vibrations from the primary device is never ignored. Loading Loading @@ -953,6 +974,10 @@ public class VibrationSettingsTest { when(mVibrationConfigMock.ignoreVibrationsOnWirelessCharger()).thenReturn(ignore); } private void setHasFixedKeyboardAmplitudeIntensity(boolean hasFixedAmplitude) { when(mVibrationConfigMock.hasFixedKeyboardAmplitude()).thenReturn(hasFixedAmplitude); } private void deleteUserSetting(String settingName) { Settings.System.putStringForUser( mContextSpy.getContentResolver(), settingName, null, UserHandle.USER_CURRENT); Loading Loading
core/java/android/os/vibrator/VibrationConfig.java +12 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,8 @@ public class VibrationConfig { private final boolean mDefaultKeyboardVibrationEnabled; private final boolean mHasFixedKeyboardAmplitude; /** @hide */ public VibrationConfig(@Nullable Resources resources) { mHapticChannelMaxVibrationAmplitude = loadFloat(resources, Loading @@ -87,6 +89,8 @@ public class VibrationConfig { com.android.internal.R.bool.config_ignoreVibrationsOnWirelessCharger, false); mDefaultKeyboardVibrationEnabled = loadBoolean(resources, com.android.internal.R.bool.config_defaultKeyboardVibrationEnabled, true); mHasFixedKeyboardAmplitude = loadFloat(resources, com.android.internal.R.dimen.config_keyboardHapticFeedbackFixedAmplitude, -1) > 0; mDefaultAlarmVibrationIntensity = loadDefaultIntensity(resources, com.android.internal.R.integer.config_defaultAlarmVibrationIntensity); Loading Loading @@ -197,6 +201,14 @@ public class VibrationConfig { return mDefaultKeyboardVibrationEnabled; } /** * Whether the device has a fixed amplitude for keyboard. * @hide */ public boolean hasFixedKeyboardAmplitude() { return mHasFixedKeyboardAmplitude; } /** Get the default vibration intensity for given usage. */ @VibrationIntensity public int getDefaultVibrationIntensity(@VibrationAttributes.Usage int usage) { Loading
services/core/java/com/android/server/vibrator/VibrationSettings.java +1 −1 Original line number Diff line number Diff line Loading @@ -532,7 +532,7 @@ final class VibrationSettings { return false; } if (Flags.keyboardCategoryEnabled()) { if (Flags.keyboardCategoryEnabled() && mVibrationConfig.hasFixedKeyboardAmplitude()) { int category = callerInfo.attrs.getCategory(); if (usage == USAGE_TOUCH && category == CATEGORY_KEYBOARD) { // Keyboard touch has a different user setting. Loading
services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java +27 −2 Original line number Diff line number Diff line Loading @@ -604,7 +604,8 @@ public class VibrationSettingsTest { @RequiresFlagsEnabled(Flags.FLAG_KEYBOARD_CATEGORY_ENABLED) public void shouldIgnoreVibration_withKeyboardSettingsOff_shouldIgnoreKeyboardVibration() { setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 0); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 0 /* OFF*/); setHasFixedKeyboardAmplitudeIntensity(true); // Keyboard touch ignored. assertVibrationIgnoredForAttributes( Loading @@ -628,7 +629,8 @@ public class VibrationSettingsTest { @RequiresFlagsEnabled(Flags.FLAG_KEYBOARD_CATEGORY_ENABLED) public void shouldIgnoreVibration_withKeyboardSettingsOn_shouldNotIgnoreKeyboardVibration() { setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1 /* ON */); setHasFixedKeyboardAmplitudeIntensity(true); // General touch ignored. assertVibrationIgnoredForUsage(USAGE_TOUCH, Vibration.Status.IGNORED_FOR_SETTINGS); Loading @@ -641,6 +643,25 @@ public class VibrationSettingsTest { .build()); } @Test @RequiresFlagsEnabled(Flags.FLAG_KEYBOARD_CATEGORY_ENABLED) public void shouldIgnoreVibration_noFixedKeyboardAmplitude_ignoresKeyboardTouchVibration() { setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF); setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1 /* ON */); setHasFixedKeyboardAmplitudeIntensity(false); // General touch ignored. assertVibrationIgnoredForUsage(USAGE_TOUCH, Vibration.Status.IGNORED_FOR_SETTINGS); // Keyboard touch ignored. assertVibrationIgnoredForAttributes( new VibrationAttributes.Builder() .setUsage(USAGE_TOUCH) .setCategory(VibrationAttributes.CATEGORY_KEYBOARD) .build(), Vibration.Status.IGNORED_FOR_SETTINGS); } @Test public void shouldIgnoreVibrationFromVirtualDevices_defaultDevice_neverIgnored() { // Vibrations from the primary device is never ignored. Loading Loading @@ -953,6 +974,10 @@ public class VibrationSettingsTest { when(mVibrationConfigMock.ignoreVibrationsOnWirelessCharger()).thenReturn(ignore); } private void setHasFixedKeyboardAmplitudeIntensity(boolean hasFixedAmplitude) { when(mVibrationConfigMock.hasFixedKeyboardAmplitude()).thenReturn(hasFixedAmplitude); } private void deleteUserSetting(String settingName) { Settings.System.putStringForUser( mContextSpy.getContentResolver(), settingName, null, UserHandle.USER_CURRENT); Loading