Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29d0c490 authored by Yeabkal Wubshit's avatar Yeabkal Wubshit
Browse files

Remove SAFE_MODE_ENABLED's custom waveform vibration config

We can now customize the vibration of any haptic feedback via an XML
schema, so there is no need to keep SAFE_MODE_ENABLED's one-off
solution.

Bug: 418082619
Test: HapticFeedbackVibrationProviderTest
Flag: EXEMPT cleanup only
Change-Id: I079b7542370e2d1761914c33e77064e968474ca8
parent 138f28b6
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -1383,16 +1383,6 @@
        <item>10</item>
    </integer-array>

    <!-- Vibrator pattern for feedback about booting with safe mode enabled -->
    <integer-array name="config_safeModeEnabledVibePattern">
        <item>0</item>
        <item>1</item>
        <item>20</item>
        <item>21</item>
        <item>500</item>
        <item>600</item>
    </integer-array>

    <!-- The URI to associate with each ringtone effect constant, intended to be used with the
         android.os.VibrationEffect#get(Uri, Context) API.
         The position of the string in the string-array determines which ringtone effect is chosen.
+0 −1
Original line number Diff line number Diff line
@@ -1801,7 +1801,6 @@
  <java-symbol type="array" name="config_longPressVibePattern" />
  <java-symbol type="array" name="config_virtualKeyVibePattern" />
  <java-symbol type="array" name="config_doubleClickVibePattern" />
  <java-symbol type="array" name="config_safeModeEnabledVibePattern" />
  <java-symbol type="attr" name="actionModePopupWindowStyle" />
  <java-symbol type="attr" name="dialogCustomTitleDecorLayout" />
  <java-symbol type="attr" name="dialogTitleDecorLayout" />
+4 −9
Original line number Diff line number Diff line
@@ -48,10 +48,10 @@ public final class HapticFeedbackVibrationProvider {
    private static final VibrationAttributes IME_FEEDBACK_VIBRATION_ATTRIBUTES =
            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_IME_FEEDBACK);

    private static final long[] SAFE_MODE_VIBRATION_TIMINGS = new long[] {0, 1, 20, 21, 500, 600};

    private final VibratorInfo mVibratorInfo;
    private final boolean mHapticTextHandleEnabled;
    // Vibrator effect for haptic feedback during boot when safe mode is enabled.
    private final VibrationEffect mSafeModeEnabledVibrationEffect;

    private final HapticFeedbackCustomization mHapticFeedbackCustomization;

