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

Commit 09d77832 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Allow checking if a pkg is exempted from bcast response tracking." into main

parents 47b04d1b 86874754
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -87,6 +87,8 @@ interface IUsageStatsManager {
            int userId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RESPONSE_STATS)")
    void clearBroadcastEvents(String callingPackage, int userId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.DUMP)")
    boolean isPackageExemptedFromBroadcastResponseStats(String packageName, int userId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG)")
    String getAppStandbyConstant(String key);
}
+16 −0
Original line number Diff line number Diff line
@@ -1528,6 +1528,22 @@ public final class UsageStatsManager {
        }
    }

    /**
     * Checks whether the given {@code packageName} is exempted from broadcast response tracking.
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.DUMP)
    @UserHandleAware
    public boolean isPackageExemptedFromBroadcastResponseStats(@NonNull String packageName) {
        try {
            return mService.isPackageExemptedFromBroadcastResponseStats(packageName,
                    mContext.getUserId());
        } catch (RemoteException re) {
            throw re.rethrowFromSystemServer();
        }
    }

    /** @hide */
    @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
    @Nullable
+13 −0
Original line number Diff line number Diff line
@@ -292,6 +292,19 @@ class BroadcastResponseStatsTracker {
        }
    }

    boolean isPackageExemptedFromBroadcastResponseStats(@NonNull String packageName,
            @NonNull UserHandle user) {
        synchronized (mLock) {
            if (doesPackageHoldExemptedPermission(packageName, user)) {
                return true;
            }
            if (doesPackageHoldExemptedRole(packageName, user)) {
                return true;
            }
            return false;
        }
    }

    boolean doesPackageHoldExemptedRole(@NonNull String packageName, @NonNull UserHandle user) {
        final List<String> exemptedRoles = mAppStandby.getBroadcastResponseExemptedRoles();
        synchronized (mLock) {
+12 −0
Original line number Diff line number Diff line
@@ -2866,6 +2866,18 @@ public class UsageStatsService extends SystemService implements
            mResponseStatsTracker.clearBroadcastEvents(callingUid, userId);
        }

        @Override
        public boolean isPackageExemptedFromBroadcastResponseStats(@NonNull String callingPackage,
                @UserIdInt int userId) {
            Objects.requireNonNull(callingPackage);

            getContext().enforceCallingOrSelfPermission(
                    android.Manifest.permission.DUMP,
                    "isPackageExemptedFromBroadcastResponseStats");
            return mResponseStatsTracker.isPackageExemptedFromBroadcastResponseStats(
                    callingPackage, UserHandle.of(userId));
        }

        @Override
        @Nullable
        public String getAppStandbyConstant(@NonNull String key) {