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 17package com.android.launcher3.compat; 18 19import android.annotation.TargetApi; 20import android.content.Context; 21import android.content.SharedPreferences; 22import android.content.pm.PackageManager; 23import android.os.Build; 24import android.os.UserHandle; 25 26import com.android.launcher3.Utilities; 27import com.android.launcher3.util.LongArrayMap; 28 29import java.util.ArrayList; 30import java.util.Collections; 31import java.util.HashMap; 32import java.util.List; 33 34@TargetApi(Build.VERSION_CODES.LOLLIPOP) 35public class UserManagerCompatVL extends UserManagerCompatV17 { 36 private static final String USER_CREATION_TIME_KEY = "user_creation_time_"; 37 38 private final PackageManager mPm; 39 private final Context mContext; 40 41 UserManagerCompatVL(Context context) { 42 super(context); 43 mPm = context.getPackageManager(); 44 mContext = context; 45 } 46 47 @Override 48 public void enableAndResetCache() { 49 synchronized (this) { 50 mUsers = new LongArrayMap<>(); 51 mUserToSerialMap = new HashMap<>(); 52 List<UserHandle> users = mUserManager.getUserProfiles(); 53 if (users != null) { 54 for (UserHandle user : users) { 55 long serial = mUserManager.getSerialNumberForUser(user); 56 UserHandleCompat userCompat = UserHandleCompat.fromUser(user); 57 mUsers.put(serial, userCompat); 58 mUserToSerialMap.put(userCompat, serial); 59 } 60 } 61 } 62 } 63 64 @Override 65 public List<UserHandleCompat> getUserProfiles() { 66 synchronized (this) { 67 if (mUsers != null) { 68 List<UserHandleCompat> users = new ArrayList<>(); 69 users.addAll(mUserToSerialMap.keySet()); 70 return users; 71 } 72 } 73 74 List<UserHandle> users = mUserManager.getUserProfiles(); 75 if (users == null) { 76 return Collections.emptyList(); 77 } 78 ArrayList<UserHandleCompat> compatUsers = new ArrayList<UserHandleCompat>( 79 users.size()); 80 for (UserHandle user : users) { 81 compatUsers.add(UserHandleCompat.fromUser(user)); 82 } 83 return compatUsers; 84 } 85 86 @Override 87 public CharSequence getBadgedLabelForUser(CharSequence label, UserHandleCompat user) { 88 if (user == null) { 89 return label; 90 } 91 return mPm.getUserBadgedLabel(label, user.getUser()); 92 } 93 94 @Override 95 public long getUserCreationTime(UserHandleCompat user) { 96 SharedPreferences prefs = Utilities.getPrefs(mContext); 97 String key = USER_CREATION_TIME_KEY + getSerialNumberForUser(user); 98 if (!prefs.contains(key)) { 99 prefs.edit().putLong(key, System.currentTimeMillis()).apply(); 100 } 101 return prefs.getLong(key, 0); 102 } 103} 104 105