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

Commit f69a7bbe authored by Nate Myren's avatar Nate Myren Committed by Android (Google) Code Review
Browse files

Merge "Add method to get the number of registered attribution sources" into main

parents 03c4f296 62640ca0
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
@@ -1674,6 +1674,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);