OSDN Git Service

Hide overlay windows in VR mode
authorSvetoslav Ganov <svetoslavganov@google.com>
Tue, 1 Mar 2016 23:01:14 +0000 (15:01 -0800)
committerSvetoslav Ganov <svetoslavganov@google.com>
Tue, 1 Mar 2016 23:01:20 +0000 (15:01 -0800)
bug:26775563

Change-Id: I0e81cc64f281cd085ff642ebd93f32ceb3ad5480

services/core/java/com/android/server/vr/VrManagerService.java

index 2f076d1..7611527 100644 (file)
  */
 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;