@@ -69,12 +69,6 @@ public final class HapticFeedbackVibrationProvider {
                com.android.internal.R.bool.config_enableHapticTextHandle);
        mHapticFeedbackCustomization = hapticFeedbackCustomization;

        VibrationEffect safeModeVibration = mHapticFeedbackCustomization.getEffect(
                HapticFeedbackConstants.SAFE_MODE_ENABLED, VibrationAttributes.USAGE_UNKNOWN);
        mSafeModeEnabledVibrationEffect = safeModeVibration != null ? safeModeVibration
                : VibrationSettings.createEffectFromResource(res,
                        com.android.internal.R.array.config_safeModeEnabledVibePattern);

        mKeyboardVibrationFixedAmplitude = res.getFloat(
                com.android.internal.R.dimen.config_keyboardHapticFeedbackFixedAmplitude);
        if (mKeyboardVibrationFixedAmplitude < 0 || mKeyboardVibrationFixedAmplitude > 1) {
@@ -281,7 +275,8 @@ public final class HapticFeedbackVibrationProvider {

            case HapticFeedbackConstants.SAFE_MODE_ENABLED:
                // safe mode effect is not customized by the input source.
                return mSafeModeEnabledVibrationEffect;
                return VibrationEffect.createWaveform(
                        SAFE_MODE_VIBRATION_TIMINGS, /* repeat= */ -1);

            case HapticFeedbackConstants.ASSISTANT_BUTTON:
                // assistant effect is not customized by the input source.
+2 −7
Original line number Diff line number Diff line
@@ -790,11 +790,6 @@ final class VibrationSettings {
                UserHandle.USER_ALL);
    }

    @Nullable
    private VibrationEffect createEffectFromResource(int resId) {
        return createEffectFromResource(mContext.getResources(), resId);
    }

    /**
     * Provides a {@link VibrationEffect} from a timings-array provided as an int-array resource..
     *
@@ -807,8 +802,8 @@ final class VibrationSettings {
     * vibration with off-on timings as per the provided timings array.
     */
    @Nullable
    static VibrationEffect createEffectFromResource(Resources res, int resId) {
        long[] timings = getLongIntArray(res, resId);
    private VibrationEffect createEffectFromResource(int resId) {
        long[] timings = getLongIntArray(mContext.getResources(), resId);
        return createEffectFromTimings(timings);
    }

+0 −82
Original line number Diff line number Diff line
@@ -291,83 +291,6 @@ public class HapticFeedbackVibrationProviderTest {
                InputDevice.SOURCE_TOUCHSCREEN)).isNull();
    }

    @Test
    public void testValidCustomizationPresentForSafeModeEnabled_usedRegardlessOfVibrationResource() {
        mockSafeModeEnabledVibration(10, 20, 30, 40);
        mockVibratorPrimitiveSupport(PRIMITIVE_CLICK, PRIMITIVE_TICK, PRIMITIVE_THUD);
        SparseArray<VibrationEffect> safeModeCustomizations = new SparseArray<>();
        safeModeCustomizations.put(SAFE_MODE_ENABLED, PRIMITIVE_CLICK_EFFECT);
        SparseArray<VibrationEffect> safeModeCustomizationsByRotary = new SparseArray<>();
        safeModeCustomizationsByRotary.put(SAFE_MODE_ENABLED, PRIMITIVE_THUD_EFFECT);
        SparseArray<VibrationEffect> safeModeCustomizationsByTouchScreen = new SparseArray<>();
        safeModeCustomizationsByTouchScreen.put(SAFE_MODE_ENABLED, PRIMITIVE_TICK_EFFECT);
        SparseArray<VibrationEffect> safeModeCustomizationsByUsageGestureInput =
                new SparseArray<>();
        safeModeCustomizationsByUsageGestureInput.put(
                SAFE_MODE_ENABLED, PRIMITIVE_QUICK_RISE_EFFECT);
        HapticFeedbackVibrationProvider provider =
                createProvider(safeModeCustomizations, safeModeCustomizationsByRotary,
                        safeModeCustomizationsByTouchScreen,
                        safeModeCustomizationsByUsageGestureInput);

        assertThat(provider.getVibration(SAFE_MODE_ENABLED, USAGE_UNKNOWN))
                .isEqualTo(PRIMITIVE_CLICK_EFFECT);
        assertThat(provider.getVibration(SAFE_MODE_ENABLED, USAGE_GESTURE_INPUT))
                .isEqualTo(PRIMITIVE_QUICK_RISE_EFFECT);
        assertThat(provider.getVibrationForInputDevice(SAFE_MODE_ENABLED,
                InputDevice.SOURCE_ROTARY_ENCODER)).isEqualTo(PRIMITIVE_THUD_EFFECT);
        assertThat(provider.getVibrationForInputDevice(SAFE_MODE_ENABLED,
                InputDevice.SOURCE_TOUCHSCREEN)).isEqualTo(PRIMITIVE_TICK_EFFECT);

        // Resource changed
        mockSafeModeEnabledVibration(null);
        provider =
                createProvider(safeModeCustomizations, safeModeCustomizationsByRotary,
                        safeModeCustomizationsByTouchScreen,
                        safeModeCustomizationsByUsageGestureInput);

        assertThat(provider.getVibration(SAFE_MODE_ENABLED, USAGE_UNKNOWN))
                .isEqualTo(PRIMITIVE_CLICK_EFFECT);
        assertThat(provider.getVibration(SAFE_MODE_ENABLED, USAGE_GESTURE_INPUT))
                .isEqualTo(PRIMITIVE_QUICK_RISE_EFFECT);
        assertThat(provider.getVibrationForInputDevice(SAFE_MODE_ENABLED,
                InputDevice.SOURCE_ROTARY_ENCODER)).isEqualTo(PRIMITIVE_THUD_EFFECT);
        assertThat(provider.getVibrationForInputDevice(SAFE_MODE_ENABLED,
                InputDevice.SOURCE_TOUCHSCREEN)).isEqualTo(PRIMITIVE_TICK_EFFECT);
    }

    @Test
    public void testNoValidCustomizationPresentForSafeModeEnabled_resourceBasedVibrationUsed() {
        mockSafeModeEnabledVibration(10, 20, 30, 40);
        HapticFeedbackVibrationProvider provider = createProviderWithoutCustomizations();

        assertThat(provider.getVibration(SAFE_MODE_ENABLED, USAGE_UNKNOWN))
                .isEqualTo(VibrationEffect.createWaveform(new long[]{10, 20, 30, 40}, -1));
        assertThat(
                provider.getVibrationForInputDevice(
                        SAFE_MODE_ENABLED, InputDevice.SOURCE_ROTARY_ENCODER))
                                .isEqualTo(VibrationEffect.createWaveform(
                                        new long[]{10, 20, 30, 40}, -1));
        assertThat(
                provider.getVibrationForInputDevice(
                        SAFE_MODE_ENABLED, InputDevice.SOURCE_TOUCHSCREEN))
                                .isEqualTo(VibrationEffect.createWaveform(
                                        new long[]{10, 20, 30, 40}, -1));
    }

    @Test
    public void testNoValidCustomizationAndResourcePresentForSafeModeEnabled_noVibrationUsed() {
        mockSafeModeEnabledVibration(null);
        HapticFeedbackVibrationProvider provider = createProviderWithoutCustomizations();

        assertThat(provider.getVibration(SAFE_MODE_ENABLED, USAGE_UNKNOWN)).isNull();
        assertThat(provider.getVibration(SAFE_MODE_ENABLED, USAGE_GESTURE_INPUT)).isNull();
        assertThat(provider.getVibrationForInputDevice(SAFE_MODE_ENABLED,
                InputDevice.SOURCE_ROTARY_ENCODER)).isNull();
        assertThat(provider.getVibrationForInputDevice(SAFE_MODE_ENABLED,
                InputDevice.SOURCE_TOUCHSCREEN)).isNull();
    }

    @Test
    public void testKeyboardHaptic_noFixedAmplitude_defaultVibrationReturned() {
        mockVibratorPrimitiveSupport(PRIMITIVE_CLICK, PRIMITIVE_TICK);
@@ -668,11 +591,6 @@ public class HapticFeedbackVibrationProviderTest {
        when(mResourcesMock.getBoolean(R.bool.config_enableHapticTextHandle)).thenReturn(supported);
    }

    private void mockSafeModeEnabledVibration(int... vibrationPattern) {
        when(mResourcesMock.getIntArray(R.array.config_safeModeEnabledVibePattern))
                .thenReturn(vibrationPattern);
    }

    private void mockKeyboardVibrationFixedAmplitude(float amplitude) {
        when(mResourcesMock.getFloat(R.dimen.config_keyboardHapticFeedbackFixedAmplitude))
                .thenReturn(amplitude);