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

Commit 8006376f authored by Alejandro Nijamkin's avatar Alejandro Nijamkin Committed by Android (Google) Code Review
Browse files

Merge "Extracts UserRecord out of UserSwitcherController." into tm-qpr-dev

parents ef023c14 9e911741
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.UserSwitcherController.BaseUserAdapter;
import com.android.systemui.statusbar.policy.UserSwitcherController.UserRecord;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.settings.GlobalSettings;

import java.util.ArrayList;
+14 −11
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.systemui.qs.QSUserSwitcherEvent;
import com.android.systemui.qs.user.UserSwitchDialogController;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.user.data.source.UserRecord;

import javax.inject.Inject;

@@ -95,7 +96,7 @@ public class UserDetailView extends PseudoGridView {

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            UserSwitcherController.UserRecord item = getItem(position);
            UserRecord item = getItem(position);
            return createUserDetailItemView(convertView, parent, item);
        }

@@ -113,7 +114,7 @@ public class UserDetailView extends PseudoGridView {
        }

        public UserDetailItemView createUserDetailItemView(View convertView, ViewGroup parent,
                UserSwitcherController.UserRecord item) {
                UserRecord item) {
            UserDetailItemView v = UserDetailItemView.convertOrInflate(
                    parent.getContext(), convertView, parent);
            if (!item.isCurrent || item.isGuest) {
@@ -134,7 +135,7 @@ public class UserDetailView extends PseudoGridView {
                v.bind(name, drawable, item.info.id);
            }
            v.setActivated(item.isCurrent);
            v.setDisabledByAdmin(item.isDisabledByAdmin);
            v.setDisabledByAdmin(mController.isDisabledByAdmin(item));
            v.setEnabled(item.isSwitchToEnabled);
            v.setAlpha(v.isEnabled() ? USER_SWITCH_ENABLED_ALPHA : USER_SWITCH_DISABLED_ALPHA);

@@ -146,7 +147,7 @@ public class UserDetailView extends PseudoGridView {
        }

        private static Drawable getDrawable(Context context,
                UserSwitcherController.UserRecord item) {
                UserRecord item) {
            Drawable icon = getIconDrawable(context, item);
            int iconColorRes;
            if (item.isCurrent) {
@@ -171,22 +172,24 @@ public class UserDetailView extends PseudoGridView {
            }

            Trace.beginSection("UserDetailView.Adapter#onClick");
            UserSwitcherController.UserRecord tag =
                    (UserSwitcherController.UserRecord) view.getTag();
            if (tag.isDisabledByAdmin) {
            UserRecord userRecord =
                    (UserRecord) view.getTag();
            if (mController.isDisabledByAdmin(userRecord)) {
                final Intent intent = RestrictedLockUtils.getShowAdminSupportDetailsIntent(
                        mContext, tag.enforcedAdmin);
                        mContext, mController.getEnforcedAdmin(userRecord));
                mController.startActivity(intent);
            } else if (tag.isSwitchToEnabled) {
            } else if (userRecord.isSwitchToEnabled) {
                MetricsLogger.action(mContext, MetricsEvent.QS_SWITCH_USER);
                mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_SWITCH);
                if (!tag.isAddUser && !tag.isRestricted && !tag.isDisabledByAdmin) {
                if (!userRecord.isAddUser
                        && !userRecord.isRestricted
                        && !mController.isDisabledByAdmin(userRecord)) {
                    if (mCurrentUserView != null) {
                        mCurrentUserView.setActivated(false);
                    }
                    view.setActivated(true);
                }
                onUserListItemClicked(tag, mDialogShower);
                onUserListItemClicked(userRecord, mDialogShower);
            }
            Trace.endSection();
        }
+4 −3
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.statusbar.phone.UserAvatarView;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.ViewController;

import javax.inject.Inject;
@@ -79,7 +80,7 @@ public class KeyguardQsUserSwitchController extends ViewController<FrameLayout>
    @VisibleForTesting
    UserAvatarView mUserAvatarView;
    private View mUserAvatarViewWithBackground;
    UserSwitcherController.UserRecord mCurrentUser;
    UserRecord mCurrentUser;
    private boolean mIsKeyguardShowing;

    // State info for the user switch and keyguard
@@ -269,10 +270,10 @@ public class KeyguardQsUserSwitchController extends ViewController<FrameLayout>
     * @return true if the current user has changed
     */
    private boolean updateCurrentUser() {
        UserSwitcherController.UserRecord previousUser = mCurrentUser;
        UserRecord previousUser = mCurrentUser;
        mCurrentUser = null;
        for (int i = 0; i < mAdapter.getCount(); i++) {
            UserSwitcherController.UserRecord r = mAdapter.getItem(i);
            UserRecord r = mAdapter.getItem(i);
            if (r.isCurrent) {
                mCurrentUser = r;
                return !mCurrentUser.equals(previousUser);
+13 −12
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.ViewController;

import java.util.ArrayList;
@@ -287,8 +288,8 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
                }
                KeyguardUserDetailItemView newView = (KeyguardUserDetailItemView)
                        mAdapter.getView(i, oldView, mListView);
                UserSwitcherController.UserRecord userTag =
                        (UserSwitcherController.UserRecord) newView.getTag();
                UserRecord userTag =
                        (UserRecord) newView.getTag();
                if (userTag.isCurrent) {
                    if (i != 0) {
                        Log.w(TAG, "Current user is not the first view in the list");
@@ -443,7 +444,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
        private KeyguardUserSwitcherController mKeyguardUserSwitcherController;
        private View mCurrentUserView;
        // List of users where the first entry is always the current user
        private ArrayList<UserSwitcherController.UserRecord> mUsersOrdered = new ArrayList<>();
        private ArrayList<UserRecord> mUsersOrdered = new ArrayList<>();

        KeyguardUserAdapter(Context context, Resources resources, LayoutInflater layoutInflater,
                UserSwitcherController controller,
@@ -464,10 +465,10 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
        }

        void refreshUserOrder() {
            ArrayList<UserSwitcherController.UserRecord> users = super.getUsers();
            ArrayList<UserRecord> users = super.getUsers();
            mUsersOrdered = new ArrayList<>(users.size());
            for (int i = 0; i < users.size(); i++) {
                UserSwitcherController.UserRecord record = users.get(i);
                UserRecord record = users.get(i);
                if (record.isCurrent) {
                    mUsersOrdered.add(0, record);
                } else {
@@ -477,19 +478,19 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
        }

        @Override
        protected ArrayList<UserSwitcherController.UserRecord> getUsers() {
        protected ArrayList<UserRecord> getUsers() {
            return mUsersOrdered;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            UserSwitcherController.UserRecord item = getItem(position);
            UserRecord item = getItem(position);
            return createUserDetailItemView(convertView, parent, item);
        }

        KeyguardUserDetailItemView convertOrInflate(View convertView, ViewGroup parent) {
            if (!(convertView instanceof KeyguardUserDetailItemView)
                    || !(convertView.getTag() instanceof UserSwitcherController.UserRecord)) {
                    || !(convertView.getTag() instanceof UserRecord)) {
                convertView = mLayoutInflater.inflate(
                        R.layout.keyguard_user_switcher_item, parent, false);
            }
@@ -497,7 +498,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
        }

        KeyguardUserDetailItemView createUserDetailItemView(View convertView, ViewGroup parent,
                UserSwitcherController.UserRecord item) {
                UserRecord item) {
            KeyguardUserDetailItemView v = convertOrInflate(convertView, parent);
            v.setOnClickListener(this);

@@ -513,7 +514,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
                v.bind(name, drawable, item.info.id);
            }
            v.setActivated(item.isCurrent);
            v.setDisabledByAdmin(item.isDisabledByAdmin);
            v.setDisabledByAdmin(mController.isDisabledByAdmin(item));
            v.setEnabled(item.isSwitchToEnabled);
            v.setAlpha(v.isEnabled() ? USER_SWITCH_ENABLED_ALPHA : USER_SWITCH_DISABLED_ALPHA);

@@ -524,7 +525,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
            return v;
        }

        private Drawable getDrawable(UserSwitcherController.UserRecord item) {
        private Drawable getDrawable(UserRecord item) {
            Drawable drawable;
            if (item.isCurrent && item.isGuest) {
                drawable = mContext.getDrawable(R.drawable.ic_avatar_guest_user);
@@ -547,7 +548,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS

        @Override
        public void onClick(View v) {
            UserSwitcherController.UserRecord user = (UserSwitcherController.UserRecord) v.getTag();
            UserRecord user = (UserRecord) v.getTag();

            if (mKeyguardUserSwitcherController.isListAnimating()) {
                return;
+25 −72
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.os.UserManager;
import android.provider.Settings;
import android.telephony.TelephonyCallback;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
@@ -54,6 +55,7 @@ import android.widget.BaseAdapter;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.collection.SimpleArrayMap;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.jank.InteractionJankMonitor;
@@ -83,6 +85,7 @@ import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.telephony.TelephonyListenerManager;
import com.android.systemui.user.CreateUserActivity;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;

@@ -138,6 +141,9 @@ public class UserSwitcherController implements Dumpable {
    private final InteractionJankMonitor mInteractionJankMonitor;
    private final LatencyTracker mLatencyTracker;
    private final DialogLaunchAnimator mDialogLaunchAnimator;
    private final SimpleArrayMap<UserRecord, EnforcedAdmin> mEnforcedAdminByUserRecord =
            new SimpleArrayMap<>();
    private final ArraySet<UserRecord> mDisabledByAdmin = new ArraySet<>();

    private ArrayList<UserRecord> mUsers = new ArrayList<>();
    @VisibleForTesting
@@ -975,6 +981,21 @@ public class UserSwitcherController implements Dumpable {
        return mKeyguardStateController;
    }

    /**
     * Returns the {@link EnforcedAdmin} for the given record, or {@code null} if there isn't one.
     */
    @Nullable
    public EnforcedAdmin getEnforcedAdmin(UserRecord record) {
        return mEnforcedAdminByUserRecord.get(record);
    }

    /**
     * Returns {@code true} if the given record is disabled by the admin; {@code false} otherwise.
     */
    public boolean isDisabledByAdmin(UserRecord record) {
        return mDisabledByAdmin.contains(record);
    }

    public static abstract class BaseUserAdapter extends BaseAdapter {

        final UserSwitcherController mController;
@@ -1106,11 +1127,11 @@ public class UserSwitcherController implements Dumpable {
                UserManager.DISALLOW_ADD_USER, mUserTracker.getUserId());
        if (admin != null && !RestrictedLockUtilsInternal.hasBaseUserRestriction(mContext,
                UserManager.DISALLOW_ADD_USER, mUserTracker.getUserId())) {
            record.isDisabledByAdmin = true;
            record.enforcedAdmin = admin;
            mDisabledByAdmin.add(record);
            mEnforcedAdminByUserRecord.put(record, admin);
        } else {
            record.isDisabledByAdmin = false;
            record.enforcedAdmin = null;
            mDisabledByAdmin.remove(record);
            mEnforcedAdminByUserRecord.put(record, null);
        }
    }

@@ -1152,74 +1173,6 @@ public class UserSwitcherController implements Dumpable {
        }
    }

    public static final class UserRecord {
        public final UserInfo info;
        public final Bitmap picture;
        public final boolean isGuest;
        public final boolean isCurrent;
        public final boolean isAddUser;
        public final boolean isAddSupervisedUser;
        /** If true, the record is only visible to the owner and only when unlocked. */
        public final boolean isRestricted;
        public boolean isDisabledByAdmin;
        public EnforcedAdmin enforcedAdmin;
        public boolean isSwitchToEnabled;

        public UserRecord(UserInfo info, Bitmap picture, boolean isGuest, boolean isCurrent,
                boolean isAddUser, boolean isRestricted, boolean isSwitchToEnabled,
                boolean isAddSupervisedUser) {
            this.info = info;
            this.picture = picture;
            this.isGuest = isGuest;
            this.isCurrent = isCurrent;
            this.isAddUser = isAddUser;
            this.isRestricted = isRestricted;
            this.isSwitchToEnabled = isSwitchToEnabled;
            this.isAddSupervisedUser = isAddSupervisedUser;
        }

        public UserRecord copyWithIsCurrent(boolean _isCurrent) {
            return new UserRecord(info, picture, isGuest, _isCurrent, isAddUser, isRestricted,
                    isSwitchToEnabled, isAddSupervisedUser);
        }

        public int resolveId() {
            if (isGuest || info == null) {
                return UserHandle.USER_NULL;
            }
            return info.id;
        }

        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("UserRecord(");
            if (info != null) {
                sb.append("name=\"").append(info.name).append("\" id=").append(info.id);
            } else {
                if (isGuest) {
                    sb.append("<add guest placeholder>");
                } else if (isAddUser) {
                    sb.append("<add user placeholder>");
                }
            }
            if (isGuest) sb.append(" <isGuest>");
            if (isAddUser) sb.append(" <isAddUser>");
            if (isAddSupervisedUser) sb.append(" <isAddSupervisedUser>");
            if (isCurrent) sb.append(" <isCurrent>");
            if (picture != null) sb.append(" <hasPicture>");
            if (isRestricted) sb.append(" <isRestricted>");
            if (isDisabledByAdmin) {
                sb.append(" <isDisabledByAdmin>");
                sb.append(" enforcedAdmin=").append(enforcedAdmin);
            }
            if (isSwitchToEnabled) {
                sb.append(" <isSwitchToEnabled>");
            }
            sb.append(')');
            return sb.toString();
        }
    }

    private final KeyguardStateController.Callback mCallback =
            new KeyguardStateController.Callback() {
                @Override
Loading