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

Commit 00c05eb2 authored by Hai Zhang's avatar Hai Zhang
Browse files

Disable HistoricalOps API if permission hub isn't enabled.

Bug: 140431380
Test: adb shell cmd stats pull-source 10060
Test: atest HistoricalAppopsTest fails without ag/9362355
Test: atest HistoricalAppopsTest passes with ag/9362355
Change-Id: I16345b1f885ed5b9e83abb37e3406186aee43375
parent 0d1b51e5
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.app.AppOpsManager.UidState;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
@@ -36,6 +37,7 @@ import android.os.Message;
import android.os.Process;
import android.os.RemoteCallback;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.util.ArraySet;
import android.util.LongSparseArray;
@@ -44,6 +46,7 @@ import android.util.TimeUtils;
import android.util.Xml;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.os.AtomicDirectory;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.ArrayUtils;
@@ -272,6 +275,10 @@ final class HistoricalRegistry {

    void dump(String prefix, PrintWriter pw, int filterUid,
              String filterPackage, int filterOp) {
        if (!isApiEnabled()) {
            return;
        }

        synchronized (mOnDiskLock) {
            synchronized (mInMemoryLock) {
                pw.println();
@@ -324,6 +331,11 @@ final class HistoricalRegistry {
    void getHistoricalOpsFromDiskRaw(int uid, @NonNull String packageName,
            @Nullable String[] opNames, long beginTimeMillis, long endTimeMillis,
            @OpFlags int flags, @NonNull RemoteCallback callback) {
        if (!isApiEnabled()) {
            callback.sendResult(new Bundle());
            return;
        }

        synchronized (mOnDiskLock) {
            synchronized (mInMemoryLock) {
                if (!isPersistenceInitializedMLocked()) {
@@ -344,6 +356,11 @@ final class HistoricalRegistry {
    void getHistoricalOps(int uid, @NonNull String packageName,
            @Nullable String[] opNames, long beginTimeMillis, long endTimeMillis,
            @OpFlags int flags, @NonNull RemoteCallback callback) {
        if (!isApiEnabled()) {
            callback.sendResult(new Bundle());
            return;
        }

        final long currentTimeMillis = System.currentTimeMillis();
        if (endTimeMillis == Long.MAX_VALUE) {
            endTimeMillis = currentTimeMillis;
@@ -681,6 +698,12 @@ final class HistoricalRegistry {
        }
    }

    private static boolean isApiEnabled() {
        return Binder.getCallingUid() == Process.myUid()
                || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
                SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, false);
    }

    private static final class Persistence {
        private static final boolean DEBUG = false;