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

Commit 0a8d3267 authored by Adam Cohen's avatar Adam Cohen
Browse files

Modifying user switcher per design (issue 7047393)

-> When user is switched, we immediately show their security, if present
-> If a user taps on the active user, it shows the glow pad unlock hint

Change-Id: I074ed63123a6bc6a38051cb77b5d86bd3f0e93ea
parent 6bcd7320
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ public class KeyguardHostView extends KeyguardViewBase {
    private AppWidgetHost mAppWidgetHost;
    private KeyguardWidgetPager mAppWidgetContainer;
    private ViewFlipper mSecurityViewContainer;
    private KeyguardSelectorView mKeyguardSelectorView;
    private KeyguardTransportControlView mTransportControl;
    private boolean mEnableMenuKey;
    private boolean mIsVerifyUnlockOnly;
@@ -90,6 +91,7 @@ public class KeyguardHostView extends KeyguardViewBase {
    /*package*/ interface UserSwitcherCallback {
        void hideSecurityView(int duration);
        void showSecurityView();
        void showUnlockHint();
    }

    public KeyguardHostView(Context context) {
@@ -144,6 +146,7 @@ public class KeyguardHostView extends KeyguardViewBase {
        KeyguardWidgetRegion kgwr = (KeyguardWidgetRegion) findViewById(R.id.kg_widget_region);
        kgwr.setVisibility(VISIBLE);
        mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper);
        mKeyguardSelectorView = (KeyguardSelectorView) findViewById(R.id.keyguard_selector_view);

        addDefaultWidgets();
        updateSecurityViews();
@@ -373,6 +376,18 @@ public class KeyguardHostView extends KeyguardViewBase {
        showSecurityScreen(mSecurityModel.getBackupFor(currentMode));
    }

    public boolean showNextSecurityScreenIfPresent() {
        SecurityMode securityMode = mSecurityModel.getSecurityMode();
        // Allow an alternate, such as biometric unlock
        securityMode = mSecurityModel.getAlternateFor(securityMode);
        if (SecurityMode.None == securityMode) {
            return false;
        } else {
            showSecurityScreen(securityMode); // switch to the alternate security view
            return true;
        }
    }

    private void showNextSecurityScreenOrFinish(boolean authenticated) {
        boolean finish = false;
        if (SecurityMode.None == mCurrentSecuritySelection) {
@@ -783,6 +798,12 @@ public class KeyguardHostView extends KeyguardViewBase {
                public void showSecurityView() {
                    mSecurityViewContainer.setAlpha(1.0f);
                }

                @Override
                public void showUnlockHint() {
                    mKeyguardSelectorView.ping();
                }

            };
            multiUser.setCallback(callback);
        }
+8 −11
Original line number Diff line number Diff line
@@ -57,32 +57,29 @@ class KeyguardMultiUserAvatar extends FrameLayout {
        KeyguardMultiUserAvatar icon = (KeyguardMultiUserAvatar)
                LayoutInflater.from(context).inflate(resId, userSelector, false);

        icon.setup(info, userSelector);
        icon.init(info, userSelector);
        return icon;
    }

    public KeyguardMultiUserAvatar(Context context) {
        super(context, null, 0);
        this(context, null, 0);
    }

    public KeyguardMultiUserAvatar(Context context, AttributeSet attrs) {
        super(context, attrs, 0);
        this(context, attrs, 0);
    }

    public KeyguardMultiUserAvatar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setup(UserInfo user, KeyguardMultiUserSelectorView userSelector) {
        mUserInfo = user;
        mUserSelector = userSelector;
        init();
    }

    private void init() {
        Resources res = mContext.getResources();
        mActiveTextColor = res.getColor(R.color.kg_multi_user_text_active);
        mInactiveTextColor = res.getColor(R.color.kg_multi_user_text_inactive);
    }

    public void init(UserInfo user, KeyguardMultiUserSelectorView userSelector) {
        mUserInfo = user;
        mUserSelector = userSelector;

        mUserImage = (ImageView) findViewById(R.id.keyguard_user_avatar);
        mUserName = (TextView) findViewById(R.id.keyguard_user_name);        
+2 −1
Original line number Diff line number Diff line
@@ -107,7 +107,8 @@ public class KeyguardMultiUserSelectorView extends FrameLayout implements View.O
        if (!(v instanceof KeyguardMultiUserAvatar)) return;
        final KeyguardMultiUserAvatar avatar = (KeyguardMultiUserAvatar) v;
        if (mActiveUserAvatar == avatar) {
            // They clicked the active user, no need to do anything
            // If they click the currently active user, show the unlock hint
            mCallback.showUnlockHint();
            return;
        } else {
            // Reset the previously active user to appear inactive
+4 −0
Original line number Diff line number Diff line
@@ -179,6 +179,10 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
        return mGlowPadView.getTargetPosition(resId) != -1;
    }

    public void ping() {
        mGlowPadView.ping();
    }

    private void updateTargets() {
        int currentUserHandle = mLockPatternUtils.getCurrentUser();
        DevicePolicyManager dpm = mLockPatternUtils.getDevicePolicyManager();
+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.view.ViewManager;
import android.view.WindowManager;
import android.widget.FrameLayout;

import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.R;

@@ -191,6 +192,7 @@ public class KeyguardViewManager {

        if (userSwitched) {
            mKeyguardView.goToUserSwitcher();
            mKeyguardView.showNextSecurityScreenIfPresent();
        }

        if (mScreenOn) {