Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47d98de6 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Hide overlay windows in VR mode

bug:26775563

Change-Id: I0e81cc64f281cd085ff642ebd93f32ceb3ad5480
parent a52f6a17
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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;