Respect user restriction against toggling location sharing settings.

Change-Id: I1e629129fc9b3b224d4f4402b56d904df9edc43f
This commit is contained in:
Maggie Benthall
2013-02-22 15:10:35 -05:00
parent 1022e801ba
commit ea6260d887
2 changed files with 38 additions and 11 deletions

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.location.LocationManager; import android.location.LocationManager;
import android.os.UserManager;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
@@ -92,6 +93,15 @@ public class LocationSettings extends SettingsPreferenceFragment
mGps = (CheckBoxPreference) root.findPreference(KEY_LOCATION_GPS); mGps = (CheckBoxPreference) root.findPreference(KEY_LOCATION_GPS);
mAssistedGps = (CheckBoxPreference) root.findPreference(KEY_ASSISTED_GPS); mAssistedGps = (CheckBoxPreference) root.findPreference(KEY_ASSISTED_GPS);
// Only enable these controls if this user is allowed to change location
// sharing settings.
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
boolean isToggleAllowed = um.isLocationSharingToggleAllowed();
if (mLocationAccess != null) mLocationAccess.setEnabled(isToggleAllowed);
if (mNetwork != null) mNetwork.setEnabled(isToggleAllowed);
if (mGps != null) mGps.setEnabled(isToggleAllowed);
if (mAssistedGps != null) mAssistedGps.setEnabled(isToggleAllowed);
mLocationAccess.setOnPreferenceChangeListener(this); mLocationAccess.setOnPreferenceChangeListener(this);
return root; return root;
} }
@@ -119,15 +129,20 @@ public class LocationSettings extends SettingsPreferenceFragment
@Override @Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
final ContentResolver cr = getContentResolver(); final ContentResolver cr = getContentResolver();
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
if (preference == mNetwork) { if (preference == mNetwork) {
Settings.Secure.setLocationProviderEnabled(cr, if (um.isLocationSharingToggleAllowed()) {
LocationManager.NETWORK_PROVIDER, mNetwork.isChecked()); Settings.Secure.setLocationProviderEnabled(cr,
LocationManager.NETWORK_PROVIDER, mNetwork.isChecked());
}
} else if (preference == mGps) { } else if (preference == mGps) {
boolean enabled = mGps.isChecked(); boolean enabled = mGps.isChecked();
Settings.Secure.setLocationProviderEnabled(cr, if (um.isLocationSharingToggleAllowed()) {
LocationManager.GPS_PROVIDER, enabled); Settings.Secure.setLocationProviderEnabled(cr,
if (mAssistedGps != null) { LocationManager.GPS_PROVIDER, enabled);
mAssistedGps.setEnabled(enabled); if (mAssistedGps != null) {
mAssistedGps.setEnabled(enabled);
}
} }
} else if (preference == mAssistedGps) { } else if (preference == mAssistedGps) {
Settings.Global.putInt(cr, Settings.Global.ASSISTED_GPS_ENABLED, Settings.Global.putInt(cr, Settings.Global.ASSISTED_GPS_ENABLED,
@@ -170,6 +185,10 @@ public class LocationSettings extends SettingsPreferenceFragment
/** Enable or disable all providers when the master toggle is changed. */ /** Enable or disable all providers when the master toggle is changed. */
private void onToggleLocationAccess(boolean checked) { private void onToggleLocationAccess(boolean checked) {
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
if (! um.isLocationSharingToggleAllowed()) {
return;
}
final ContentResolver cr = getContentResolver(); final ContentResolver cr = getContentResolver();
Settings.Secure.setLocationProviderEnabled(cr, Settings.Secure.setLocationProviderEnabled(cr,
LocationManager.GPS_PROVIDER, checked); LocationManager.GPS_PROVIDER, checked);

View File

@@ -35,6 +35,7 @@ import android.os.IPowerManager;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
import android.widget.RemoteViews; import android.widget.RemoteViews;
@@ -538,11 +539,18 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
new AsyncTask<Void, Void, Boolean>() { new AsyncTask<Void, Void, Boolean>() {
@Override @Override
protected Boolean doInBackground(Void... args) { protected Boolean doInBackground(Void... args) {
Settings.Secure.setLocationProviderEnabled( final UserManager um =
resolver, (UserManager) context.getSystemService(Context.USER_SERVICE);
LocationManager.GPS_PROVIDER, if (um.isLocationSharingToggleAllowed()) {
desiredState); Settings.Secure.setLocationProviderEnabled(
return desiredState; resolver,
LocationManager.GPS_PROVIDER,
desiredState);
return desiredState;
}
return Settings.Secure.isLocationProviderEnabled(
resolver,
LocationManager.GPS_PROVIDER);
} }
@Override @Override