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

Commit dfd72d43 authored by Craig Donner's avatar Craig Donner Committed by Android (Google) Code Review
Browse files

Merge "Sets COARSE_LOCATION permission for VrCore when in vr mode." into nyc-dev

parents 8af20ef6 0568f28a
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC
            new RemoteCallbackList<>();
    private final ArraySet<String> mPreviousToggledListenerSettings = new ArraySet<>();
    private String mPreviousNotificationPolicyAccessPackage;
    private String mPreviousCoarseLocationPackage;
    private String mPreviousManageOverlayPackage;

    private static final int MSG_VR_STATE_CHANGE = 0;
@@ -446,6 +447,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC

        mWasDefaultGranted = true;

        grantCoarseLocationAccess(pName, userId);
        grantOverlayAccess(pName, userId);
        grantNotificationPolicyAccess(pName);
        grantNotificationListenerAccess(pName, userId);
@@ -475,6 +477,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC

        String pName = component.getPackageName();
        if (mWasDefaultGranted) {
            revokeCoarseLocationAccess(userId);
            revokeOverlayAccess(userId);
            revokeNotificationPolicyAccess(pName);
            revokeNotificiationListenerAccess();
@@ -483,6 +486,27 @@ public class VrManagerService extends SystemService implements EnabledComponentC

    }

    private void grantCoarseLocationAccess(String pkg, UserHandle userId) {
        PackageManager pm = mContext.getPackageManager();
        boolean prev = (PackageManager.PERMISSION_GRANTED ==
                pm.checkPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION, pkg));
        mPreviousCoarseLocationPackage = null;
        if (!prev) {
            pm.grantRuntimePermission(pkg, android.Manifest.permission.ACCESS_COARSE_LOCATION,
                    userId);
            mPreviousCoarseLocationPackage = pkg;
        }
    }

    private void revokeCoarseLocationAccess(UserHandle userId) {
        PackageManager pm = mContext.getPackageManager();
        if (mPreviousCoarseLocationPackage != null) {
            pm.revokeRuntimePermission(mPreviousCoarseLocationPackage,
                    android.Manifest.permission.ACCESS_COARSE_LOCATION, userId);
            mPreviousCoarseLocationPackage = null;
        }
    }

    private void grantOverlayAccess(String pkg, UserHandle userId) {
        PackageManager pm = mContext.getPackageManager();
        boolean prev = (PackageManager.PERMISSION_GRANTED ==
@@ -504,7 +528,6 @@ public class VrManagerService extends SystemService implements EnabledComponentC
        }
    }


    private void grantNotificationPolicyAccess(String pkg) {
        NotificationManager nm = mContext.getSystemService(NotificationManager.class);
        boolean prev = nm.isNotificationPolicyAccessGrantedForPackage(pkg);