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

Commit 8ff8bd32 authored by Dan Sandler's avatar Dan Sandler
Browse files

Custom haptic composition for assistant launched via button.

The effect is a small ramp, a 50ms gap, and a sharp tick,
evoking the crisp snap of a sail, or a molecule's bonds
approaching and then snapping together.

It might be nice to start this effect slightly early, but
that will require more tweaking to the keypress messaging
and timers. We'll see if it's necessary.

For devices without haptic composer support, fall back to
EFFECT_DOUBLE_CLICK.

Bug: 182381083
Test: manual (literally, you have to hold the device):
      adb shell settings put global power_button_long_press 5
      adb shell input keyevent --longpress POWER
      (or just hold the power button, since you're holding
      the device)
Change-Id: I0633efd46296ca3f34e5df60be37871fb1a9fb5d
parent 0f979050
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -128,6 +128,12 @@ public class HapticFeedbackConstants {
     */
    public static final int SAFE_MODE_ENABLED = 10001;

    /**
     * Invocation of the voice assistant via hardware button.
     * @hide
     */
    public static final int ASSISTANT_BUTTON = 10002;

    /**
     * Flag for {@link View#performHapticFeedback(int, int)
     * View.performHapticFeedback(int, int)}: Ignore the setting in the
+13 −1
Original line number Diff line number Diff line
@@ -1100,7 +1100,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                break;
            case LONG_PRESS_POWER_ASSISTANT:
                mPowerKeyHandled = true;
                performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
                performHapticFeedback(HapticFeedbackConstants.ASSISTANT_BUTTON, false,
                        "Power - Long Press - Go To Assistant");
                final int powerKeyDeviceId = Integer.MIN_VALUE;
                launchAssistAction(null, powerKeyDeviceId, eventTime);
@@ -5074,6 +5074,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                pattern = mSafeModeEnabledVibePattern;
                break;

            case HapticFeedbackConstants.ASSISTANT_BUTTON:
                if (mVibrator.areAllPrimitivesSupported(
                        VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)) {
                    // quiet ramp, short pause, then sharp tick
                    return VibrationEffect.startComposition()
                            .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE, 0.25f)
                            .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1f, 50)
                            .compose();
                }
                // fallback for devices without composition support
                return VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK);

            default:
                return null;
        }