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

Commit c33cb711 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Add a new KEYBOARD_TAP haptic feedback type for very short, low-latency vibration.

The minimum value varies from device to device, so this is useful for defining
the shortest and most efficient vibration. The VibratorService creates a Thread
when playing back vibration patterns, so this allows you to avoid thread creation
and associated scheduling delays by specifying a one-shot duration in the config
file.
parent c777e071
Loading
Loading
Loading
Loading
+30 −12
Original line number Diff line number Diff line
@@ -175,6 +175,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    // Vibrator pattern for haptic feedback of virtual key press.
    long[] mVirtualKeyVibePattern;
    
    // Vibrator pattern for a short vibration.
    long[] mKeyboardTapVibePattern;

    // Vibrator pattern for haptic feedback during boot when safe mode is disabled.
    long[] mSafeModeDisabledVibePattern;
    
@@ -539,6 +542,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                com.android.internal.R.array.config_longPressVibePattern);
        mVirtualKeyVibePattern = getLongIntArray(mContext.getResources(),
                com.android.internal.R.array.config_virtualKeyVibePattern);
        mKeyboardTapVibePattern = getLongIntArray(mContext.getResources(),
                com.android.internal.R.array.config_keyboardTapVibePattern);
        mSafeModeDisabledVibePattern = getLongIntArray(mContext.getResources(),
                com.android.internal.R.array.config_safeModeDisabledVibePattern);
        mSafeModeEnabledVibePattern = getLongIntArray(mContext.getResources(),
@@ -2375,25 +2380,38 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if (!always && (hapticsDisabled || mKeyguardMediator.isShowingAndNotHidden())) {
            return false;
        }
        long[] pattern = null;
        switch (effectId) {
            case HapticFeedbackConstants.LONG_PRESS:
                mVibrator.vibrate(mLongPressVibePattern, -1);
                return true;
                pattern = mLongPressVibePattern;
                break;
            case HapticFeedbackConstants.VIRTUAL_KEY:
                mVibrator.vibrate(mVirtualKeyVibePattern, -1);
                return true;
                pattern = mVirtualKeyVibePattern;
                break;
            case HapticFeedbackConstants.KEYBOARD_TAP:
                pattern = mKeyboardTapVibePattern;
                break;
            case HapticFeedbackConstants.SAFE_MODE_DISABLED:
                mVibrator.vibrate(mSafeModeDisabledVibePattern, -1);
                return true;
                pattern = mSafeModeDisabledVibePattern;
                break;
            case HapticFeedbackConstants.SAFE_MODE_ENABLED:
                mVibrator.vibrate(mSafeModeEnabledVibePattern, -1);
                return true;
                pattern = mSafeModeEnabledVibePattern;
                break;
            case HapticFeedbackConstants.SCROLL_BARRIER:
                mVibrator.vibrate(mScrollBarrierVibePattern, -1);
                return true;
        }
                pattern = mScrollBarrierVibePattern;
                break;
            default:
                return false;
        }
        if (pattern.length == 1) {
            // One-shot vibration
            mVibrator.vibrate(pattern[0]);
        } else {
            // Pattern vibration
            mVibrator.vibrate(pattern, -1);
        }
        return true;
    }
    
    public void keyFeedbackFromInput(KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN