Skip to content

Commit a4055cf

Browse files
jscott1989pfmaggi
authored andcommitted
No public description
PiperOrigin-RevId: 621166751
1 parent 352dc55 commit a4055cf

File tree

5 files changed

+70
-43
lines changed

5 files changed

+70
-43
lines changed

src/main/java/com/afwsamples/testdpc/policy/PolicyManagementFragment.java

Lines changed: 54 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
488488
}
489489

490490
private DevicePolicyManager mDevicePolicyManager;
491+
private DevicePolicyManager mParentDevicePolicyManager;
491492
private DevicePolicyManagerGateway mDevicePolicyManagerGateway;
492493
private PackageManager mPackageManager;
493494
private String mPackageName;
@@ -556,12 +557,17 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
556557
private Uri mImageUri;
557558
private Uri mVideoUri;
558559
private boolean mIsProfileOwner;
560+
private boolean mIsOrganizationOwnedProfileOwner;
559561

560562
@Override
561563
public void onCreate(Bundle savedInstanceState) {
562564
Context context = getActivity();
563565
mAdminComponentName = DeviceAdminReceiver.getComponentName(context);
564566
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
567+
mParentDevicePolicyManager =
568+
Util.SDK_INT >= VERSION_CODES.N && isManagedProfileOwner()
569+
? mDevicePolicyManager.getParentProfileInstance(mAdminComponentName)
570+
: null;
565571
mUserManager = context.getSystemService(UserManager.class);
566572
mPackageManager = context.getPackageManager();
567573
mDevicePolicyManagerGateway =
@@ -572,6 +578,11 @@ public void onCreate(Bundle savedInstanceState) {
572578
context.getSystemService(LocationManager.class),
573579
mAdminComponentName);
574580
mIsProfileOwner = mDevicePolicyManagerGateway.isProfileOwnerApp();
581+
mIsOrganizationOwnedProfileOwner =
582+
Util.SDK_INT >= VERSION_CODES.R
583+
&& mIsProfileOwner
584+
&& mDevicePolicyManagerGateway.isOrganizationOwnedDeviceWithManagedProfile();
585+
575586
mTelephonyManager = context.getSystemService(TelephonyManager.class);
576587
mAccountManager = AccountManager.get(context);
577588
mPackageName = context.getPackageName();
@@ -778,9 +789,14 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
778789
findPreference(CROSS_PROFILE_APPS).setOnPreferenceClickListener(this);
779790
findPreference(CROSS_PROFILE_APPS_ALLOWLIST).setOnPreferenceClickListener(this);
780791

792+
((DpcPreference) findPreference(SET_SCREEN_BRIGHTNESS_KEY))
793+
.setCustomConstraint(this::validateBrightnessControlConstraint);
781794
findPreference(SET_SCREEN_BRIGHTNESS_KEY).setOnPreferenceClickListener(this);
782795
mAutoBrightnessPreference = (DpcSwitchPreference) findPreference(AUTO_BRIGHTNESS_KEY);
796+
mAutoBrightnessPreference.setCustomConstraint(this::validateBrightnessControlConstraint);
783797
mAutoBrightnessPreference.setOnPreferenceChangeListener(this);
798+
((DpcPreference) findPreference(SET_SCREEN_OFF_TIMEOUT_KEY))
799+
.setCustomConstraint(this::validateBrightnessControlConstraint);
784800
findPreference(SET_SCREEN_OFF_TIMEOUT_KEY).setOnPreferenceClickListener(this);
785801

786802
findPreference(SET_TIME_KEY).setOnPreferenceClickListener(this);
@@ -1676,10 +1692,11 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
16761692
reloadEnableLogoutUi();
16771693
return true;
16781694
case AUTO_BRIGHTNESS_KEY:
1679-
mDevicePolicyManager.setSystemSetting(
1680-
mAdminComponentName,
1681-
Settings.System.SCREEN_BRIGHTNESS_MODE,
1682-
newValue.equals(true) ? "1" : "0");
1695+
(mIsOrganizationOwnedProfileOwner ? mParentDevicePolicyManager : mDevicePolicyManager)
1696+
.setSystemSetting(
1697+
mAdminComponentName,
1698+
Settings.System.SCREEN_BRIGHTNESS_MODE,
1699+
newValue.equals(true) ? "1" : "0");
16831700
reloadAutoBrightnessUi();
16841701
return true;
16851702
case SET_NEW_PASSWORD_WITH_COMPLEXITY:
@@ -1742,9 +1759,7 @@ private void setCameraDisabled(boolean disabled) {
17421759

17431760
@TargetApi(VERSION_CODES.R)
17441761
private void setCameraDisabledOnParent(boolean disabled) {
1745-
DevicePolicyManager parentDpm =
1746-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName);
1747-
parentDpm.setCameraDisabled(mAdminComponentName, disabled);
1762+
mParentDevicePolicyManager.setCameraDisabled(mAdminComponentName, disabled);
17481763
}
17491764

17501765
@TargetApi(VERSION_CODES.N)
@@ -1793,9 +1808,7 @@ private void setScreenCaptureDisabled(boolean disabled) {
17931808

17941809
@TargetApi(VERSION_CODES.R)
17951810
private void setScreenCaptureDisabledOnParent(boolean disabled) {
1796-
DevicePolicyManager parentDpm =
1797-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName);
1798-
parentDpm.setScreenCaptureDisabled(mAdminComponentName, disabled);
1811+
mParentDevicePolicyManager.setScreenCaptureDisabled(mAdminComponentName, disabled);
17991812
}
18001813

18011814
private boolean isDeviceOwner() {
@@ -2544,11 +2557,8 @@ private void loadAppFeedbackNotifications() {
25442557

25452558
private void loadAppStatus() {
25462559
final @StringRes List<Integer> appStatus = new ArrayList<>();
2547-
boolean isOrgOwned =
2548-
Util.SDK_INT >= VERSION_CODES.R
2549-
&& mDevicePolicyManagerGateway.isOrganizationOwnedDeviceWithManagedProfile();
25502560
if (mDevicePolicyManager.isProfileOwnerApp(mPackageName)) {
2551-
if (isOrgOwned) {
2561+
if (mIsOrganizationOwnedProfileOwner) {
25522562
appStatus.add(R.string.this_is_an_org_owned_profile_owner);
25532563
} else {
25542564
appStatus.add(R.string.this_is_a_profile_owner);
@@ -2630,9 +2640,8 @@ private void loadPasswordComplexity() {
26302640
String summary;
26312641
int complexity = PASSWORD_COMPLEXITY.get(mDevicePolicyManager.getPasswordComplexity());
26322642
if (isManagedProfileOwner() && Util.SDK_INT >= VERSION_CODES.R) {
2633-
DevicePolicyManager parentDpm =
2634-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName);
2635-
int parentComplexity = PASSWORD_COMPLEXITY.get(parentDpm.getPasswordComplexity());
2643+
int parentComplexity =
2644+
PASSWORD_COMPLEXITY.get(mParentDevicePolicyManager.getPasswordComplexity());
26362645
summary =
26372646
String.format(
26382647
getString(R.string.password_complexity_profile_summary),
@@ -2659,9 +2668,8 @@ private void loadRequiredPasswordComplexity() {
26592668
String summary;
26602669
int complexity = PASSWORD_COMPLEXITY.get(getRequiredComplexity(mDevicePolicyManager));
26612670
if (isManagedProfileOwner() && Util.SDK_INT >= VERSION_CODES.S) {
2662-
DevicePolicyManager parentDpm =
2663-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName);
2664-
int parentComplexity = PASSWORD_COMPLEXITY.get(getRequiredComplexity(parentDpm));
2671+
int parentComplexity =
2672+
PASSWORD_COMPLEXITY.get(getRequiredComplexity(mParentDevicePolicyManager));
26652673
summary =
26662674
String.format(
26672675
getString(R.string.password_complexity_profile_summary),
@@ -2687,8 +2695,7 @@ private void setRequiredPasswordComplexity(int complexity) {
26872695
// running older releases and obviates the need for a target sdk check here.
26882696
@TargetApi(VERSION_CODES.S)
26892697
private void setRequiredPasswordComplexityOnParent(int complexity) {
2690-
setRequiredPasswordComplexity(
2691-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName), complexity);
2698+
setRequiredPasswordComplexity(mParentDevicePolicyManager, complexity);
26922699
}
26932700

26942701
// NOTE: The setRequiredPasswordComplexity call is gated by a check in device_policy_header.xml,
@@ -2712,15 +2719,14 @@ private void loadPasswordCompliant() {
27122719
String summary;
27132720
boolean compliant = mDevicePolicyManager.isActivePasswordSufficient();
27142721
if (isManagedProfileOwner()) {
2715-
DevicePolicyManager parentDpm =
2716-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName);
2717-
boolean parentCompliant = parentDpm.isActivePasswordSufficient();
2722+
boolean parentCompliant = mParentDevicePolicyManager.isActivePasswordSufficient();
27182723
final String deviceCompliant;
27192724
if (Util.SDK_INT < VERSION_CODES.S) {
27202725
deviceCompliant = "N/A";
27212726
} else {
27222727
deviceCompliant =
2723-
Boolean.toString(parentDpm.isActivePasswordSufficientForDeviceRequirement());
2728+
Boolean.toString(
2729+
mParentDevicePolicyManager.isActivePasswordSufficientForDeviceRequirement());
27242730
}
27252731
summary =
27262732
String.format(
@@ -2812,9 +2818,7 @@ private void reloadCameraDisableUi() {
28122818

28132819
@TargetApi(VERSION_CODES.R)
28142820
private void reloadCameraDisableOnParentUi() {
2815-
DevicePolicyManager parentDpm =
2816-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName);
2817-
boolean isCameraDisabled = parentDpm.getCameraDisabled(mAdminComponentName);
2821+
boolean isCameraDisabled = mParentDevicePolicyManager.getCameraDisabled(mAdminComponentName);
28182822
mDisableCameraOnParentSwitchPreference.setChecked(isCameraDisabled);
28192823
}
28202824

@@ -2871,9 +2875,8 @@ private void reloadScreenCaptureDisableUi() {
28712875

28722876
@TargetApi(VERSION_CODES.R)
28732877
private void reloadScreenCaptureDisableOnParentUi() {
2874-
DevicePolicyManager parentDpm =
2875-
mDevicePolicyManager.getParentProfileInstance(mAdminComponentName);
2876-
boolean isScreenCaptureDisabled = parentDpm.getScreenCaptureDisabled(mAdminComponentName);
2878+
boolean isScreenCaptureDisabled =
2879+
mParentDevicePolicyManager.getScreenCaptureDisabled(mAdminComponentName);
28772880
mDisableScreenCaptureOnParentSwitchPreference.setChecked(isScreenCaptureDisabled);
28782881
}
28792882

@@ -3682,9 +3685,8 @@ private void showHideAppsOnParentPrompt(final boolean showHiddenApps) {
36823685
(dialog, which) -> {
36833686
String packageName = input.getText().toString();
36843687
try {
3685-
if (mDevicePolicyManager
3686-
.getParentProfileInstance(mAdminComponentName)
3687-
.setApplicationHidden(mAdminComponentName, packageName, !showHiddenApps)) {
3688+
if (mParentDevicePolicyManager.setApplicationHidden(
3689+
mAdminComponentName, packageName, !showHiddenApps)) {
36883690
showToast(successResId, packageName);
36893691
} else {
36903692
showToast(getString(failureResId, packageName), Toast.LENGTH_LONG);
@@ -4263,8 +4265,9 @@ private void showSetScreenBrightnessDialog() {
42634265
showToast(R.string.invalid_screen_brightness);
42644266
return;
42654267
}
4266-
mDevicePolicyManager.setSystemSetting(
4267-
mAdminComponentName, Settings.System.SCREEN_BRIGHTNESS, brightness);
4268+
(mIsOrganizationOwnedProfileOwner ? mParentDevicePolicyManager : mDevicePolicyManager)
4269+
.setSystemSetting(
4270+
mAdminComponentName, Settings.System.SCREEN_BRIGHTNESS, brightness);
42684271
})
42694272
.setNegativeButton(android.R.string.cancel, null)
42704273
.show();
@@ -4341,10 +4344,11 @@ private void showSetScreenOffTimeoutDialog() {
43414344
showToast(R.string.invalid_screen_off_timeout);
43424345
return;
43434346
}
4344-
mDevicePolicyManager.setSystemSetting(
4345-
mAdminComponentName,
4346-
Settings.System.SCREEN_OFF_TIMEOUT,
4347-
Integer.toString(screenTimeoutVaue * 1000));
4347+
(mIsOrganizationOwnedProfileOwner ? mParentDevicePolicyManager : mDevicePolicyManager)
4348+
.setSystemSetting(
4349+
mAdminComponentName,
4350+
Settings.System.SCREEN_OFF_TIMEOUT,
4351+
Integer.toString(screenTimeoutVaue * 1000));
43484352
})
43494353
.setNegativeButton(android.R.string.cancel, null)
43504354
.show();
@@ -4766,6 +4770,15 @@ && getActivity().getApplicationInfo().targetSdkVersion >= VERSION_CODES.O) {
47664770
return NO_CUSTOM_CONSTRAINT;
47674771
}
47684772

4773+
private int validateBrightnessControlConstraint() {
4774+
// Brightness control is always available to DO, and is enabled for COPE starting from
4775+
// Android V
4776+
if (mIsOrganizationOwnedProfileOwner && Util.SDK_INT < VERSION_CODES.VANILLA_ICE_CREAM) {
4777+
return R.string.requires_android_v;
4778+
}
4779+
return NO_CUSTOM_CONSTRAINT;
4780+
}
4781+
47694782
interface ManageLockTaskListCallback {
47704783
void onPositiveButtonClicked(String[] lockTaskArray);
47714784
}

src/main/java/com/afwsamples/testdpc/policy/UserRestriction.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ public UserRestriction(String key, int titleResId, String permission) {
253253
DISALLOW_CELLULAR_2G,
254254
DISALLOW_CONFIG_DEFAULT_APPS,
255255
DISALLOW_ULTRA_WIDEBAND_RADIO,
256+
DISALLOW_CONFIG_BRIGHTNESS,
257+
DISALLOW_CONFIG_SCREEN_TIMEOUT,
256258
};
257259

258260
/** Setting these user restrictions only have effect on primary users. */
@@ -364,6 +366,10 @@ public UserRestriction(String key, int titleResId, String permission) {
364366
DISALLOW_CELLULAR_2G, DISALLOW_CONFIG_DEFAULT_APPS, DISALLOW_ULTRA_WIDEBAND_RADIO,
365367
};
366368

369+
public static String[] VIC_PLUS_PARENT_RESTRICTIONS = {
370+
DISALLOW_CONFIG_BRIGHTNESS, DISALLOW_CONFIG_SCREEN_TIMEOUT,
371+
};
372+
367373
public static UserRestriction getRestriction(String restrictionKey) {
368374
return Arrays.stream(ALL_USER_RESTRICTIONS)
369375
.filter(r -> r.key.equals(restrictionKey))

src/main/java/com/afwsamples/testdpc/policy/UserRestrictionsParentDisplayFragment.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,15 @@ private void updateUserRestriction(String userRestriction) {
9898
private void constrainPreferences() {
9999
for (String restrictionKey : UserRestriction.PROFILE_OWNER_ORG_DEVICE_RESTRICTIONS) {
100100
DpcPreferenceBase pref = (DpcPreferenceBase) findPreference(restrictionKey);
101-
if (Arrays.stream(UserRestriction.TM_PLUS_RESTRICTIONS).anyMatch(restrictionKey::equals)) {
102-
pref.setMinSdkVersion(VERSION_CODES.TIRAMISU);
101+
if (Arrays.stream(UserRestriction.VIC_PLUS_PARENT_RESTRICTIONS)
102+
.anyMatch(restrictionKey::equals)) {
103+
pref.setMinSdkVersion(VERSION_CODES.VANILLA_ICE_CREAM);
103104
} else if (Arrays.stream(UserRestriction.UDC_PLUS_RESTRICTIONS)
104105
.anyMatch(restrictionKey::equals)) {
105106
pref.setMinSdkVersion(VERSION_CODES.UPSIDE_DOWN_CAKE);
107+
} else if (Arrays.stream(UserRestriction.TM_PLUS_RESTRICTIONS)
108+
.anyMatch(restrictionKey::equals)) {
109+
pref.setMinSdkVersion(VERSION_CODES.TIRAMISU);
106110
} else {
107111
pref.setMinSdkVersion(VERSION_CODES.R);
108112
}

src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
<!-- Reasons for disabling preferences -->
9696
<string name="requires_android_api_level">Requires API level
9797
<xliff:g id="api level">%d</xliff:g></string>
98+
<string name="requires_android_v">Requires API level 35</string>
9899
<string name="requires_preview_release">Requires the Android P preview release</string>
99100
<string name="requires">Requires\u0020</string>
100101
<string name="requires_delimiter">,\u0020</string>

src/main/res/xml/device_policy_header.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,17 @@
6161
<com.afwsamples.testdpc.common.preference.DpcPreference
6262
android:key="set_screen_brightness"
6363
android:title="@string/set_screen_brightness"
64+
testdpc:admin="deviceOwner|orgOwnedProfileOwner"
6465
testdpc:minSdkVersion="P" />
6566
<com.afwsamples.testdpc.common.preference.DpcSwitchPreference
6667
android:key="auto_brightness"
6768
android:title="@string/auto_brightness"
69+
testdpc:admin="deviceOwner|orgOwnedProfileOwner"
6870
testdpc:minSdkVersion="P" />
6971
<com.afwsamples.testdpc.common.preference.DpcPreference
7072
android:key="set_screen_off_timeout"
7173
android:title="@string/set_screen_off_timeout"
74+
testdpc:admin="deviceOwner|orgOwnedProfileOwner"
7275
testdpc:minSdkVersion="P" />
7376
<com.afwsamples.testdpc.common.preference.DpcPreference
7477
android:key="set_profile_name"

0 commit comments

Comments
 (0)