Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69d288c7 authored by Grace Cheng's avatar Grace Cheng Committed by Android (Google) Code Review
Browse files

Merge "Updates keyguard indication on secure lock device" into main

parents 7303a276 9d729d55
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -77,9 +77,12 @@ import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController;
import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory;
import com.android.systemui.keyguard.util.IndicationHelper;
import com.android.systemui.kosmos.KosmosJavaAdapter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.res.R;
import com.android.systemui.securelockdevice.data.repository.FakeSecureLockDeviceRepository;
import com.android.systemui.securelockdevice.domain.interactor.SecureLockDeviceInteractor;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
@@ -100,7 +103,6 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

public class KeyguardIndicationControllerBaseTest extends SysuiTestCase {

    protected static final String ORGANIZATION_NAME = "organization";

    protected static final ComponentName DEVICE_OWNER_COMPONENT = new ComponentName(
@@ -109,6 +111,8 @@ public class KeyguardIndicationControllerBaseTest extends SysuiTestCase {

    protected static final int TEST_STRING_RES = R.string.keyguard_indication_trust_unlocked;

    protected KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this);

    protected String mDisclosureWithOrganization;
    protected String mDisclosureGeneric;
    protected String mFinancedDisclosureWithOrganization;
@@ -193,6 +197,8 @@ public class KeyguardIndicationControllerBaseTest extends SysuiTestCase {
    protected ScreenLifecycle.Observer mScreenObserver;
    protected BroadcastReceiver mBroadcastReceiver;
    protected IndicationHelper mIndicationHelper;
    protected FakeSecureLockDeviceRepository mSecureLockDeviceRepository;
    protected SecureLockDeviceInteractor mSecureLockDeviceInteractor;
    protected FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
    protected TestableLooper mTestableLooper;
    protected final int mCurrentUserId = 1;
@@ -210,6 +216,8 @@ public class KeyguardIndicationControllerBaseTest extends SysuiTestCase {
        MockitoAnnotations.initMocks(this);
        mInstrumentation = InstrumentationRegistry.getInstrumentation();
        mTestableLooper = TestableLooper.get(this);
        mSecureLockDeviceRepository = mKosmos.getFakeSecureLockDeviceRepository();
        mSecureLockDeviceInteractor = mKosmos.getSecureLockDeviceInteractor();
        mTextView = new KeyguardIndicationTextView(mContext);
        mTextView.setAnimationsEnabled(false);

@@ -300,7 +308,8 @@ public class KeyguardIndicationControllerBaseTest extends SysuiTestCase {
                mBiometricMessageInteractor,
                mDeviceEntryFingerprintAuthInteractor,
                mDeviceEntryFaceAuthInteractor,
                mUserLogoutInteractor
                mUserLogoutInteractor,
                () -> mSecureLockDeviceInteractor
        );
        mController.init();
        mController.setIndicationArea(mIndicationArea);
+18 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.content.pm.UserInfo.FLAG_MANAGED_PROFILE;
import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK;
import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_LOCKOUT_PERMANENT;
import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_TIMEOUT;
import static android.security.Flags.FLAG_SECURE_LOCK_DEVICE;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;

@@ -29,7 +30,6 @@ import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_HELP_FACE_NOT
import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_HELP_FINGERPRINT_NOT_RECOGNIZED;
import static com.android.systemui.Flags.showLockedByYourWatchKeyguardIndicator;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_ADAPTIVE_AUTH;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_WATCH_DISCONNECTED;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_ALIGNMENT;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BIOMETRIC_MESSAGE;
@@ -38,8 +38,10 @@ import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewCont
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_LOGOUT;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_OWNER_INFO;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_PERSISTENT_UNLOCK_MESSAGE;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_SECURE_LOCK_DEVICE;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_TRANSIENT;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_TRUST;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_WATCH_DISCONNECTED;
import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_OFF;
import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_TURNING_ON;

@@ -79,10 +81,10 @@ import androidx.test.filters.SmallTest;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.TrustGrantFlags;
import com.android.settingslib.fuelgauge.BatteryStatus;
import com.android.systemui.Flags;
import com.android.systemui.dock.DockManager;
import com.android.systemui.keyguard.KeyguardIndication;
import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController;
import com.android.systemui.Flags;
import com.android.systemui.keyguard.shared.model.AuthenticationFlags;
import com.android.systemui.res.R;

@@ -1629,6 +1631,20 @@ public class KeyguardIndicationControllerTest extends KeyguardIndicationControll
        verifyIndicationMessage(INDICATION_TYPE_WATCH_DISCONNECTED, message);
    }

    @Test
    @EnableFlags(FLAG_SECURE_LOCK_DEVICE)
    public void updateSecureLockDeviceMessage_whenSecureLockDeviceEnabled_showsMsg() {
        mSecureLockDeviceRepository.onSecureLockDeviceEnabled();
        mKosmos.getTestScope().getTestScheduler().runCurrent();

        createController();
        mController.setVisible(true);

        // Verify that the secure lock device message shows
        String message = mContext.getString(R.string.keyguard_indication_after_secure_lock_device);
        verifyIndicationMessage(INDICATION_TYPE_SECURE_LOCK_DEVICE, message);
    }

    private void screenIsTurningOn() {
        when(mScreenLifecycle.getScreenState()).thenReturn(SCREEN_TURNING_ON);
    }
+3 −0
Original line number Diff line number Diff line
@@ -1839,6 +1839,9 @@
    <!-- Indication on the keyguard that appears after the device is locked by adaptive auth. [CHAR LIMIT=60] -->
    <string name="keyguard_indication_after_watch_disconnected">Locked by your watch</string>

    <!-- Indication on the keyguard that appears after the device is locked by secure lock device. [CHAR LIMIT=48] -->
    <string name="keyguard_indication_after_secure_lock_device">Locked with 2-step verification</string>

    <!-- Accessibility string for current zen mode and selected exit condition. A template that simply concatenates existing mode string and the current condition description. [CHAR LIMIT=20] -->
    <string name="zen_mode_and_condition"><xliff:g id="zen_mode" example="Priority interruptions only">%1$s</xliff:g>. <xliff:g id="exit_condition" example="For one hour">%2$s</xliff:g></string>

+5 −1
Original line number Diff line number Diff line
@@ -396,6 +396,7 @@ public class KeyguardIndicationRotateTextViewController extends
    public static final int INDICATION_IS_DISMISSIBLE = 13;
    public static final int INDICATION_TYPE_ADAPTIVE_AUTH = 14;
    public static final int INDICATION_TYPE_WATCH_DISCONNECTED = 15;
    public static final int INDICATION_TYPE_SECURE_LOCK_DEVICE = 16;

    @IntDef({
            INDICATION_TYPE_NONE,
@@ -413,7 +414,8 @@ public class KeyguardIndicationRotateTextViewController extends
            INDICATION_TYPE_BIOMETRIC_MESSAGE_FOLLOW_UP,
            INDICATION_IS_DISMISSIBLE,
            INDICATION_TYPE_ADAPTIVE_AUTH,
            INDICATION_TYPE_WATCH_DISCONNECTED
            INDICATION_TYPE_WATCH_DISCONNECTED,
            INDICATION_TYPE_SECURE_LOCK_DEVICE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface IndicationType{}
@@ -453,6 +455,8 @@ public class KeyguardIndicationRotateTextViewController extends
                return "adaptive_auth";
            case INDICATION_TYPE_WATCH_DISCONNECTED:
                return "watch_disconnected";
            case INDICATION_TYPE_SECURE_LOCK_DEVICE:
                return "secure_lock_device";
            default:
                return "unknown[" + type + "]";
        }
+29 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_T
import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_TIMEOUT;
import static android.hardware.biometrics.BiometricSourceType.FACE;
import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT;
import static android.security.Flags.secureLockDevice;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;

@@ -42,6 +43,7 @@ import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewCont
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_LOGOUT;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_OWNER_INFO;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_PERSISTENT_UNLOCK_MESSAGE;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_SECURE_LOCK_DEVICE;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_TRUST;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_USER_LOCKED;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_WATCH_DISCONNECTED;
@@ -112,6 +114,7 @@ import com.android.systemui.log.core.LogLevel;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.res.R;
import com.android.systemui.securelockdevice.domain.interactor.SecureLockDeviceInteractor;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
@@ -123,6 +126,8 @@ import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.wakelock.SettableWakeLock;
import com.android.systemui.util.wakelock.WakeLock;

import dagger.Lazy;

import java.io.PrintWriter;
import java.text.NumberFormat;
import java.util.Set;
@@ -164,6 +169,7 @@ public class KeyguardIndicationController {
    private final KeyguardLogger mKeyguardLogger;
    private final UserTracker mUserTracker;
    private final BouncerMessageInteractor mBouncerMessageInteractor;
    private final Lazy<SecureLockDeviceInteractor> mSecureLockDeviceInteractor;

    private ViewGroup mIndicationArea;
    private KeyguardIndicationTextView mTopIndicationView;
@@ -319,7 +325,8 @@ public class KeyguardIndicationController {
            BiometricMessageInteractor biometricMessageInteractor,
            DeviceEntryFingerprintAuthInteractor deviceEntryFingerprintAuthInteractor,
            DeviceEntryFaceAuthInteractor deviceEntryFaceAuthInteractor,
            UserLogoutInteractor userLogoutInteractor
            UserLogoutInteractor userLogoutInteractor,
            Lazy<SecureLockDeviceInteractor> secureLockDeviceInteractor
    ) {
        mContext = context;
        mBroadcastDispatcher = broadcastDispatcher;
@@ -352,7 +359,7 @@ public class KeyguardIndicationController {
        mDeviceEntryFingerprintAuthInteractor = deviceEntryFingerprintAuthInteractor;
        mDeviceEntryFaceAuthInteractor = deviceEntryFaceAuthInteractor;
        mUserLogoutInteractor = userLogoutInteractor;

        mSecureLockDeviceInteractor = secureLockDeviceInteractor;

        mFaceAcquiredMessageDeferral = faceHelpMessageDeferral.create();

@@ -533,6 +540,9 @@ public class KeyguardIndicationController {
        if (showLockedByYourWatchKeyguardIndicator()) {
            updateLockScreenWatchDisconnectedMsg(userId);
        }
        if (secureLockDevice()) {
            updateLockScreenSecureLockDeviceMsg();
        }
    }

    private void updateOrganizedOwnedDevice() {
@@ -822,7 +832,6 @@ public class KeyguardIndicationController {
            mRotateTextViewController.hideIndication(INDICATION_TYPE_ADAPTIVE_AUTH);
        }
    }

    private void updateLockScreenWatchDisconnectedMsg(int userId) {
        final boolean deviceLocked = mAuthenticationFlags != null
                && mAuthenticationFlags.isSomeAuthRequiredAfterWatchDisconnected();
@@ -841,6 +850,23 @@ public class KeyguardIndicationController {
        }
    }

    private void updateLockScreenSecureLockDeviceMsg() {
        boolean isSecureLockDeviceEnabled = secureLockDevice()
                && mSecureLockDeviceInteractor.get().isSecureLockDeviceEnabled().getValue();
        if (isSecureLockDeviceEnabled) {
            mRotateTextViewController.updateIndication(
                    INDICATION_TYPE_SECURE_LOCK_DEVICE,
                    new KeyguardIndication.Builder()
                            .setMessage(mContext.getString(
                                    R.string.keyguard_indication_after_secure_lock_device))
                            .setTextColor(getInitialTextColorState())
                            .build(),
                    true);
        } else {
            mRotateTextViewController.hideIndication(INDICATION_TYPE_SECURE_LOCK_DEVICE);
        }
    }

    private boolean isOrganizationOwnedDevice() {
        return mDevicePolicyManager.isDeviceManaged()
                || mDevicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile();