Skip to content

Commit e1b62ed

Browse files
committed
Use new preferences for lock screen restrictions.
Change-Id: I31cac0027906574811f590dc36dc948f17a3782c
1 parent 42c698f commit e1b62ed

File tree

2 files changed

+84
-114
lines changed

2 files changed

+84
-114
lines changed

app/src/main/java/com/afwsamples/testdpc/policy/keyguard/LockScreenPolicyFragment.java

Lines changed: 14 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import com.afwsamples.testdpc.R;
3333
import com.afwsamples.testdpc.common.ProfileOrParentFragment;
3434
import com.afwsamples.testdpc.common.Util;
35+
import com.afwsamples.testdpc.common.preference.DpcPreferenceBase;
36+
import com.afwsamples.testdpc.common.preference.DpcPreferenceHelper;
3537

3638
import java.util.Arrays;
3739
import java.util.HashSet;
@@ -64,8 +66,6 @@ abstract static class Keys {
6466
static final String MAX_TIME_SCREEN_LOCK = "key_max_time_screen_lock";
6567
static final String MAX_TIME_SCREEN_LOCK_ALL = "key_max_time_screen_lock_aggregate";
6668

67-
static final String KEYGUARD_FEATURES_CATEGORY = "keyguard_features";
68-
6969
static final String KEYGUARD_DISABLE_FINGERPRINT = "keyguard_disable_fingerprint";
7070
static final String KEYGUARD_DISABLE_REMOTE_INPUT = "keyguard_disable_remote_input";
7171
static final String KEYGUARD_DISABLE_SECURE_CAMERA = "keyguard_disable_secure_camera";
@@ -82,38 +82,10 @@ abstract static class Keys {
8282
KEYGUARD_DISABLE_SECURE_NOTIFICATIONS,
8383
KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS,
8484
}));
85-
86-
static final Set<String> NOT_APPLICABLE_TO_PROFILE
87-
= new HashSet<>(Arrays.asList(new String[] {
88-
KEYGUARD_DISABLE_SECURE_CAMERA,
89-
KEYGUARD_DISABLE_SECURE_NOTIFICATIONS,
90-
}));
91-
92-
static final Set<String> DEVICE_OWNER_ONLY
93-
= new HashSet<>(Arrays.asList(new String[] {
94-
LOCK_SCREEN_MESSAGE
95-
}));
96-
97-
/**
98-
* Preferences that are allowed only in MNC+ if it is profile owner. This does not restrict
99-
* device owner.
100-
*/
101-
static final Set<String> PROFILE_OWNER_ONLY_MNC_PLUS
102-
= new HashSet<>(Arrays.asList(new String[] {
103-
KEYGUARD_FEATURES_CATEGORY
104-
}));
105-
106-
static final Set<String> NYC_PLUS
107-
= new HashSet<>(Arrays.asList(new String[] {
108-
LOCK_SCREEN_MESSAGE
109-
}));
11085
}
11186

