Add settings for altering VR display behavior.

Bug=28208992

Change-Id: I31fcda8b846e7dd62f98151020f2bff2be52d521
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 788a20c..871ca0f 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -6039,6 +6039,33 @@
         public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
 
         /**
+         * Behavior of the display while in VR mode.
+         *
+         * One of {@link #VR_DISPLAY_MODE_LOW_PERSISTENCE} or {@link #VR_DISPLAY_MODE_OFF}.
+         *
+         * @hide
+         */
+        public static final String VR_DISPLAY_MODE = "vr_display_mode";
+
+        /**
+         * Lower the display persistence while the system is in VR mode.
+         *
+         * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE
+         *
+         * @hide.
+         */
+        public static final int VR_DISPLAY_MODE_LOW_PERSISTENCE = 0;
+
+        /**
+         * Do not alter the display persistence while the system is in VR mode.
+         *
+         * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE
+         *
+         * @hide.
+         */
+        public static final int VR_DISPLAY_MODE_OFF = 1;
+
+        /**
          * This are the settings to be backed up.
          *
          * NOTE: Settings are backed up and restored in the order they appear
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index 5953dde..07048a4 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -17,16 +17,16 @@
 package com.android.server.lights;
 
 import com.android.server.SystemService;
-import com.android.server.vr.VrManagerInternal;
 import com.android.server.vr.VrManagerService;
-import com.android.server.vr.VrStateListener;
 
+import android.app.ActivityManager;
 import android.content.Context;
 import android.os.Handler;
-import android.os.IBinder;
 import android.os.Message;
 import android.os.RemoteException;
 import android.os.Trace;
+import android.os.UserHandle;
+import android.provider.Settings;
 import android.service.vr.IVrManager;
 import android.service.vr.IVrStateCallbacks;
 import android.util.Slog;
@@ -36,6 +36,7 @@
     static final boolean DEBUG = false;
 
     final LightImpl mLights[] = new LightImpl[LightsManager.LIGHT_ID_COUNT];
+    private boolean mVrModeEnabled;
 
     private final class LightImpl extends Light {
 
@@ -179,17 +180,34 @@
         }
     }
 
+    private int getVrDisplayMode() {
+        int currentUser = ActivityManager.getCurrentUser();
+        return Settings.Secure.getIntForUser(getContext().getContentResolver(),
+                Settings.Secure.VR_DISPLAY_MODE,
+                /*default*/Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
+                currentUser);
+    }
+
     private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
         @Override
         public void onVrStateChanged(boolean enabled) throws RemoteException {
             LightImpl l = mLights[LightsManager.LIGHT_ID_BACKLIGHT];
-            if (enabled) {
-                if (DEBUG) Slog.v(TAG, "VR mode enabled, setting brightness to low persistence");
-                l.enableLowPersistence();
+            int vrDisplayMode = getVrDisplayMode();
 
+            // User leaves VR mode before altering display settings.
+            if (enabled && vrDisplayMode == Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE) {
+                if (!mVrModeEnabled) {
+                    if (DEBUG)
+                        Slog.v(TAG, "VR mode enabled, setting brightness to low persistence");
+                    l.enableLowPersistence();
+                    mVrModeEnabled = true;
+                }
             } else {
-                if (DEBUG) Slog.v(TAG, "VR mode disabled, resetting brightnes");
-                l.disableLowPersistence();
+                if (mVrModeEnabled) {
+                    if (DEBUG) Slog.v(TAG, "VR mode disabled, resetting brightnes");
+                    l.disableLowPersistence();
+                    mVrModeEnabled = false;
+                }
             }
         }
     };
diff --git a/services/core/java/com/android/server/vr/EnabledComponentsObserver.java b/services/core/java/com/android/server/vr/EnabledComponentsObserver.java
index 30194bf..249a076 100644
--- a/services/core/java/com/android/server/vr/EnabledComponentsObserver.java
+++ b/services/core/java/com/android/server/vr/EnabledComponentsObserver.java
@@ -212,7 +212,7 @@
         if (userManager == null) {
             return null;
         }
-        return userManager.getProfileIdsWithDisabled(ActivityManager.getCurrentUser());
+        return userManager.getEnabledProfileIds(ActivityManager.getCurrentUser());
     }
 
     public static ArraySet<ComponentName> loadComponentNames(PackageManager pm, int userId,
diff --git a/services/core/java/com/android/server/vr/SettingsObserver.java b/services/core/java/com/android/server/vr/SettingsObserver.java
index ce76863..3d1227d 100644
--- a/services/core/java/com/android/server/vr/SettingsObserver.java
+++ b/services/core/java/com/android/server/vr/SettingsObserver.java
@@ -38,7 +38,7 @@
 public class SettingsObserver {
 
     private final String mSecureSettingName;
-    private final BroadcastReceiver mSettingRestorReceiver;
+    private final BroadcastReceiver mSettingRestoreReceiver;
     private final ContentObserver mContentObserver;
     private final Set<SettingChangeListener> mSettingsListeners = new ArraySet<>();
 
@@ -67,7 +67,7 @@
             @NonNull final Uri settingUri, @NonNull final String secureSettingName) {
 
         mSecureSettingName = secureSettingName;
-        mSettingRestorReceiver = new BroadcastReceiver() {
+        mSettingRestoreReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
                 if (Intent.ACTION_SETTING_RESTORED.equals(intent.getAction())) {
@@ -117,7 +117,6 @@
      */
     public void addListener(@NonNull SettingChangeListener listener) {
         mSettingsListeners.add(listener);
-
     }
 
     /**