summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Zak Cohen <zakcohen@google.com> 2017-01-09 12:54:34 -0800
committer Zak Cohen <zakcohen@google.com> 2017-01-11 14:41:49 -0800
commit1a70573a683cd930b21c8e3f17cd4a9f37e5dfd2 (patch)
treef79c1941b930f160b25297494db0d476ccb847d8
parent1a6acdbb86c3e72bdb0a4dcab3bda58cbc4ea34c (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.java29
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);
+ }
+ }
}