diff --git a/src/com/android/car/settings/common/PreferenceController.java b/src/com/android/car/settings/common/PreferenceController.java
index 5dfe4ee..4aa8fcf 100644
--- a/src/com/android/car/settings/common/PreferenceController.java
+++ b/src/com/android/car/settings/common/PreferenceController.java
@@ -94,7 +94,8 @@
      * @see #getAvailabilityStatus()
      */
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({AVAILABLE, CONDITIONALLY_UNAVAILABLE, UNSUPPORTED_ON_DEVICE, DISABLED_FOR_USER})
+    @IntDef({AVAILABLE, CONDITIONALLY_UNAVAILABLE, UNSUPPORTED_ON_DEVICE, DISABLED_FOR_USER,
+        AVAILABLE_FOR_VIEWING})
     public @interface AvailabilityStatus {
     }
 
@@ -120,6 +121,11 @@
     public static final int DISABLED_FOR_USER = 3;
 
     /**
+     * The setting cannot be changed.
+     */
+    public static final int AVAILABLE_FOR_VIEWING = 4;
+
+    /**
      * Indicates whether all Preferences are configured to ignore UX Restrictions Event.
      */
     private final boolean mAlwaysIgnoreUxRestrictions;
@@ -236,9 +242,10 @@
         if (!mIsCreated) {
             return;
         }
-        if (getAvailabilityStatus() == AVAILABLE) {
+
+        if (isAvailable()) {
             mPreference.setVisible(true);
-            mPreference.setEnabled(true);
+            mPreference.setEnabled(getAvailabilityStatus() != AVAILABLE_FOR_VIEWING);
             updateState(mPreference);
             onApplyUxRestrictions(mUxRestrictions);
         } else {
@@ -246,6 +253,11 @@
         }
     }
 
+    private boolean isAvailable() {
+        int availabilityStatus = getAvailabilityStatus();
+        return availabilityStatus == AVAILABLE || availabilityStatus == AVAILABLE_FOR_VIEWING;
+    }
+
     // Controller lifecycle ========================================================================
 
     /**
@@ -346,8 +358,8 @@
 
     /**
      * Returns the {@link AvailabilityStatus} for the setting. This status is used to determine
-     * if the setting should be shown or hidden. Defaults to {@link #AVAILABLE}. This will be
-     * called before the controller lifecycle begins and on refresh events.
+     * if the setting should be shown, hidden, or disabled. Defaults to {@link #AVAILABLE}. This
+     * will be called before the controller lifecycle begins and on refresh events.
      */
     @AvailabilityStatus
     protected int getAvailabilityStatus() {
diff --git a/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java b/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java
index 05f9c60..e26db97 100644
--- a/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java
+++ b/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java
@@ -48,7 +48,7 @@
         if (!getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
             return UNSUPPORTED_ON_DEVICE;
         }
-        return super.getAvailabilityStatus();
+        return AVAILABLE_FOR_VIEWING;
     }
 
     @Override
diff --git a/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java b/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
index 0d24dec..31aef17 100644
--- a/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
+++ b/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
@@ -44,4 +44,9 @@
         preference.setSummary(
                 getContext().getString(R.string.about_summary, Build.VERSION.RELEASE));
     }
+
+    @Override
+    protected int getAvailabilityStatus() {
+        return AVAILABLE_FOR_VIEWING;
+    }
 }
diff --git a/src/com/android/car/settings/system/KernelVersionPreferenceController.java b/src/com/android/car/settings/system/KernelVersionPreferenceController.java
index 1d18523..2e82084 100644
--- a/src/com/android/car/settings/system/KernelVersionPreferenceController.java
+++ b/src/com/android/car/settings/system/KernelVersionPreferenceController.java
@@ -42,4 +42,9 @@
     protected void updateState(Preference preference) {
         preference.setSummary(DeviceInfoUtils.getFormattedKernelVersion(getContext()));
     }
+
+    @Override
+    protected int getAvailabilityStatus() {
+        return AVAILABLE_FOR_VIEWING;
+    }
 }
diff --git a/src/com/android/car/settings/system/ModelInfoPreferenceController.java b/src/com/android/car/settings/system/ModelInfoPreferenceController.java
index 4fd8b53..126176f 100644
--- a/src/com/android/car/settings/system/ModelInfoPreferenceController.java
+++ b/src/com/android/car/settings/system/ModelInfoPreferenceController.java
@@ -43,4 +43,9 @@
     protected void updateState(Preference preference) {
         preference.setSummary(Build.MODEL + DeviceInfoUtils.getMsvSuffix());
     }
+
+    @Override
+    protected int getAvailabilityStatus() {
+        return AVAILABLE_FOR_VIEWING;
+    }
 }
