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

Commit a75df2e5 authored by Youngjun Kwak's avatar Youngjun Kwak Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE Update current user for passwordEntry and restart input on...

Merge "DO NOT MERGE Update current user for passwordEntry and restart input on user switch." into rvc-qpr-dev
parents 93e0bd19 c83cc01b
Loading
Loading
Loading
Loading
+29 −10
Original line number Diff line number Diff line
@@ -21,10 +21,13 @@ import android.car.user.CarUserManager;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewRootImpl;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import androidx.annotation.VisibleForTesting;

@@ -61,7 +64,7 @@ import dagger.Lazy;
public class CarKeyguardViewController extends OverlayViewController implements
        KeyguardViewController {
    private static final String TAG = "CarKeyguardViewController";
    private static final boolean DEBUG = true;
    private static final boolean DEBUG = false;

    private final Context mContext;
    private final Handler mHandler;
@@ -75,9 +78,10 @@ public class CarKeyguardViewController extends OverlayViewController implements
    private final DismissCallbackRegistry mDismissCallbackRegistry;
    private final ViewMediatorCallback mViewMediatorCallback;
    private final CarNavigationBarController mCarNavigationBarController;
    private final InputMethodManager mInputMethodManager;
    // Needed to instantiate mBouncer.
    private final KeyguardBouncer.BouncerExpansionCallback
            mExpansionCallback = new KeyguardBouncer.BouncerExpansionCallback() {
    private final KeyguardBouncer.BouncerExpansionCallback mExpansionCallback =
            new KeyguardBouncer.BouncerExpansionCallback() {
                @Override
                public void onFullyShown() {
                }
@@ -96,7 +100,8 @@ public class CarKeyguardViewController extends OverlayViewController implements
            };
    private final CarUserManager.UserLifecycleListener mUserLifecycleListener = (e) -> {
        if (e.getEventType() == CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING) {
            revealKeyguardIfBouncerPrepared();
            UserHandle currentUser = e.getUserHandle();
            revealKeyguardIfBouncerPrepared(currentUser);
        }
    };

@@ -136,6 +141,8 @@ public class CarKeyguardViewController extends OverlayViewController implements
        mDismissCallbackRegistry = dismissCallbackRegistry;
        mViewMediatorCallback = viewMediatorCallback;
        mCarNavigationBarController = carNavigationBarController;
        // TODO(b/169280588): Inject InputMethodManager instead.
        mInputMethodManager = mContext.getSystemService(InputMethodManager.class);

        registerUserSwitchedListener();
    }
@@ -376,7 +383,7 @@ public class CarKeyguardViewController extends OverlayViewController implements
        mBouncer = keyguardBouncer;
    }

    private void revealKeyguardIfBouncerPrepared() {
    private void revealKeyguardIfBouncerPrepared(UserHandle currentUser) {
        int reattemptDelayMillis = 50;
        Runnable revealKeyguard = () -> {
            if (mBouncer == null) {
@@ -388,17 +395,29 @@ public class CarKeyguardViewController extends OverlayViewController implements
            }
            if (!mBouncer.inTransit() || !mBouncer.isSecure()) {
                getLayout().setVisibility(View.VISIBLE);
                updateCurrentUserForPasswordEntry(currentUser);
            } else {
                if (DEBUG) {
                    Log.d(TAG, "revealKeyguardIfBouncerPrepared: Bouncer is not prepared "
                            + "yet so reattempting after " + reattemptDelayMillis + "ms.");
                }
                mHandler.postDelayed(this::revealKeyguardIfBouncerPrepared, reattemptDelayMillis);
                mHandler.postDelayed(() -> revealKeyguardIfBouncerPrepared(currentUser),
                        reattemptDelayMillis);
            }
        };
        mHandler.post(revealKeyguard);
    }

    private void updateCurrentUserForPasswordEntry(UserHandle currentUser) {
        EditText passwordEntry = getLayout().findViewById(R.id.passwordEntry);
        if (passwordEntry != null) {
            mHandler.post(() -> {
                mInputMethodManager.restartInput(passwordEntry);
                passwordEntry.setTextOperationUser(currentUser);
            });
        }
    }

    private void notifyKeyguardUpdateMonitor() {
        mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(mShowing);
        if (mBouncer != null) {