Loading core/java/android/service/voice/VisualQueryDetector.java +68 −9 Original line number Diff line number Diff line Loading @@ -64,7 +64,6 @@ public class VisualQueryDetector { IVoiceInteractionManagerService managerService, @NonNull @CallbackExecutor Executor executor, Callback callback) { mManagerService = managerService; mCallback = callback; mExecutor = executor; Loading Loading @@ -109,8 +108,18 @@ public class VisualQueryDetector { if (DEBUG) { Slog.i(TAG, "#startRecognition"); } // TODO(b/261783819): Call StartDetection on VisualQueryDetectionService with the system. // check if the detector is active with the initialization delegate mInitializationDelegate.startRecognition(); try { mManagerService.startPerceiving(new BinderCallback(mExecutor, mCallback)); } catch (SecurityException e) { Slog.e(TAG, "startRecognition failed: " + e); return false; } catch (RemoteException e) { e.rethrowFromSystemServer(); } return true; } /** Loading @@ -123,8 +132,15 @@ public class VisualQueryDetector { if (DEBUG) { Slog.i(TAG, "#stopRecognition"); } // TODO(b/261783819): Call StopDetection on VisualQueryDetectionService with the system. return false; // check if the detector is active with the initialization delegate mInitializationDelegate.startRecognition(); try { mManagerService.stopPerceiving(); } catch (RemoteException e) { e.rethrowFromSystemServer(); } return true; } /** Loading Loading @@ -219,14 +235,14 @@ public class VisualQueryDetector { @Override public boolean stopRecognition() throws IllegalDetectorStateException { //No-op, we only reuse the initialization methods. return false; throwIfDetectorIsNoLongerActive(); return true; } @Override public boolean startRecognition() throws IllegalDetectorStateException { //No-op, we only reuse the initialization methods. return false; throwIfDetectorIsNoLongerActive(); return true; } @Override Loading @@ -244,6 +260,49 @@ public class VisualQueryDetector { } } private static class BinderCallback extends IVisualQueryDetectionVoiceInteractionCallback.Stub { private final Executor mExecutor; private final VisualQueryDetector.Callback mCallback; BinderCallback(Executor executor, VisualQueryDetector.Callback callback) { this.mExecutor = executor; this.mCallback = callback; } /** Called when the detected result is valid. */ @Override public void onQueryDetected(@NonNull String partialQuery) { Slog.v(TAG, "BinderCallback#onQueryDetected"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onQueryDetected(partialQuery))); } @Override public void onQueryFinished() { Slog.v(TAG, "BinderCallback#onQueryFinished"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onQueryFinished())); } @Override public void onQueryRejected() { Slog.v(TAG, "BinderCallback#onQueryRejected"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onQueryRejected())); } /** Called when the detection fails due to an error. */ @Override public void onError() { Slog.v(TAG, "BinderCallback#onError"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onError())); } } private static class InitializationStateListener extends IHotwordRecognitionStatusCallback.Stub { private final Executor mExecutor; Loading Loading
core/java/android/service/voice/VisualQueryDetector.java +68 −9 Original line number Diff line number Diff line Loading @@ -64,7 +64,6 @@ public class VisualQueryDetector { IVoiceInteractionManagerService managerService, @NonNull @CallbackExecutor Executor executor, Callback callback) { mManagerService = managerService; mCallback = callback; mExecutor = executor; Loading Loading @@ -109,8 +108,18 @@ public class VisualQueryDetector { if (DEBUG) { Slog.i(TAG, "#startRecognition"); } // TODO(b/261783819): Call StartDetection on VisualQueryDetectionService with the system. // check if the detector is active with the initialization delegate mInitializationDelegate.startRecognition(); try { mManagerService.startPerceiving(new BinderCallback(mExecutor, mCallback)); } catch (SecurityException e) { Slog.e(TAG, "startRecognition failed: " + e); return false; } catch (RemoteException e) { e.rethrowFromSystemServer(); } return true; } /** Loading @@ -123,8 +132,15 @@ public class VisualQueryDetector { if (DEBUG) { Slog.i(TAG, "#stopRecognition"); } // TODO(b/261783819): Call StopDetection on VisualQueryDetectionService with the system. return false; // check if the detector is active with the initialization delegate mInitializationDelegate.startRecognition(); try { mManagerService.stopPerceiving(); } catch (RemoteException e) { e.rethrowFromSystemServer(); } return true; } /** Loading Loading @@ -219,14 +235,14 @@ public class VisualQueryDetector { @Override public boolean stopRecognition() throws IllegalDetectorStateException { //No-op, we only reuse the initialization methods. return false; throwIfDetectorIsNoLongerActive(); return true; } @Override public boolean startRecognition() throws IllegalDetectorStateException { //No-op, we only reuse the initialization methods. return false; throwIfDetectorIsNoLongerActive(); return true; } @Override Loading @@ -244,6 +260,49 @@ public class VisualQueryDetector { } } private static class BinderCallback extends IVisualQueryDetectionVoiceInteractionCallback.Stub { private final Executor mExecutor; private final VisualQueryDetector.Callback mCallback; BinderCallback(Executor executor, VisualQueryDetector.Callback callback) { this.mExecutor = executor; this.mCallback = callback; } /** Called when the detected result is valid. */ @Override public void onQueryDetected(@NonNull String partialQuery) { Slog.v(TAG, "BinderCallback#onQueryDetected"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onQueryDetected(partialQuery))); } @Override public void onQueryFinished() { Slog.v(TAG, "BinderCallback#onQueryFinished"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onQueryFinished())); } @Override public void onQueryRejected() { Slog.v(TAG, "BinderCallback#onQueryRejected"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onQueryRejected())); } /** Called when the detection fails due to an error. */ @Override public void onError() { Slog.v(TAG, "BinderCallback#onError"); Binder.withCleanCallingIdentity(() -> mExecutor.execute( () -> mCallback.onError())); } } private static class InitializationStateListener extends IHotwordRecognitionStatusCallback.Stub { private final Executor mExecutor; Loading