11287
private static final Map<String, Integer> KEYGUARD_FEATURES = new ArrayMap<>();
11388
static {
114-
KEYGUARD_FEATURES.put(Keys.KEYGUARD_DISABLE_FINGERPRINT,
115-
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
116-
11789
KEYGUARD_FEATURES.put(Keys.KEYGUARD_DISABLE_SECURE_CAMERA,
11890
DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA);
11991

@@ -278,30 +250,18 @@ private void setupAll() {
278250
* Set an initial value. Updates the summary to match.
279251
*/
280252
private void setup(String key, Object adminSetting) {
281-
Preference pref = findPreference(key);
282-
if (!pref.isEnabled()) {
283-
return;
284-
}
285-
// We do not allow user to add trust agent config in pre-N devices in managed profile.
286-
if (!BuildCompat.isAtLeastN()) {
287-
Keys.NOT_APPLICABLE_TO_PROFILE.add(Keys.SET_TRUST_AGENT_CONFIG);
288-
}
253+
final Preference pref = findPreference(key);
254+
final DpcPreferenceBase dpcPref = (DpcPreferenceBase) pref;
289255

290-
// If the preference is not applicable, just hide it instead.
256+
// Disable preferences that don't apply to the parent profile
291257
if (Keys.NOT_APPLICABLE_TO_PARENT.contains(key) && isParentProfileInstance()) {
292-
Util.disablePreference(pref, R.string.not_for_parent_profile);
293-
return;
294-
}
295-
if (Keys.NOT_APPLICABLE_TO_PROFILE.contains(key) && isManagedProfileInstance()) {
296-
Util.disablePreference(pref, R.string.not_for_managed_profile);
258+
dpcPref.setCustomConstraint(R.string.not_for_parent_profile);
297259
return;
298260
}
299-
if (Keys.DEVICE_OWNER_ONLY.contains(key) && !isDeviceOwner()) {
300-
Util.disablePreference(pref, R.string.device_owner_only);
301-
return;
302-
}
303-
if (Keys.NYC_PLUS.contains(key) && Util.isBeforeN()) {
304-
Util.disablePreference(pref, R.string.requires_android_n);
261+
262+
// We do not allow user to add trust agent config in pre-N devices in managed profile.
263+
if (!BuildCompat.isAtLeastN() && key.equals(Keys.SET_TRUST_AGENT_CONFIG)) {
264+
dpcPref.setAdminConstraint(DpcPreferenceHelper.ADMIN_DEVICE_OWNER);
305265
return;
306266
}
307267

@@ -323,9 +283,10 @@ private void setup(String key, Object adminSetting) {
323283
}
324284

325285
private void disableIncompatibleManagementOptionsInCurrentProfile() {
326-
if (isProfileOwner() && Util.isBeforeM()) {
327-
for (String preference : Keys.PROFILE_OWNER_ONLY_MNC_PLUS) {
328-
Util.disablePreference(findPreference(preference), R.string.profile_owner_only);
286+
if (Util.isBeforeM()) {
287+
for (String preference : KEYGUARD_FEATURES.keySet()) {
288+
((DpcPreferenceBase) findPreference(preference))
289+
.setAdminConstraint(DpcPreferenceHelper.ADMIN_DEVICE_OWNER);
329290
}
330291
}
331292
}
Lines changed: 70 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
2-
<!--
1+
<?xml version="1.0" encoding="utf-8"?><!--
32
Copyright (C) 2016 The Android Open Source Project
43
54
Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,72 +14,82 @@
1514
limitations under the License.
1615
-->
1716

18-
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
19-
<PreferenceCategory
20-
android:title="@string/lock_screen_message">
21-
<EditTextPreference
22-
android:key="key_lock_screen_message"
23-
android:title="@string/lock_screen_message"
24-
android:dialogTitle="@string/lock_screen_message"
25-
android:inputType="text"
26-
android:defaultValue="" />
17+
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
18+
xmlns:testdpc="http://schemas.android.com/apk/res/com.afwsamples.testdpc">
19+
<PreferenceCategory android:title="@string/lock_screen_message">
20+
<com.afwsamples.testdpc.common.preference.DpcEditTextPreference
21+
android:defaultValue=""
22+
android:dialogTitle="@string/lock_screen_message"
23+
android:inputType="text"
24+
android:key="key_lock_screen_message"
25+
android:title="@string/lock_screen_message"
26+
testdpc:admin="deviceOwner"
27+
testdpc:minSdkVersion="N" />
2728
</PreferenceCategory>
2829

29-
<PreferenceCategory
30-
android:title="@string/maximum_lock_time_category" >
31-
<EditTextPreference
32-
android:key="key_max_time_screen_lock"
33-
android:title="@string/maximum_lock_time_seconds"
34-
android:dialogTitle="@string/maximum_lock_time_seconds"
35-
android:inputType="number"
36-
android:defaultValue="0" />
37-
<Preference
38-
android:key="key_max_time_screen_lock_aggregate"
39-
android:title="@string/maximum_lock_time_all_admins"
40-
android:selectable="false" />
30+
<PreferenceCategory android:title="@string/maximum_lock_time_category">
31+
<com.afwsamples.testdpc.common.preference.DpcEditTextPreference
32+
android:defaultValue="0"
33+
android:dialogTitle="@string/maximum_lock_time_seconds"
34+
android:inputType="number"
35+
android:key="key_max_time_screen_lock"
36+
android:title="@string/maximum_lock_time_seconds"
37+
testdpc:minSdkVersion="L" />
38+
<com.afwsamples.testdpc.common.preference.DpcPreference
39+
android:key="key_max_time_screen_lock_aggregate"
40+
android:selectable="false"
41+
android:title="@string/maximum_lock_time_all_admins"
42+
testdpc:minSdkVersion="L" />
4143
</PreferenceCategory>
4244

43-
<PreferenceCategory
44-
android:title="@string/maximum_password_fails" >
45-
<EditTextPreference
46-
android:key="key_max_fails_before_wipe"
47-
android:title="@string/maximum_password_fails"
48-
android:dialogTitle="@string/maximum_password_fails"
49-
android:inputType="number"
50-
android:defaultValue="0" />
51-
<Preference
52-
android:key="key_max_fails_before_wipe_aggregate"
53-
android:title="@string/maximum_password_fails_all_admins"
54-
android:selectable="false" />
45+
<PreferenceCategory android:title="@string/maximum_password_fails">
46+
<com.afwsamples.testdpc.common.preference.DpcEditTextPreference
47+
android:defaultValue="0"
48+
android:dialogTitle="@string/maximum_password_fails"
49+
android:inputType="number"
50+
android:key="key_max_fails_before_wipe"
51+
android:title="@string/maximum_password_fails"
52+
testdpc:minSdkVersion="L" />
53+
<com.afwsamples.testdpc.common.preference.DpcPreference
54+
android:key="key_max_fails_before_wipe_aggregate"
55+
android:selectable="false"
56+
android:title="@string/maximum_password_fails_all_admins"
57+
testdpc:minSdkVersion="L" />
5558
</PreferenceCategory>
5659

57-
<PreferenceCategory
58-
android:key="keyguard_features"
59-
android:title="@string/keyguard_features">
60-
<SwitchPreference
61-
android:key="keyguard_disable_secure_camera"
62-
android:title="@string/keyguard_disable_secure_camera"/>
63-
<SwitchPreference
64-
android:key="keyguard_disable_secure_notifications"
65-
android:title="@string/keyguard_disable_secure_notifications"/>
66-
<SwitchPreference
67-
android:key="keyguard_disable_unredacted_notifications"
68-
android:title="@string/keyguard_disable_unredacted_notifications"/>
69-
<SwitchPreference
70-
android:key="keyguard_disable_trust_agents"
71-
android:title="@string/keyguard_disable_trust_agents"/>
72-
<SwitchPreference
73-
android:key="keyguard_disable_fingerprint"
74-
android:title="@string/keyguard_disable_fingerprint"/>
75-
<SwitchPreference
76-
android:key="keyguard_disable_remote_input"
77-
android:title="@string/keyguard_disable_remote_input"/>
60+
<PreferenceCategory android:title="@string/keyguard_features">
61+
<com.afwsamples.testdpc.common.preference.DpcSwitchPreference
62+
android:key="keyguard_disable_secure_camera"
63+
android:title="@string/keyguard_disable_secure_camera"
64+
testdpc:admin="deviceOwner"
65+
testdpc:minSdkVersion="L" />
66+
<com.afwsamples.testdpc.common.preference.DpcSwitchPreference
67+
android:key="keyguard_disable_secure_notifications"
68+
android:title="@string/keyguard_disable_secure_notifications"
69+
testdpc:admin="deviceOwner"
70+
testdpc:minSdkVersion="L" />
71+
<com.afwsamples.testdpc.common.preference.DpcSwitchPreference
72+
android:key="keyguard_disable_unredacted_notifications"
73+
android:title="@string/keyguard_disable_unredacted_notifications"
74+
testdpc:minSdkVersion="L" />
75+
<com.afwsamples.testdpc.common.preference.DpcSwitchPreference
76+
android:key="keyguard_disable_trust_agents"
77+
android:title="@string/keyguard_disable_trust_agents"
78+
testdpc:minSdkVersion="L" />
79+
<com.afwsamples.testdpc.common.preference.DpcSwitchPreference
80+
android:key="keyguard_disable_fingerprint"
81+
android:title="@string/keyguard_disable_fingerprint"
82+
testdpc:minSdkVersion="L" />
83+
<com.afwsamples.testdpc.common.preference.DpcSwitchPreference
84+
android:key="keyguard_disable_remote_input"
85+
android:title="@string/keyguard_disable_remote_input"
86+
testdpc:minSdkVersion="L" />
7887
</PreferenceCategory>
7988

80-
<PreferenceCategory
81-
android:title="@string/trust_agent_features">
82-
<Preference
83-
android:key="key_set_trust_agent_config"
84-
android:title="@string/set_trust_agent_config"/>
89+
<PreferenceCategory android:title="@string/trust_agent_features">
90+
<com.afwsamples.testdpc.common.preference.DpcPreference
91+
android:key="key_set_trust_agent_config"
92+
android:title="@string/set_trust_agent_config"
93+
testdpc:minSdkVersion="L" />
8594
</PreferenceCategory>
8695
</PreferenceScreen>

0 commit comments

Comments
 (0)