Loading services/core/java/com/android/server/vr/CompatibilityDisplay.java 0 → 100644 +119 −0 Original line number Diff line number Diff line package com.android.server.vr; import android.app.Service; import android.content.Context; import android.content.Intent; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; import android.service.vr.IVrStateCallbacks; import android.service.vr.IVrManager; import android.util.Log; import com.android.server.vr.VrManagerService; /** * Creates a 2D Virtual Display while VR Mode is enabled. This display will be used to run and * render 2D app within a VR experience. For example, bringing up the 2D calculator app in VR. */ class CompatibilityDisplay { private final static String TAG = "CompatDisplay"; private final static boolean DEBUG = false; // TODO: Go over these values and figure out what is best private final static int HEIGHT = 960; private final static int WIDTH = 720; private final static int DPI = 320; private final DisplayManager mDisplayManager; private final IVrManager mVrManager; // TODO: Lock initially created when VrStateCallback was connected through Binder. This may not // be necessary with the direct access to VrManager. private final Object vdLock = new Object(); private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() { @Override public void onVrStateChanged(boolean enabled) { if (enabled != mIsVrModeEnabled) { mIsVrModeEnabled = enabled; if (enabled) { // TODO: Consider not creating the display until ActivityManager needs one on // which to display a 2D application. startVirtualDisplay(); } else { stopVirtualDisplay(); } } } }; private VirtualDisplay mVirtualDisplay; private boolean mIsVrModeEnabled; public CompatibilityDisplay(DisplayManager displayManager, IVrManager vrManager) { mDisplayManager = displayManager; mVrManager = vrManager; } /** * Initializes the compabilitiy display by listening to VR mode changes. */ public void init() { startVrModeListener(); } private void startVrModeListener() { if (mVrManager != null) { try { mVrManager.registerListener(mVrStateCallbacks); } catch (RemoteException e) { Log.e(TAG, "Could not register VR State listener.", e); } } } private void startVirtualDisplay() { if (DEBUG) { Log.d(TAG, "Starting VD, DM:" + mDisplayManager); } if (mDisplayManager == null) { Log.w(TAG, "Cannot create virtual display because mDisplayManager == null"); return; } synchronized (vdLock) { if (mVirtualDisplay != null) { Log.e(TAG, "Starting the virtual display when one already exists", new Exception()); return; } mVirtualDisplay = mDisplayManager.createVirtualDisplay("VR 2D Display", WIDTH, HEIGHT, DPI, null /* Surface */, 0 /* flags */); } if (DEBUG) { Log.d(TAG, "VD created: " + mVirtualDisplay); } } private void stopVirtualDisplay() { if (DEBUG) { Log.i(TAG, "Santos, stopping VD"); } synchronized (vdLock) { if (mVirtualDisplay != null) { mVirtualDisplay.release(); mVirtualDisplay = null; } } } } services/core/java/com/android/server/vr/VrManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.content.pm.FeatureInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.hardware.display.DisplayManager; import android.os.Binder; import android.os.Handler; import android.os.IBinder; Loading @@ -51,6 +52,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import com.android.internal.R; import com.android.server.LocalServices; import com.android.server.SystemConfig; Loading Loading @@ -136,6 +138,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC private final NotificationAccessManager mNotifAccessManager = new NotificationAccessManager(); /** Tracks the state of the screen and keyguard UI.*/ private int mSystemSleepFlags = FLAG_NONE; private CompatibilityDisplay mCompatibilityDisplay; private static final int MSG_VR_STATE_CHANGE = 0; private static final int MSG_PENDING_VR_STATE_CHANGE = 1; Loading Loading @@ -493,6 +496,11 @@ public class VrManagerService extends SystemService implements EnabledComponentC mComponentObserver.rebuildAll(); } DisplayManager dm = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE); mCompatibilityDisplay = new CompatibilityDisplay(dm, mVrManager); mCompatibilityDisplay.init(); } else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) { synchronized (mLock) { mVrModeAllowed = true; Loading Loading
services/core/java/com/android/server/vr/CompatibilityDisplay.java 0 → 100644 +119 −0 Original line number Diff line number Diff line package com.android.server.vr; import android.app.Service; import android.content.Context; import android.content.Intent; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; import android.service.vr.IVrStateCallbacks; import android.service.vr.IVrManager; import android.util.Log; import com.android.server.vr.VrManagerService; /** * Creates a 2D Virtual Display while VR Mode is enabled. This display will be used to run and * render 2D app within a VR experience. For example, bringing up the 2D calculator app in VR. */ class CompatibilityDisplay { private final static String TAG = "CompatDisplay"; private final static boolean DEBUG = false; // TODO: Go over these values and figure out what is best private final static int HEIGHT = 960; private final static int WIDTH = 720; private final static int DPI = 320; private final DisplayManager mDisplayManager; private final IVrManager mVrManager; // TODO: Lock initially created when VrStateCallback was connected through Binder. This may not // be necessary with the direct access to VrManager. private final Object vdLock = new Object(); private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() { @Override public void onVrStateChanged(boolean enabled) { if (enabled != mIsVrModeEnabled) { mIsVrModeEnabled = enabled; if (enabled) { // TODO: Consider not creating the display until ActivityManager needs one on // which to display a 2D application. startVirtualDisplay(); } else { stopVirtualDisplay(); } } } }; private VirtualDisplay mVirtualDisplay; private boolean mIsVrModeEnabled; public CompatibilityDisplay(DisplayManager displayManager, IVrManager vrManager) { mDisplayManager = displayManager; mVrManager = vrManager; } /** * Initializes the compabilitiy display by listening to VR mode changes. */ public void init() { startVrModeListener(); } private void startVrModeListener() { if (mVrManager != null) { try { mVrManager.registerListener(mVrStateCallbacks); } catch (RemoteException e) { Log.e(TAG, "Could not register VR State listener.", e); } } } private void startVirtualDisplay() { if (DEBUG) { Log.d(TAG, "Starting VD, DM:" + mDisplayManager); } if (mDisplayManager == null) { Log.w(TAG, "Cannot create virtual display because mDisplayManager == null"); return; } synchronized (vdLock) { if (mVirtualDisplay != null) { Log.e(TAG, "Starting the virtual display when one already exists", new Exception()); return; } mVirtualDisplay = mDisplayManager.createVirtualDisplay("VR 2D Display", WIDTH, HEIGHT, DPI, null /* Surface */, 0 /* flags */); } if (DEBUG) { Log.d(TAG, "VD created: " + mVirtualDisplay); } } private void stopVirtualDisplay() { if (DEBUG) { Log.i(TAG, "Santos, stopping VD"); } synchronized (vdLock) { if (mVirtualDisplay != null) { mVirtualDisplay.release(); mVirtualDisplay = null; } } } }
services/core/java/com/android/server/vr/VrManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.content.pm.FeatureInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.hardware.display.DisplayManager; import android.os.Binder; import android.os.Handler; import android.os.IBinder; Loading @@ -51,6 +52,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import com.android.internal.R; import com.android.server.LocalServices; import com.android.server.SystemConfig; Loading Loading @@ -136,6 +138,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC private final NotificationAccessManager mNotifAccessManager = new NotificationAccessManager(); /** Tracks the state of the screen and keyguard UI.*/ private int mSystemSleepFlags = FLAG_NONE; private CompatibilityDisplay mCompatibilityDisplay; private static final int MSG_VR_STATE_CHANGE = 0; private static final int MSG_PENDING_VR_STATE_CHANGE = 1; Loading Loading @@ -493,6 +496,11 @@ public class VrManagerService extends SystemService implements EnabledComponentC mComponentObserver.rebuildAll(); } DisplayManager dm = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE); mCompatibilityDisplay = new CompatibilityDisplay(dm, mVrManager); mCompatibilityDisplay.init(); } else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) { synchronized (mLock) { mVrModeAllowed = true; Loading