Allow checking if a pkg is exempted from bcast response tracking.

Bug: 291793661
Test: atest tests/tests/app.usage/src/android/app/usage/cts/BroadcastResponseStatsTest.java
Change-Id: I837eaaefa0d900a5b25e8a861f3b67aa4509f08f
This commit is contained in:
Sudheer Shanka
2023-07-21 19:10:15 -07:00
parent 2758e4c742
commit 86874754be
4 changed files with 43 additions and 0 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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) {