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

Commit 8b24aab4 authored by Svet Ganov's avatar Svet Ganov
Browse files

Slice and dice app ops - PermissionController

Update the code to only pull and query the trsuted
portion of the last/historical app op data.

Test: manual

bug:111061782

Change-Id: I939db3d36fd546af2b0adfd4d9e657e0b195f09f
parent 61d42099
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.packageinstaller.permission.model;

import android.app.AppOpsManager;
import android.app.AppOpsManager.HistoricalOp;
import android.app.AppOpsManager.HistoricalPackageOps;
import android.app.AppOpsManager.OpEntry;
@@ -25,6 +26,8 @@ import android.app.AppOpsManager.PackageOps;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
import com.android.packageinstaller.permission.utils.Utils;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
@@ -115,7 +118,8 @@ public final class AppPermissionUsage {
                for (int j = 0; j < opCount; j++) {
                    final OpEntry op = ops.get(j);
                    if (op.getOpStr().equals(opName)) {
                        lastAccessTime = Math.max(lastAccessTime, op.getLastAccessTime());
                        lastAccessTime = Math.max(lastAccessTime,
                                op.getLastAccessTime(AppOpsManager.OP_FLAGS_ALL_TRUSTED));
                    }
                }
            }
@@ -127,14 +131,16 @@ public final class AppPermissionUsage {
            if (mHistoricalUsage == null) {
                return 0;
            }
            return extractAggregate(HistoricalOp::getForegroundAccessCount);
            return extractAggregate((HistoricalOp op)
                    -> op.getForegroundAccessCount(AppOpsManager.OP_FLAGS_ALL_TRUSTED));
        }

        public long getBackgroundAccessCount() {
            if (mHistoricalUsage == null) {
                return 0;
            }
            return extractAggregate(HistoricalOp::getBackgroundAccessCount);
            return extractAggregate((HistoricalOp op)
                    -> op.getBackgroundAccessCount(AppOpsManager.OP_FLAGS_ALL_TRUSTED));
        }

        public long getAccessCount() {
@@ -142,7 +148,8 @@ public final class AppPermissionUsage {
                return 0;
            }
            return extractAggregate((HistoricalOp op) ->
                op.getForegroundAccessCount() + op.getBackgroundAccessCount()
                op.getForegroundAccessCount(AppOpsManager.OP_FLAGS_ALL_TRUSTED)
                        + op.getBackgroundAccessCount(AppOpsManager.OP_FLAGS_ALL_TRUSTED)
            );
        }

@@ -151,7 +158,8 @@ public final class AppPermissionUsage {
                return 0;
            }
            return extractAggregate((HistoricalOp op) ->
                    op.getForegroundAccessDuration() + op.getBackgroundAccessDuration()
                    op.getForegroundAccessDuration(AppOpsManager.OP_FLAGS_ALL_TRUSTED)
                            + op.getBackgroundAccessDuration(AppOpsManager.OP_FLAGS_ALL_TRUSTED)
            );
        }

@@ -200,8 +208,7 @@ public final class AppPermissionUsage {
            return this;
        }

        public @NonNull
        AppPermissionUsage build() {
        public @NonNull AppPermissionUsage build() {
            if (mGroups.isEmpty()) {
                throw new IllegalStateException("mGroups cannot be empty.");
            }
+1 −0
Original line number Diff line number Diff line
@@ -292,6 +292,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
                        .setUid(mFilterUid)
                        .setPackageName(mFilterPackageName)
                        .setOpNames(new ArrayList<>(opNames))
                        .setFlags(AppOpsManager.OP_FLAGS_ALL_TRUSTED)
                        .build();
                appOpsManager.getHistoricalOps(request, Runnable::run,
                        (HistoricalOps ops) -> {
+2 −1
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ import androidx.core.util.Preconditions;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.ui.AppPermissionActivity;
import com.android.packageinstaller.permission.utils.CollectionUtils;
import com.android.packageinstaller.permission.utils.Utils;
import com.android.permissioncontroller.R;

import java.io.BufferedReader;
@@ -509,7 +510,7 @@ public class LocationAccessCheck {
                for (int opNum = 0; opNum < numOps; opNum++) {
                    AppOpsManager.HistoricalOp op = ops.getOpAt(opNum);

                    if (op.getBackgroundAccessCount() > 0) {
                    if (op.getBackgroundAccessCount(AppOpsManager.OP_FLAGS_ALL_TRUSTED) > 0) {
                        pkgsWithLocationAccess.add(userPkg);

                        break;
+2 −1
Original line number Diff line number Diff line
@@ -148,7 +148,8 @@ public final class ReviewAccessibilityServicesActivity extends FragmentActivity
            int numOps = pkgOp.getOps().size();
            for (int opNum = 0; opNum < numOps; opNum++) {
                AppOpsManager.OpEntry op = pkgOp.getOps().get(opNum);
                lastAccessTime = Math.max(lastAccessTime, op.getLastAccessTime());
                lastAccessTime = Math.max(lastAccessTime,
                        op.getLastAccessTime(AppOpsManager.OP_FLAGS_ALL_TRUSTED));
            }
        }
        return lastAccessTime;
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static android.Manifest.permission_group.SMS;
import static android.Manifest.permission_group.STORAGE;

import android.Manifest;
import android.app.AppOpsManager;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;