• 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 mIsAdmin;
36     boolean mIsGuest;
37     boolean mIsEphemeral;
38     boolean mUserSwitcherEnabled;
39     boolean mCanAddGuest;
40     boolean mDisallowAddUser;
41     boolean mDisallowAddUserSetByAdmin;
42     boolean mDisallowSwitchUser;
43     RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin;
44 
UserCapabilities()45     private UserCapabilities() {
46     }
47 
create(Context context)48     public static UserCapabilities create(Context context) {
49         UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
50         UserCapabilities caps = new UserCapabilities();
51 
52         if (!UserManager.supportsMultipleUsers() || Utils.isMonkeyRunning()) {
53             caps.mEnabled = false;
54             return caps;
55         }
56 
57         final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId());
58         caps.mIsGuest = myUserInfo.isGuest();
59         caps.mIsAdmin = myUserInfo.isAdmin();
60         caps.mIsEphemeral = myUserInfo.isEphemeral();
61         DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
62                 Context.DEVICE_POLICY_SERVICE);
63 
64         boolean offerRestricted =
65                 context.getResources().getBoolean(R.bool.config_offer_restricted_profiles);
66         caps.mCanAddRestrictedProfile =
67                 offerRestricted && !dpm.isDeviceManaged() && userManager.isUserTypeEnabled(
68                         UserManager.USER_TYPE_FULL_RESTRICTED);
69 
70         caps.updateAddUserCapabilities(context);
71         return caps;
72     }
73 
updateAddUserCapabilities(Context context)74     public void updateAddUserCapabilities(Context context) {
75         final UserManager userManager =
76                 (UserManager) context.getSystemService(Context.USER_SERVICE);
77         mEnforcedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(context,
78                 UserManager.DISALLOW_ADD_USER, UserHandle.myUserId());
79         final boolean hasBaseUserRestriction = RestrictedLockUtilsInternal.hasBaseUserRestriction(
80                 context, UserManager.DISALLOW_ADD_USER, UserHandle.myUserId());
81         mDisallowAddUserSetByAdmin = mEnforcedAdmin != null && !hasBaseUserRestriction;
82         mDisallowAddUser = (mEnforcedAdmin != null || hasBaseUserRestriction);
83         mUserSwitcherEnabled = userManager.isUserSwitcherEnabled();
84         mCanAddUser = true;
85         if (!mIsAdmin
86                 || UserManager.getMaxSupportedUsers() < 2
87                 || !UserManager.supportsMultipleUsers()
88                 || mDisallowAddUser
89                 || (!userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_SECONDARY)
90                     && !mCanAddRestrictedProfile)) {
91             mCanAddUser = false;
92         }
93 
94         final boolean canAddUsersWhenLocked = mIsAdmin || Settings.Global.getInt(
95                 context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1;
96         mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked
97                 && userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_GUEST);
98 
99         mDisallowSwitchUser = userManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
100     }
101 
isAdmin()102     public boolean isAdmin() {
103         return mIsAdmin;
104     }
105 
disallowAddUser()106     public boolean disallowAddUser() {
107         return mDisallowAddUser;
108     }
109 
disallowAddUserSetByAdmin()110     public boolean disallowAddUserSetByAdmin() {
111         return mDisallowAddUserSetByAdmin;
112     }
113 
getEnforcedAdmin()114     public RestrictedLockUtils.EnforcedAdmin getEnforcedAdmin() {
115         return mEnforcedAdmin;
116     }
117 
118 
119     @Override
toString()120     public String toString() {
121         return "UserCapabilities{" +
122                 "mEnabled=" + mEnabled +
123                 ", mCanAddUser=" + mCanAddUser +
124                 ", mCanAddRestrictedProfile=" + mCanAddRestrictedProfile +
125                 ", mIsAdmin=" + mIsAdmin +
126                 ", mIsGuest=" + mIsGuest +
127                 ", mCanAddGuest=" + mCanAddGuest +
128                 ", mDisallowAddUser=" + mDisallowAddUser +
129                 ", mEnforcedAdmin=" + mEnforcedAdmin +
130                 ", mDisallowSwitchUser=" + mDisallowSwitchUser +
131                 ", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin +
132                 ", mUserSwitcherEnabled=" + mUserSwitcherEnabled +
133                 '}';
134     }
135 }
136