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

Commit a46304f5 authored by Nate Myren's avatar Nate Myren Committed by Automerger Merge Worker
Browse files

Merge "Avoid creating Recognition Callback if preflight fails" into sc-dev am: 243bce62

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

Change-Id: I35bf4d3c4824e890a1d446ce46d0e55a96b46e30
parents 166d16b2 243bce62
Loading
Loading
Loading
Loading
+27 −12
Original line number Original line Diff line number Diff line
@@ -115,20 +115,28 @@ public abstract class RecognitionService extends Service {
            @NonNull AttributionSource attributionSource) {
            @NonNull AttributionSource attributionSource) {
        try {
        try {
            if (mCurrentCallback == null) {
            if (mCurrentCallback == null) {
                Context attributionContext = createContext(new ContextParams.Builder()
                        .setNextAttributionSource(attributionSource)
                        .build());
                boolean preflightPermissionCheckPassed = checkPermissionForPreflight(
                        attributionContext.getAttributionSource());
                if (preflightPermissionCheckPassed) {
                    if (DBG) {
                    if (DBG) {
                    Log.d(TAG, "created new mCurrentCallback, listener = " + listener.asBinder());
                        Log.d(TAG, "created new mCurrentCallback, listener = "
                                + listener.asBinder());
                    }
                    }
                mCurrentCallback = new Callback(listener, attributionSource);
                    mCurrentCallback = new Callback(listener, attributionSource,

                            attributionContext);
                boolean preflightPermissionCheckPassed =
                        checkPermissionForPreflight();
                if (preflightPermissionCheckPassed) {
                    RecognitionService.this.onStartListening(intent, mCurrentCallback);
                    RecognitionService.this.onStartListening(intent, mCurrentCallback);
                }
                }

                if (!preflightPermissionCheckPassed || !checkPermissionAndStartDataDelivery()) {
                if (!preflightPermissionCheckPassed || !checkPermissionAndStartDataDelivery()) {
                    listener.onError(SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS);
                    listener.onError(SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS);
                    if (preflightPermissionCheckPassed) {
                        // If we attempted to start listening, cancel the callback
                        RecognitionService.this.onCancel(mCurrentCallback);
                        RecognitionService.this.onCancel(mCurrentCallback);
                        dispatchClearCallback();
                        dispatchClearCallback();
                    }
                    Log.i(TAG, "caller doesn't have permission:"
                    Log.i(TAG, "caller doesn't have permission:"
                            + Manifest.permission.RECORD_AUDIO);
                            + Manifest.permission.RECORD_AUDIO);
                }
                }
@@ -285,8 +293,15 @@ public abstract class RecognitionService extends Service {


        private Callback(IRecognitionListener listener,
        private Callback(IRecognitionListener listener,
                @NonNull AttributionSource attributionSource) {
                @NonNull AttributionSource attributionSource) {
            this(listener, attributionSource, null);
        }

        private Callback(IRecognitionListener listener,
                @NonNull AttributionSource attributionSource,
                @Nullable Context attributionContext) {
            mListener = listener;
            mListener = listener;
            mCallingAttributionSource = attributionSource;
            mCallingAttributionSource = attributionSource;
            mAttributionContext = attributionContext;
        }
        }


        /**
        /**
@@ -466,10 +481,10 @@ public abstract class RecognitionService extends Service {
        return mStartedDataDelivery;
        return mStartedDataDelivery;
    }
    }


    private boolean checkPermissionForPreflight() {
    private boolean checkPermissionForPreflight(AttributionSource attributionSource) {
        return PermissionChecker.checkPermissionForPreflight(RecognitionService.this,
        return PermissionChecker.checkPermissionForPreflight(RecognitionService.this,
                Manifest.permission.RECORD_AUDIO, mCurrentCallback.getAttributionContextForCaller()
                Manifest.permission.RECORD_AUDIO, attributionSource)
                        .getAttributionSource()) == PermissionChecker.PERMISSION_GRANTED;
                == PermissionChecker.PERMISSION_GRANTED;
    }
    }


    void finishDataDelivery() {
    void finishDataDelivery() {