Merge "Cancel RecognitionService if permission check fails" into sc-dev

This commit is contained in:
Nate Myren
2021-07-02 16:06:15 +00:00
committed by Android (Google) Code Review

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);
}
@@ -460,6 +466,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;