diff options
| author | 2021-05-17 20:01:05 +0100 | |
|---|---|---|
| committer | 2021-05-21 11:32:22 +0100 | |
| commit | 03dfbc653dabf963e3b37354b0d6dc258242a7a4 (patch) | |
| tree | b35a82e6e676bbf020b3a1de0fae88397ed2def1 | |
| parent | 33f631ad2a57aac9206d82eff300174a4f90052e (diff) | |
Update vibration pattern for launching camera
Fix: 132977819
Test: manual
Change-Id: If790ba923701f20f875495ad7c0b912b01bb8222
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java | 50 |
1 files changed, 39 insertions, 11 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index ddd849c1ab4d..849500870c95 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -73,6 +73,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Point; import android.graphics.PointF; import android.graphics.RectF; @@ -326,9 +327,15 @@ public class StatusBar extends SystemUI implements DemoMode, public static final int FADE_KEYGUARD_DURATION = 300; public static final int FADE_KEYGUARD_DURATION_PULSING = 96; + public static final long[] CAMERA_LAUNCH_GESTURE_VIBRATION_TIMINGS = + new long[]{20, 20, 20, 20, 100, 20}; + public static final int[] CAMERA_LAUNCH_GESTURE_VIBRATION_AMPLITUDES = + new int[]{39, 82, 139, 213, 0, 127}; - /** If true, the system is in the half-boot-to-decryption-screen state. - * Prudently disable QS and notifications. */ + /** + * If true, the system is in the half-boot-to-decryption-screen state. + * Prudently disable QS and notifications. + */ public static final boolean ONLY_CORE_APPS; /** If true, the lockscreen will show a distinct wallpaper */ @@ -600,7 +607,7 @@ public class StatusBar extends SystemUI implements DemoMode, private int mLastCameraLaunchSource; protected PowerManager.WakeLock mGestureWakeLock; private Vibrator mVibrator; - private long[] mCameraLaunchGestureVibePattern; + private VibrationEffect mCameraLaunchGestureVibrationEffect; private final int[] mTmpInt2 = new int[2]; @@ -1311,12 +1318,8 @@ public class StatusBar extends SystemUI implements DemoMode, mGestureWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "GestureWakeLock"); mVibrator = mContext.getSystemService(Vibrator.class); - int[] pattern = mContext.getResources().getIntArray( - R.array.config_cameraLaunchGestureVibePattern); - mCameraLaunchGestureVibePattern = new long[pattern.length]; - for (int i = 0; i < pattern.length; i++) { - mCameraLaunchGestureVibePattern[i] = pattern[i]; - } + mCameraLaunchGestureVibrationEffect = getCameraGestureVibrationEffect( + mVibrator, context.getResources()); // receive broadcasts registerBroadcastReceiver(); @@ -4062,12 +4065,37 @@ public class StatusBar extends SystemUI implements DemoMode, private void vibrateForCameraGesture() { // Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep. - mVibrator.vibrate(mCameraLaunchGestureVibePattern, -1 /* repeat */); + mVibrator.vibrate(mCameraLaunchGestureVibrationEffect); + } + + private static VibrationEffect getCameraGestureVibrationEffect(Vibrator vibrator, + Resources resources) { + if (vibrator.areAllPrimitivesSupported( + VibrationEffect.Composition.PRIMITIVE_QUICK_RISE, + VibrationEffect.Composition.PRIMITIVE_CLICK)) { + return VibrationEffect.startComposition() + .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE) + .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 50) + .compose(); + } + if (vibrator.hasAmplitudeControl()) { + return VibrationEffect.createWaveform( + CAMERA_LAUNCH_GESTURE_VIBRATION_TIMINGS, + CAMERA_LAUNCH_GESTURE_VIBRATION_AMPLITUDES, + /* repeat= */ -1); + } + + int[] pattern = resources.getIntArray(R.array.config_cameraLaunchGestureVibePattern); + long[] timings = new long[pattern.length]; + for (int i = 0; i < pattern.length; i++) { + timings[i] = pattern[i]; + } + return VibrationEffect.createWaveform(timings, /* repeat= */ -1); } /** * @return true if the screen is currently fully off, i.e. has finished turning off and has - * since not started turning on. + * since not started turning on. */ public boolean isScreenFullyOff() { return mScreenLifecycle.getScreenState() == ScreenLifecycle.SCREEN_OFF; |