• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.settings.users;
18 
19 import android.app.admin.DevicePolicyManager;
20 import android.content.Context;
21 import android.content.pm.UserInfo;
22 import android.os.UserHandle;
23 import android.os.UserManager;
24 import android.provider.Settings;
25 
26 import com.android.settings.R;
27 import com.android.settings.Utils;
28 import com.android.settingslib.RestrictedLockUtils;
29 import com.android.settingslib.RestrictedLockUtilsInternal;
30 
31 public class UserCapabilities {
32     boolean mEnabled = true;
33     boolean mCanAddUser = true;
34     boolean mCanAddRestrictedProfile;
35     boolean mIsMain;
36     boolean mIsAdmin;
37     boolean mIsGuest;
38     boolean mIsEphemeral;
39     boolean mUserSwitchingUiEnabled;
40     boolean mUserSwitcherEnabled;
41     boolean mCanAddGuest;
42     boolean mDisallowAddUser;
43     boolean mDisallowAddUserSetByAdmin;
44     boolean mDisallowSwitchUser;
45     RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin;
46 
UserCapabilities()47     private UserCapabilities() {
48     }
49 
create(Context context)50     public static UserCapabilities create(Context context) {
51         UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
52         UserCapabilities caps = new UserCapabilities();
53 
54         if (!UserManager.supportsMultipleUsers() || Utils.isMonkeyRunning()) {
55             caps.mEnabled = false;
56             return caps;
57         }
58 
59         final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId());
60         caps.mIsGuest = myUserInfo.isGuest();
61         caps.mIsAdmin = myUserInfo.isAdmin();
62         caps.mIsMain = myUserInfo.isMain();
63         caps.mIsEphemeral = myUserInfo.isEphemeral();
64         DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
65                 Context.DEVICE_POLICY_SERVICE);
66 
67         boolean offerRestricted =
68                 context.getResources().getBoolean(R.bool.config_offer_restricted_profiles);
69         caps.mCanAddRestrictedProfile =
70                 offerRestricted && !dpm.isDeviceManaged() && userManager.isUserTypeEnabled(
71                         UserManager.USER_TYPE_FULL_RESTRICTED);
72         caps.mUserSwitchingUiEnabled = context.getResources().getBoolean(
73                 com.android.internal.R.bool.config_allowChangeUserSwitcherEnabled);
74         caps.updateAddUserCapabilities(context);
75         return caps;
76     }
77 
updateAddUserCapabilities(Context context)78     public void updateAddUserCapabilities(Context context) {
79         final UserManager userManager =
80                 (UserManager) context.getSystemService(Context.USER_SERVICE);
81         final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId());
82         mIsAdmin = myUserInfo.isAdmin();
83 
84         mEnforcedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(context,
85                 UserManager.DISALLOW_ADD_USER, UserHandle.myUserId());
86         final boolean hasBaseUserRestriction = RestrictedLockUtilsInternal.hasBaseUserRestriction(
87                 context, UserManager.DISALLOW_ADD_USER, UserHandle.myUserId());
88         mDisallowAddUserSetByAdmin = mEnforcedAdmin != null && !hasBaseUserRestriction;
89         mDisallowAddUser = (mEnforcedAdmin != null || hasBaseUserRestriction);
90         mUserSwitcherEnabled = userManager.isUserSwitcherEnabled();
91         mCanAddUser = true;
92         if (!mIsAdmin
93                 || UserManager.getMaxSupportedUsers() < 2
94                 || !UserManager.supportsMultipleUsers()
95                 || mDisallowAddUser
96                 || (!userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_SECONDARY)
97                     && !mCanAddRestrictedProfile)) {
98             mCanAddUser = false;
99         }
100 
101         final boolean canAddUsersWhenLocked = mIsAdmin || Settings.Global.getInt(
102                 context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1;
103         mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked
104                 && userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_GUEST);
105 
106         mDisallowSwitchUser = userManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
107     }
108 
isAdmin()109     public boolean isAdmin() {
110         return mIsAdmin;
111     }
112 
disallowAddUser()113     public boolean disallowAddUser() {
114         return mDisallowAddUser;
115     }
116 
disallowAddUserSetByAdmin()117     public boolean disallowAddUserSetByAdmin() {
118         return mDisallowAddUserSetByAdmin;
119     }
120 
getEnforcedAdmin()121     public RestrictedLockUtils.EnforcedAdmin getEnforcedAdmin() {
122         return mEnforcedAdmin;
123     }
124 
125 
126     @Override
toString()127     public String toString() {
128         return "UserCapabilities{" +
129                 "mEnabled=" + mEnabled +
130                 ", mCanAddUser=" + mCanAddUser +
131                 ", mCanAddRestrictedProfile=" + mCanAddRestrictedProfile +
132                 ", mIsAdmin=" + mIsAdmin +
133                 ", mIsGuest=" + mIsGuest +
134                 ", mCanAddGuest=" + mCanAddGuest +
135                 ", mDisallowAddUser=" + mDisallowAddUser +
136                 ", mEnforcedAdmin=" + mEnforcedAdmin +
137                 ", mDisallowSwitchUser=" + mDisallowSwitchUser +
138                 ", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin +
139                 ", mUserSwitchingUiEnabled=" + mUserSwitchingUiEnabled +
140                 ", mUserSwitcherEnabled=" + mUserSwitcherEnabled +
141                 '}';
142     }
143 }
144