/** Called when location mode has changed. */
public abstract void onModeChanged(int mode, boolean restricted);
- private boolean isRestricted() {
- final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
+ public static boolean isRestricted(Context context) {
+ final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
return um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION);
}
+ public static boolean updateLocationMode(Context context, int oldMode, int newMode) {
+ Intent intent = new Intent(MODE_CHANGING_ACTION);
+ intent.putExtra(CURRENT_MODE_KEY, oldMode);
+ intent.putExtra(NEW_MODE_KEY, newMode);
+ context.sendBroadcast(intent, android.Manifest.permission.WRITE_SECURE_SETTINGS);
+ return Settings.Secure.putInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
+ newMode);
+ }
+
public void setLocationMode(int mode) {
- if (isRestricted()) {
+ Context context = getActivity();
+ if (isRestricted(context)) {
// Location toggling disabled by user restriction. Read the current location mode to
// update the location master switch.
if (Log.isLoggable(TAG, Log.INFO)) {
}
return;
}
- Intent intent = new Intent(MODE_CHANGING_ACTION);
- intent.putExtra(CURRENT_MODE_KEY, mCurrentMode);
- intent.putExtra(NEW_MODE_KEY, mode);
- getActivity().sendBroadcast(intent, android.Manifest.permission.WRITE_SECURE_SETTINGS);
- Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, mode);
+
+ updateLocationMode(context, mCurrentMode, mode);
refreshLocationMode();
}
if (Log.isLoggable(TAG, Log.INFO)) {
Log.i(TAG, "Location mode has been changed");
}
- onModeChanged(mode, isRestricted());
+ onModeChanged(mode, isRestricted(getActivity()));
}
}
}
Availability.DISABLED_DEPENDENT_APP,
Availability.DISABLED_UNSUPPORTED,
Availability.RESOURCE_CONTENTION,
- Availability.INTENT_ONLY,})
+ Availability.INTENT_ONLY,
+ Availability.DISABLED_FOR_USER,})
@Retention(RetentionPolicy.SOURCE)
public @interface Availability {
/**
int RESOURCE_CONTENTION = 3;
/**
- * The setting is disabled because corresponding app is disabled
+ * The setting is disabled because corresponding app is disabled.
*/
int DISABLED_DEPENDENT_APP = 4;
* This setting is supported on the device but cannot be changed inline.
*/
int INTENT_ONLY = 5;
+
+ /**
+ * The setting cannot be changed by the current user.
+ * ex: MobileNetworkTakeMeThereSetting should not be available to a secondary user.
+ */
+ int DISABLED_FOR_USER = 6;
}
@IntDef({SettingsSource.UNKNOWN, SettingsSource.SYSTEM, SettingsSource.SECURE,