Loading packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +31 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.hardware.biometrics.BiometricSourceType; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.media.AudioAttributes; import android.os.Process; import android.os.Vibrator; import android.util.DisplayMetrics; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; Loading @@ -43,6 +46,7 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.UdfpsController; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.FalsingManager; Loading @@ -67,6 +71,13 @@ import javax.inject.Inject; */ @StatusBarComponent.StatusBarScope public class LockIconViewController extends ViewController<LockIconView> implements Dumpable { private static final AudioAttributes VIBRATION_SONIFICATION_ATTRIBUTES = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .build(); @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @NonNull private final KeyguardViewController mKeyguardViewController; @NonNull private final StatusBarStateController mStatusBarStateController; Loading @@ -83,6 +94,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme @NonNull private final Drawable mLockIcon; @NonNull private final CharSequence mUnlockedLabel; @NonNull private final CharSequence mLockedLabel; @Nullable private final Vibrator mVibrator; private boolean mIsDozing; private boolean mIsBouncerShowing; Loading Loading @@ -119,7 +131,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme @NonNull DumpManager dumpManager, @NonNull AccessibilityManager accessibilityManager, @NonNull ConfigurationController configurationController, @NonNull @Main DelayableExecutor executor @NonNull @Main DelayableExecutor executor, @Nullable Vibrator vibrator ) { super(view); mStatusBarStateController = statusBarStateController; Loading @@ -131,6 +144,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme mAccessibilityManager = accessibilityManager; mConfigurationController = configurationController; mExecutor = executor; mVibrator = vibrator; final Context context = view.getContext(); mLockIcon = mView.getContext().getResources().getDrawable( Loading Loading @@ -459,6 +473,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme // intercept all following touches until we see MotionEvent.ACTION_CANCEL UP or // MotionEvent.ACTION_UP (see #onTouchEvent) mDownDetected = true; if (mVibrator != null) { mVibrator.vibrate( Process.myUid(), getContext().getOpPackageName(), UdfpsController.EFFECT_CLICK, "lockIcon-onDown", VIBRATION_SONIFICATION_ATTRIBUTES); } return true; } Loading @@ -467,6 +489,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme return; } if (mVibrator != null) { mVibrator.vibrate( Process.myUid(), getContext().getOpPackageName(), UdfpsController.EFFECT_CLICK, "lockIcon-onLongPress", VIBRATION_SONIFICATION_ATTRIBUTES); } onAffordanceClick(); } Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +7 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.media.AudioAttributes; import android.os.Handler; import android.os.Looper; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.Trace; Loading Loading @@ -569,7 +570,12 @@ public class UdfpsController implements DozeReceiver { @VisibleForTesting public void playStartHaptic() { if (mVibrator != null) { mVibrator.vibrate(EFFECT_CLICK, VIBRATION_SONIFICATION_ATTRIBUTES); mVibrator.vibrate( Process.myUid(), mContext.getOpPackageName(), EFFECT_CLICK, "udfps-onStart", VIBRATION_SONIFICATION_ATTRIBUTES); } } Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +8 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; Loading Loading @@ -444,7 +446,11 @@ public class UdfpsControllerTest extends SysuiTestCase { moveEvent.recycle(); // THEN click haptic is played verify(mVibrator).vibrate(mUdfpsController.EFFECT_CLICK, UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES); verify(mVibrator).vibrate( anyInt(), anyString(), eq(mUdfpsController.EFFECT_CLICK), eq("udfps-onStart"), eq(UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES)); } } Loading
packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +31 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.hardware.biometrics.BiometricSourceType; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.media.AudioAttributes; import android.os.Process; import android.os.Vibrator; import android.util.DisplayMetrics; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; Loading @@ -43,6 +46,7 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.UdfpsController; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.FalsingManager; Loading @@ -67,6 +71,13 @@ import javax.inject.Inject; */ @StatusBarComponent.StatusBarScope public class LockIconViewController extends ViewController<LockIconView> implements Dumpable { private static final AudioAttributes VIBRATION_SONIFICATION_ATTRIBUTES = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .build(); @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @NonNull private final KeyguardViewController mKeyguardViewController; @NonNull private final StatusBarStateController mStatusBarStateController; Loading @@ -83,6 +94,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme @NonNull private final Drawable mLockIcon; @NonNull private final CharSequence mUnlockedLabel; @NonNull private final CharSequence mLockedLabel; @Nullable private final Vibrator mVibrator; private boolean mIsDozing; private boolean mIsBouncerShowing; Loading Loading @@ -119,7 +131,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme @NonNull DumpManager dumpManager, @NonNull AccessibilityManager accessibilityManager, @NonNull ConfigurationController configurationController, @NonNull @Main DelayableExecutor executor @NonNull @Main DelayableExecutor executor, @Nullable Vibrator vibrator ) { super(view); mStatusBarStateController = statusBarStateController; Loading @@ -131,6 +144,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme mAccessibilityManager = accessibilityManager; mConfigurationController = configurationController; mExecutor = executor; mVibrator = vibrator; final Context context = view.getContext(); mLockIcon = mView.getContext().getResources().getDrawable( Loading Loading @@ -459,6 +473,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme // intercept all following touches until we see MotionEvent.ACTION_CANCEL UP or // MotionEvent.ACTION_UP (see #onTouchEvent) mDownDetected = true; if (mVibrator != null) { mVibrator.vibrate( Process.myUid(), getContext().getOpPackageName(), UdfpsController.EFFECT_CLICK, "lockIcon-onDown", VIBRATION_SONIFICATION_ATTRIBUTES); } return true; } Loading @@ -467,6 +489,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme return; } if (mVibrator != null) { mVibrator.vibrate( Process.myUid(), getContext().getOpPackageName(), UdfpsController.EFFECT_CLICK, "lockIcon-onLongPress", VIBRATION_SONIFICATION_ATTRIBUTES); } onAffordanceClick(); } Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +7 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.media.AudioAttributes; import android.os.Handler; import android.os.Looper; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.Trace; Loading Loading @@ -569,7 +570,12 @@ public class UdfpsController implements DozeReceiver { @VisibleForTesting public void playStartHaptic() { if (mVibrator != null) { mVibrator.vibrate(EFFECT_CLICK, VIBRATION_SONIFICATION_ATTRIBUTES); mVibrator.vibrate( Process.myUid(), mContext.getOpPackageName(), EFFECT_CLICK, "udfps-onStart", VIBRATION_SONIFICATION_ATTRIBUTES); } } Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +8 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; Loading Loading @@ -444,7 +446,11 @@ public class UdfpsControllerTest extends SysuiTestCase { moveEvent.recycle(); // THEN click haptic is played verify(mVibrator).vibrate(mUdfpsController.EFFECT_CLICK, UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES); verify(mVibrator).vibrate( anyInt(), anyString(), eq(mUdfpsController.EFFECT_CLICK), eq("udfps-onStart"), eq(UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES)); } }