Merge "Avoid creating Recognition Callback if preflight fails" into sc-dev

This commit is contained in:
Nate Myren
2021-07-02 23:50:37 +00:00
committed by Android (Google) Code Review

View File

@@ -115,20 +115,28 @@ public abstract class RecognitionService extends Service {
@NonNull AttributionSource attributionSource) { @NonNull AttributionSource attributionSource) {
try { try {
if (mCurrentCallback == null) { if (mCurrentCallback == null) {
if (DBG) { Context attributionContext = createContext(new ContextParams.Builder()
Log.d(TAG, "created new mCurrentCallback, listener = " + listener.asBinder()); .setNextAttributionSource(attributionSource)
} .build());
mCurrentCallback = new Callback(listener, attributionSource); boolean preflightPermissionCheckPassed = checkPermissionForPreflight(
attributionContext.getAttributionSource());
boolean preflightPermissionCheckPassed =
checkPermissionForPreflight();
if (preflightPermissionCheckPassed) { if (preflightPermissionCheckPassed) {
if (DBG) {
Log.d(TAG, "created new mCurrentCallback, listener = "
+ listener.asBinder());
}
mCurrentCallback = new Callback(listener, attributionSource,
attributionContext);
RecognitionService.this.onStartListening(intent, mCurrentCallback); RecognitionService.this.onStartListening(intent, mCurrentCallback);
} }
if (!preflightPermissionCheckPassed || !checkPermissionAndStartDataDelivery()) { if (!preflightPermissionCheckPassed || !checkPermissionAndStartDataDelivery()) {
listener.onError(SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS); listener.onError(SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS);
if (preflightPermissionCheckPassed) {
// If we attempted to start listening, cancel the callback
RecognitionService.this.onCancel(mCurrentCallback); RecognitionService.this.onCancel(mCurrentCallback);
dispatchClearCallback(); dispatchClearCallback();
}
Log.i(TAG, "caller doesn't have permission:" Log.i(TAG, "caller doesn't have permission:"
+ Manifest.permission.RECORD_AUDIO); + Manifest.permission.RECORD_AUDIO);
} }
@@ -285,8 +293,15 @@ public abstract class RecognitionService extends Service {
private Callback(IRecognitionListener listener, private Callback(IRecognitionListener listener,
@NonNull AttributionSource attributionSource) { @NonNull AttributionSource attributionSource) {
this(listener, attributionSource, null);
}
private Callback(IRecognitionListener listener,
@NonNull AttributionSource attributionSource,
@Nullable Context attributionContext) {
mListener = listener; mListener = listener;
mCallingAttributionSource = attributionSource; mCallingAttributionSource = attributionSource;
mAttributionContext = attributionContext;
} }
/** /**
@@ -466,10 +481,10 @@ public abstract class RecognitionService extends Service {
return mStartedDataDelivery; return mStartedDataDelivery;
} }
private boolean checkPermissionForPreflight() { private boolean checkPermissionForPreflight(AttributionSource attributionSource) {
return PermissionChecker.checkPermissionForPreflight(RecognitionService.this, return PermissionChecker.checkPermissionForPreflight(RecognitionService.this,
Manifest.permission.RECORD_AUDIO, mCurrentCallback.getAttributionContextForCaller() Manifest.permission.RECORD_AUDIO, attributionSource)
.getAttributionSource()) == PermissionChecker.PERMISSION_GRANTED; == PermissionChecker.PERMISSION_GRANTED;
} }
void finishDataDelivery() { void finishDataDelivery() {