Merge "Avoid creating Recognition Callback if preflight fails" into sc-dev
This commit is contained in:
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user