diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index eca3869..e44ee78 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -148,6 +148,12 @@
     public static final String PROPERTY_LOCATION_INDICATORS_ENABLED = "location_indicators_enabled";
 
     /**
+     * Whether to show location indicator settings in developer options.
+     */
+    public static final String PROPERTY_LOCATION_INDICATOR_SETTINGS_ENABLED =
+            "location_indicator_settings_enabled";
+
+    /**
      * Finds a matching activity for a preference's intent. If a matching
      * activity is not found, it will remove the preference.
      *
diff --git a/src/com/android/settings/location/LocationIndicatorsPreferenceController.java b/src/com/android/settings/location/LocationIndicatorsPreferenceController.java
index f7b7408..d39c280 100644
--- a/src/com/android/settings/location/LocationIndicatorsPreferenceController.java
+++ b/src/com/android/settings/location/LocationIndicatorsPreferenceController.java
@@ -45,6 +45,11 @@
 
     @Override
     public int getAvailabilityStatus() {
+        final boolean isEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
+                Utils.PROPERTY_LOCATION_INDICATOR_SETTINGS_ENABLED, false);
+        if (!isEnabled) {
+            return UNSUPPORTED_ON_DEVICE;
+        }
         // Location indicators feature is only available on devices that support location.
         return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION)
                 ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
diff --git a/tests/robotests/src/com/android/settings/location/LocationIndicatorsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/LocationIndicatorsPreferenceControllerTest.java
index e1182fd..912c853 100644
--- a/tests/robotests/src/com/android/settings/location/LocationIndicatorsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/LocationIndicatorsPreferenceControllerTest.java
@@ -75,6 +75,10 @@
      */
     @Test
     public void getAvailabilityStatus_locationSupported_shouldReturnAVAILABLE() {
+        // Enable the settings flags.
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY,
+                Utils.PROPERTY_LOCATION_INDICATOR_SETTINGS_ENABLED, Boolean.toString(true),
+                true);
         when(mPackageManager.hasSystemFeature(eq(PackageManager.FEATURE_LOCATION))).thenReturn(
                 true);
         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
@@ -86,12 +90,32 @@
      */
     @Test
     public void getAvailabilityStatus_locationNotSupported_shouldReturnUNSUPPORTED() {
+        // Enable the settings flags.
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY,
+                Utils.PROPERTY_LOCATION_INDICATOR_SETTINGS_ENABLED, Boolean.toString(true),
+                true);
         when(mPackageManager.hasSystemFeature(eq(PackageManager.FEATURE_LOCATION))).thenReturn(
                 false);
         assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
     }
 
     /**
+     * Verify the location indicator settings are not visible when location indicator settings
+     * are disabled on the device.
+     */
+    @Test
+    public void getAvailabilityStatus_flagDisabled_shouldReturnUNSUPPORTED() {
+        // Disable the settings flags.
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY,
+                Utils.PROPERTY_LOCATION_INDICATOR_SETTINGS_ENABLED, Boolean.toString(false),
+                false);
+        when(mPackageManager.hasSystemFeature(eq(PackageManager.FEATURE_LOCATION))).thenReturn(
+                true);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+    }
+
+    /**
      * Verify the location indicator preference is checked when the feature is enabled.
      */
     @Test
