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

Commit f2e5d637 authored by Ahaan Ugale's avatar Ahaan Ugale Committed by Automerger Merge Worker
Browse files

Merge "Fix finishOp for HotwordDetectionService" into sc-dev am: e288fd31

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

Change-Id: Id11109862ae7af0c983499bdbda67c1b8aceb8e3
parents 757a6c6f e288fd31
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -16,9 +16,9 @@

package android.app;

import android.app.AppOpsManager.AttributionFlags;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AppOpsManager.AttributionFlags;
import android.content.AttributionSource;
import android.os.IBinder;
import android.util.SparseArray;
@@ -29,6 +29,7 @@ import com.android.internal.util.function.DecFunction;
import com.android.internal.util.function.HeptFunction;
import com.android.internal.util.function.HexFunction;
import com.android.internal.util.function.QuadFunction;
import com.android.internal.util.function.QuintConsumer;
import com.android.internal.util.function.QuintFunction;
import com.android.internal.util.function.TriFunction;
import com.android.internal.util.function.UndecFunction;
@@ -154,6 +155,21 @@ public abstract class AppOpsManagerInternal {
                        Boolean, String, Boolean, Boolean, Integer, Integer, Integer,
                        SyncNotedAppOp> superImpl);

        /**
         * Allows overriding finish op.
         *
         * @param clientId The client state.
         * @param code The op code to finish.
         * @param uid The UID for which the op was noted.
         * @param packageName The package for which it was noted. {@code null} for system package.
         * @param attributionTag the attribution tag.
         */
        default void finishOperation(IBinder clientId, int code, int uid, String packageName,
                String attributionTag,
                @NonNull QuintConsumer<IBinder, Integer, Integer, String, String> superImpl) {
            superImpl.accept(clientId, code, uid, packageName, attributionTag);
        }

        /**
         * Allows overriding finish proxy op.
         *
+29 −0
Original line number Diff line number Diff line
@@ -4027,6 +4027,12 @@ public class AppOpsService extends IAppOpsService.Stub {
    @Override
    public void finishOperation(IBinder clientId, int code, int uid, String packageName,
            String attributionTag) {
        mCheckOpsDelegateDispatcher.finishOperation(clientId, code, uid, packageName,
                attributionTag);
    }

    private void finishOperationImpl(IBinder clientId, int code, int uid, String packageName,
            String attributionTag) {
        verifyIncomingUid(uid);
        verifyIncomingOp(code);
        verifyIncomingPackage(packageName, UserHandle.getUserId(uid));
@@ -7530,6 +7536,29 @@ public class AppOpsService extends IAppOpsService.Stub {
                    attributionChainId, AppOpsService.this::startProxyOperationImpl);
        }

        public void finishOperation(IBinder clientId, int code, int uid, String packageName,
                String attributionTag) {
            if (mPolicy != null) {
                if (mCheckOpsDelegate != null) {
                    mPolicy.finishOperation(clientId, code, uid, packageName, attributionTag,
                            this::finishDelegateOperationImpl);
                } else {
                    mPolicy.finishOperation(clientId, code, uid, packageName, attributionTag,
                            AppOpsService.this::finishOperationImpl);
                }
            } else if (mCheckOpsDelegate != null) {
                finishDelegateOperationImpl(clientId, code, uid, packageName, attributionTag);
            } else {
                finishOperationImpl(clientId, code, uid, packageName, attributionTag);
            }
        }

        private void finishDelegateOperationImpl(IBinder clientId, int code, int uid,
                String packageName, String attributionTag) {
            mCheckOpsDelegate.finishOperation(clientId, code, uid, packageName, attributionTag,
                    AppOpsService.this::finishOperationImpl);
        }

        public void finishProxyOperation(int code,
                @NonNull AttributionSource attributionSource, boolean skipProxyOperation) {
            if (mPolicy != null) {
+9 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.internal.util.function.DecFunction;
import com.android.internal.util.function.HeptFunction;
import com.android.internal.util.function.HexFunction;
import com.android.internal.util.function.QuadFunction;
import com.android.internal.util.function.QuintConsumer;
import com.android.internal.util.function.QuintFunction;
import com.android.internal.util.function.TriFunction;
import com.android.internal.util.function.UndecFunction;
@@ -242,6 +243,14 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat
                proxiedAttributionFlags, attributionChainId);
    }

    @Override
    public void finishOperation(IBinder clientId, int code, int uid, String packageName,
            String attributionTag,
            @NonNull QuintConsumer<IBinder, Integer, Integer, String, String> superImpl) {
        superImpl.accept(clientId, resolveDatasourceOp(code, uid, packageName, attributionTag),
                resolveUid(code, uid), packageName, attributionTag);
    }

    @Override
    public void finishProxyOperation(int code, @NonNull AttributionSource attributionSource,
            boolean skipProxyOperation, @NonNull TriFunction<Integer, AttributionSource,