Merge "Eval dismissKeyguard in KeyguardUpdateMonitor" into tm-qpr-dev am: 82e7167b9c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20424617

Change-Id: I908f8251bdb526d3bfbf896fc2e4b702ed7e1cf1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Beverly Tai
2022-11-15 20:13:12 +00:00
committed by Automerger Merge Worker
9 changed files with 367 additions and 57 deletions

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2022 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M16,0L8,0l-0.95,5.73C5.19,7.19 4,9.45 4,12s1.19,4.81 3.05,6.27L8,24
h8l0.96,-5.73C18.81,16.81 20,14.54 20,12s-1.19,-4.81 -3.04,-6.27L16,0z
M12,18c-3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6 6,2.69 6,6 -2.69,6 -6,6z"/>
</vector>

View File

@@ -21,7 +21,6 @@ import android.content.res.ColorStateList;
import android.content.res.Resources; import android.content.res.Resources;
import android.media.AudioManager; import android.media.AudioManager;
import android.os.SystemClock; import android.os.SystemClock;
import android.service.trust.TrustAgentService;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.Log; import android.util.Log;
import android.util.MathUtils; import android.util.MathUtils;
@@ -68,30 +67,24 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
private final KeyguardUpdateMonitorCallback mUpdateCallback = private final KeyguardUpdateMonitorCallback mUpdateCallback =
new KeyguardUpdateMonitorCallback() { new KeyguardUpdateMonitorCallback() {
@Override @Override
public void onTrustGrantedWithFlags(int flags, int userId, String message) { public void onTrustGrantedForCurrentUser(boolean dismissKeyguard,
if (userId != KeyguardUpdateMonitor.getCurrentUser()) return; TrustGrantFlags flags, String message) {
boolean bouncerVisible = mView.isVisibleToUser(); if (dismissKeyguard) {
boolean temporaryAndRenewable = if (!mView.isVisibleToUser()) {
(flags & TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE)
!= 0;
boolean initiatedByUser =
(flags & TrustAgentService.FLAG_GRANT_TRUST_INITIATED_BY_USER) != 0;
boolean dismissKeyguard =
(flags & TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD) != 0;
if (initiatedByUser || dismissKeyguard) {
if ((mViewMediatorCallback.isScreenOn() || temporaryAndRenewable)
&& (bouncerVisible || dismissKeyguard)) {
if (!bouncerVisible) {
// The trust agent dismissed the keyguard without the user proving // The trust agent dismissed the keyguard without the user proving
// that they are present (by swiping up to show the bouncer). That's // that they are present (by swiping up to show the bouncer). That's
// fine if the user proved presence via some other way to the trust // fine if the user proved presence via some other way to the trust
//agent. // agent.
Log.i(TAG, "TrustAgent dismissed Keyguard."); Log.i(TAG, "TrustAgent dismissed Keyguard.");
} }
mSecurityCallback.dismiss(false /* authenticated */, userId, mSecurityCallback.dismiss(
/* bypassSecondaryLockScreen */ false, SecurityMode.Invalid); false /* authenticated */,
KeyguardUpdateMonitor.getCurrentUser(),
/* bypassSecondaryLockScreen */ false,
SecurityMode.Invalid
);
} else { } else {
if (flags.isInitiatedByUser() || flags.dismissKeyguardRequested()) {
mViewMediatorCallback.playTrustedSound(); mViewMediatorCallback.playTrustedSound();
} }
} }

View File

@@ -486,10 +486,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
FACE_AUTH_TRIGGERED_TRUST_DISABLED); FACE_AUTH_TRIGGERED_TRUST_DISABLED);
} }
if (enabled) {
String message = null; String message = null;
if (KeyguardUpdateMonitor.getCurrentUser() == userId) { if (KeyguardUpdateMonitor.getCurrentUser() == userId
final boolean userHasTrust = getUserHasTrust(userId); && trustGrantedMessages != null) {
if (userHasTrust && trustGrantedMessages != null) { // Show the first non-empty string provided by a trust agent OR intentionally pass
// an empty string through (to prevent the default trust agent string from showing)
for (String msg : trustGrantedMessages) { for (String msg : trustGrantedMessages) {
message = msg; message = msg;
if (!TextUtils.isEmpty(message)) { if (!TextUtils.isEmpty(message)) {
@@ -497,21 +499,39 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
} }
} }
} }
}
mLogger.logTrustChanged(wasTrusted, enabled, userId); mLogger.logTrustGrantedWithFlags(flags, userId, message);
if (message != null) { if (userId == getCurrentUser()) {
mLogger.logShowTrustGrantedMessage(message.toString()); final TrustGrantFlags trustGrantFlags = new TrustGrantFlags(flags);
}
for (int i = 0; i < mCallbacks.size(); i++) { for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) { if (cb != null) {
cb.onTrustChanged(userId); cb.onTrustGrantedForCurrentUser(
if (enabled) { shouldDismissKeyguardOnTrustGrantedWithCurrentUser(trustGrantFlags),
cb.onTrustGrantedWithFlags(flags, userId, message); trustGrantFlags, message);
}
} }
} }
} }
mLogger.logTrustChanged(wasTrusted, enabled, userId);
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
cb.onTrustChanged(userId);
}
}
}
/**
* Whether the trust granted call with its passed flags should dismiss keyguard.
* It's assumed that the trust was granted for the current user.
*/
private boolean shouldDismissKeyguardOnTrustGrantedWithCurrentUser(TrustGrantFlags flags) {
final boolean isBouncerShowing = mPrimaryBouncerIsOrWillBeShowing || mUdfpsBouncerShowing;
return (flags.isInitiatedByUser() || flags.dismissKeyguardRequested())
&& (mDeviceInteractive || flags.temporaryAndRenewable())
&& (isBouncerShowing || flags.dismissKeyguardRequested());
} }
@Override @Override

