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

Commit a33d9dde authored by kwaky's avatar kwaky Committed by Automerger Merge Worker
Browse files

DO NOT MERGE Update current user for passwordEntry and restart input on user switch. am: c83cc01b

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

Change-Id: I37138281801c510f151f560fae62da88894efc69
parents a608315e 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) {