Prevent location for the work profile from being enabled
* Previously the user could still enable location for the work profile even after enabling DISALLOW_CONFIG_LOCATION. This was because the LocationForWorkPreferenceController checked whether the base restriction was set and whether the restriction was enforced by the admin in the same condition. * This was fixed by giving the admin precedence and moving the check for the base restriction to only be checked if the admin has not enforced the DISALLOW_CONFIG_LOCATION or DISALLOW_SHARING_LOCATION restriction. Bug: 147758996 Test: Manual testing with Settings and TestDPC atest com.android.settings.location.LocationForWorkPreferenceControllerTest Change-Id: Ide341f2dab4f59f26ffa0c929ba412d61b6ebf1a
This commit is contained in:
@@ -67,21 +67,22 @@ public class LocationForWorkPreferenceController extends LocationBasePreferenceC
|
|||||||
final RestrictedLockUtils.EnforcedAdmin admin =
|
final RestrictedLockUtils.EnforcedAdmin admin =
|
||||||
mLocationEnabler.getShareLocationEnforcedAdmin(
|
mLocationEnabler.getShareLocationEnforcedAdmin(
|
||||||
Utils.getManagedProfile(mUserManager).getIdentifier());
|
Utils.getManagedProfile(mUserManager).getIdentifier());
|
||||||
final boolean isRestrictedByBase = mLocationEnabler.isManagedProfileRestrictedByBase();
|
if (admin != null) {
|
||||||
if (!isRestrictedByBase && admin != null) {
|
|
||||||
mPreference.setDisabledByAdmin(admin);
|
mPreference.setDisabledByAdmin(admin);
|
||||||
mPreference.setChecked(false);
|
|
||||||
} else {
|
} else {
|
||||||
final boolean enabled = mLocationEnabler.isEnabled(mode);
|
final boolean enabled = mLocationEnabler.isEnabled(mode);
|
||||||
mPreference.setEnabled(enabled);
|
mPreference.setEnabled(enabled);
|
||||||
|
int summaryResId;
|
||||||
|
|
||||||
int summaryResId = R.string.switch_off_text;
|
final boolean isRestrictedByBase =
|
||||||
if (!enabled) {
|
mLocationEnabler.isManagedProfileRestrictedByBase();
|
||||||
|
if (isRestrictedByBase || !enabled) {
|
||||||
mPreference.setChecked(false);
|
mPreference.setChecked(false);
|
||||||
|
summaryResId = enabled ? R.string.switch_off_text
|
||||||
|
: R.string.location_app_permission_summary_location_off;
|
||||||
} else {
|
} else {
|
||||||
mPreference.setChecked(!isRestrictedByBase);
|
mPreference.setChecked(true);
|
||||||
summaryResId = (isRestrictedByBase ?
|
summaryResId = R.string.switch_on_text;
|
||||||
R.string.switch_off_text : R.string.switch_on_text);
|
|
||||||
}
|
}
|
||||||
mPreference.setSummary(summaryResId);
|
mPreference.setSummary(summaryResId);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user