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

Commit 904fc66e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

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

Change-Id: Ifc84f8a4a15c058645a2d08790941bd760457574
parents bb81a4bd 55b9b53e
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());
    }
}