diff options
| -rw-r--r-- | services/core/java/com/android/server/vr/VrManagerService.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index 2f076d1d69e3..7611527d2b99 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -15,9 +15,12 @@ */ package com.android.server.vr; +import android.app.AppOpsManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.os.Binder; +import android.os.IBinder; import android.os.UserHandle; import android.util.ArraySet; import android.util.Slog; @@ -40,6 +43,9 @@ public class VrManagerService extends SystemService { private static native void setVrModeNative(boolean enabled); private final Object mLock = new Object(); + + private final IBinder mOverlayToken = new Binder(); + private boolean mVrModeEnabled = false; private ArraySet<VrStateListener> mListeners = new ArraySet<>(); @@ -97,11 +103,25 @@ public class VrManagerService extends SystemService { // Log mode change event. Slog.i(TAG, "VR mode " + ((mVrModeEnabled) ? "enabled" : "disabled")); setVrModeNative(mVrModeEnabled); + updateOverlayStateLocked(); onVrModeChangedLocked(); } } } + private void updateOverlayStateLocked() { + final long identity = Binder.clearCallingIdentity(); + try { + AppOpsManager appOpsManager = getContext().getSystemService(AppOpsManager.class); + if (appOpsManager != null) { + appOpsManager.setUserRestriction(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, + mVrModeEnabled, mOverlayToken); + } + } finally { + Binder.restoreCallingIdentity(identity); + } + } + private boolean getVrMode() { synchronized (mLock) { return mVrModeEnabled; |