• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 package com.android.car.user;
17 
18 import static com.android.car.internal.util.VersionUtils.isPlatformVersionAtLeastU;
19 
20 import android.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.annotation.UserIdInt;
23 import android.car.builtin.os.UserManagerHelper;
24 import android.content.Context;
25 import android.os.UserHandle;
26 import android.os.UserManager;
27 
28 import java.util.List;
29 
30 /**
31  * Helper class to get User properties using UserHandle
32  */
33 //TODO(b/214340360) : Add unit test
34 public final class UserHandleHelper {
35 
36     private final Context mContext;
37     private final UserManager mUserManager;
38 
UserHandleHelper(@onNull Context context, @NonNull UserManager userManager)39     public UserHandleHelper(@NonNull Context context, @NonNull UserManager userManager) {
40         mContext = context;
41         mUserManager = userManager;
42     }
43 
44     /**
45      * Gets user handle if user exists
46      */
47     @Nullable
getExistingUserHandle(@serIdInt int userId)48     public UserHandle getExistingUserHandle(@UserIdInt int userId) {
49         List<UserHandle> users;
50         if (isPlatformVersionAtLeastU()) {
51             users = UserManagerHelper.getUserHandles(mUserManager, /* excludeDying= */ false);
52         } else {
53             users = UserManagerHelper.getUserHandles(mUserManager,
54                     /* excludePartial= */ false, /* excludeDying= */ false,
55                     /* excludePreCreated= */ true);
56         }
57 
58         for (UserHandle user : users) {
59             if (user.getIdentifier() == userId) return user;
60         }
61         return null;
62     }
63 
64     /**
65      * Get enabled profiles
66      */
67     @NonNull
getEnabledProfiles(@serIdInt int userId)68     public List<UserHandle> getEnabledProfiles(@UserIdInt int userId) {
69         return getUserContextAwareUserManager(userId).getEnabledProfiles();
70     }
71 
72     /**
73      * Is User a guest user?
74      */
isGuestUser(UserHandle user)75     public boolean isGuestUser(UserHandle user) {
76         return getUserContextAwareUserManager(user.getIdentifier()).isGuestUser();
77     }
78 
79     /**
80      * Is User an admin user?
81      */
isAdminUser(UserHandle user)82     public boolean isAdminUser(UserHandle user) {
83         return getUserContextAwareUserManager(user.getIdentifier()).isAdminUser();
84     }
85 
86     /**
87      * Is User an ephemeral user?
88      */
isEphemeralUser(UserHandle user)89     public boolean isEphemeralUser(UserHandle user) {
90         return UserManagerHelper.isEphemeralUser(mUserManager, user);
91     }
92 
93     /**
94      * Is User enabled?
95      */
isEnabledUser(UserHandle user)96     public boolean isEnabledUser(UserHandle user) {
97         return UserManagerHelper.isEnabledUser(mUserManager, user);
98     }
99 
100     /**
101      * Is User a managed profile?
102      */
isManagedProfile(UserHandle user)103     public boolean isManagedProfile(UserHandle user) {
104         return mUserManager.isManagedProfile(user.getIdentifier());
105     }
106 
107     /**
108      * Is user for a profile?
109      */
isProfileUser(UserHandle user)110     public boolean isProfileUser(UserHandle user) {
111         return getUserContextAwareUserManager(user.getIdentifier()).isProfile();
112     }
113 
114     /**
115      * Is User Initialized?
116      */
isInitializedUser(UserHandle user)117     public boolean isInitializedUser(UserHandle user) {
118         return UserManagerHelper.isInitializedUser(mUserManager, user);
119     }
120 
getUserContextAwareUserManager(@serIdInt int userId)121     private UserManager getUserContextAwareUserManager(@UserIdInt int userId) {
122         Context userContext = mContext.createContextAsUser(UserHandle.of(userId), /* flags= */ 0);
123         return userContext.getSystemService(UserManager.class);
124     }
125 }
126