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

Commit 200dc55b authored by Svet Ganov's avatar Svet Ganov Committed by Svetoslav Ganov
Browse files

Add request object for querying historical ops - PermissionController

Test: atest CtsAppOpsTestCases

bug:123253745

Change-Id: I3cff17fe08ad361488a21d14d6a523f0c4c3f08c
parent 799be3a6
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.packageinstaller.permission.model;

import android.app.AppOpsManager;
import android.app.AppOpsManager.HistoricalOps;
import android.app.AppOpsManager.HistoricalOpsRequest;
import android.app.AppOpsManager.HistoricalPackageOps;
import android.app.AppOpsManager.HistoricalUidOps;
import android.app.AppOpsManager.PackageOps;
@@ -289,9 +290,13 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
            if ((mUsageFlags & USAGE_FLAG_HISTORICAL) != 0) {
                final AtomicReference<HistoricalOps> historicalOpsRef = new AtomicReference<>();
                final CountDownLatch latch = new CountDownLatch(1);
                appOpsManager.getHistoricalOps(mFilterUid,
                        mFilterPackageName, opNamesArray, mFilterBeginTimeMillis,
                        mFilterEndTimeMillis, Runnable::run,
                final HistoricalOpsRequest request = new HistoricalOpsRequest.Builder(
                        mFilterBeginTimeMillis, mFilterEndTimeMillis)
                        .setUid(mFilterUid)
                        .setPackageName(mFilterPackageName)
                        .setOpNames(new ArrayList<>(opNames))
                        .build();
                appOpsManager.getHistoricalOps(request, Runnable::run,
                        (HistoricalOps ops) -> {
                            historicalOpsRef.set(ops);
                            latch.countDown();
+8 −3
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.PackageManager.GET_PERMISSIONS;
import static android.graphics.Bitmap.Config.ARGB_8888;
import static android.graphics.Bitmap.createBitmap;
import static android.os.Process.INVALID_UID;
import static android.os.UserHandle.getUserHandleForUid;
import static android.os.UserHandle.myUserId;
import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_DELAY_MILLIS;
@@ -59,6 +58,7 @@ import static java.util.concurrent.TimeUnit.MINUTES;

import android.app.AppOpsManager;
import android.app.AppOpsManager.HistoricalOps;
import android.app.AppOpsManager.HistoricalOpsRequest;
import android.app.AppOpsManager.HistoricalPackageOps;
import android.app.Notification;
import android.app.NotificationChannel;
@@ -95,6 +95,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.permissioncontroller.R;

import java.io.BufferedReader;
@@ -103,6 +104,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -363,9 +365,12 @@ public class LocationAccessCheck {
                    return;
                }

                HistoricalOpsRequest request = new HistoricalOpsRequest.Builder(
                        Instant.EPOCH.toEpochMilli(), Long.MAX_VALUE)
                        .setOpNames(CollectionUtils.singletonOrEmpty(OPSTR_FINE_LOCATION))
                        .build();
                HistoricalOps[] ops = new HistoricalOps[1];
                mAppOpsManager.getHistoricalOps(INVALID_UID, null,
                        new String[]{OPSTR_FINE_LOCATION}, 0, Long.MAX_VALUE,
                mAppOpsManager.getHistoricalOps(request,
                        mContext.getMainExecutor(), (h) -> {
                            synchronized (ops) {
                                ops[0] = h;