Merge "Don don't blame if attr ctx created" into sc-dev am: 55b9b53e34

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

Change-Id: I3e320ae0b6feb6c1661061d82762d234a87a18a5
This commit is contained in:
TreeHugger Robot
2021-06-12 12:00:13 +00:00
committed by Automerger Merge Worker

View File

@@ -33,10 +33,13 @@ import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.util.Log;
import com.android.internal.util.function.pooled.PooledLambda;
import java.lang.ref.WeakReference;
import java.util.Objects;
@@ -225,6 +228,27 @@ public abstract class RecognitionService extends Service {
*/
protected abstract void onStopListening(Callback listener);
@Override
public Context createContext(@NonNull ContextParams contextParams) {
if (contextParams.getNextAttributionSource() != null) {
if (mHandler.getLooper().equals(Looper.myLooper())) {
handleAttributionContextCreation(contextParams.getNextAttributionSource());
} else {
mHandler.sendMessage(
PooledLambda.obtainMessage(this::handleAttributionContextCreation,
contextParams.getNextAttributionSource()));
}
}
return super.createContext(contextParams);
}
private void handleAttributionContextCreation(@NonNull AttributionSource attributionSource) {
if (mCurrentCallback != null
&& mCurrentCallback.mCallingAttributionSource.equals(attributionSource)) {
mCurrentCallback.mAttributionContextCreated = true;
}
}
@Override
public final IBinder onBind(final Intent intent) {
if (DBG) Log.d(TAG, "onBind, intent=" + intent);
@@ -249,6 +273,7 @@ public abstract class RecognitionService extends Service {
private final IRecognitionListener mListener;
private final @NonNull AttributionSource mCallingAttributionSource;
private @Nullable Context mAttributionContext;
private boolean mAttributionContextCreated;
private Callback(IRecognitionListener listener,
@NonNull AttributionSource attributionSource) {
@@ -421,7 +446,7 @@ public abstract class RecognitionService extends Service {
}
private boolean checkPermissionAndStartDataDelivery() {
if (isPerformingDataDelivery()) {
if (mCurrentCallback.mAttributionContextCreated) {
return true;
}
if (PermissionChecker.checkPermissionAndStartDataDelivery(
@@ -441,13 +466,4 @@ public abstract class RecognitionService extends Service {
mCurrentCallback.getAttributionContextForCaller().getAttributionSource());
}
}
@SuppressWarnings("ConstantCondition")
private boolean isPerformingDataDelivery() {
final int op = AppOpsManager.permissionToOpCode(Manifest.permission.RECORD_AUDIO);
final AppOpsManager appOpsManager = getSystemService(AppOpsManager.class);
return appOpsManager.isProxying(op, getAttributionTag(),
mCurrentCallback.getCallingAttributionSource().getUid(),
mCurrentCallback.getCallingAttributionSource().getPackageName());
}
}