summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/VrManager.java30
-rw-r--r--core/java/android/service/vr/IVrManager.aidl12
-rw-r--r--services/core/Android.mk1
-rw-r--r--services/core/java/com/android/server/vr/VrManagerService.java30
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();
+ }
}