1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.launcher3.compat; 18 19 import android.content.Context; 20 import android.content.SharedPreferences; 21 import android.content.pm.PackageManager; 22 import android.os.UserHandle; 23 import android.os.UserManager; 24 import android.util.ArrayMap; 25 import com.android.launcher3.util.LongArrayMap; 26 import java.util.ArrayList; 27 import java.util.Collections; 28 import java.util.List; 29 30 public class UserManagerCompatVL extends UserManagerCompat { 31 private static final String USER_CREATION_TIME_KEY = "user_creation_time_"; 32 33 protected final UserManager mUserManager; 34 private final PackageManager mPm; 35 private final Context mContext; 36 37 protected LongArrayMap<UserHandle> mUsers; 38 // Create a separate reverse map as LongArrayMap.indexOfValue checks if objects are same 39 // and not {@link Object#equals} 40 protected ArrayMap<UserHandle, Long> mUserToSerialMap; 41 UserManagerCompatVL(Context context)42 UserManagerCompatVL(Context context) { 43 mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); 44 mPm = context.getPackageManager(); 45 mContext = context; 46 } 47 48 @Override getSerialNumberForUser(UserHandle user)49 public long getSerialNumberForUser(UserHandle user) { 50 synchronized (this) { 51 if (mUserToSerialMap != null) { 52 Long serial = mUserToSerialMap.get(user); 53 return serial == null ? 0 : serial; 54 } 55 } 56 return mUserManager.getSerialNumberForUser(user); 57 } 58 59 @Override getUserForSerialNumber(long serialNumber)60 public UserHandle getUserForSerialNumber(long serialNumber) { 61 synchronized (this) { 62 if (mUsers != null) { 63 return mUsers.get(serialNumber); 64 } 65 } 66 return mUserManager.getUserForSerialNumber(serialNumber); 67 } 68 69 @Override isQuietModeEnabled(UserHandle user)70 public boolean isQuietModeEnabled(UserHandle user) { 71 return false; 72 } 73 74 @Override isUserUnlocked(UserHandle user)75 public boolean isUserUnlocked(UserHandle user) { 76 return true; 77 } 78 79 @Override isDemoUser()80 public boolean isDemoUser() { 81 return false; 82 } 83 84 @Override requestQuietModeEnabled(boolean enableQuietMode, UserHandle user)85 public boolean requestQuietModeEnabled(boolean enableQuietMode, UserHandle user) { 86 return false; 87 } 88 89 @Override isAnyProfileQuietModeEnabled()90 public boolean isAnyProfileQuietModeEnabled() { 91 return false; 92 } 93 94 @Override enableAndResetCache()95 public void enableAndResetCache() { 96 synchronized (this) { 97 mUsers = new LongArrayMap<>(); 98 mUserToSerialMap = new ArrayMap<>(); 99 List<UserHandle> users = mUserManager.getUserProfiles(); 100 if (users != null) { 101 for (UserHandle user : users) { 102 long serial = mUserManager.getSerialNumberForUser(user); 103 mUsers.put(serial, user); 104 mUserToSerialMap.put(user, serial); 105 } 106 } 107 } 108 } 109 110 @Override getUserProfiles()111 public List<UserHandle> getUserProfiles() { 112 synchronized (this) { 113 if (mUsers != null) { 114 return new ArrayList<>(mUserToSerialMap.keySet()); 115 } 116 } 117 118 List<UserHandle> users = mUserManager.getUserProfiles(); 119 return users == null ? Collections.<UserHandle>emptyList() : users; 120 } 121 122 @Override getBadgedLabelForUser(CharSequence label, UserHandle user)123 public CharSequence getBadgedLabelForUser(CharSequence label, UserHandle user) { 124 if (user == null) { 125 return label; 126 } 127 return mPm.getUserBadgedLabel(label, user); 128 } 129 } 130 131