View File

@@ -19,6 +19,7 @@ import android.hardware.biometrics.BiometricSourceType;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.view.WindowManagerPolicyConstants; import android.view.WindowManagerPolicyConstants;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.settingslib.fuelgauge.BatteryStatus;
@@ -175,11 +176,13 @@ public class KeyguardUpdateMonitorCallback {
/** /**
* Called after trust was granted. * Called after trust was granted.
* @param userId of the user that has been granted trust * @param dismissKeyguard whether the keyguard should be dismissed as a result of the
* trustGranted
* @param message optional message the trust agent has provided to show that should indicate * @param message optional message the trust agent has provided to show that should indicate
* why trust was granted. * why trust was granted.
*/ */
public void onTrustGrantedWithFlags(int flags, int userId, @Nullable String message) { } public void onTrustGrantedForCurrentUser(boolean dismissKeyguard,
@NonNull TrustGrantFlags flags, @Nullable String message) { }
/** /**
* Called when a biometric has been acquired. * Called when a biometric has been acquired.

View File

@@ -0,0 +1,98 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.keyguard;
import android.service.trust.TrustAgentService;
import java.util.Objects;
/**
* Translating {@link android.service.trust.TrustAgentService.GrantTrustFlags} to a more
* parsable object. These flags are requested by a TrustAgent.
*/
public class TrustGrantFlags {
final int mFlags;
public TrustGrantFlags(int flags) {
this.mFlags = flags;
}
/** {@link TrustAgentService.FLAG_GRANT_TRUST_INITIATED_BY_USER} */
public boolean isInitiatedByUser() {
return (mFlags & TrustAgentService.FLAG_GRANT_TRUST_INITIATED_BY_USER) != 0;
}
/**
* Trust agent is requesting to dismiss the keyguard.
* See {@link TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD}.
*
* This does not guarantee that the keyguard is dismissed.
* KeyguardUpdateMonitor makes the final determination whether the keyguard should be dismissed.
* {@link KeyguardUpdateMonitorCallback#onTrustGrantedForCurrentUser(
* boolean, TrustGrantFlags, String).
*/
public boolean dismissKeyguardRequested() {
return (mFlags & TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD) != 0;
}
/** {@link TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE} */
public boolean temporaryAndRenewable() {
return (mFlags & TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE) != 0;
}
/** {@link TrustAgentService.FLAG_GRANT_TRUST_DISPLAY_MESSAGE} */
public boolean displayMessage() {
return (mFlags & TrustAgentService.FLAG_GRANT_TRUST_DISPLAY_MESSAGE) != 0;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof TrustGrantFlags)) {
return false;
}
return ((TrustGrantFlags) o).mFlags == this.mFlags;
}
@Override
public int hashCode() {
return Objects.hash(mFlags);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("[");
sb.append(mFlags);
sb.append("]=");
if (isInitiatedByUser()) {
sb.append("initiatedByUser|");
}
if (dismissKeyguardRequested()) {
sb.append("dismissKeyguard|");
}
if (temporaryAndRenewable()) {
sb.append("temporaryAndRenewable|");
}
if (displayMessage()) {
sb.append("displayMessage|");
}
return sb.toString();
}
}

View File

