Loading packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +12 −5 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.hardware.biometrics.BiometricManager.BiometricMultiSensorMode; import android.hardware.biometrics.BiometricPrompt; import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.PromptInfo; import android.hardware.display.DisplayManager; import android.hardware.face.FaceManager; import android.hardware.face.FaceSensorPropertiesInternal; import android.hardware.fingerprint.FingerprintManager; Loading @@ -57,6 +58,7 @@ import com.android.internal.os.SomeArgs; import com.android.systemui.SystemUI; import com.android.systemui.assist.ui.DisplayUtils; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.DozeReceiver; import com.android.systemui.statusbar.CommandQueue; Loading Loading @@ -423,7 +425,9 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks, @Nullable FingerprintManager fingerprintManager, @Nullable FaceManager faceManager, Provider<UdfpsController> udfpsControllerFactory, Provider<SidefpsController> sidefpsControllerFactory) { Provider<SidefpsController> sidefpsControllerFactory, @NonNull DisplayManager displayManager, @Main Handler handler) { super(context); mCommandQueue = commandQueue; mActivityTaskManager = activityTaskManager; Loading @@ -432,10 +436,13 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks, mUdfpsControllerFactory = udfpsControllerFactory; mSidefpsControllerFactory = sidefpsControllerFactory; mWindowManager = windowManager; mOrientationListener = new BiometricOrientationEventListener(context, () -> { mOrientationListener = new BiometricOrientationEventListener(context, () -> { onOrientationChanged(); return Unit.INSTANCE; }); }, displayManager, handler); mFaceProps = mFaceManager != null ? mFaceManager.getSensorPropertiesInternal() : null; Loading packages/SystemUI/src/com/android/systemui/biometrics/BiometricOrientationEventListener.kt +15 −18 Original line number Diff line number Diff line Loading @@ -17,7 +17,10 @@ package com.android.systemui.biometrics import android.content.Context import android.hardware.display.DisplayManager import android.os.Handler import android.view.OrientationEventListener import android.view.Surface /** * An [OrientationEventListener] that invokes the [onOrientationChanged] callback whenever Loading @@ -26,20 +29,16 @@ import android.view.OrientationEventListener */ class BiometricOrientationEventListener( private val context: Context, private val onOrientationChanged: () -> Unit ) : OrientationEventListener(context) { private val onOrientationChanged: () -> Unit, private val displayManager: DisplayManager, private val handler: Handler ) : DisplayManager.DisplayListener { /** If actively listening (not available in base class). */ var enabled: Boolean = false private set private var lastRotation = context.display?.rotation ?: ORIENTATION_UNKNOWN override fun onOrientationChanged(orientation: Int) { if (orientation == ORIENTATION_UNKNOWN) { return } private var lastRotation = context.display?.rotation ?: Surface.ROTATION_0 override fun onDisplayAdded(displayId: Int) {} override fun onDisplayRemoved(displayId: Int) {} override fun onDisplayChanged(displayId: Int) { val rotation = context.display?.rotation ?: return if (lastRotation != rotation) { lastRotation = rotation Loading @@ -48,13 +47,11 @@ class BiometricOrientationEventListener( } } override fun enable() { enabled = true super.enable() fun enable() { displayManager.registerDisplayListener(this, handler) } override fun disable() { enabled = false super.disable() fun disable() { displayManager.unregisterDisplayListener(this) } } packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.java +13 −5 Original line number Diff line number Diff line Loading @@ -23,9 +23,11 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.graphics.PixelFormat; import android.hardware.display.DisplayManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.ISidefpsController; import android.os.Handler; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; Loading Loading @@ -93,16 +95,22 @@ public class SidefpsController { @NonNull LayoutInflater inflater, @Nullable FingerprintManager fingerprintManager, @NonNull WindowManager windowManager, @Main DelayableExecutor fgExecutor) { @Main DelayableExecutor fgExecutor, @NonNull DisplayManager displayManager, @Main Handler handler) { mContext = context; mInflater = inflater; mFingerprintManager = checkNotNull(fingerprintManager); mWindowManager = windowManager; mFgExecutor = fgExecutor; mOrientationListener = new BiometricOrientationEventListener(context, () -> { mOrientationListener = new BiometricOrientationEventListener( context, () -> { onOrientationChanged(); return Unit.INSTANCE; }); }, displayManager, handler); mSensorProps = findFirstSidefps(); checkArgument(mSensorProps != null); Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +16 −7 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.IntentFilter; import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.RectF; import android.hardware.display.DisplayManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IUdfpsOverlayController; Loading Loading @@ -519,7 +520,9 @@ public class UdfpsController implements DozeReceiver { @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, @NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull KeyguardStateController keyguardStateController, @NonNull KeyguardBypassController keyguardBypassController) { @NonNull KeyguardBypassController keyguardBypassController, @NonNull DisplayManager displayManager, @Main Handler mainHandler) { mContext = context; mExecution = execution; // TODO (b/185124905): inject main handler and vibrator once done prototyping Loading @@ -545,10 +548,14 @@ public class UdfpsController implements DozeReceiver { mHbmProvider = hbmProvider.orElse(null); screenLifecycle.addObserver(mScreenObserver); mScreenOn = screenLifecycle.getScreenState() == ScreenLifecycle.SCREEN_ON; mOrientationListener = new BiometricOrientationEventListener(context, () -> { mOrientationListener = new BiometricOrientationEventListener( context, () -> { onOrientationChanged(); return Unit.INSTANCE; }); }, displayManager, mainHandler); mKeyguardBypassController = keyguardBypassController; mSensorProps = findFirstUdfps(); Loading Loading @@ -662,7 +669,8 @@ public class UdfpsController implements DozeReceiver { // Transform dimensions if the device is in landscape mode switch (mContext.getDisplay().getRotation()) { case Surface.ROTATION_90: if (animation instanceof UdfpsKeyguardViewController) { if (animation instanceof UdfpsKeyguardViewController && mKeyguardUpdateMonitor.isGoingToSleep()) { break; } mCoreLayoutParams.x = mSensorProps.sensorLocationY - mSensorProps.sensorRadius Loading @@ -672,7 +680,8 @@ public class UdfpsController implements DozeReceiver { break; case Surface.ROTATION_270: if (animation instanceof UdfpsKeyguardViewController) { if (animation instanceof UdfpsKeyguardViewController && mKeyguardUpdateMonitor.isGoingToSleep()) { break; } mCoreLayoutParams.x = p.x - mSensorProps.sensorLocationY - mSensorProps.sensorRadius Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java +10 −7 Original line number Diff line number Diff line Loading @@ -20,9 +20,7 @@ import static android.hardware.biometrics.BiometricManager.Authenticators; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_MULTI_SENSOR_FACE_THEN_FINGERPRINT; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; Loading Loading @@ -50,12 +48,14 @@ import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.PromptInfo; import android.hardware.biometrics.SensorProperties; import android.hardware.display.DisplayManager; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorProperties; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; import android.testing.AndroidTestingRunner; import android.testing.TestableContext; Loading Loading @@ -110,6 +110,10 @@ public class AuthControllerTest extends SysuiTestCase { private UdfpsController mUdfpsController; @Mock private SidefpsController mSidefpsController; @Mock private DisplayManager mDisplayManager; @Mock private Handler mHandler; @Captor ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mAuthenticatorsRegisteredCaptor; Loading Loading @@ -544,13 +548,12 @@ public class AuthControllerTest extends SysuiTestCase { @Test public void testSubscribesToOrientationChangesWhenShowingDialog() { assertFalse(mAuthController.mOrientationListener.getEnabled()); showDialog(new int[]{1} /* sensorIds */, false /* credentialAllowed */); assertTrue(mAuthController.mOrientationListener.getEnabled()); verify(mDisplayManager).registerDisplayListener(any(), eq(mHandler)); mAuthController.hideAuthenticationDialog(); assertFalse(mAuthController.mOrientationListener.getEnabled()); verify(mDisplayManager).unregisterDisplayListener(any()); } // Helpers Loading Loading @@ -603,7 +606,7 @@ public class AuthControllerTest extends SysuiTestCase { Provider<SidefpsController> sidefpsControllerFactory) { super(context, commandQueue, activityTaskManager, windowManager, fingerprintManager, faceManager, udfpsControllerFactory, sidefpsControllerFactory); sidefpsControllerFactory, mDisplayManager, mHandler); } @Override Loading Loading
packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +12 −5 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.hardware.biometrics.BiometricManager.BiometricMultiSensorMode; import android.hardware.biometrics.BiometricPrompt; import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.PromptInfo; import android.hardware.display.DisplayManager; import android.hardware.face.FaceManager; import android.hardware.face.FaceSensorPropertiesInternal; import android.hardware.fingerprint.FingerprintManager; Loading @@ -57,6 +58,7 @@ import com.android.internal.os.SomeArgs; import com.android.systemui.SystemUI; import com.android.systemui.assist.ui.DisplayUtils; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.DozeReceiver; import com.android.systemui.statusbar.CommandQueue; Loading Loading @@ -423,7 +425,9 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks, @Nullable FingerprintManager fingerprintManager, @Nullable FaceManager faceManager, Provider<UdfpsController> udfpsControllerFactory, Provider<SidefpsController> sidefpsControllerFactory) { Provider<SidefpsController> sidefpsControllerFactory, @NonNull DisplayManager displayManager, @Main Handler handler) { super(context); mCommandQueue = commandQueue; mActivityTaskManager = activityTaskManager; Loading @@ -432,10 +436,13 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks, mUdfpsControllerFactory = udfpsControllerFactory; mSidefpsControllerFactory = sidefpsControllerFactory; mWindowManager = windowManager; mOrientationListener = new BiometricOrientationEventListener(context, () -> { mOrientationListener = new BiometricOrientationEventListener(context, () -> { onOrientationChanged(); return Unit.INSTANCE; }); }, displayManager, handler); mFaceProps = mFaceManager != null ? mFaceManager.getSensorPropertiesInternal() : null; Loading
packages/SystemUI/src/com/android/systemui/biometrics/BiometricOrientationEventListener.kt +15 −18 Original line number Diff line number Diff line Loading @@ -17,7 +17,10 @@ package com.android.systemui.biometrics import android.content.Context import android.hardware.display.DisplayManager import android.os.Handler import android.view.OrientationEventListener import android.view.Surface /** * An [OrientationEventListener] that invokes the [onOrientationChanged] callback whenever Loading @@ -26,20 +29,16 @@ import android.view.OrientationEventListener */ class BiometricOrientationEventListener( private val context: Context, private val onOrientationChanged: () -> Unit ) : OrientationEventListener(context) { private val onOrientationChanged: () -> Unit, private val displayManager: DisplayManager, private val handler: Handler ) : DisplayManager.DisplayListener { /** If actively listening (not available in base class). */ var enabled: Boolean = false private set private var lastRotation = context.display?.rotation ?: ORIENTATION_UNKNOWN override fun onOrientationChanged(orientation: Int) { if (orientation == ORIENTATION_UNKNOWN) { return } private var lastRotation = context.display?.rotation ?: Surface.ROTATION_0 override fun onDisplayAdded(displayId: Int) {} override fun onDisplayRemoved(displayId: Int) {} override fun onDisplayChanged(displayId: Int) { val rotation = context.display?.rotation ?: return if (lastRotation != rotation) { lastRotation = rotation Loading @@ -48,13 +47,11 @@ class BiometricOrientationEventListener( } } override fun enable() { enabled = true super.enable() fun enable() { displayManager.registerDisplayListener(this, handler) } override fun disable() { enabled = false super.disable() fun disable() { displayManager.unregisterDisplayListener(this) } }
packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.java +13 −5 Original line number Diff line number Diff line Loading @@ -23,9 +23,11 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.graphics.PixelFormat; import android.hardware.display.DisplayManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.ISidefpsController; import android.os.Handler; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; Loading Loading @@ -93,16 +95,22 @@ public class SidefpsController { @NonNull LayoutInflater inflater, @Nullable FingerprintManager fingerprintManager, @NonNull WindowManager windowManager, @Main DelayableExecutor fgExecutor) { @Main DelayableExecutor fgExecutor, @NonNull DisplayManager displayManager, @Main Handler handler) { mContext = context; mInflater = inflater; mFingerprintManager = checkNotNull(fingerprintManager); mWindowManager = windowManager; mFgExecutor = fgExecutor; mOrientationListener = new BiometricOrientationEventListener(context, () -> { mOrientationListener = new BiometricOrientationEventListener( context, () -> { onOrientationChanged(); return Unit.INSTANCE; }); }, displayManager, handler); mSensorProps = findFirstSidefps(); checkArgument(mSensorProps != null); Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +16 −7 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.IntentFilter; import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.RectF; import android.hardware.display.DisplayManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IUdfpsOverlayController; Loading Loading @@ -519,7 +520,9 @@ public class UdfpsController implements DozeReceiver { @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, @NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull KeyguardStateController keyguardStateController, @NonNull KeyguardBypassController keyguardBypassController) { @NonNull KeyguardBypassController keyguardBypassController, @NonNull DisplayManager displayManager, @Main Handler mainHandler) { mContext = context; mExecution = execution; // TODO (b/185124905): inject main handler and vibrator once done prototyping Loading @@ -545,10 +548,14 @@ public class UdfpsController implements DozeReceiver { mHbmProvider = hbmProvider.orElse(null); screenLifecycle.addObserver(mScreenObserver); mScreenOn = screenLifecycle.getScreenState() == ScreenLifecycle.SCREEN_ON; mOrientationListener = new BiometricOrientationEventListener(context, () -> { mOrientationListener = new BiometricOrientationEventListener( context, () -> { onOrientationChanged(); return Unit.INSTANCE; }); }, displayManager, mainHandler); mKeyguardBypassController = keyguardBypassController; mSensorProps = findFirstUdfps(); Loading Loading @@ -662,7 +669,8 @@ public class UdfpsController implements DozeReceiver { // Transform dimensions if the device is in landscape mode switch (mContext.getDisplay().getRotation()) { case Surface.ROTATION_90: if (animation instanceof UdfpsKeyguardViewController) { if (animation instanceof UdfpsKeyguardViewController && mKeyguardUpdateMonitor.isGoingToSleep()) { break; } mCoreLayoutParams.x = mSensorProps.sensorLocationY - mSensorProps.sensorRadius Loading @@ -672,7 +680,8 @@ public class UdfpsController implements DozeReceiver { break; case Surface.ROTATION_270: if (animation instanceof UdfpsKeyguardViewController) { if (animation instanceof UdfpsKeyguardViewController && mKeyguardUpdateMonitor.isGoingToSleep()) { break; } mCoreLayoutParams.x = p.x - mSensorProps.sensorLocationY - mSensorProps.sensorRadius Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java +10 −7 Original line number Diff line number Diff line Loading @@ -20,9 +20,7 @@ import static android.hardware.biometrics.BiometricManager.Authenticators; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_MULTI_SENSOR_FACE_THEN_FINGERPRINT; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; Loading Loading @@ -50,12 +48,14 @@ import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.PromptInfo; import android.hardware.biometrics.SensorProperties; import android.hardware.display.DisplayManager; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorProperties; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; import android.testing.AndroidTestingRunner; import android.testing.TestableContext; Loading Loading @@ -110,6 +110,10 @@ public class AuthControllerTest extends SysuiTestCase { private UdfpsController mUdfpsController; @Mock private SidefpsController mSidefpsController; @Mock private DisplayManager mDisplayManager; @Mock private Handler mHandler; @Captor ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mAuthenticatorsRegisteredCaptor; Loading Loading @@ -544,13 +548,12 @@ public class AuthControllerTest extends SysuiTestCase { @Test public void testSubscribesToOrientationChangesWhenShowingDialog() { assertFalse(mAuthController.mOrientationListener.getEnabled()); showDialog(new int[]{1} /* sensorIds */, false /* credentialAllowed */); assertTrue(mAuthController.mOrientationListener.getEnabled()); verify(mDisplayManager).registerDisplayListener(any(), eq(mHandler)); mAuthController.hideAuthenticationDialog(); assertFalse(mAuthController.mOrientationListener.getEnabled()); verify(mDisplayManager).unregisterDisplayListener(any()); } // Helpers Loading Loading @@ -603,7 +606,7 @@ public class AuthControllerTest extends SysuiTestCase { Provider<SidefpsController> sidefpsControllerFactory) { super(context, commandQueue, activityTaskManager, windowManager, fingerprintManager, faceManager, udfpsControllerFactory, sidefpsControllerFactory); sidefpsControllerFactory, mDisplayManager, mHandler); } @Override Loading