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

Commit 55b9b53e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Don don't blame if attr ctx created" into sc-dev

parents 531e242b 97bf4e00
Loading
Loading
Loading
Loading
+26 −10
Original line number Diff line number Diff line
@@ -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());
    }
}