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:
Alex Johnston
2020-01-21 12:10:50 +00:00
parent 8b15d86c5a
commit 1867db33c9

View File

@@ -67,21 +67,22 @@ public class LocationForWorkPreferenceController extends LocationBasePreferenceC
final RestrictedLockUtils.EnforcedAdmin admin =
mLocationEnabler.getShareLocationEnforcedAdmin(
Utils.getManagedProfile(mUserManager).getIdentifier());
final boolean isRestrictedByBase = mLocationEnabler.isManagedProfileRestrictedByBase();
if (!isRestrictedByBase && admin != null) {
if (admin != null) {
mPreference.setDisabledByAdmin(admin);
mPreference.setChecked(false);
} else {
final boolean enabled = mLocationEnabler.isEnabled(mode);
mPreference.setEnabled(enabled);
int summaryResId;
int summaryResId = R.string.switch_off_text;
if (!enabled) {
final boolean isRestrictedByBase =
mLocationEnabler.isManagedProfileRestrictedByBase();
if (isRestrictedByBase || !enabled) {
mPreference.setChecked(false);
summaryResId = enabled ? R.string.switch_off_text
: R.string.location_app_permission_summary_location_off;
} else {
mPreference.setChecked(!isRestrictedByBase);
summaryResId = (isRestrictedByBase ?
R.string.switch_off_text : R.string.switch_on_text);
mPreference.setChecked(true);
summaryResId = R.string.switch_on_text;
}
mPreference.setSummary(summaryResId);
}