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

Commit 5c33b4ba authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix discrete and aggregate filter for getHistoricalOps API" into main

parents f922c195 9d24bf1a
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,