diff options
4 files changed, 57 insertions, 13 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 6b60f47c7d7f..d80d4bedf9f4 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -6043,6 +6043,33 @@ public final class Settings {          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 5953ddecd222..07048a491543 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 @@ public class LightsService extends SystemService {      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 @@ public class LightsService extends SystemService {          }      } +    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 30194bf87c78..249a076df8f1 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 @@ public class EnabledComponentsObserver implements SettingChangeListener {          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 ce76863b0c16..3d1227d052dd 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 @@ import java.util.Set;  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 @@ public class SettingsObserver {              @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 class SettingsObserver {       */      public void addListener(@NonNull SettingChangeListener listener) {          mSettingsListeners.add(listener); -      }      /**  |