diff options
| -rw-r--r-- | core/java/android/app/VrManager.java | 30 | ||||
| -rw-r--r-- | core/java/android/service/vr/IVrManager.aidl | 12 | ||||
| -rw-r--r-- | services/core/Android.mk | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/vr/VrManagerService.java | 30 |
4 files changed, 73 insertions, 0 deletions
diff --git a/core/java/android/app/VrManager.java b/core/java/android/app/VrManager.java index a0b0eeaaf1aa..4dd578e7deab 100644 --- a/core/java/android/app/VrManager.java +++ b/core/java/android/app/VrManager.java @@ -6,6 +6,8 @@ import android.content.ComponentName; import android.os.RemoteException; import android.service.vr.IVrManager; +import java.io.FileDescriptor; + /** * Used to control aspects of a devices Virtual Reality (VR) capabilities. * <p> @@ -41,4 +43,32 @@ public class VrManager { e.rethrowFromSystemServer(); } } + + /** + * Initiate connection for system controller data. + * + * @param fd Controller data file descriptor. + * + * {@hide} + */ + public void connectController(FileDescriptor fd) { + try { + mService.connectController(fd); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + } + + /** + * Sever connection for system controller data. + * + * {@hide} + */ + public void disconnectController() { + try { + mService.disconnectController(); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + } } diff --git a/core/java/android/service/vr/IVrManager.aidl b/core/java/android/service/vr/IVrManager.aidl index fce06d6d91c2..6eea07d33c40 100644 --- a/core/java/android/service/vr/IVrManager.aidl +++ b/core/java/android/service/vr/IVrManager.aidl @@ -73,5 +73,17 @@ interface IVrManager { * currently, else return the display id of the virtual display */ int getCompatibilityDisplayId(); + + /** + * Initiate connection for system controller data. + * + * @param fd Controller data file descriptor. + */ + void connectController(in FileDescriptor fd); + + /** + * Sever connection for system controller data. + */ + void disconnectController(); } diff --git a/services/core/Android.mk b/services/core/Android.mk index d312902382f9..e35a1711f72e 100644 --- a/services/core/Android.mk +++ b/services/core/Android.mk @@ -13,6 +13,7 @@ LOCAL_SRC_FILES += \ ../../../../system/netd/server/binder/android/net/INetd.aidl \ ../../../../system/netd/server/binder/android/net/metrics/INetdEventListener.aidl \ ../../../native/cmds/installd/binder/android/os/IInstalld.aidl \ + ../../../native/services/vr/vr_window_manager/aidl/android/service/vr/IVrWindowManager.aidl \ LOCAL_AIDL_INCLUDES += \ system/netd/server/binder diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index e1df0ba287e1..731f53f37af2 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -37,6 +37,7 @@ import android.os.Looper; import android.os.Message; import android.os.RemoteCallbackList; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings; import android.service.notification.NotificationListenerService; @@ -44,6 +45,7 @@ import android.service.vr.IPersistentVrStateCallbacks; import android.service.vr.IVrListener; import android.service.vr.IVrManager; import android.service.vr.IVrStateCallbacks; +import android.service.vr.IVrWindowManager; import android.service.vr.VrListenerService; import android.text.TextUtils; import android.util.ArrayMap; @@ -427,6 +429,18 @@ public class VrManagerService extends SystemService implements EnabledComponentC } @Override + public void connectController(FileDescriptor fd) throws android.os.RemoteException { + enforceCallerPermission(Manifest.permission.RESTRICTED_VR_ACCESS); + VrManagerService.this.connectController(fd); + } + + @Override + public void disconnectController() throws android.os.RemoteException { + enforceCallerPermission(Manifest.permission.RESTRICTED_VR_ACCESS); + VrManagerService.this.disconnectController(); + } + + @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) { @@ -1151,4 +1165,20 @@ public class VrManagerService extends SystemService implements EnabledComponentC return mVrModeEnabled; } } + + private void connectController(FileDescriptor fd) throws android.os.RemoteException { + // TODO(b/36506799): move vr_wm code to VrCore and remove this. + IVrWindowManager remote = + IVrWindowManager.Stub.asInterface( + ServiceManager.getService(IVrWindowManager.SERVICE_NAME)); + remote.connectController(fd); + } + + private void disconnectController() throws android.os.RemoteException { + // TODO(b/36506799): move vr_wm code to VrCore and remove this. + IVrWindowManager remote = + IVrWindowManager.Stub.asInterface( + ServiceManager.getService(IVrWindowManager.SERVICE_NAME)); + remote.disconnectController(); + } } |