Merge "Fix finishOp for HotwordDetectionService" into sc-dev
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user