• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.annotation.TargetApi;
20 import android.content.Context;
21 import android.content.SharedPreferences;
22 import android.content.pm.PackageManager;
23 import android.os.Build;
24 import android.os.UserHandle;
25 
26 import com.android.launcher3.Utilities;
27 import com.android.launcher3.util.LongArrayMap;
28 
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.List;
33 
34 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
35 public 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 
UserManagerCompatVL(Context context)41     UserManagerCompatVL(Context context) {
42         super(context);
43         mPm = context.getPackageManager();
44         mContext = context;
45     }
46 
47     @Override
enableAndResetCache()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
getUserProfiles()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
getBadgedLabelForUser(CharSequence label, UserHandleCompat user)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
getUserCreationTime(UserHandleCompat user)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