diff --git a/src/com/android/car/settings/system/SecurityPatchPreferenceController.java b/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
index f48357c..fa697a2 100644
--- a/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
+++ b/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
@@ -42,4 +42,9 @@
     protected void updateState(Preference preference) {
         preference.setSummary(DeviceInfoUtils.getSecurityPatch());
     }
+
+    @Override
+    protected int getAvailabilityStatus() {
+        return AVAILABLE_FOR_VIEWING;
+    }
 }
diff --git a/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java b/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java
index 0ef369a..0a0d063 100644
--- a/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java
+++ b/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java
@@ -50,7 +50,7 @@
                 || !getContext().getResources().getBoolean(R.bool.config_show_wifi_mac_address)) {
             return UNSUPPORTED_ON_DEVICE;
         }
-        return super.getAvailabilityStatus();
+        return AVAILABLE_FOR_VIEWING;
     }
 
     protected void init(Context context) {
diff --git a/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java
index b51db10..29d0622 100644
--- a/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java
@@ -17,6 +17,7 @@
 package com.android.car.settings.common;
 
 import static com.android.car.settings.common.PreferenceController.AVAILABLE;
+import static com.android.car.settings.common.PreferenceController.AVAILABLE_FOR_VIEWING;
 import static com.android.car.settings.common.PreferenceController.CONDITIONALLY_UNAVAILABLE;
 import static com.android.car.settings.common.PreferenceController.UNSUPPORTED_ON_DEVICE;
 
@@ -25,7 +26,7 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 import static org.testng.Assert.assertThrows;
 
@@ -246,24 +247,35 @@
     }
 
     @Test
-    public void refreshUi_created_available_preferenceShown() {
+    public void refreshUi_created_available_preferenceShownAndEnabled() {
         mControllerHelper.markState(Lifecycle.State.CREATED);
+        reset(mPreference);
 
         mController.refreshUi();
 
-        // onCreate, refreshUi.
-        verify(mPreference, times(2)).setVisible(true);
+        verify(mPreference).setVisible(true);
+        verify(mPreference).setEnabled(true);
     }
+    @Test
+    public void refreshUi_created_availableForViewing_preferenceShownAndDisabled() {
+        mController.setAvailabilityStatus(AVAILABLE_FOR_VIEWING);
+        mControllerHelper.markState(Lifecycle.State.CREATED);
+        reset(mPreference);
 
+        mController.refreshUi();
+
+        verify(mPreference).setVisible(true);
+        verify(mPreference).setEnabled(false);
+    }
     @Test
     public void refreshUi_created_notAvailable_preferenceHidden() {
         mController.setAvailabilityStatus(CONDITIONALLY_UNAVAILABLE);
         mControllerHelper.markState(Lifecycle.State.CREATED);
+        reset(mPreference);
 
         mController.refreshUi();
 
-        // onCreate, refreshUi.
-        verify(mPreference, times(2)).setVisible(false);
+        verify(mPreference).setVisible(false);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java
index ade3c89..a96d0a1 100644
--- a/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java
@@ -18,7 +18,7 @@
 
 import static android.content.pm.PackageManager.FEATURE_BLUETOOTH;
 
-import static com.android.car.settings.common.PreferenceController.AVAILABLE;
+import static com.android.car.settings.common.PreferenceController.AVAILABLE_FOR_VIEWING;
 import static com.android.car.settings.common.PreferenceController.UNSUPPORTED_ON_DEVICE;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -98,12 +98,12 @@
     }
 
     @Test
-    public void getAvailabilityStatus_enableDefaultAdapter_available() {
+    public void getAvailabilityStatus_enableDefaultAdapter_availableForViewing() {
         Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
                 FEATURE_BLUETOOTH, /* supported= */ true);
 
         assertThat(mControllerHelper.getController().getAvailabilityStatus()).isEqualTo(
-                AVAILABLE);
+                AVAILABLE_FOR_VIEWING);
     }
 
     private ShadowBluetoothAdapter getShadowBluetoothAdapter() {
diff --git a/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java
index 512aa42..f475dcb 100644
--- a/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java
@@ -16,7 +16,7 @@
 
 package com.android.car.settings.system;
 
-import static com.android.car.settings.common.PreferenceController.AVAILABLE;
+import static com.android.car.settings.common.PreferenceController.AVAILABLE_FOR_VIEWING;
 import static com.android.car.settings.common.PreferenceController.UNSUPPORTED_ON_DEVICE;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -76,12 +76,12 @@
     }
 
     @Test
-    public void getAvailabilityStatus_wifiAvailable_available() {
+    public void getAvailabilityStatus_wifiAvailable_availableForViewing() {
         Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
                 PackageManager.FEATURE_WIFI, /* supported= */ true);
 
         assertThat(mControllerHelper.getController().getAvailabilityStatus())
-                .isEqualTo(AVAILABLE);
+                .isEqualTo(AVAILABLE_FOR_VIEWING);
     }
 
     @Test
