diff --git a/core/java/android/hardware/display/AmbientDisplayConfiguration.java b/core/java/android/hardware/display/AmbientDisplayConfiguration.java index 891299760237c..a1f7aa12264b9 100644 --- a/core/java/android/hardware/display/AmbientDisplayConfiguration.java +++ b/core/java/android/hardware/display/AmbientDisplayConfiguration.java @@ -53,7 +53,8 @@ public class AmbientDisplayConfiguration { || pickupGestureEnabled(user) || tapGestureEnabled(user) || doubleTapGestureEnabled(user) - || quickPickupSensorEnabled(user); + || quickPickupSensorEnabled(user) + || screenOffUdfpsEnabled(user); } /** {@hide} */ @@ -105,6 +106,12 @@ public class AmbientDisplayConfiguration { return !TextUtils.isEmpty(quickPickupSensorType()) && !alwaysOnEnabled(user); } + /** {@hide} */ + public boolean screenOffUdfpsEnabled(int user) { + return !TextUtils.isEmpty(udfpsLongPressSensorType()) + && boolSettingDefaultOff("screen_off_udfps_enabled", user); + } + /** {@hide} */ public boolean wakeScreenGestureAvailable() { return mContext.getResources() diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 3d51f23797273..f3a6d6377c6da 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -66,10 +66,8 @@ import android.os.Handler; import android.os.IRemoteCallback; import android.os.Looper; import android.os.Message; -import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; -import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; @@ -243,21 +241,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private final boolean mIsPrimaryUser; private final boolean mIsAutomotive; private final AuthController mAuthController; - private final PowerManager mPowerManager; private final StatusBarStateController mStatusBarStateController; private int mStatusBarState; - private boolean mDozing; private final StatusBarStateController.StateListener mStatusBarStateControllerListener = new StatusBarStateController.StateListener() { @Override public void onStateChanged(int newState) { mStatusBarState = newState; } - - @Override - public void onDozingChanged(boolean dozing) { - mDozing = dozing; - } }; HashMap mSimDatas = new HashMap<>(); @@ -1330,19 +1321,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private final FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback = new AuthenticationCallback() { - private boolean mIsUdfpsRunningWhileDozing; @Override public void onAuthenticationFailed() { handleFingerprintAuthFailed(); - cancelAodInterrupt(); } @Override public void onAuthenticationSucceeded(AuthenticationResult result) { Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded"); handleFingerprintAuthenticated(result.getUserId(), result.isStrongBiometric()); - cancelAodInterrupt(); Trace.endSection(); } @@ -1354,7 +1342,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { handleFingerprintError(errMsgId, errString.toString()); - cancelAodInterrupt(); } @Override @@ -1365,25 +1352,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Override public void onUdfpsPointerDown(int sensorId) { Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId); - - if (mDozing) { - mIsUdfpsRunningWhileDozing = true; - } } @Override public void onUdfpsPointerUp(int sensorId) { Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId); } - - private void cancelAodInterrupt() { - if (mIsUdfpsRunningWhileDozing) { - mPowerManager.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_GESTURE, - "com.android.systemui:AOD_INTERRUPT_END"); - } - mAuthController.onCancelUdfps(); - mIsUdfpsRunningWhileDozing = false; - } }; private final FaceManager.FaceDetectionCallback mFaceDetectionCallback @@ -1676,7 +1650,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab LockPatternUtils lockPatternUtils, AuthController authController, TelephonyListenerManager telephonyListenerManager, - PowerManager powerManager, FeatureFlags featureFlags) { mContext = context; mSubscriptionManager = SubscriptionManager.from(context); @@ -1689,10 +1662,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mStatusBarStateController = statusBarStateController; mStatusBarStateController.addCallback(mStatusBarStateControllerListener); mStatusBarState = mStatusBarStateController.getState(); - mDozing = mStatusBarStateController.isDozing(); mLockPatternUtils = lockPatternUtils; mAuthController = authController; - mPowerManager = powerManager; dumpManager.registerDumpable(getClass().getName(), this); mHandler = new Handler(mainLooper) { diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java index 39adabb06d408..23c44131ab604 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java @@ -70,6 +70,7 @@ public class DozeSensors { private final Consumer mProxCallback; private final SecureSettings mSecureSettings; private final Callback mCallback; + private final boolean mScreenOffUdfpsEnabled; @VisibleForTesting protected TriggerSensor[] mSensors; @@ -116,6 +117,8 @@ public class DozeSensors { mProximitySensor = proximitySensor; mSelectivelyRegisterProxSensors = dozeParameters.getSelectivelyRegisterSensorsUsingProx(); mListeningProxSensors = !mSelectivelyRegisterProxSensors; + mScreenOffUdfpsEnabled = + config.screenOffUdfpsEnabled(KeyguardUpdateMonitor.getCurrentUser()); boolean udfpsEnrolled = authController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser()); @@ -171,7 +174,7 @@ public class DozeSensors { findSensorWithType(config.udfpsLongPressSensorType()), "doze_pulse_on_auth", true /* settingDef */, - udfpsEnrolled, + udfpsEnrolled && (alwaysOn || mScreenOffUdfpsEnabled), DozeLog.REASON_SENSOR_UDFPS_LONG_PRESS, true /* reports touch coordinates */, true /* touchscreen */, @@ -369,6 +372,7 @@ public class DozeSensors { pw.println("mListeningTouchScreenSensors=" + mListeningTouchScreenSensors); pw.println("mSelectivelyRegisterProxSensors=" + mSelectivelyRegisterProxSensors); pw.println("mListeningProxSensors=" + mListeningProxSensors); + pw.println("mScreenOffUdfpsEnabled=" + mScreenOffUdfpsEnabled); IndentingPrintWriter idpw = new IndentingPrintWriter(pw); idpw.increaseIndent(); for (TriggerSensor s : mSensors) { diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 0342796817c35..3d4da270dd448 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -62,7 +62,6 @@ import android.nfc.NfcAdapter; import android.os.Bundle; import android.os.Handler; import android.os.IRemoteCallback; -import android.os.PowerManager; import android.os.UserHandle; import android.os.UserManager; import android.telephony.ServiceState; @@ -166,8 +165,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { @Mock private AuthController mAuthController; @Mock - private PowerManager mPowerManager; - @Mock private TelephonyListenerManager mTelephonyListenerManager; @Mock private FeatureFlags mFeatureFlags; @@ -525,46 +522,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt()); } - @Test - public void testFingerprintCancelAodInterrupt_onAuthenticationFailed() { - // GIVEN on keyguard and listening for fingerprint authentication - mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */); - mTestableLooper.processAllMessages(); - - ArgumentCaptor fingerprintCallbackCaptor = - ArgumentCaptor.forClass(FingerprintManager.AuthenticationCallback.class); - verify(mFingerprintManager).authenticate(any(), any(), fingerprintCallbackCaptor.capture(), - any(), anyInt(), anyInt()); - FingerprintManager.AuthenticationCallback authCallback = - fingerprintCallbackCaptor.getValue(); - - // WHEN authentication fails - authCallback.onAuthenticationFailed(); - - // THEN aod interrupt is cancelled - verify(mAuthController).onCancelUdfps(); - } - - @Test - public void testFingerprintCancelAodInterrupt_onAuthenticationError() { - // GIVEN on keyguard and listening for fingerprint authentication - mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */); - mTestableLooper.processAllMessages(); - - ArgumentCaptor fingerprintCallbackCaptor = - ArgumentCaptor.forClass(FingerprintManager.AuthenticationCallback.class); - verify(mFingerprintManager).authenticate(any(), any(), fingerprintCallbackCaptor.capture(), - any(), anyInt(), anyInt()); - FingerprintManager.AuthenticationCallback authCallback = - fingerprintCallbackCaptor.getValue(); - - // WHEN authentication errors - authCallback.onAuthenticationError(0, ""); - - // THEN aod interrupt is cancelled - verify(mAuthController).onCancelUdfps(); - } - @Test public void skipsAuthentication_whenStatusBarShadeLocked() { mStatusBarStateListener.onStateChanged(StatusBarState.SHADE_LOCKED); @@ -1022,7 +979,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mBroadcastDispatcher, mDumpManager, mRingerModeTracker, mBackgroundExecutor, mStatusBarStateController, mLockPatternUtils, - mAuthController, mTelephonyListenerManager, mPowerManager, mFeatureFlags); + mAuthController, mTelephonyListenerManager, mFeatureFlags); setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java index 724f8a3adf80a..d6226aa53f67d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java @@ -73,6 +73,7 @@ public class DozeConfigurationUtil { when(config.dozePickupSensorAvailable()).thenReturn(false); when(config.wakeScreenGestureAvailable()).thenReturn(false); when(config.quickPickupSensorEnabled(anyInt())).thenReturn(false); + when(config.screenOffUdfpsEnabled(anyInt())).thenReturn(false); doneHolder[0] = true; return config;