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
This commit is contained in:
Nate Myren
2021-07-01 14:49:14 -07:00
parent c2a780dbd6
commit 6978614aeb

View File

@@ -120,9 +120,15 @@ public abstract class RecognitionService extends Service {
}
mCurrentCallback = new Callback(listener, attributionSource);
RecognitionService.this.onStartListening(intent, mCurrentCallback);
if (!checkPermissionAndStartDataDelivery()) {
boolean preflightPermissionCheckPassed =
checkPermissionForPreflight();
if (preflightPermissionCheckPassed) {
RecognitionService.this.onStartListening(intent, mCurrentCallback);
}
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;