Skip to content

Commit 599dd7c

Browse files
author
Amith Yamasani
committed
DevicePolicyManager per user
Bug: 7136483 Store device policy information for each user and apply them when user switches. Global proxy can only be controlled by owner. Camera restriction applies to all users, if any one has an admin that disables it. Storage encryption can only be controlled by owner, although other users can query the state. Wipe data will only remove the user if non-zero, wipe the device, if zero. Change-Id: I359be46c1bc3828fd13d4be3228f11495081c8f2
1 parent 24ed276 commit 599dd7c

File tree

10 files changed

+865
-525
lines changed

10 files changed

+865
-525
lines changed

core/java/android/app/PendingIntent.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,13 @@ public static PendingIntent getActivities(Context context, int requestCode,
413413
*/
414414
public static PendingIntent getBroadcast(Context context, int requestCode,
415415
Intent intent, int flags) {
416+
return getBroadcastAsUser(context, requestCode, intent, flags,
417+
new UserHandle(UserHandle.myUserId()));
418+
}
419+
420+
/** @hide */
421+
public static PendingIntent getBroadcastAsUser(Context context, int requestCode,
422+
Intent intent, int flags, UserHandle userHandle) {
416423
String packageName = context.getPackageName();
417424
String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
418425
context.getContentResolver()) : null;
@@ -423,7 +430,7 @@ public static PendingIntent getBroadcast(Context context, int requestCode,
423430
ActivityManager.INTENT_SENDER_BROADCAST, packageName,
424431
null, null, requestCode, new Intent[] { intent },
425432
resolvedType != null ? new String[] { resolvedType } : null,
426-
flags, null, UserHandle.myUserId());
433+
flags, null, userHandle.getIdentifier());
427434
return target != null ? new PendingIntent(target) : null;
428435
} catch (RemoteException e) {
429436
}

core/java/android/app/admin/DevicePolicyManager.java

Lines changed: 124 additions & 52 deletions
Large diffs are not rendered by default.

