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

Commit 62640ca0 authored by Nate Myren's avatar Nate Myren
Browse files

Add method to get the number of registered attribution sources

Currently, this method is only used in tests.

Bug: 330901543
Test: atest GtsPermissionTestCases
Change-Id: I6d49a7973ea506d0a954119a6821985f079aef09
parent e942552f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -98,6 +98,8 @@ interface IPermissionManager {

    IBinder registerAttributionSource(in AttributionSourceState source);

    int getNumRegisteredAttributionSources(int uid);

    boolean isRegisteredAttributionSource(in AttributionSourceState source);

    int checkPermission(String packageName, String permissionName, String persistentDeviceId,
+15 −0
Original line number Diff line number Diff line
@@ -1664,6 +1664,21 @@ public final class PermissionManager {
        return false;
    }

    /**
     * Gets the number of currently registered attribution sources for a particular UID. This should
     * only be used for testing purposes.
     * @hide
     */
    @RequiresPermission(Manifest.permission.UPDATE_APP_OPS_STATS)
    public int getNumRegisteredAttributionSourcesForTest(int uid) {
        try {
            return mPermissionManager.getNumRegisteredAttributionSources(uid);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
        return -1;
    }

    /**
     * Revoke the POST_NOTIFICATIONS permission, without killing the app. This method must ONLY BE
     * USED in CTS or local tests.
+25 −0
Original line number Diff line number Diff line
@@ -461,6 +461,11 @@ public class PermissionManagerService extends IPermissionManager.Stub {
                .isRegisteredAttributionSource(new AttributionSource(source));
    }

    @Override
    public int getNumRegisteredAttributionSources(int uid) {
        return mAttributionSourceRegistry.getNumRegisteredAttributionSources(uid);
    }

    @Override
    public List<String> getAutoRevokeExemptionRequestedPackages(int userId) {
        return getPackagesWithAutoRevokePolicy(AUTO_REVOKE_DISCOURAGED, userId);
@@ -938,6 +943,26 @@ public class PermissionManagerService extends IPermissionManager.Stub {
            }
        }

        public int getNumRegisteredAttributionSources(int uid) {
            mContext.enforceCallingOrSelfPermission(UPDATE_APP_OPS_STATS,
                    "getting the number of registered AttributionSources requires "
                            + "UPDATE_APP_OPS_STATS");
            // Influence the system to perform a garbage collection, so the provided number is as
            // accurate as possible
            System.gc();
            System.gc();
            synchronized (mLock) {
                int[] numForUid = { 0 };
                mAttributions.forEach((key, value) -> {
                    if (value.getUid() == uid) {
                        numForUid[0]++;
                    }

                });
                return numForUid[0];
            }
        }

        private int resolveUid(int uid) {
            final VoiceInteractionManagerInternal vimi = LocalServices
                    .getService(VoiceInteractionManagerInternal.class);