Merge "Fix finishOp for HotwordDetectionService" into sc-dev

This commit is contained in:
Ahaan Ugale
2021-06-26 03:27:40 +00:00
committed by Android (Google) Code Review
3 changed files with 55 additions and 1 deletions

View File

@@ -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.
*

View File

@@ -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) {

View File

@@ -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,