diff options
| author | 2017-01-09 12:54:34 -0800 | |
|---|---|---|
| committer | 2017-01-11 14:41:49 -0800 | |
| commit | 1a70573a683cd930b21c8e3f17cd4a9f37e5dfd2 (patch) | |
| tree | f79c1941b930f160b25297494db0d476ccb847d8 | |
| parent | 1a6acdbb86c3e72bdb0a4dcab3bda58cbc4ea34c (diff) | |
Set ui mode in UiModeManagerService to vrheadset when VR mode is enabled.
Bug: 30989383
Test: Manual check on device using dumpsys and a test service
Change-Id: I8e59546a5ee816bb92e68f68d0914bd977edfc2e
| -rw-r--r-- | services/core/java/com/android/server/UiModeManagerService.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java index 5e1e1e0a5925..440ac90a99d8 100644 --- a/services/core/java/com/android/server/UiModeManagerService.java +++ b/services/core/java/com/android/server/UiModeManagerService.java @@ -38,10 +38,13 @@ import android.os.Handler; import android.os.IBinder; import android.os.PowerManager; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; import android.service.dreams.Sandman; +import android.service.vr.IVrManager; +import android.service.vr.IVrStateCallbacks; import android.util.Slog; import android.view.WindowManagerInternal; import android.view.WindowManagerPolicy; @@ -77,6 +80,7 @@ final class UiModeManagerService extends SystemService { private boolean mDeskModeKeepsScreenOn; private boolean mTelevision; private boolean mWatch; + private boolean mVrHeadset; private boolean mComputedNightMode; private int mCarModeEnableFlags; @@ -170,6 +174,18 @@ final class UiModeManagerService extends SystemService { } }; + private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() { + @Override + public void onVrStateChanged(boolean enabled) { + synchronized (mLock) { + mVrHeadset = enabled; + if (mSystemReady) { + updateLocked(0, 0); + } + } + } + }; + @Override public void onStart() { final Context context = getContext(); @@ -394,6 +410,7 @@ final class UiModeManagerService extends SystemService { mSystemReady = true; mCarModeEnabled = mDockState == Intent.EXTRA_DOCK_STATE_CAR; updateComputedNightModeLocked(); + registerVrStateListener(); updateLocked(0, 0); } } @@ -441,6 +458,8 @@ final class UiModeManagerService extends SystemService { uiMode = Configuration.UI_MODE_TYPE_CAR; } else if (isDeskDockState(mDockState)) { uiMode = Configuration.UI_MODE_TYPE_DESK; + } else if (mVrHeadset) { + uiMode = Configuration.UI_MODE_TYPE_VR_HEADSET; } if (mNightMode == UiModeManager.MODE_NIGHT_AUTO) { @@ -721,5 +740,15 @@ final class UiModeManagerService extends SystemService { } } + private void registerVrStateListener() { + IVrManager vrManager = IVrManager.Stub.asInterface(ServiceManager.getService("vrmanager")); + try { + if (vrManager != null) { + vrManager.registerListener(mVrStateCallbacks); + } + } catch (RemoteException e) { + Slog.e(TAG, "Failed to register VR mode state listener: " + e); + } + } } |