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.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);
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user