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

Commit 7ca3250a authored by Sunny Goyal's avatar Sunny Goyal Committed by Android (Google) Code Review
Browse files

Merge "Creating a cache of users to avoid multiple calls to UserManager" into ub-launcher3-burnaby

parents 0ad33066 823fd509
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -20,11 +20,13 @@ import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserManager;
import android.util.Log;

import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.PackageInstallerCompat;
import com.android.launcher3.compat.UserManagerCompat;
import com.android.launcher3.util.Thunk;

import java.lang.ref.WeakReference;
@@ -100,6 +102,7 @@ public class LauncherAppState {
        filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED);

        sContext.registerReceiver(mModel, filter);
        UserManagerCompat.getInstance(sContext).enableAndResetCache();
    }

    /**
+1 −0
Original line number Diff line number Diff line
@@ -1288,6 +1288,7 @@ public class LauncherModel extends BroadcastReceiver
            }
        } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_ADDED.equals(action)
                || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
            UserManagerCompat.getInstance(context).enableAndResetCache();
            forceReload();
        }
    }
+19 −6
Original line number Diff line number Diff line
@@ -28,16 +28,29 @@ public abstract class UserManagerCompat {
    protected UserManagerCompat() {
    }

    private static final Object sInstanceLock = new Object();
    private static UserManagerCompat sInstance;

    public static UserManagerCompat getInstance(Context context) {
        synchronized (sInstanceLock) {
            if (sInstance == null) {
                if (Utilities.isLmpOrAbove()) {
            return new UserManagerCompatVL(context);
                    sInstance = new UserManagerCompatVL(context.getApplicationContext());
                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return new UserManagerCompatV17(context);
                    sInstance = new UserManagerCompatV17(context.getApplicationContext());
                } else {
            return new UserManagerCompatV16();
                    sInstance = new UserManagerCompatV16();
                }
            }
            return sInstance;
        }
    }

    /**
     * Creates a cache for users.
     */
    public abstract void enableAndResetCache();

    public abstract List<UserHandleCompat> getUserProfiles();
    public abstract long getSerialNumberForUser(UserHandleCompat user);
    public abstract UserHandleCompat getUserForSerialNumber(long serialNumber);
+4 −0
Original line number Diff line number Diff line
@@ -53,4 +53,8 @@ public class UserManagerCompatV16 extends UserManagerCompat {
    public long getUserCreationTime(UserHandleCompat user) {
        return 0;
    }

    @Override
    public void enableAndResetCache() {
    }
}
+24 −0
Original line number Diff line number Diff line
@@ -21,8 +21,12 @@ import android.content.Context;
import android.os.Build;
import android.os.UserManager;

import com.android.launcher3.util.LongArrayMap;

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public class UserManagerCompatV17 extends UserManagerCompatV16 {

    protected LongArrayMap<UserHandleCompat> mUsers;
    protected UserManager mUserManager;

    UserManagerCompatV17(Context context) {
@@ -30,11 +34,31 @@ public class UserManagerCompatV17 extends UserManagerCompatV16 {
    }

    public long getSerialNumberForUser(UserHandleCompat user) {
        synchronized (this) {
            if (mUsers != null) {
                int index = mUsers.indexOfValue(user);
                return (index >= 0) ? mUsers.keyAt(index) : 0;
            }
        }
        return mUserManager.getSerialNumberForUser(user.getUser());
    }

    public UserHandleCompat getUserForSerialNumber(long serialNumber) {
        synchronized (this) {
            if (mUsers != null) {
                return mUsers.get(serialNumber);
            }
        }
        return UserHandleCompat.fromUser(mUserManager.getUserForSerialNumber(serialNumber));
    }

    @Override
    public void enableAndResetCache() {
        synchronized (this) {
            mUsers = new LongArrayMap<UserHandleCompat>();
            UserHandleCompat myUser = UserHandleCompat.myUserHandle();
            mUsers.put(mUserManager.getSerialNumberForUser(myUser.getUser()), myUser);
        }
    }
}
Loading