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

Commit 9d24bf1a authored by mrulhania's avatar mrulhania Committed by Manjeet Rulhania
Browse files

Fix discrete and aggregate filter for getHistoricalOps API

Bug: 377584611
Test: presubmit
Test: manual
Flag: android.permission.flags.enable_all_sqlite_appops_accesses
Change-Id: Ia55310f2ed0a9fbef10d5103730af55226121f91
parent 160e1c04
Loading
Loading
Loading
Loading
+31 −18
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static android.app.AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE;
import static android.app.AppOpsManager.ATTRIBUTION_FLAG_ACCESSOR;
import static android.app.AppOpsManager.ATTRIBUTION_FLAG_RECEIVER;
import static android.app.AppOpsManager.ATTRIBUTION_FLAG_TRUSTED;
import static android.app.AppOpsManager.HISTORY_FLAG_AGGREGATE;
import static android.app.AppOpsManager.HISTORY_FLAG_DISCRETE;
import static android.app.AppOpsManager.flagsToString;
import static android.app.AppOpsManager.getUidStateName;

@@ -152,11 +154,12 @@ public class AppOpHistoryHelper {
            @Nullable String packageNameFilter,
            @Nullable String[] opNamesFilter,
            @Nullable String attributionTagFilter, int opFlagsFilter,
            Set<String> attributionExemptPkgs) {
            Set<String> attributionExemptPkgs, @AppOpsManager.OpHistoryFlags int historyFlags) {
        List<AggregatedAppOpAccessEvent> discreteOps = getAppOpHistory(result,
                beginTimeMillis, endTimeMillis, filter, uidFilter, packageNameFilter, opNamesFilter,
                attributionTagFilter, opFlagsFilter);
        boolean assembleChains = attributionExemptPkgs != null;
        boolean includeDiscreteEvents = (historyFlags & HISTORY_FLAG_DISCRETE) != 0;
        boolean assembleChains = attributionExemptPkgs != null && includeDiscreteEvents;
        LongSparseArray<AttributionChain> attributionChains = null;
        if (assembleChains) {
            attributionChains = createAttributionChains(discreteOps, attributionExemptPkgs);
@@ -176,11 +179,16 @@ public class AppOpHistoryHelper {
                            proxyEvent.packageName(), proxyEvent.attributionTag());
                }
            }
            if (includeDiscreteEvents) {
                result.addDiscreteAccess(event.opCode(), event.uid(), event.packageName(),
                        event.attributionTag(), event.uidState(), event.opFlags(),
                        discretizeTimestamp(event.accessTimeMillis()),
                        discretizeDuration(event.durationMillis()), proxy);
            }
            if ((historyFlags & HISTORY_FLAG_AGGREGATE) != 0) {
                addAppOpAccessEventToHistoricalOps(result, event);
            }
        }
    }

    void addLongIntervalOpsToHistoricalOpsResult(AppOpsManager.HistoricalOps result,
@@ -193,6 +201,12 @@ public class AppOpHistoryHelper {
                beginTimeMillis, endTimeMillis, filter, uidFilter, packageNameFilter, opNamesFilter,
                attributionTagFilter, opFlagsFilter);
        for (AggregatedAppOpAccessEvent opEvent : appOpHistoryAccesses) {
            addAppOpAccessEventToHistoricalOps(result, opEvent);
        }
    }

    private void addAppOpAccessEventToHistoricalOps(AppOpsManager.HistoricalOps result,
            AggregatedAppOpAccessEvent opEvent) {
        result.increaseAccessCount(opEvent.opCode(), opEvent.uid(),
                opEvent.packageName(),
                opEvent.attributionTag(), opEvent.uidState(), opEvent.opFlags(),
@@ -206,7 +220,6 @@ public class AppOpHistoryHelper {
                opEvent.attributionTag(), opEvent.uidState(), opEvent.opFlags(),
                opEvent.totalDurationMillis());
    }
    }

    private List<AggregatedAppOpAccessEvent> getAppOpHistory(AppOpsManager.HistoricalOps result,
            long beginTimeMillis, long endTimeMillis, int filter, int uidFilter,
+3 −6
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.server.appop;

import static android.app.AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE;
import static android.app.AppOpsManager.HISTORY_FLAG_AGGREGATE;
import static android.app.AppOpsManager.HISTORY_FLAG_DISCRETE;
import static android.app.AppOpsManager.OP_ACCESS_ACCESSIBILITY;
import static android.app.AppOpsManager.OP_ACCESS_NOTIFICATIONS;
import static android.app.AppOpsManager.OP_BIND_ACCESSIBILITY_SERVICE;
@@ -550,11 +549,9 @@ public class HistoricalRegistry implements HistoricalRegistryInterface {
        final AppOpsManager.HistoricalOps result =
                new AppOpsManager.HistoricalOps(beginTimeMillis, endTimeMillis);

        if ((historyFlags & HISTORY_FLAG_DISCRETE) != 0) {
        mShortIntervalHistoryHelper.addShortIntervalOpsToHistoricalOpsResult(result,
                beginTimeMillis, endTimeMillis, filter, uid, packageName, opNames,
                    attributionTag, flags, new ArraySet<>(attributionExemptPkgs));
        }
                attributionTag, flags, new ArraySet<>(attributionExemptPkgs), historyFlags);
        if ((historyFlags & HISTORY_FLAG_AGGREGATE) != 0) {
            mLongIntervalHistoryHelper.addLongIntervalOpsToHistoricalOpsResult(result,
                    beginTimeMillis, endTimeMillis, filter, uid, packageName, opNames,