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

Commit f41c61bc authored by Chris Wren's avatar Chris Wren
Browse files

split active user animation across switch.

Bug: 7626087
Change-Id: If743a4be498c624d2c4ec91989648e8be754ee4b
parent 0ada5d65
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ public class KeyguardFaceUnlockView extends LinearLayout implements KeyguardSecu
        }

        @Override
        public void onUserSwitched(int userId) {
        public void onUserSwitching(int userId) {
            if (DEBUG) Log.d(TAG, "onUserSwitched(" + userId + ")");
            if (mBiometricUnlock != null) {
                mBiometricUnlock.stop();
+19 −5
Original line number Diff line number Diff line
@@ -101,9 +101,12 @@ public class KeyguardHostView extends KeyguardViewBase {
    private boolean mSafeModeEnabled;

    private boolean mUserSetupCompleted;

    // User for whom this host view was created
    private int mUserId;

    private KeyguardMultiUserSelectorView mKeyguardMultiUserSelectorView;

    /*package*/ interface TransportCallback {
        void onListenerDetached();
        void onListenerAttached();
@@ -209,6 +212,12 @@ public class KeyguardHostView extends KeyguardViewBase {
                mCleanupAppWidgetsOnBootCompleted = false;
            }
        }
        @Override
        public void onUserSwitchComplete(int userId) {
            if (mKeyguardMultiUserSelectorView != null) {
                mKeyguardMultiUserSelectorView.finalizeActiveUserView(true);
            }
        }
    };

    private SlidingChallengeLayout mSlidingChallengeLayout;
@@ -399,6 +408,12 @@ public class KeyguardHostView extends KeyguardViewBase {
        }
    };

    public void initializeSwitchingUserState(boolean switching) {
        if (!switching && mKeyguardMultiUserSelectorView != null) {
            mKeyguardMultiUserSelectorView.finalizeActiveUserView(false);
        }
    }

    public void userActivity() {
        if (mViewMediatorCallback != null) {
            mViewMediatorCallback.userActivity();
@@ -1452,10 +1467,9 @@ public class KeyguardHostView extends KeyguardViewBase {

        if (users.size() > 1) {
            if (multiUserView instanceof KeyguardMultiUserSelectorView) {
                KeyguardMultiUserSelectorView multiUser =
                        (KeyguardMultiUserSelectorView) multiUserView;
                multiUser.setVisibility(View.VISIBLE);
                multiUser.addUsers(users);
                mKeyguardMultiUserSelectorView = (KeyguardMultiUserSelectorView) multiUserView;
                mKeyguardMultiUserSelectorView.setVisibility(View.VISIBLE);
                mKeyguardMultiUserSelectorView.addUsers(users);
                UserSwitcherCallback callback = new UserSwitcherCallback() {
                    @Override
                    public void hideSecurityView(int duration) {
@@ -1481,7 +1495,7 @@ public class KeyguardHostView extends KeyguardViewBase {
                        }
                    }
                };
                multiUser.setCallback(callback);
                mKeyguardMultiUserSelectorView.setCallback(callback);
            } else {
                Throwable t = new Throwable();
                t.fillInStackTrace();
+11 −1
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ class KeyguardMultiUserAvatar extends FrameLayout {
    private boolean mInit = true;
    private KeyguardMultiUserSelectorView mUserSelector;
    private KeyguardCircleFramedDrawable mFramed;
    private boolean mPressLock;

    public static KeyguardMultiUserAvatar fromXml(int resId, Context context,
            KeyguardMultiUserSelectorView userSelector, UserInfo info) {
@@ -212,13 +213,22 @@ class KeyguardMultiUserAvatar extends FrameLayout {

    @Override
    public void setPressed(boolean pressed) {
        if (!pressed || isClickable()) {
        if (mPressLock && !pressed) {
            return;
        }

        if (mPressLock || !pressed || isClickable()) {
            super.setPressed(pressed);
            mFramed.setPressed(pressed);
            mUserImage.invalidate();
        }
    }

    public void lockPressed(boolean pressed) {
        mPressLock = pressed;
        setPressed(pressed);
    }

    public UserInfo getUserInfo() {
        return mUserInfo;
    }
+30 −17
Original line number Diff line number Diff line
@@ -81,11 +81,28 @@ public class KeyguardMultiUserSelectorView extends FrameLayout implements View.O
            KeyguardMultiUserAvatar uv = createAndAddUser(user);
            if (user.id == activeUser.id) {
                mActiveUserAvatar = uv;
                mActiveUserAvatar.setActive(true, false, null);
            } else {
            }
            uv.setActive(false, false, null);
        }
        mActiveUserAvatar.lockPressed(true);
    }

    public void finalizeActiveUserView(boolean animate) {
        if (animate) {
            getHandler().postDelayed(new Runnable() {
                    @Override
                        public void run() {
                        finalizeActiveUserNow(true);
                    }
                }, 500);
        } else {
            finalizeActiveUserNow(animate);
        }
    }

    void finalizeActiveUserNow(boolean animate) {
        mActiveUserAvatar.lockPressed(false);
        mActiveUserAvatar.setActive(true, animate, null);
    }

    Comparator<UserInfo> mOrderAddedComparator = new Comparator<UserInfo>() {
@@ -132,13 +149,11 @@ public class KeyguardMultiUserSelectorView extends FrameLayout implements View.O
                // Reset the previously active user to appear inactive
                mCallback.hideSecurityView(FADE_OUT_ANIMATION_DURATION);
                setAllClickable(false);
                avatar.lockPressed(true);
                mActiveUserAvatar.setActive(false, true, new Runnable() {
                    @Override
                    public void run() {
                        mActiveUserAvatar = avatar;
                        mActiveUserAvatar.setActive(true, true, new Runnable() {
                            @Override
                            public void run() {
                        if (this.getClass().getName().contains("internal")) {
                            try {
                                ActivityManagerNative.getDefault()
@@ -152,8 +167,6 @@ public class KeyguardMultiUserSelectorView extends FrameLayout implements View.O
                    }
                });
            }
                });
            }
        }
    }
}
+26 −8
Original line number Diff line number Diff line
@@ -79,10 +79,11 @@ public class KeyguardUpdateMonitor {
    private static final int MSG_CLOCK_VISIBILITY_CHANGED = 307;
    private static final int MSG_DEVICE_PROVISIONED = 308;
    private static final int MSG_DPM_STATE_CHANGED = 309;
    private static final int MSG_USER_SWITCHED = 310;
    private static final int MSG_USER_SWITCHING = 310;
    private static final int MSG_USER_REMOVED = 311;
    private static final int MSG_KEYGUARD_VISIBILITY_CHANGED = 312;
    protected static final int MSG_BOOT_COMPLETED = 313;
    private static final int MSG_USER_SWITCH_COMPLETE = 314;


    private static KeyguardUpdateMonitor sInstance;
@@ -147,8 +148,11 @@ public class KeyguardUpdateMonitor {
                case MSG_DPM_STATE_CHANGED:
                    handleDevicePolicyManagerStateChanged();
                    break;
                case MSG_USER_SWITCHED:
                    handleUserSwitched(msg.arg1, (IRemoteCallback)msg.obj);
                case MSG_USER_SWITCHING:
                    handleUserSwitching(msg.arg1, (IRemoteCallback)msg.obj);
                    break;
                case MSG_USER_SWITCH_COMPLETE:
                    handleUserSwitchComplete(msg.arg1);
                    break;
                case MSG_USER_REMOVED:
                    handleUserRemoved(msg.arg1);
@@ -359,11 +363,13 @@ public class KeyguardUpdateMonitor {
                    new IUserSwitchObserver.Stub() {
                        @Override
                        public void onUserSwitching(int newUserId, IRemoteCallback reply) {
                            mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHED,
                            mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHING,
                                    newUserId, 0, reply));
                        }
                        @Override
                        public void onUserSwitchComplete(int newUserId) throws RemoteException {
                            mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCH_COMPLETE,
                                    newUserId));
                        }
                    });
        } catch (RemoteException e) {
@@ -418,13 +424,13 @@ public class KeyguardUpdateMonitor {
    }

    /**
     * Handle {@link #MSG_USER_SWITCHED}
     * Handle {@link #MSG_USER_SWITCHING}
     */
    protected void handleUserSwitched(int userId, IRemoteCallback reply) {
    protected void handleUserSwitching(int userId, IRemoteCallback reply) {
        for (int i = 0; i < mCallbacks.size(); i++) {
            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
            if (cb != null) {
                cb.onUserSwitched(userId);
                cb.onUserSwitching(userId);
            }
        }
        setAlternateUnlockEnabled(false);
@@ -434,6 +440,18 @@ public class KeyguardUpdateMonitor {
        }
    }

    /**
     * Handle {@link #MSG_USER_SWITCH_COMPLETE}
     */
    protected void handleUserSwitchComplete(int userId) {
        for (int i = 0; i < mCallbacks.size(); i++) {
            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
            if (cb != null) {
                cb.onUserSwitchComplete(userId);
            }
        }
    }

    /**
     * Handle {@link #MSG_BOOT_COMPLETED}
     */
@@ -456,7 +474,7 @@ public class KeyguardUpdateMonitor {
    }

    /**
     * Handle {@link #MSG_USER_SWITCHED}
     * Handle {@link #MSG_USER_REMOVED}
     */
    protected void handleUserRemoved(int userId) {
        for (int i = 0; i < mCallbacks.size(); i++) {
Loading