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 = 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);
} }