Merge "Fix finishOp for HotwordDetectionService" into sc-dev
This commit is contained in:
@@ -16,9 +16,9 @@
|
|||||||
|
|
||||||
package android.app;
|
package android.app;
|
||||||
|
|
||||||
import android.app.AppOpsManager.AttributionFlags;
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.app.AppOpsManager.AttributionFlags;
|
||||||
import android.content.AttributionSource;
|
import android.content.AttributionSource;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.util.SparseArray;
|
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.HeptFunction;
|
||||||
import com.android.internal.util.function.HexFunction;
|
import com.android.internal.util.function.HexFunction;
|
||||||
import com.android.internal.util.function.QuadFunction;
|
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.QuintFunction;
|
||||||
import com.android.internal.util.function.TriFunction;
|
import com.android.internal.util.function.TriFunction;
|
||||||
import com.android.internal.util.function.UndecFunction;
|
import com.android.internal.util.function.UndecFunction;
|
||||||
@@ -154,6 +155,21 @@ public abstract class AppOpsManagerInternal {
|
|||||||
Boolean, String, Boolean, Boolean, Integer, Integer, Integer,
|
Boolean, String, Boolean, Boolean, Integer, Integer, Integer,
|
||||||
SyncNotedAppOp> superImpl);
|
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.
|
* Allows overriding finish proxy op.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -4027,6 +4027,12 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
@Override
|
@Override
|
||||||
public void finishOperation(IBinder clientId, int code, int uid, String packageName,
|
public void finishOperation(IBinder clientId, int code, int uid, String packageName,
|
||||||
String attributionTag) {
|
String attributionTag) {
|
||||||
|
mCheckOpsDelegateDispatcher.finishOperation(clientId, code, uid, packageName,
|
||||||
|
attributionTag);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void finishOperationImpl(IBinder clientId, int code, int uid, String packageName,
|
||||||
|
String attributionTag) {
|
||||||
verifyIncomingUid(uid);
|
verifyIncomingUid(uid);
|
||||||
verifyIncomingOp(code);
|
verifyIncomingOp(code);
|
||||||
verifyIncomingPackage(packageName, UserHandle.getUserId(uid));
|
verifyIncomingPackage(packageName, UserHandle.getUserId(uid));
|
||||||
@@ -7530,6 +7536,29 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
attributionChainId, AppOpsService.this::startProxyOperationImpl);
|
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,
|
public void finishProxyOperation(int code,
|
||||||
@NonNull AttributionSource attributionSource, boolean skipProxyOperation) {
|
@NonNull AttributionSource attributionSource, boolean skipProxyOperation) {
|
||||||
if (mPolicy != null) {
|
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.HeptFunction;
|
||||||
import com.android.internal.util.function.HexFunction;
|
import com.android.internal.util.function.HexFunction;
|
||||||
import com.android.internal.util.function.QuadFunction;
|
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.QuintFunction;
|
||||||
import com.android.internal.util.function.TriFunction;
|
import com.android.internal.util.function.TriFunction;
|
||||||
import com.android.internal.util.function.UndecFunction;
|
import com.android.internal.util.function.UndecFunction;
|
||||||
@@ -242,6 +243,14 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat
|
|||||||
proxiedAttributionFlags, attributionChainId);
|
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
|
@Override
|
||||||
public void finishProxyOperation(int code, @NonNull AttributionSource attributionSource,
|
public void finishProxyOperation(int code, @NonNull AttributionSource attributionSource,
|
||||||
boolean skipProxyOperation, @NonNull TriFunction<Integer, AttributionSource,
|
boolean skipProxyOperation, @NonNull TriFunction<Integer, AttributionSource,
|
||||||
|
|||||||
Reference in New Issue
Block a user