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

Commit eed0744b 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: I6cf2b01087c1a94bc9d20b46189fb02a65c28f8a
parents 46ec3a64 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());
    }
}