@@ -25,6 +25,7 @@ import com.android.keyguard.ActiveUnlockConfig
import com.android.keyguard.FaceAuthUiEvent import com.android.keyguard.FaceAuthUiEvent
import com.android.keyguard.KeyguardListenModel import com.android.keyguard.KeyguardListenModel
import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.keyguard.TrustGrantFlags
import com.android.systemui.plugins.log.LogBuffer import com.android.systemui.plugins.log.LogBuffer
import com.android.systemui.plugins.log.LogLevel import com.android.systemui.plugins.log.LogLevel
import com.android.systemui.plugins.log.LogLevel.DEBUG import com.android.systemui.plugins.log.LogLevel.DEBUG
@@ -368,12 +369,16 @@ class KeyguardUpdateMonitorLogger @Inject constructor(
}, { "reportUserRequestedUnlock origin=$str1 reason=$str2 dismissKeyguard=$bool1" }) }, { "reportUserRequestedUnlock origin=$str1 reason=$str2 dismissKeyguard=$bool1" })
} }
fun logShowTrustGrantedMessage( fun logTrustGrantedWithFlags(
flags: Int,
userId: Int,
message: String? message: String?
) { ) {
logBuffer.log(TAG, DEBUG, { logBuffer.log(TAG, DEBUG, {
int1 = flags
int2 = userId
str1 = message str1 = message
}, { "showTrustGrantedMessage message$str1" }) }, { "trustGrantedWithFlags[user=$int2] flags=${TrustGrantFlags(int1)} message=$str1" })
} }
fun logTrustChanged( fun logTrustChanged(

View File

@@ -67,6 +67,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
@@ -74,6 +75,7 @@ import com.android.internal.app.IBatteryStats;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.TrustGrantFlags;
import com.android.keyguard.logging.KeyguardLogger; import com.android.keyguard.logging.KeyguardLogger;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.settingslib.fuelgauge.BatteryStatus;
@@ -154,7 +156,8 @@ public class KeyguardIndicationController {
private final AccessibilityManager mAccessibilityManager; private final AccessibilityManager mAccessibilityManager;
private final Handler mHandler; private final Handler mHandler;
protected KeyguardIndicationRotateTextViewController mRotateTextViewController; @VisibleForTesting
public KeyguardIndicationRotateTextViewController mRotateTextViewController;
private BroadcastReceiver mBroadcastReceiver; private BroadcastReceiver mBroadcastReceiver;
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@@ -1188,9 +1191,9 @@ public class KeyguardIndicationController {
} }
@Override @Override
public void onTrustGrantedWithFlags(int flags, int userId, @Nullable String message) { public void onTrustGrantedForCurrentUser(boolean dismissKeyguard,
if (!isCurrentUser(userId)) return; @NonNull TrustGrantFlags flags, @Nullable String message) {
showTrustGrantedMessage(flags, message); showTrustGrantedMessage(dismissKeyguard, message);
} }
@Override @Override
@@ -1254,7 +1257,7 @@ public class KeyguardIndicationController {
return getCurrentUser() == userId; return getCurrentUser() == userId;
} }
void showTrustGrantedMessage(int flags, @Nullable CharSequence message) { protected void showTrustGrantedMessage(boolean dismissKeyguard, @Nullable String message) {
mTrustGrantedIndication = message; mTrustGrantedIndication = message;
updateDeviceEntryIndication(false); updateDeviceEntryIndication(false);
} }

View File

@@ -28,6 +28,7 @@ import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOM
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT; import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT;
import static com.android.keyguard.FaceAuthApiRequestReason.NOTIFICATION_PANEL_CLICKED; import static com.android.keyguard.FaceAuthApiRequestReason.NOTIFICATION_PANEL_CLICKED;
import static com.android.keyguard.KeyguardUpdateMonitor.DEFAULT_CANCEL_SIGNAL_TIMEOUT; import static com.android.keyguard.KeyguardUpdateMonitor.DEFAULT_CANCEL_SIGNAL_TIMEOUT;
import static com.android.keyguard.KeyguardUpdateMonitor.getCurrentUser;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -35,6 +36,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.atLeastOnce;
@@ -88,6 +90,7 @@ import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.service.dreams.IDreamManager; import android.service.dreams.IDreamManager;
import android.service.trust.TrustAgentService;
import android.telephony.ServiceState; import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
@@ -351,7 +354,9 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
@After @After
public void tearDown() { public void tearDown() {
if (mMockitoSession != null) {
mMockitoSession.finishMocking(); mMockitoSession.finishMocking();
}
cleanupKeyguardUpdateMonitor(); cleanupKeyguardUpdateMonitor();
} }
@@ -1314,9 +1319,9 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
Arrays.asList("Unlocked by wearable")); Arrays.asList("Unlocked by wearable"));
// THEN the showTrustGrantedMessage should be called with the first message // THEN the showTrustGrantedMessage should be called with the first message
verify(mTestCallback).onTrustGrantedWithFlags( verify(mTestCallback).onTrustGrantedForCurrentUser(
eq(0), anyBoolean(),
eq(KeyguardUpdateMonitor.getCurrentUser()), eq(new TrustGrantFlags(0)),
eq("Unlocked by wearable")); eq("Unlocked by wearable"));
} }
@@ -1727,6 +1732,155 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean()); verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean());
} }
@Test
public void testOnTrustGrantedForCurrentUser_dismissKeyguardRequested_deviceInteractive() {
// GIVEN device is interactive
deviceIsInteractive();
// GIVEN callback is registered
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
mKeyguardUpdateMonitor.registerCallback(callback);
// WHEN onTrustChanged with TRUST_DISMISS_KEYGUARD flag
mKeyguardUpdateMonitor.onTrustChanged(
true /* enabled */,
getCurrentUser() /* userId */,
TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD /* flags */,
null /* trustGrantedMessages */);
// THEN onTrustGrantedForCurrentUser callback called
verify(callback).onTrustGrantedForCurrentUser(
eq(true) /* dismissKeyguard */,
eq(new TrustGrantFlags(TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD)),
eq(null) /* message */
);
}
@Test
public void testOnTrustGrantedForCurrentUser_dismissKeyguardRequested_doesNotDismiss() {
// GIVEN device is NOT interactive
// GIVEN callback is registered
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
mKeyguardUpdateMonitor.registerCallback(callback);
// WHEN onTrustChanged with TRUST_DISMISS_KEYGUARD flag
mKeyguardUpdateMonitor.onTrustChanged(
true /* enabled */,
getCurrentUser() /* userId */,
TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD /* flags */,
null /* trustGrantedMessages */);
// THEN onTrustGrantedForCurrentUser callback called
verify(callback).onTrustGrantedForCurrentUser(
eq(false) /* dismissKeyguard */,
eq(new TrustGrantFlags(TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD)),
eq(null) /* message */
);
}
@Test
public void testOnTrustGrantedForCurrentUser_dismissKeyguardRequested_temporaryAndRenewable() {
// GIVEN device is interactive
deviceIsInteractive();
// GIVEN callback is registered
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
mKeyguardUpdateMonitor.registerCallback(callback);
// WHEN onTrustChanged for a different user
mKeyguardUpdateMonitor.onTrustChanged(
true /* enabled */,
546 /* userId, not the current userId */,
0 /* flags */,
null /* trustGrantedMessages */);
// THEN onTrustGrantedForCurrentUser callback called
verify(callback, never()).onTrustGrantedForCurrentUser(
anyBoolean() /* dismissKeyguard */,
anyObject() /* flags */,
anyString() /* message */
);
}
@Test
public void testOnTrustGranted_differentUser_noCallback() {
// GIVEN device is interactive
// GIVEN callback is registered
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
mKeyguardUpdateMonitor.registerCallback(callback);
// WHEN onTrustChanged with TRUST_DISMISS_KEYGUARD AND TRUST_TEMPORARY_AND_RENEWABLE
// flags (temporary & rewable is active unlock)
mKeyguardUpdateMonitor.onTrustChanged(
true /* enabled */,
getCurrentUser() /* userId */,
TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD
| TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE /* flags */,
null /* trustGrantedMessages */);
// THEN onTrustGrantedForCurrentUser callback called
verify(callback).onTrustGrantedForCurrentUser(
eq(true) /* dismissKeyguard */,
eq(new TrustGrantFlags(TrustAgentService.FLAG_GRANT_TRUST_DISMISS_KEYGUARD
| TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE)),
eq(null) /* message */
);
}
@Test
public void testOnTrustGrantedForCurrentUser_bouncerShowing_initiatedByUser() {
// GIVEN device is interactive & bouncer is showing
deviceIsInteractive();
bouncerFullyVisible();
// GIVEN callback is registered
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
mKeyguardUpdateMonitor.registerCallback(callback);
// WHEN onTrustChanged with INITIATED_BY_USER flag
mKeyguardUpdateMonitor.onTrustChanged(
true /* enabled */,
getCurrentUser() /* userId, not the current userId */,
TrustAgentService.FLAG_GRANT_TRUST_INITIATED_BY_USER /* flags */,
null /* trustGrantedMessages */);
// THEN onTrustGrantedForCurrentUser callback called
verify(callback, never()).onTrustGrantedForCurrentUser(
eq(true) /* dismissKeyguard */,
eq(new TrustGrantFlags(TrustAgentService.FLAG_GRANT_TRUST_INITIATED_BY_USER)),
anyString() /* message */
);
}
@Test
public void testOnTrustGrantedForCurrentUser_bouncerShowing_temporaryRenewable() {
// GIVEN device is NOT interactive & bouncer is showing
bouncerFullyVisible();
// GIVEN callback is registered
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
mKeyguardUpdateMonitor.registerCallback(callback);
// WHEN onTrustChanged with INITIATED_BY_USER flag
mKeyguardUpdateMonitor.onTrustChanged(
true /* enabled */,
getCurrentUser() /* userId, not the current userId */,
TrustAgentService.FLAG_GRANT_TRUST_INITIATED_BY_USER
| TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE /* flags */,
null /* trustGrantedMessages */);
// THEN onTrustGrantedForCurrentUser callback called
verify(callback, never()).onTrustGrantedForCurrentUser(
eq(true) /* dismissKeyguard */,
eq(new TrustGrantFlags(TrustAgentService.FLAG_GRANT_TRUST_INITIATED_BY_USER
| TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE)),
anyString() /* message */
);
}
private void cleanupKeyguardUpdateMonitor() { private void cleanupKeyguardUpdateMonitor() {
if (mKeyguardUpdateMonitor != null) { if (mKeyguardUpdateMonitor != null) {
mKeyguardUpdateMonitor.removeCallback(mTestCallback); mKeyguardUpdateMonitor.removeCallback(mTestCallback);

View File

@@ -87,6 +87,7 @@ import com.android.internal.app.IBatteryStats;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.TrustGrantFlags;
import com.android.keyguard.logging.KeyguardLogger; import com.android.keyguard.logging.KeyguardLogger;
import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.settingslib.fuelgauge.BatteryStatus;
import com.android.systemui.R; import com.android.systemui.R;
@@ -1065,7 +1066,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
// GIVEN a trust granted message but trust isn't granted // GIVEN a trust granted message but trust isn't granted
final String trustGrantedMsg = "testing trust granted message"; final String trustGrantedMsg = "testing trust granted message";
mController.getKeyguardCallback().onTrustGrantedWithFlags(0, 0, trustGrantedMsg); mController.getKeyguardCallback().onTrustGrantedForCurrentUser(
false, new TrustGrantFlags(0), trustGrantedMsg);
verifyHideIndication(INDICATION_TYPE_TRUST); verifyHideIndication(INDICATION_TYPE_TRUST);
@@ -1089,7 +1091,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
// WHEN the showTrustGranted method is called // WHEN the showTrustGranted method is called
final String trustGrantedMsg = "testing trust granted message"; final String trustGrantedMsg = "testing trust granted message";
mController.getKeyguardCallback().onTrustGrantedWithFlags(0, 0, trustGrantedMsg); mController.getKeyguardCallback().onTrustGrantedForCurrentUser(
false, new TrustGrantFlags(0), trustGrantedMsg);
// THEN verify the trust granted message shows // THEN verify the trust granted message shows
verifyIndicationMessage( verifyIndicationMessage(
@@ -1106,7 +1109,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
when(mKeyguardUpdateMonitor.getUserHasTrust(anyInt())).thenReturn(true); when(mKeyguardUpdateMonitor.getUserHasTrust(anyInt())).thenReturn(true);
// WHEN the showTrustGranted method is called with a null message // WHEN the showTrustGranted method is called with a null message
mController.getKeyguardCallback().onTrustGrantedWithFlags(0, 0, null); mController.getKeyguardCallback().onTrustGrantedForCurrentUser(
false, new TrustGrantFlags(0), null);
// THEN verify the default trust granted message shows // THEN verify the default trust granted message shows
verifyIndicationMessage( verifyIndicationMessage(
@@ -1123,7 +1127,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
when(mKeyguardUpdateMonitor.getUserHasTrust(anyInt())).thenReturn(true); when(mKeyguardUpdateMonitor.getUserHasTrust(anyInt())).thenReturn(true);
// WHEN the showTrustGranted method is called with an EMPTY string // WHEN the showTrustGranted method is called with an EMPTY string
mController.getKeyguardCallback().onTrustGrantedWithFlags(0, 0, ""); mController.getKeyguardCallback().onTrustGrantedForCurrentUser(
false, new TrustGrantFlags(0), "");
// THEN verify NO trust message is shown // THEN verify NO trust message is shown
verifyNoMessage(INDICATION_TYPE_TRUST); verifyNoMessage(INDICATION_TYPE_TRUST);