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

Commit af406877 authored by Stanislav Zholnin's avatar Stanislav Zholnin Committed by Automerger Merge Worker
Browse files

Merge "Add API support for permission access timeline." into sc-dev am: 4f507282

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13582326

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I1cc1d4b63f296ed21986c1950a4116517aca33ff
parents c1f8be74 4f507282
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -423,6 +423,9 @@ package android.app {
    method @Nullable public static String opToPermission(@NonNull String);
    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(@NonNull String, int, @Nullable String, int);
    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(@NonNull String, int, int);
    field public static final int HISTORY_FLAGS_ALL = 3; // 0x3
    field public static final int HISTORY_FLAG_AGGREGATE = 1; // 0x1
    field public static final int HISTORY_FLAG_DISCRETE = 2; // 0x2
    field public static final String OPSTR_ACCEPT_HANDOVER = "android:accept_handover";
    field public static final String OPSTR_ACCESS_ACCESSIBILITY = "android:access_accessibility";
    field public static final String OPSTR_ACCESS_NOTIFICATIONS = "android:access_notifications";
@@ -536,9 +539,14 @@ package android.app {
    method public long getAccessDuration(int, int, int);
    method public long getBackgroundAccessCount(int);
    method public long getBackgroundAccessDuration(int);
    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getBackgroundDiscreteAccesses(int);
    method public long getBackgroundRejectCount(int);
    method @NonNull public android.app.AppOpsManager.AttributedOpEntry getDiscreteAccessAt(@IntRange(from=0) int);
    method @IntRange(from=0) public int getDiscreteAccessCount();
    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getDiscreteAccesses(int, int, int);
    method public long getForegroundAccessCount(int);
    method public long getForegroundAccessDuration(int);
    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getForegroundDiscreteAccesses(int);
    method public long getForegroundRejectCount(int);
    method @NonNull public String getOpName();
    method public long getRejectCount(int, int, int);
@@ -565,6 +573,7 @@ package android.app {
    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest build();
    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setAttributionTag(@Nullable String);
    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setFlags(int);
    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setHistoryFlags(int);
    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setOpNames(@Nullable java.util.List<java.lang.String>);
    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setPackageName(@Nullable String);
    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setUid(int);
+4 −0
Original line number Diff line number Diff line
@@ -224,6 +224,9 @@ package android.app {
    field public static final int HISTORICAL_MODE_DISABLED = 0; // 0x0
    field public static final int HISTORICAL_MODE_ENABLED_ACTIVE = 1; // 0x1
    field public static final int HISTORICAL_MODE_ENABLED_PASSIVE = 2; // 0x2
    field public static final int HISTORY_FLAGS_ALL = 3; // 0x3
    field public static final int HISTORY_FLAG_AGGREGATE = 1; // 0x1
    field public static final int HISTORY_FLAG_DISCRETE = 2; // 0x2
    field public static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time";
    field public static final String KEY_FG_SERVICE_STATE_SETTLE_TIME = "fg_service_state_settle_time";
    field public static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time";
@@ -238,6 +241,7 @@ package android.app {

  public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
    ctor public AppOpsManager.HistoricalOps(long, long);
    method public void addDiscreteAccess(int, int, @NonNull String, @Nullable String, int, int, long, long);
    method public void increaseAccessCount(int, int, @NonNull String, @Nullable String, int, int, long);
    method public void increaseAccessDuration(int, int, @NonNull String, @Nullable String, int, int, long);
    method public void increaseRejectCount(int, int, @NonNull String, @Nullable String, int, int, long);
+366 −25

File changed.

Preview size limit exceeded, changes collapsed.

+3 −3
Original line number Diff line number Diff line
@@ -74,11 +74,11 @@ interface IAppOpsService {
    @UnsupportedAppUsage
    List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops);
    void getHistoricalOps(int uid, String packageName, String attributionTag, in List<String> ops,
            int filter, long beginTimeMillis, long endTimeMillis, int flags,
            int historyFlags, int filter, long beginTimeMillis, long endTimeMillis, int flags,
            in RemoteCallback callback);
    void getHistoricalOpsFromDiskRaw(int uid, String packageName, String attributionTag,
            in List<String> ops, int filter, long beginTimeMillis, long endTimeMillis, int flags,
            in RemoteCallback callback);
            in List<String> ops, int historyFlags, int filter, long beginTimeMillis,
            long endTimeMillis, int flags, in RemoteCallback callback);
    void offsetHistory(long duration);
    void setHistoryParameters(int mode, long baseSnapshotInterval, int compressionStep);
    void addHistoricalOps(in AppOpsManager.HistoricalOps ops);
+21 −9
Original line number Diff line number Diff line
@@ -843,11 +843,15 @@ public class AppOpsService extends IAppOpsService.Stub {
        public void accessed(int proxyUid, @Nullable String proxyPackageName,
                @Nullable String proxyAttributionTag, @AppOpsManager.UidState int uidState,
                @OpFlags int flags) {
            accessed(System.currentTimeMillis(), -1, proxyUid, proxyPackageName,
            long accessTime = System.currentTimeMillis();
            accessed(accessTime, -1, proxyUid, proxyPackageName,
                    proxyAttributionTag, uidState, flags);

            mHistoricalRegistry.incrementOpAccessedCount(parent.op, parent.uid, parent.packageName,
                    tag, uidState, flags);

            mHistoricalRegistry.mDiscreteRegistry.recordDiscreteAccess(parent.uid,
                    parent.packageName, parent.op, tag, flags, uidState, accessTime, -1);
        }

        /**
@@ -1004,8 +1008,10 @@ public class AppOpsService extends IAppOpsService.Stub {
                OpEventProxyInfo proxyCopy = event.getProxy() != null
                        ? new OpEventProxyInfo(event.getProxy()) : null;

                long accessDurationMillis =
                        SystemClock.elapsedRealtime() - event.getStartElapsedTime();
                NoteOpEvent finishedEvent = new NoteOpEvent(event.getStartTime(),
                        SystemClock.elapsedRealtime() - event.getStartElapsedTime(), proxyCopy);
                        accessDurationMillis, proxyCopy);
                mAccessEvents.put(makeKey(event.getUidState(), event.getFlags()),
                        finishedEvent);

@@ -1013,6 +1019,10 @@ public class AppOpsService extends IAppOpsService.Stub {
                        parent.packageName, tag, event.getUidState(),
                        event.getFlags(), finishedEvent.getDuration());

                mHistoricalRegistry.mDiscreteRegistry.recordDiscreteAccess(parent.uid,
                        parent.packageName, parent.op, tag, event.getFlags(), event.getUidState(),
                        event.getStartTime(), accessDurationMillis);

                mInProgressStartOpEventPool.release(event);

                if (mInProgressEvents.isEmpty()) {
@@ -2087,8 +2097,8 @@ public class AppOpsService extends IAppOpsService.Stub {

    @Override
    public void getHistoricalOps(int uid, String packageName, String attributionTag,
            List<String> opNames, int filter, long beginTimeMillis, long endTimeMillis,
            int flags, RemoteCallback callback) {
            List<String> opNames, int dataType, int filter, long beginTimeMillis,
            long endTimeMillis, int flags, RemoteCallback callback) {
        PackageManager pm = mContext.getPackageManager();

        ensureHistoricalOpRequestIsValid(uid, packageName, attributionTag, opNames, filter,
@@ -2120,14 +2130,14 @@ public class AppOpsService extends IAppOpsService.Stub {

        // Must not hold the appops lock
        mHandler.post(PooledLambda.obtainRunnable(HistoricalRegistry::getHistoricalOps,
                mHistoricalRegistry, uid, packageName, attributionTag, opNamesArray, filter,
                beginTimeMillis, endTimeMillis, flags, callback).recycleOnUse());
                mHistoricalRegistry, uid, packageName, attributionTag, opNamesArray, dataType,
                filter, beginTimeMillis, endTimeMillis, flags, callback).recycleOnUse());
    }

    @Override
    public void getHistoricalOpsFromDiskRaw(int uid, String packageName, String attributionTag,
            List<String> opNames, int filter, long beginTimeMillis, long endTimeMillis,
            int flags, RemoteCallback callback) {
            List<String> opNames, int dataType, int filter, long beginTimeMillis,
            long endTimeMillis, int flags, RemoteCallback callback) {
        ensureHistoricalOpRequestIsValid(uid, packageName, attributionTag, opNames, filter,
                beginTimeMillis, endTimeMillis, flags);
        Objects.requireNonNull(callback, "callback cannot be null");
@@ -2140,7 +2150,7 @@ public class AppOpsService extends IAppOpsService.Stub {

        // Must not hold the appops lock
        mHandler.post(PooledLambda.obtainRunnable(HistoricalRegistry::getHistoricalOpsFromDiskRaw,
                mHistoricalRegistry, uid, packageName, attributionTag, opNamesArray,
                mHistoricalRegistry, uid, packageName, attributionTag, opNamesArray, dataType,
                filter, beginTimeMillis, endTimeMillis, flags, callback).recycleOnUse());
    }

@@ -4759,6 +4769,7 @@ public class AppOpsService extends IAppOpsService.Stub {
                mFile.failWrite(stream);
            }
        }
        mHistoricalRegistry.mDiscreteRegistry.writeAndClearAccessHistory();
    }

    static class Shell extends ShellCommand {
@@ -6115,6 +6126,7 @@ public class AppOpsService extends IAppOpsService.Stub {
                "clearHistory");
        // Must not hold the appops lock
        mHistoricalRegistry.clearHistory();
        mHistoricalRegistry.mDiscreteRegistry.clearHistory();
    }

    @Override
Loading