diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
index 2d549fc..b6a0ca3 100644
--- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java
+++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
@@ -30,15 +30,9 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
-import android.os.PowerManager;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.provider.Settings.System;
-import android.service.vr.IVrManager;
 import android.text.TextUtils;
-import android.util.Log;
 
-import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
@@ -58,11 +52,8 @@
 
     private static final String TAG = "BrightnessPrefCtrl";
     private static final String KEY_BRIGHTNESS = "brightness";
-    private static final Uri BRIGHTNESS_FOR_VR_URI;
     private static final Uri BRIGHTNESS_ADJ_URI;
 
-    private final float mMinVrBrightness;
-    private final float mMaxVrBrightness;
     private final ContentResolver mContentResolver;
     private final Handler mHandler = new Handler(Looper.getMainLooper());
     private final DisplayManager mDisplayManager;
@@ -70,7 +61,6 @@
     private Preference mPreference;
 
     static {
-        BRIGHTNESS_FOR_VR_URI = System.getUriFor(System.SCREEN_BRIGHTNESS_FOR_VR);
         BRIGHTNESS_ADJ_URI = System.getUriFor(System.SCREEN_AUTO_BRIGHTNESS_ADJ);
     }
 
@@ -105,12 +95,6 @@
         if (lifecycle != null) {
             lifecycle.addObserver(this);
         }
-        final PowerManager powerManager = context.getSystemService(PowerManager.class);
-
-        mMinVrBrightness = powerManager.getBrightnessConstraint(
-                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR);
-        mMaxVrBrightness = powerManager.getBrightnessConstraint(
-                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR);
         mContentResolver = mContext.getContentResolver();
     }
 
@@ -137,7 +121,6 @@
 
     @Override
     public void onStart() {
-        mContentResolver.registerContentObserver(BRIGHTNESS_FOR_VR_URI, false, mBrightnessObserver);
         mContentResolver.registerContentObserver(BRIGHTNESS_ADJ_URI, false, mBrightnessObserver);
         mDisplayManager.registerDisplayListener(mDisplayListener, mHandler,
                 DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS);
@@ -174,16 +157,10 @@
 
     private double getCurrentBrightness() {
         int value = 0;
-        if (isInVrMode()) {
-            value = convertLinearToGammaFloat(System.getFloat(mContentResolver,
-                    System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, mMaxVrBrightness),
-                    mMinVrBrightness, mMaxVrBrightness);
-        } else {
-            final BrightnessInfo info = mContext.getDisplay().getBrightnessInfo();
-            if (info != null) {
-                value = convertLinearToGammaFloat(info.brightness, info.brightnessMinimum,
-                        info.brightnessMaximum);
-            }
+        final BrightnessInfo info = mContext.getDisplay().getBrightnessInfo();
+        if (info != null) {
+            value = convertLinearToGammaFloat(info.brightness, info.brightnessMinimum,
+                    info.brightnessMaximum);
         }
         return getPercentage(value, GAMMA_SPACE_MIN, GAMMA_SPACE_MAX);
     }
@@ -197,23 +174,4 @@
         }
         return (value - min) / (max - min);
     }
-
-    @VisibleForTesting
-    IVrManager safeGetVrManager() {
-        return IVrManager.Stub.asInterface(ServiceManager.getService(
-                Context.VR_SERVICE));
-    }
-
-    @VisibleForTesting
-    boolean isInVrMode() {
-        IVrManager vrManager = safeGetVrManager();
-        if (vrManager != null) {
-            try {
-                return vrManager.getVrModeState();
-            } catch (RemoteException e) {
-                Log.e(TAG, "Failed to check vr mode!", e);
-            }
-        }
-        return false;
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
index 82c6b70..4fedeae 100644
--- a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
@@ -21,7 +21,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -82,16 +81,11 @@
                 PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM)).thenReturn(0.0f);
         when(mPowerManager.getBrightnessConstraint(
                 PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM)).thenReturn(1.0f);
