diff --git a/src/com/android/settings/location/LocationSettingsBase.java b/src/com/android/settings/location/LocationSettingsBase.java
index 69fbd5c..741d607 100644
--- a/src/com/android/settings/location/LocationSettingsBase.java
+++ b/src/com/android/settings/location/LocationSettingsBase.java
@@ -85,13 +85,23 @@
     /** 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)) {
@@ -104,11 +114,8 @@
             }
             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();
     }
 
@@ -120,7 +127,7 @@
             if (Log.isLoggable(TAG, Log.INFO)) {
                 Log.i(TAG, "Location mode has been changed");
             }
-            onModeChanged(mode, isRestricted());
+            onModeChanged(mode, isRestricted(getActivity()));
         }
     }
 }
diff --git a/src/com/android/settings/search/ResultPayload.java b/src/com/android/settings/search/ResultPayload.java
index 0d8c0ec..6108569 100644
--- a/src/com/android/settings/search/ResultPayload.java
+++ b/src/com/android/settings/search/ResultPayload.java
@@ -70,7 +70,8 @@
             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 {
         /**
@@ -96,7 +97,7 @@
         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;
 
@@ -104,6 +105,12 @@
          * 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,
