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

Commit e1206377 authored by Jiaquan He's avatar Jiaquan He
Browse files

Move the user account querying logic to UserInfoController.

Bug: 28383751
Change-Id: I85985d772b6aa9bfeb4e900854c9150481bddf7a
(cherry picked from commit ad4889c3c70ed042c24eac80f0f304ba67962dc3)
parent e97cbea8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ public class UserTile extends QSTile<QSTile.State> implements UserInfoController
    }

    @Override
    public void onUserInfoChanged(String name, Drawable picture) {
    public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
        mLastUpdate = new Pair<>(name, picture);
        refreshState(mLastUpdate);
    }
+1 −1
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ public class KeyguardStatusBarView extends RelativeLayout
    public void setUserInfoController(UserInfoController userInfoController) {
        userInfoController.addListener(new UserInfoController.OnUserInfoChangedListener() {
            @Override
            public void onUserInfoChanged(String name, Drawable picture) {
            public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
                mMultiUserAvatar.setImageDrawable(picture);
            }
        });
+1 −1
Original line number Diff line number Diff line
@@ -395,7 +395,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
    }

    @Override
    public void onUserInfoChanged(String name, Drawable picture) {
    public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
        mMultiUserAvatar.setImageDrawable(picture);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -504,7 +504,7 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
    public void setUserInfoController(UserInfoController userInfoController) {
        userInfoController.addListener(new UserInfoController.OnUserInfoChangedListener() {
            @Override
            public void onUserInfoChanged(String name, Drawable picture) {
            public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
                mMultiUserAvatar.setImageDrawable(picture);
            }
        });
+39 −11
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.policy;

import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -33,7 +34,6 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.provider.ContactsContract;
import android.util.Log;
import android.util.Pair;

import com.android.internal.util.UserIcons;
import com.android.settingslib.drawable.UserIconDrawable;
@@ -48,10 +48,11 @@ public final class UserInfoController {
    private final Context mContext;
    private final ArrayList<OnUserInfoChangedListener> mCallbacks =
            new ArrayList<OnUserInfoChangedListener>();
    private AsyncTask<Void, Void, Pair<String, Drawable>> mUserInfoTask;
    private AsyncTask<Void, Void, UserInfoQueryResult> mUserInfoTask;

    private String mUserName;
    private Drawable mUserDrawable;
    private String mUserAccount;

    public UserInfoController(Context context) {
        mContext = context;
@@ -68,7 +69,7 @@ public final class UserInfoController {

    public void addListener(OnUserInfoChangedListener callback) {
        mCallbacks.add(callback);
        callback.onUserInfoChanged(mUserName, mUserDrawable);
        callback.onUserInfoChanged(mUserName, mUserDrawable, mUserAccount);
    }

    public void remListener(OnUserInfoChangedListener callback) {
@@ -137,9 +138,10 @@ public final class UserInfoController {
                res.getDimensionPixelSize(R.dimen.multi_user_avatar_keyguard_size));

        final Context context = currentUserContext;
        mUserInfoTask = new AsyncTask<Void, Void, Pair<String, Drawable>>() {
        mUserInfoTask = new AsyncTask<Void, Void, UserInfoQueryResult>() {

            @Override
            protected Pair<String, Drawable> doInBackground(Void... params) {
            protected UserInfoQueryResult doInBackground(Void... params) {
                final UserManager um = UserManager.get(mContext);

                // Fall back to the UserManager nickname if we can't read the name from the local
@@ -175,13 +177,15 @@ public final class UserInfoController {
                        }
                    }
                }
                return new Pair<String, Drawable>(name, avatar);
                String userAccount = um.getUserAccount(userId);
                return new UserInfoQueryResult(name, avatar, userAccount);
            }

            @Override
            protected void onPostExecute(Pair<String, Drawable> result) {
                mUserName = result.first;
                mUserDrawable = result.second;
            protected void onPostExecute(UserInfoQueryResult result) {
                mUserName = result.getName();
                mUserDrawable = result.getAvatar();
                mUserAccount = result.getUserAccount();
                mUserInfoTask = null;
                notifyChanged();
            }
@@ -191,7 +195,7 @@ public final class UserInfoController {

    private void notifyChanged() {
        for (OnUserInfoChangedListener listener : mCallbacks) {
            listener.onUserInfoChanged(mUserName, mUserDrawable);
            listener.onUserInfoChanged(mUserName, mUserDrawable, mUserAccount);
        }
    }

@@ -200,6 +204,30 @@ public final class UserInfoController {
    }

    public interface OnUserInfoChangedListener {
        public void onUserInfoChanged(String name, Drawable picture);
        public void onUserInfoChanged(String name, Drawable picture, String userAccount);
    }

    private static class UserInfoQueryResult {
        private String mName;
        private Drawable mAvatar;
        private String mUserAccount;

        public UserInfoQueryResult(String name, Drawable avatar, String userAccount) {
            mName = name;
            mAvatar = avatar;
            mUserAccount = userAccount;
        }

        public String getName() {
            return mName;
        }

        public Drawable getAvatar() {
            return mAvatar;
        }

        public String getUserAccount() {
            return mUserAccount;
        }
    }
}