-        when(mPowerManager.getBrightnessConstraint(
-                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR)).thenReturn(0.0f);
-        when(mPowerManager.getBrightnessConstraint(
-                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR)).thenReturn(1.0f);
         ShadowApplication.getInstance().setSystemService(POWER_SERVICE,
                 mPowerManager);
         when(mScreen.findPreference(anyString())).thenReturn(mPreference);
         when(mContext.getDisplay()).thenReturn(mDisplay);
         mController = spy(new BrightnessLevelPreferenceController(mContext, null));
-        doReturn(false).when(mController).isInVrMode();
     }
 
     @Test
@@ -100,12 +94,6 @@
     }
 
     @Test
-    public void isInVrMode_noVrManager_shouldAlwaysReturnFalse() {
-        doReturn(null).when(mController).safeGetVrManager();
-        assertThat(mController.isInVrMode()).isFalse();
-    }
-
-    @Test
     public void onStart_shouldRegisterObserver() {
         BrightnessLevelPreferenceController controller =
                 new BrightnessLevelPreferenceController(mContext, null);
@@ -114,8 +102,6 @@
         controller.onStart();
 
         assertThat(shadowContentResolver.getContentObservers(
-                System.getUriFor(System.SCREEN_BRIGHTNESS_FOR_VR))).isNotEmpty();
-        assertThat(shadowContentResolver.getContentObservers(
                 System.getUriFor(System.SCREEN_AUTO_BRIGHTNESS_ADJ))).isNotEmpty();
     }
 
@@ -130,8 +116,6 @@
         controller.onStop();
 
         assertThat(shadowContentResolver.getContentObservers(
-                System.getUriFor(System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT))).isEmpty();
-        assertThat(shadowContentResolver.getContentObservers(
                 System.getUriFor(System.SCREEN_AUTO_BRIGHTNESS_ADJ))).isEmpty();
     }
 
@@ -151,18 +135,7 @@
     }
 
     @Test
-    public void updateState_inVrMode_shouldSetSummaryToVrBrightness() {
-        doReturn(true).when(mController).isInVrMode();
-        System.putFloat(mContentResolver, System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, 0.6f);
-
-        mController.updateState(mPreference);
-
-        verify(mPreference).setSummary("91%");
-    }
-
-    @Test
     public void updateState_autoBrightness_shouldSetSummaryToAutoBrightness() {
-        doReturn(false).when(mController).isInVrMode();
         System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_MODE,
                 System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
 
@@ -177,7 +150,6 @@
 
     @Test
     public void updateState_manualBrightness_shouldSetSummaryToScreenBrightness() {
-        doReturn(false).when(mController).isInVrMode();
         System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_MODE,
                 System.SCREEN_BRIGHTNESS_MODE_MANUAL);
 
@@ -191,20 +163,6 @@
     }
 
     @Test
-    public void updateState_brightnessOutOfRange_shouldSetSummaryInRange() {
-        // VR mode
-        doReturn(true).when(mController).isInVrMode();
-
-        System.putFloat(mContentResolver, System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, 1.05f);
-        mController.updateState(mPreference);
-        verify(mPreference).setSummary("100%");
-
-        System.putFloat(mContentResolver, System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, -20f);
-        mController.updateState(mPreference);
-        verify(mPreference).setSummary("0%");
-    }
-
-    @Test
     public void handlePreferenceTreeClick_transitionTypeNone_shouldPassToNextActivity() {
         final Activity activity = Robolectric.setupActivity(Activity.class);
         final BrightnessLevelPreferenceController controller =
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPowerManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPowerManager.java
index 22c38be..9a4993e 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPowerManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPowerManager.java
@@ -35,13 +35,4 @@
         return 0;
     }
 
-    @Implementation
-    protected int getMinimumScreenBrightnessForVrSetting() {
-        return 0;
-    }
-
-    @Implementation
-    protected int getMaximumScreenBrightnessForVrSetting() {
-        return 0;
-    }
 }
