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

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

Change-Id: I80fc730f89a203762f7804a7f294875e0b083a53
This commit is contained in:
Nate Myren
2021-07-02 16:08:50 +00:00
committed by Automerger Merge Worker

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;