diff options
3 files changed, 10 insertions, 3 deletions
diff --git a/core/java/android/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl index eb4c624be0b2..585eb61b6f57 100644 --- a/core/java/android/app/usage/IUsageStatsManager.aidl +++ b/core/java/android/app/usage/IUsageStatsManager.aidl @@ -68,5 +68,5 @@ interface IUsageStatsManager { void reportUserInteraction(String packageName, int userId); int getUsageSource(); void forceUsageSourceSettingRead(); - long getLastTimeAnyComponentUsed(String packageName); + long getLastTimeAnyComponentUsed(String packageName, String callingPackage); } diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index e8175c709d85..ac7a31874682 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -1287,7 +1287,7 @@ public final class UsageStatsManager { android.Manifest.permission.PACKAGE_USAGE_STATS}) public long getLastTimeAnyComponentUsed(@NonNull String packageName) { try { - return mService.getLastTimeAnyComponentUsed(packageName); + return mService.getLastTimeAnyComponentUsed(packageName, mContext.getOpPackageName()); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 128602d5acbd..1b8492722c10 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -2226,7 +2226,14 @@ public class UsageStatsService extends SystemService implements } @Override - public long getLastTimeAnyComponentUsed(String packageName) { + public long getLastTimeAnyComponentUsed(String packageName, String callingPackage) { + if (!hasPermissions( + callingPackage, android.Manifest.permission.INTERACT_ACROSS_USERS)) { + throw new SecurityException("Caller doesn't have INTERACT_ACROSS_USERS permission"); + } + if (!hasPermission(callingPackage)) { + throw new SecurityException("Don't have permission to query usage stats"); + } synchronized (mLock) { // Truncate the returned milliseconds to the boundary of the last day before exact // time for privacy reasons. |