Skip to content

Commit 1ed9fa1

Browse files
Jim MillerAndroid (Google) Code Review
authored andcommitted
Merge "Make DPM API for disabling keyguard widgets more generic" into jb-mr1-dev
2 parents 059aedf + 48b9b0d commit 1ed9fa1

File tree

9 files changed

+76
-56
lines changed

9 files changed

+76
-56
lines changed

api/current.txt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4208,7 +4208,7 @@ package android.app.admin {
42084208
field public static final android.os.Parcelable.Creator CREATOR;
42094209
field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7
42104210
field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8
4211-
field public static final int USES_POLICY_DISABLE_KEYGUARD_WIDGETS = 9; // 0x9
4211+
field public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; // 0x9
42124212
field public static final int USES_POLICY_EXPIRE_PASSWORD = 6; // 0x6
42134213
field public static final int USES_POLICY_FORCE_LOCK = 3; // 0x3
42144214
field public static final int USES_POLICY_LIMIT_PASSWORD = 0; // 0x0
@@ -4244,7 +4244,7 @@ package android.app.admin {
42444244
method public java.util.List<android.content.ComponentName> getActiveAdmins();
42454245
method public boolean getCameraDisabled(android.content.ComponentName);
42464246
method public int getCurrentFailedPasswordAttempts();
4247-
method public int getKeyguardWidgetsDisabled(android.content.ComponentName);
4247+
method public int getKeyguardDisabledFeatures(android.content.ComponentName);
42484248
method public int getMaximumFailedPasswordsForWipe(android.content.ComponentName);
42494249
method public long getMaximumTimeToLock(android.content.ComponentName);
42504250
method public long getPasswordExpiration(android.content.ComponentName);
@@ -4268,7 +4268,7 @@ package android.app.admin {
42684268
method public void removeActiveAdmin(android.content.ComponentName);
42694269
method public boolean resetPassword(java.lang.String, int);
42704270
method public void setCameraDisabled(android.content.ComponentName, boolean);
4271-
method public void setKeyguardWidgetsDisabled(android.content.ComponentName, int);
4271+
method public void setKeyguardDisabledFeatures(android.content.ComponentName, int);
42724272
method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int);
42734273
method public void setMaximumTimeToLock(android.content.ComponentName, long);
42744274
method public void setPasswordExpirationTimeout(android.content.ComponentName, long);
@@ -4292,8 +4292,10 @@ package android.app.admin {
42924292
field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0
42934293
field public static final java.lang.String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION";
42944294
field public static final java.lang.String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN";
4295-
field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 2147483647; // 0x7fffffff
4296-
field public static final int KEYGUARD_DISABLE_WIDGETS_NONE = 0; // 0x0
4295+
field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
4296+
field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
4297+
field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
4298+
field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1
42974299
field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000
42984300
field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000
42994301
field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000

core/java/android/app/admin/DeviceAdminInfo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public final class DeviceAdminInfo implements Parcelable {
144144
* <p>To control this policy, the device admin must have a "disable-keyguard-widgets"
145145
* tag in the "uses-policies" section of its meta-data.
146146
*/
147-
public static final int USES_POLICY_DISABLE_KEYGUARD_WIDGETS = 9;
147+
public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9;
148148

149149
/** @hide */
150150
public static class PolicyInfo {
@@ -194,9 +194,9 @@ public PolicyInfo(int identIn, String tagIn, int labelIn, int descriptionIn) {
194194
com.android.internal.R.string.policylab_disableCamera,
195195
com.android.internal.R.string.policydesc_disableCamera));
196196
sPoliciesDisplayOrder.add(new PolicyInfo(
197-
USES_POLICY_DISABLE_KEYGUARD_WIDGETS, "disable-keyguard-widgets",
198-
com.android.internal.R.string.policylab_disableKeyguardWidgets,
199-
com.android.internal.R.string.policydesc_disableKeyguardWidgets));
197+
USES_POLICY_DISABLE_KEYGUARD_FEATURES, "disable-keyguard-features",
198+
com.android.internal.R.string.policylab_disableKeyguardFeatures,
199+
com.android.internal.R.string.policydesc_disableKeyguardFeatures));
200200

201201
for (int i=0; i<sPoliciesDisplayOrder.size(); i++) {
202202
PolicyInfo pi = sPoliciesDisplayOrder.get(i);

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

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,12 +1215,22 @@ public ComponentName getGlobalProxyAdmin() {
12151215
/**
12161216
* Widgets are enabled in keyguard
12171217
*/
1218-
public static final int KEYGUARD_DISABLE_WIDGETS_NONE = 0;
1218+
public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0;
12191219

12201220
/**
12211221
* Disable all keyguard widgets
12221222
*/
1223-
public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 0x7fffffff;
1223+
public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1 << 0;
1224+
1225+
/**
1226+
* Disable the camera on secure keyguard screens (e.g. PIN/Pattern/Password)
1227+
*/
1228+
public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 1 << 1;
1229+
1230+
/**
1231+
* Disable all current and future keyguard customizations
1232+
*/
1233+
public static final int KEYGUARD_DISABLE_FEATURES_ALL = 0x7fffffff;
12241234

12251235
/**
12261236
* Called by an application that is administering the device to
@@ -1362,48 +1372,48 @@ public boolean getCameraDisabled(ComponentName admin, int userHandle) {
13621372
}
13631373

13641374
/**
1365-
* Called by an application that is administering the device to disable adding widgets to
1366-
* keyguard. After setting this, keyguard widgets will be disabled according to the state
1367-
* provided.
1375+
* Called by an application that is administering the device to disable keyguard customizations,
1376+
* such as widgets. After setting this, keyguard features will be disabled according to the
1377+
* provided feature list.
13681378
*
13691379
* <p>The calling device admin must have requested
1370-
* {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_WIDGETS} to be able to call
1380+
* {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_FEATURES} to be able to call
13711381
* this method; if it has not, a security exception will be thrown.
13721382
*
13731383
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
13741384
* @param which {@link DevicePolicyManager#KEYGUARD_DISABLE_WIDGETS_ALL} or
1375-
* {@link DevicePolicyManager#KEYGUARD_DISABLE_WIDGETS_NONE} (the default).
1385+
* {@link DevicePolicyManager#KEYGUARD_DISABLE_FEATURES_NONE} (the default).
13761386
*/
1377-
public void setKeyguardWidgetsDisabled(ComponentName admin, int which) {
1387+
public void setKeyguardDisabledFeatures(ComponentName admin, int which) {
13781388
if (mService != null) {
13791389
try {
1380-
mService.setKeyguardWidgetsDisabled(admin, which, UserHandle.myUserId());
1390+
mService.setKeyguardDisabledFeatures(admin, which, UserHandle.myUserId());
13811391
} catch (RemoteException e) {
13821392
Log.w(TAG, "Failed talking with device policy service", e);
13831393
}
13841394
}
13851395
}
13861396

13871397
/**
1388-
* Determine whether or not widgets have been disabled in keyguard either by the current
1398+
* Determine whether or not features have been disabled in keyguard either by the current
13891399
* admin, if specified, or all admins.
13901400
* @param admin The name of the admin component to check, or null to check if any admins
1391-
* have disabled widgets in keyguard.
1401+
* have disabled features in keyguard.
13921402
*/
1393-
public int getKeyguardWidgetsDisabled(ComponentName admin) {
1394-
return getKeyguardWidgetsDisabled(admin, UserHandle.myUserId());
1403+
public int getKeyguardDisabledFeatures(ComponentName admin) {
1404+
return getKeyguardDisabledFeatures(admin, UserHandle.myUserId());
13951405
}
13961406

13971407
/** @hide per-user version */
1398-
public int getKeyguardWidgetsDisabled(ComponentName admin, int userHandle) {
1408+
public int getKeyguardDisabledFeatures(ComponentName admin, int userHandle) {
13991409
if (mService != null) {
14001410
try {
1401-
return mService.getKeyguardWidgetsDisabled(admin, userHandle);
1411+
return mService.getKeyguardDisabledFeatures(admin, userHandle);
14021412
} catch (RemoteException e) {
14031413
Log.w(TAG, "Failed talking with device policy service", e);
14041414
}
14051415
}
1406-
return KEYGUARD_DISABLE_WIDGETS_NONE;
1416+
return KEYGUARD_DISABLE_FEATURES_NONE;
14071417
}
14081418

14091419
/**

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ interface IDevicePolicyManager {
8282
void setCameraDisabled(in ComponentName who, boolean disabled, int userHandle);
8383
boolean getCameraDisabled(in ComponentName who, int userHandle);
8484

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

8888
void setActiveAdmin(in ComponentName policyReceiver, boolean refreshing, int userHandle);
8989
boolean isAdminActive(in ComponentName policyReceiver, int userHandle);

core/res/res/values/strings.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -878,7 +878,7 @@
878878
<!-- [CHAR LIMIT=NONE] Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
879879
<string name="permdesc_freezeScreen">Allows the application to temporarily freeze
880880
the screen for a full-screen transition.</string>
881-
881+
882882
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
883883
<string name="permlab_injectEvents">press keys and control buttons</string>
884884
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -1810,9 +1810,9 @@
18101810
<!-- Description of policy access to disable all device cameras [CHAR LIMIT=110]-->
18111811
<string name="policydesc_disableCamera">Prevent use of all device cameras.</string>
18121812
<!-- Title of policy access to disable all device cameras [CHAR LIMIT=30]-->
1813-
<string name="policylab_disableKeyguardWidgets">Disable widgets on keyguard</string>
1813+
<string name="policylab_disableKeyguardFeatures">Disable features in keyguard</string>
18141814
<!-- Description of policy access to disable all device cameras [CHAR LIMIT=110]-->
1815-
<string name="policydesc_disableKeyguardWidgets">Prevent use of some or all widgets on keyguard.</string>
1815+
<string name="policydesc_disableKeyguardFeatures">Prevent use of some features in keyguard.</string>
18161816

18171817
<!-- The order of these is important, don't reorder without changing Contacts.java --> <skip />
18181818
<!-- Phone number types from android.provider.Contacts. This could be used when adding a new phone number for a contact, for example. -->

core/res/res/values/symbols.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@
632632
<java-symbol type="string" name="policydesc_setGlobalProxy" />
633633
<java-symbol type="string" name="policydesc_watchLogin" />
634634
<java-symbol type="string" name="policydesc_wipeData" />
635-
<java-symbol type="string" name="policydesc_disableKeyguardWidgets" />
635+
<java-symbol type="string" name="policydesc_disableKeyguardFeatures" />
636636
<java-symbol type="string" name="policylab_disableCamera" />
637637
<java-symbol type="string" name="policylab_encryptedStorage" />
638638
<java-symbol type="string" name="policylab_expirePassword" />
@@ -642,7 +642,7 @@
642642
<java-symbol type="string" name="policylab_setGlobalProxy" />
643643
<java-symbol type="string" name="policylab_watchLogin" />
644644
<java-symbol type="string" name="policylab_wipeData" />
645-
<java-symbol type="string" name="policylab_disableKeyguardWidgets" />
645+
<java-symbol type="string" name="policylab_disableKeyguardFeatures" />
646646
<java-symbol type="string" name="postalTypeCustom" />
647647
<java-symbol type="string" name="postalTypeHome" />
648648
<java-symbol type="string" name="postalTypeOther" />

policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -684,10 +684,13 @@ private void addWidget(int appId) {
684684
private void maybePopulateWidgets() {
685685
DevicePolicyManager dpm =
686686
(DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
687-
if (dpm != null && dpm.getKeyguardWidgetsDisabled(null, mLockPatternUtils.getCurrentUser())
688-
!= DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_NONE) {
689-
Log.v(TAG, "Keyguard widgets disabled because of device policy admin");
690-
return;
687+
if (dpm != null) {
688+
final int currentUser = mLockPatternUtils.getCurrentUser();
689+
final int disabledFeatures = dpm.getKeyguardDisabledFeatures(null, currentUser);
690+
if ((disabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL) != 0) {
691+
Log.v(TAG, "Keyguard widgets disabled because of device policy admin");
692+
return;
693+
}
691694
}
692695
inflateAndAddUserSelectorWidgetIfNecessary();
693696

policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import android.animation.ObjectAnimator;
1919
import android.app.ActivityManagerNative;
2020
import android.app.SearchManager;
21+
import android.app.admin.DevicePolicyManager;
2122
import android.content.ActivityNotFoundException;
2223
import android.content.ComponentName;
2324
import android.content.Context;
@@ -150,24 +151,28 @@ public boolean isTargetPresent(int resId) {
150151

151152
private void updateTargets() {
152153
int currentUserHandle = mLockPatternUtils.getCurrentUser();
153-
boolean disabledByAdmin = mLockPatternUtils.getDevicePolicyManager()
154-
.getCameraDisabled(null, currentUserHandle);
154+
DevicePolicyManager dpm = mLockPatternUtils.getDevicePolicyManager();
155+
int disabledFeatures = dpm.getKeyguardDisabledFeatures(null, currentUserHandle);
156+
boolean secureCameraDisabled = mLockPatternUtils.isSecure()
157+
&& (disabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0;
158+
boolean cameraDisabledByAdmin = dpm.getCameraDisabled(null, currentUserHandle)
159+
|| secureCameraDisabled;
155160
final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(getContext());
156161
boolean disabledBySimState = monitor.isSimLocked();
157162
boolean cameraTargetPresent =
158163
isTargetPresent(com.android.internal.R.drawable.ic_lockscreen_camera);
159164
boolean searchTargetPresent =
160165
isTargetPresent(com.android.internal.R.drawable.ic_action_assist_generic);
161166

162-
if (disabledByAdmin) {
167+
if (cameraDisabledByAdmin) {
163168
Log.v(TAG, "Camera disabled by Device Policy");
164169
} else if (disabledBySimState) {
165170
Log.v(TAG, "Camera disabled by Sim State");
166171
}
167172
boolean searchActionAvailable =
168173
((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
169174
.getAssistIntent(mContext, UserHandle.USER_CURRENT) != null;
170-
mCameraDisabled = disabledByAdmin || disabledBySimState || !cameraTargetPresent;
175+
mCameraDisabled = cameraDisabledByAdmin || disabledBySimState || !cameraTargetPresent;
171176
mSearchDisabled = disabledBySimState || !searchActionAvailable || !searchTargetPresent;
172177
updateResources();
173178
}

services/java/com/android/server/DevicePolicyManagerService.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,8 @@ static class ActiveAdmin {
212212
static final long DEF_PASSWORD_EXPIRATION_DATE = 0;
213213
long passwordExpirationDate = DEF_PASSWORD_EXPIRATION_DATE;
214214

215-
static final int DEF_KEYGUARD_WIDGET_DISABLED = 0; // none
216-
int disableKeyguardWidgets = DEF_KEYGUARD_WIDGET_DISABLED;
215+
static final int DEF_KEYGUARD_FEATURES_DISABLED = 0; // none
216+
int disabledKeyguardFeatures = DEF_KEYGUARD_FEATURES_DISABLED;
217217

218218
boolean encryptionRequested = false;
219219
boolean disableCamera = false;
@@ -328,10 +328,10 @@ void writeToXml(XmlSerializer out)
328328
out.attribute(null, "value", Boolean.toString(disableCamera));
329329
out.endTag(null, "disable-camera");
330330
}
331-
if (disableKeyguardWidgets != DEF_KEYGUARD_WIDGET_DISABLED) {
332-
out.startTag(null, "disable-keyguard-widgets");
333-
out.attribute(null, "value", Integer.toString(disableKeyguardWidgets));
334-
out.endTag(null, "disable-keyguard-widgets");
331+
if (disabledKeyguardFeatures != DEF_KEYGUARD_FEATURES_DISABLED) {
332+
out.startTag(null, "disable-keyguard-features");
333+
out.attribute(null, "value", Integer.toString(disabledKeyguardFeatures));
334+
out.endTag(null, "disable-keyguard-features");
335335
}
336336
}
337337

@@ -2300,43 +2300,43 @@ public boolean getCameraDisabled(ComponentName who, int userHandle) {
23002300
}
23012301

23022302
/**
2303-
* Selectively disable keyguard widgets.
2303+
* Selectively disable keyguard features.
23042304
*/
2305-
public void setKeyguardWidgetsDisabled(ComponentName who, int which, int userHandle) {
2305+
public void setKeyguardDisabledFeatures(ComponentName who, int which, int userHandle) {
23062306
enforceCrossUserPermission(userHandle);
23072307
synchronized (this) {
23082308
if (who == null) {
23092309
throw new NullPointerException("ComponentName is null");
23102310
}
23112311
ActiveAdmin ap = getActiveAdminForCallerLocked(who,
2312-
DeviceAdminInfo.USES_POLICY_DISABLE_KEYGUARD_WIDGETS);
2313-
if ((ap.disableKeyguardWidgets & which) != which) {
2314-
ap.disableKeyguardWidgets |= which;
2312+
DeviceAdminInfo.USES_POLICY_DISABLE_KEYGUARD_FEATURES);
2313+
if (ap.disabledKeyguardFeatures != which) {
2314+
ap.disabledKeyguardFeatures = which;
23152315
saveSettingsLocked(userHandle);
23162316
}
23172317
syncDeviceCapabilitiesLocked(getUserData(userHandle));
23182318
}
23192319
}
23202320

23212321
/**
2322-
* Gets the disabled state for widgets in keyguard for the given admin,
2322+
* Gets the disabled state for features in keyguard for the given admin,
23232323
* or the aggregate of all active admins if who is null.
23242324
*/
2325-
public int getKeyguardWidgetsDisabled(ComponentName who, int userHandle) {
2325+
public int getKeyguardDisabledFeatures(ComponentName who, int userHandle) {
23262326
enforceCrossUserPermission(userHandle);
23272327
synchronized (this) {
23282328
if (who != null) {
23292329
ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
2330-
return (admin != null) ? admin.disableKeyguardWidgets : 0;
2330+
return (admin != null) ? admin.disabledKeyguardFeatures : 0;
23312331
}
23322332

2333-
// Determine whether or not keyguard widgets are disabled for any active admins.
2333+
// Determine which keyguard features are disabled for any active admins.
23342334
DevicePolicyData policy = getUserData(userHandle);
23352335
final int N = policy.mAdminList.size();
23362336
int which = 0;
23372337
for (int i = 0; i < N; i++) {
23382338
ActiveAdmin admin = policy.mAdminList.get(i);
2339-
which |= admin.disableKeyguardWidgets;
2339+
which |= admin.disabledKeyguardFeatures;
23402340
}
23412341
return which;
23422342
}

0 commit comments

Comments
 (0)