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

Commit 6978614a authored by Nate Myren's avatar Nate Myren
Browse files

Cancel RecognitionService if permission check fails

This ensures that, when platform checks fail, the RecognitionService is
notified that it should cancel recognition

Fixes: 190848702
Test: manual
Change-Id: I5073728e544a47f386824ca0a034e149661d864a
parent c2a780db
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -120,9 +120,15 @@ public abstract class RecognitionService extends Service {
                }
                mCurrentCallback = new Callback(listener, attributionSource);

                boolean preflightPermissionCheckPassed =
                        checkPermissionForPreflight();
                if (preflightPermissionCheckPassed) {
                    RecognitionService.this.onStartListening(intent, mCurrentCallback);
                if (!checkPermissionAndStartDataDelivery()) {
                }
                if (!preflightPermissionCheckPassed || !checkPermissionAndStartDataDelivery()) {
                    listener.onError(SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS);
                    RecognitionService.this.onCancel(mCurrentCallback);
                    dispatchClearCallback();
                    Log.i(TAG, "caller doesn't have permission:"
                            + Manifest.permission.RECORD_AUDIO);
                }
@@ -459,6 +465,12 @@ public abstract class RecognitionService extends Service {
        return mStartedDataDelivery;
    }

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

    void finishDataDelivery() {
        if (mStartedDataDelivery) {
            mStartedDataDelivery = false;