core/java/android/app/admin/IDevicePolicyManager.aidl

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -25,76 +25,76 @@ import android.os.RemoteCallback;
2525
* {@hide}
2626
*/
2727
interface IDevicePolicyManager {
28-
void setPasswordQuality(in ComponentName who, int quality);
29-
int getPasswordQuality(in ComponentName who);
28+
void setPasswordQuality(in ComponentName who, int quality, int userHandle);
29+
int getPasswordQuality(in ComponentName who, int userHandle);
3030

31-
void setPasswordMinimumLength(in ComponentName who, int length);
32-
int getPasswordMinimumLength(in ComponentName who);
31+
void setPasswordMinimumLength(in ComponentName who, int length, int userHandle);
32+
int getPasswordMinimumLength(in ComponentName who, int userHandle);
3333

34-
void setPasswordMinimumUpperCase(in ComponentName who, int length);
35-
int getPasswordMinimumUpperCase(in ComponentName who);
34+
void setPasswordMinimumUpperCase(in ComponentName who, int length, int userHandle);
35+
int getPasswordMinimumUpperCase(in ComponentName who, int userHandle);
3636

37-
void setPasswordMinimumLowerCase(in ComponentName who, int length);
38-
int getPasswordMinimumLowerCase(in ComponentName who);
37+
void setPasswordMinimumLowerCase(in ComponentName who, int length, int userHandle);
38+
int getPasswordMinimumLowerCase(in ComponentName who, int userHandle);
3939

40-
void setPasswordMinimumLetters(in ComponentName who, int length);
41-
int getPasswordMinimumLetters(in ComponentName who);
40+
void setPasswordMinimumLetters(in ComponentName who, int length, int userHandle);
41+
int getPasswordMinimumLetters(in ComponentName who, int userHandle);
4242

43-
void setPasswordMinimumNumeric(in ComponentName who, int length);
44-
int getPasswordMinimumNumeric(in ComponentName who);
43+
void setPasswordMinimumNumeric(in ComponentName who, int length, int userHandle);
44+
int getPasswordMinimumNumeric(in ComponentName who, int userHandle);
4545

46-
void setPasswordMinimumSymbols(in ComponentName who, int length);
47-
int getPasswordMinimumSymbols(in ComponentName who);
46+
void setPasswordMinimumSymbols(in ComponentName who, int length, int userHandle);
47+
int getPasswordMinimumSymbols(in ComponentName who, int userHandle);
4848

49-
void setPasswordMinimumNonLetter(in ComponentName who, int length);
50-
int getPasswordMinimumNonLetter(in ComponentName who);
49+
void setPasswordMinimumNonLetter(in ComponentName who, int length, int userHandle);
50+
int getPasswordMinimumNonLetter(in ComponentName who, int userHandle);
5151

52-
void setPasswordHistoryLength(in ComponentName who, int length);
53-
int getPasswordHistoryLength(in ComponentName who);
52+
void setPasswordHistoryLength(in ComponentName who, int length, int userHandle);
53+
int getPasswordHistoryLength(in ComponentName who, int userHandle);
5454

55-
void setPasswordExpirationTimeout(in ComponentName who, long expiration);
56-
long getPasswordExpirationTimeout(in ComponentName who);
55+
void setPasswordExpirationTimeout(in ComponentName who, long expiration, int userHandle);
56+
long getPasswordExpirationTimeout(in ComponentName who, int userHandle);
5757

58-
long getPasswordExpiration(in ComponentName who);
58+
long getPasswordExpiration(in ComponentName who, int userHandle);
5959

60-
boolean isActivePasswordSufficient();
61-
int getCurrentFailedPasswordAttempts();
60+
boolean isActivePasswordSufficient(int userHandle);
61+
int getCurrentFailedPasswordAttempts(int userHandle);
6262

63-
void setMaximumFailedPasswordsForWipe(in ComponentName admin, int num);
64-
int getMaximumFailedPasswordsForWipe(in ComponentName admin);
63+
void setMaximumFailedPasswordsForWipe(in ComponentName admin, int num, int userHandle);
64+
int getMaximumFailedPasswordsForWipe(in ComponentName admin, int userHandle);
6565

66-
boolean resetPassword(String password, int flags);
66+
boolean resetPassword(String password, int flags, int userHandle);
6767

68-
void setMaximumTimeToLock(in ComponentName who, long timeMs);
69-
long getMaximumTimeToLock(in ComponentName who);
68+
void setMaximumTimeToLock(in ComponentName who, long timeMs, int userHandle);
69+
long getMaximumTimeToLock(in ComponentName who, int userHandle);
7070

7171
void lockNow();
7272

73-
void wipeData(int flags);
73+
void wipeData(int flags, int userHandle);
7474

75-
ComponentName setGlobalProxy(in ComponentName admin, String proxySpec, String exclusionList);
76-
ComponentName getGlobalProxyAdmin();
75+
ComponentName setGlobalProxy(in ComponentName admin, String proxySpec, String exclusionList, int userHandle);
76+
ComponentName getGlobalProxyAdmin(int userHandle);
7777

78-
int setStorageEncryption(in ComponentName who, boolean encrypt);
79-
boolean getStorageEncryption(in ComponentName who);
80-
int getStorageEncryptionStatus();
78+
int setStorageEncryption(in ComponentName who, boolean encrypt, int userHandle);
79+
boolean getStorageEncryption(in ComponentName who, int userHandle);
80+
int getStorageEncryptionStatus(int userHandle);
8181

82-
void setCameraDisabled(in ComponentName who, boolean disabled);
83-
boolean getCameraDisabled(in ComponentName who);
82+
void setCameraDisabled(in ComponentName who, boolean disabled, int userHandle);
83+
boolean getCameraDisabled(in ComponentName who, int userHandle);
8484

85-
void setKeyguardWidgetsDisabled(in ComponentName who, int which);
86-
int getKeyguardWidgetsDisabled(in ComponentName who);
85+
void setKeyguardWidgetsDisabled(in ComponentName who, int which, int userHandle);
86+
int getKeyguardWidgetsDisabled(in ComponentName who, int userHandle);
8787

88-
void setActiveAdmin(in ComponentName policyReceiver, boolean refreshing);
89-
boolean isAdminActive(in ComponentName policyReceiver);
90-
List<ComponentName> getActiveAdmins();
91-
boolean packageHasActiveAdmins(String packageName);
92-
void getRemoveWarning(in ComponentName policyReceiver, in RemoteCallback result);
93-
void removeActiveAdmin(in ComponentName policyReceiver);
94-
boolean hasGrantedPolicy(in ComponentName policyReceiver, int usesPolicy);
88+
void setActiveAdmin(in ComponentName policyReceiver, boolean refreshing, int userHandle);
89+
boolean isAdminActive(in ComponentName policyReceiver, int userHandle);
90+
List<ComponentName> getActiveAdmins(int userHandle);
91+
boolean packageHasActiveAdmins(String packageName, int userHandle);
92+
void getRemoveWarning(in ComponentName policyReceiver, in RemoteCallback result, int userHandle);
93+
void removeActiveAdmin(in ComponentName policyReceiver, int userHandle);
94+
boolean hasGrantedPolicy(in ComponentName policyReceiver, int usesPolicy, int userHandle);
9595

9696
void setActivePasswordState(int quality, int length, int letters, int uppercase, int lowercase,
97-
int numbers, int symbols, int nonletter);
98-
void reportFailedPasswordAttempt();
99-
void reportSuccessfulPasswordAttempt();
97+
int numbers, int symbols, int nonletter, int userHandle);
98+
void reportFailedPasswordAttempt(int userHandle);
99+
void reportSuccessfulPasswordAttempt(int userHandle);
100100
}

0 commit comments

Comments
 (0)