Respect user restriction against toggling location sharing settings.
Change-Id: I1e629129fc9b3b224d4f4402b56d904df9edc43f
This commit is contained in:
@@ -23,6 +23,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.location.LocationManager;
|
||||
import android.os.UserManager;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceScreen;
|
||||
@@ -92,6 +93,15 @@ public class LocationSettings extends SettingsPreferenceFragment
|
||||
mGps = (CheckBoxPreference) root.findPreference(KEY_LOCATION_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);
|
||||
return root;
|
||||
}
|
||||
@@ -119,16 +129,21 @@ public class LocationSettings extends SettingsPreferenceFragment
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
|
||||
final ContentResolver cr = getContentResolver();
|
||||
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
|
||||
if (preference == mNetwork) {
|
||||
if (um.isLocationSharingToggleAllowed()) {
|
||||
Settings.Secure.setLocationProviderEnabled(cr,
|
||||
LocationManager.NETWORK_PROVIDER, mNetwork.isChecked());
|
||||
}
|
||||
} else if (preference == mGps) {
|
||||
boolean enabled = mGps.isChecked();
|
||||
if (um.isLocationSharingToggleAllowed()) {
|
||||
Settings.Secure.setLocationProviderEnabled(cr,
|
||||
LocationManager.GPS_PROVIDER, enabled);
|
||||
if (mAssistedGps != null) {
|
||||
mAssistedGps.setEnabled(enabled);
|
||||
}
|
||||
}
|
||||
} else if (preference == mAssistedGps) {
|
||||
Settings.Global.putInt(cr, Settings.Global.ASSISTED_GPS_ENABLED,
|
||||
mAssistedGps.isChecked() ? 1 : 0);
|
||||
@@ -170,6 +185,10 @@ public class LocationSettings extends SettingsPreferenceFragment
|
||||
|
||||
/** Enable or disable all providers when the master toggle is changed. */
|
||||
private void onToggleLocationAccess(boolean checked) {
|
||||
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
|
||||
if (! um.isLocationSharingToggleAllowed()) {
|
||||
return;
|
||||
}
|
||||
final ContentResolver cr = getContentResolver();
|
||||
Settings.Secure.setLocationProviderEnabled(cr,
|
||||
LocationManager.GPS_PROVIDER, checked);
|
||||
|
@@ -35,6 +35,7 @@ import android.os.IPowerManager;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.widget.RemoteViews;
|
||||
@@ -538,12 +539,19 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
|
||||
new AsyncTask<Void, Void, Boolean>() {
|
||||
@Override
|
||||
protected Boolean doInBackground(Void... args) {
|
||||
final UserManager um =
|
||||
(UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||
if (um.isLocationSharingToggleAllowed()) {
|
||||
Settings.Secure.setLocationProviderEnabled(
|
||||
resolver,
|
||||
LocationManager.GPS_PROVIDER,
|
||||
desiredState);
|
||||
return desiredState;
|
||||
}
|
||||
return Settings.Secure.isLocationProviderEnabled(
|
||||
resolver,
|
||||
LocationManager.GPS_PROVIDER);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result) {
|
||||
|
Reference in New Issue
Block a user