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