Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +21 −2 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import android.content.IntentFilter; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.database.ContentObserver; import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.BiometricSourceType; Loading Loading @@ -329,6 +330,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private SparseBooleanArray mUserIsUnlocked = new SparseBooleanArray(); private SparseBooleanArray mUserHasTrust = new SparseBooleanArray(); private SparseBooleanArray mUserTrustIsManaged = new SparseBooleanArray(); private SparseBooleanArray mUserTrustIsUsuallyManaged = new SparseBooleanArray(); private SparseBooleanArray mUserFingerprintAuthenticated = new SparseBooleanArray(); private SparseBooleanArray mUserFaceAuthenticated = new SparseBooleanArray(); private SparseBooleanArray mUserFaceUnlockRunning = new SparseBooleanArray(); Loading Loading @@ -472,6 +474,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { public void onTrustManagedChanged(boolean managed, int userId) { checkIsHandlerThread(); mUserTrustIsManaged.put(userId, managed); mUserTrustIsUsuallyManaged.put(userId, mTrustManager.isTrustUsuallyManaged(userId)); for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { Loading Loading @@ -925,6 +928,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { return mUserTrustIsManaged.get(userId) && !isTrustDisabled(userId); } /** * Cached version of {@link TrustManager#isTrustUsuallyManaged(int)}. */ public boolean isTrustUsuallyManaged(int userId) { checkIsHandlerThread(); return mUserTrustIsUsuallyManaged.get(userId); } public boolean isUnlockingWithBiometricAllowed() { return mStrongAuthTracker.isUnlockingWithBiometricAllowed(); } Loading Loading @@ -1474,9 +1485,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mUserIsUnlocked.put(userId, mUserManager.isUserUnlocked(userId)); } private void handleUserRemoved(int userId) { @VisibleForTesting void handleUserRemoved(int userId) { checkIsHandlerThread(); mUserIsUnlocked.delete(userId); mUserTrustIsUsuallyManaged.delete(userId); } @VisibleForTesting Loading Loading @@ -1662,7 +1675,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { e.rethrowAsRuntimeException(); } mTrustManager = (TrustManager) context.getSystemService(Context.TRUST_SERVICE); mTrustManager = context.getSystemService(TrustManager.class); mTrustManager.registerTrustListener(this); mLockPatternUtils = new LockPatternUtils(context); mLockPatternUtils.registerStrongAuthTracker(mStrongAuthTracker); Loading Loading @@ -1697,6 +1710,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user)); mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class); mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled(); List<UserInfo> allUsers = mUserManager.getUsers(); for (UserInfo userInfo : allUsers) { mUserTrustIsUsuallyManaged.put(userInfo.id, mTrustManager.isTrustUsuallyManaged(userInfo.id)); } updateAirplaneModeState(); TelephonyManager telephony = Loading Loading @@ -2048,6 +2066,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { */ private void handleUserSwitching(int userId, IRemoteCallback reply) { checkIsHandlerThread(); mUserTrustIsUsuallyManaged.put(userId, mTrustManager.isTrustUsuallyManaged(userId)); for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +21 −24 Original line number Diff line number Diff line Loading @@ -650,10 +650,8 @@ public class KeyguardViewMediator extends SystemUI { @Override public int getBouncerPromptReason() { // TODO(b/140053364) return whitelistIpcs(() -> { int currentUser = ActivityManager.getCurrentUser(); boolean trust = mTrustManager.isTrustUsuallyManaged(currentUser); int currentUser = KeyguardUpdateMonitor.getCurrentUser(); boolean trust = mUpdateMonitor.isTrustUsuallyManaged(currentUser); boolean biometrics = mUpdateMonitor.isUnlockingWithBiometricsPossible(currentUser); boolean any = trust || biometrics; KeyguardUpdateMonitor.StrongAuthTracker strongAuthTracker = Loading @@ -672,7 +670,6 @@ public class KeyguardViewMediator extends SystemUI { return KeyguardSecurityView.PROMPT_REASON_AFTER_LOCKOUT; } return KeyguardSecurityView.PROMPT_REASON_NONE; }); } @Override Loading Loading @@ -701,7 +698,7 @@ public class KeyguardViewMediator extends SystemUI { private void setupLocked() { mPM = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mTrustManager = (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE); mTrustManager = mContext.getSystemService(TrustManager.class); mShowKeyguardWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "show keyguard"); mShowKeyguardWakeLock.setReferenceCounted(false); Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.never; Loading Loading @@ -481,6 +482,25 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { assertThat(mKeyguardUpdateMonitor.isUserUnlocked(randomUser)).isFalse(); } @Test public void testTrustUsuallyManaged_whenTrustChanges() { int user = KeyguardUpdateMonitor.getCurrentUser(); when(mTrustManager.isTrustUsuallyManaged(eq(user))).thenReturn(true); mKeyguardUpdateMonitor.onTrustManagedChanged(false /* managed */, user); assertThat(mKeyguardUpdateMonitor.isTrustUsuallyManaged(user)).isTrue(); } @Test public void testTrustUsuallyManaged_resetWhenUserIsRemoved() { int user = KeyguardUpdateMonitor.getCurrentUser(); when(mTrustManager.isTrustUsuallyManaged(eq(user))).thenReturn(true); mKeyguardUpdateMonitor.onTrustManagedChanged(false /* managed */, user); assertThat(mKeyguardUpdateMonitor.isTrustUsuallyManaged(user)).isTrue(); mKeyguardUpdateMonitor.handleUserRemoved(user); assertThat(mKeyguardUpdateMonitor.isTrustUsuallyManaged(user)).isFalse(); } private Intent putPhoneInfo(Intent intent, Bundle data, Boolean simInited) { int subscription = simInited ? 1/* mock subid=1 */ : SubscriptionManager.DUMMY_SUBSCRIPTION_ID_BASE; Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +21 −2 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import android.content.IntentFilter; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.database.ContentObserver; import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.BiometricSourceType; Loading Loading @@ -329,6 +330,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private SparseBooleanArray mUserIsUnlocked = new SparseBooleanArray(); private SparseBooleanArray mUserHasTrust = new SparseBooleanArray(); private SparseBooleanArray mUserTrustIsManaged = new SparseBooleanArray(); private SparseBooleanArray mUserTrustIsUsuallyManaged = new SparseBooleanArray(); private SparseBooleanArray mUserFingerprintAuthenticated = new SparseBooleanArray(); private SparseBooleanArray mUserFaceAuthenticated = new SparseBooleanArray(); private SparseBooleanArray mUserFaceUnlockRunning = new SparseBooleanArray(); Loading Loading @@ -472,6 +474,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { public void onTrustManagedChanged(boolean managed, int userId) { checkIsHandlerThread(); mUserTrustIsManaged.put(userId, managed); mUserTrustIsUsuallyManaged.put(userId, mTrustManager.isTrustUsuallyManaged(userId)); for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { Loading Loading @@ -925,6 +928,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { return mUserTrustIsManaged.get(userId) && !isTrustDisabled(userId); } /** * Cached version of {@link TrustManager#isTrustUsuallyManaged(int)}. */ public boolean isTrustUsuallyManaged(int userId) { checkIsHandlerThread(); return mUserTrustIsUsuallyManaged.get(userId); } public boolean isUnlockingWithBiometricAllowed() { return mStrongAuthTracker.isUnlockingWithBiometricAllowed(); } Loading Loading @@ -1474,9 +1485,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mUserIsUnlocked.put(userId, mUserManager.isUserUnlocked(userId)); } private void handleUserRemoved(int userId) { @VisibleForTesting void handleUserRemoved(int userId) { checkIsHandlerThread(); mUserIsUnlocked.delete(userId); mUserTrustIsUsuallyManaged.delete(userId); } @VisibleForTesting Loading Loading @@ -1662,7 +1675,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { e.rethrowAsRuntimeException(); } mTrustManager = (TrustManager) context.getSystemService(Context.TRUST_SERVICE); mTrustManager = context.getSystemService(TrustManager.class); mTrustManager.registerTrustListener(this); mLockPatternUtils = new LockPatternUtils(context); mLockPatternUtils.registerStrongAuthTracker(mStrongAuthTracker); Loading Loading @@ -1697,6 +1710,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user)); mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class); mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled(); List<UserInfo> allUsers = mUserManager.getUsers(); for (UserInfo userInfo : allUsers) { mUserTrustIsUsuallyManaged.put(userInfo.id, mTrustManager.isTrustUsuallyManaged(userInfo.id)); } updateAirplaneModeState(); TelephonyManager telephony = Loading Loading @@ -2048,6 +2066,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { */ private void handleUserSwitching(int userId, IRemoteCallback reply) { checkIsHandlerThread(); mUserTrustIsUsuallyManaged.put(userId, mTrustManager.isTrustUsuallyManaged(userId)); for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +21 −24 Original line number Diff line number Diff line Loading @@ -650,10 +650,8 @@ public class KeyguardViewMediator extends SystemUI { @Override public int getBouncerPromptReason() { // TODO(b/140053364) return whitelistIpcs(() -> { int currentUser = ActivityManager.getCurrentUser(); boolean trust = mTrustManager.isTrustUsuallyManaged(currentUser); int currentUser = KeyguardUpdateMonitor.getCurrentUser(); boolean trust = mUpdateMonitor.isTrustUsuallyManaged(currentUser); boolean biometrics = mUpdateMonitor.isUnlockingWithBiometricsPossible(currentUser); boolean any = trust || biometrics; KeyguardUpdateMonitor.StrongAuthTracker strongAuthTracker = Loading @@ -672,7 +670,6 @@ public class KeyguardViewMediator extends SystemUI { return KeyguardSecurityView.PROMPT_REASON_AFTER_LOCKOUT; } return KeyguardSecurityView.PROMPT_REASON_NONE; }); } @Override Loading Loading @@ -701,7 +698,7 @@ public class KeyguardViewMediator extends SystemUI { private void setupLocked() { mPM = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mTrustManager = (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE); mTrustManager = mContext.getSystemService(TrustManager.class); mShowKeyguardWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "show keyguard"); mShowKeyguardWakeLock.setReferenceCounted(false); Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.never; Loading Loading @@ -481,6 +482,25 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { assertThat(mKeyguardUpdateMonitor.isUserUnlocked(randomUser)).isFalse(); } @Test public void testTrustUsuallyManaged_whenTrustChanges() { int user = KeyguardUpdateMonitor.getCurrentUser(); when(mTrustManager.isTrustUsuallyManaged(eq(user))).thenReturn(true); mKeyguardUpdateMonitor.onTrustManagedChanged(false /* managed */, user); assertThat(mKeyguardUpdateMonitor.isTrustUsuallyManaged(user)).isTrue(); } @Test public void testTrustUsuallyManaged_resetWhenUserIsRemoved() { int user = KeyguardUpdateMonitor.getCurrentUser(); when(mTrustManager.isTrustUsuallyManaged(eq(user))).thenReturn(true); mKeyguardUpdateMonitor.onTrustManagedChanged(false /* managed */, user); assertThat(mKeyguardUpdateMonitor.isTrustUsuallyManaged(user)).isTrue(); mKeyguardUpdateMonitor.handleUserRemoved(user); assertThat(mKeyguardUpdateMonitor.isTrustUsuallyManaged(user)).isFalse(); } private Intent putPhoneInfo(Intent intent, Bundle data, Boolean simInited) { int subscription = simInited ? 1/* mock subid=1 */ : SubscriptionManager.DUMMY_SUBSCRIPTION_ID_BASE; Loading