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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user