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

Commit ea416398 authored by Michael Wachenschwanz's avatar Michael Wachenschwanz Committed by Automerger Merge Worker
Browse files

Merge "Add permission check to UsageStatsManager#isAppInactive" into rvc-dev...

Merge "Add permission check to UsageStatsManager#isAppInactive" into rvc-dev am: dcc388ab am: 32e1b475 am: ede4362b

Change-Id: I2590efac24ea4c688b3f793d4f15af484b5da3d4
parents e16aef47 ede4362b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ interface IUsageStatsManager {
    @UnsupportedAppUsage
    void setAppInactive(String packageName, boolean inactive, int userId);
    @UnsupportedAppUsage
    boolean isAppInactive(String packageName, int userId);
    boolean isAppInactive(String packageName, int userId, String callingPackage);
    void onCarrierPrivilegedAppsChanged();
    void reportChooserSelection(String packageName, int userId, String contentType,
            in String[] annotations, String action);
+7 −2
Original line number Diff line number Diff line
@@ -622,12 +622,17 @@ public final class UsageStatsManager {
     * app hasn't been used directly or indirectly for a period of time defined by the system. This
     * could be of the order of several hours or days. Apps are not considered inactive when the
     * device is charging.
     * <p> The caller must have {@link android.Manifest.permission#PACKAGE_USAGE_STATS} to query the
     * inactive state of other apps</p>
     *
     * @param packageName The package name of the app to query
     * @return whether the app is currently considered inactive
     * @return whether the app is currently considered inactive or false if querying another app
     * without {@link android.Manifest.permission#PACKAGE_USAGE_STATS}
     */
    public boolean isAppInactive(String packageName) {
        try {
            return mService.isAppInactive(packageName, mContext.getUserId());
            return mService.isAppInactive(packageName, mContext.getUserId(),
                    mContext.getOpPackageName());
        } catch (RemoteException e) {
            // fall through and return default
        }
+1 −1
Original line number Diff line number Diff line
@@ -2504,7 +2504,7 @@ final class ActivityManagerShellCommand extends ShellCommand {

        IUsageStatsManager usm = IUsageStatsManager.Stub.asInterface(ServiceManager.getService(
                Context.USAGE_STATS_SERVICE));
        boolean isIdle = usm.isAppInactive(packageName, userId);
        boolean isIdle = usm.isAppInactive(packageName, userId, SHELL_PACKAGE_NAME);
        pw.println("Idle=" + isIdle);
        return 0;
    }
+15 −3
Original line number Diff line number Diff line
@@ -1577,15 +1577,27 @@ public class UsageStatsService extends SystemService implements
        }

        @Override
        public boolean isAppInactive(String packageName, int userId) {
        public boolean isAppInactive(String packageName, int userId, String callingPackage) {
            final int callingUid = Binder.getCallingUid();
            try {
                userId = ActivityManager.getService().handleIncomingUser(Binder.getCallingPid(),
                        Binder.getCallingUid(), userId, false, false, "isAppInactive", null);
                        callingUid, userId, false, false, "isAppInactive", null);
            } catch (RemoteException re) {
                throw re.rethrowFromSystemServer();
            }

            // If the calling app is asking about itself, continue, else check for permission.
            if (packageName.equals(callingPackage)) {
                final int actualCallingUid = mPackageManagerInternal.getPackageUidInternal(
                        callingPackage, 0, userId);
                if (actualCallingUid != callingUid) {
                    return false;
                }
            } else if (!hasPermission(callingPackage)) {
                return false;
            }
            final boolean obfuscateInstantApps = shouldObfuscateInstantAppsForCaller(
                    Binder.getCallingUid(), userId);
                    callingUid, userId);
            final long token = Binder.clearCallingIdentity();
            try {
                return mAppStandby.isAppIdleFiltered(