diff options
| -rw-r--r-- | core/api/system-current.txt | 3 | ||||
| -rw-r--r-- | core/java/android/service/translation/TranslationService.java | 63 |
2 files changed, 50 insertions, 16 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index adbf18fb54c8..a5287deee84e 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10397,7 +10397,8 @@ package android.service.translation { ctor public TranslationService(); method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent); method public void onConnected(); - method public abstract void onCreateTranslationSession(@NonNull android.view.translation.TranslationContext, int); + method public void onCreateTranslationSession(@NonNull android.view.translation.TranslationContext, int, @NonNull java.util.function.Consumer<java.lang.Boolean>); + method @Deprecated public abstract void onCreateTranslationSession(@NonNull android.view.translation.TranslationContext, int); method public void onDisconnected(); method public abstract void onFinishTranslationSession(int); method public abstract void onTranslationCapabilitiesRequest(int, int, @NonNull java.util.function.Consumer<java.util.Set<android.view.translation.TranslationCapability>>); diff --git a/core/java/android/service/translation/TranslationService.java b/core/java/android/service/translation/TranslationService.java index b79e69201fc6..fe86c0b86e47 100644 --- a/core/java/android/service/translation/TranslationService.java +++ b/core/java/android/service/translation/TranslationService.java @@ -16,6 +16,8 @@ package android.service.translation; +import static android.view.translation.TranslationManager.STATUS_SYNC_CALL_FAIL; +import static android.view.translation.TranslationManager.STATUS_SYNC_CALL_SUCCESS; import static android.view.translation.Translator.EXTRA_SERVICE_BINDER; import static android.view.translation.Translator.EXTRA_SESSION_ID; @@ -207,13 +209,33 @@ public abstract class TranslationService extends Service { } /** - * TODO: fill in javadoc. + * Called to notify the service that a session was created + * (see {@link android.view.translation.Translator}). * - * @param translationContext - * @param sessionId + * <p>The service must call {@code callback.accept()} to acknowledge whether the session is + * supported and created successfully. If the translation context is not supported, the service + * should call back with {@code false}.</p> + * + * @param translationContext the {@link TranslationContext} of the session being created. + * @param sessionId the int id of the session. + * @param callback {@link Consumer} to notify whether the session was successfully created. */ // TODO(b/176464808): the session id won't be unique cross client/server process. Need to find // solution to make it's safe. + // TODO: make abstract once aiai is implemented. + public void onCreateTranslationSession(@NonNull TranslationContext translationContext, + int sessionId, @NonNull Consumer<Boolean> callback) { + onCreateTranslationSession(translationContext, sessionId); + callback.accept(true); + } + + /** + * TODO: fill in javadoc. + * + * @deprecated use {@link #onCreateTranslationSession(TranslationContext, int, Consumer)} + * instead. + */ + @Deprecated public abstract void onCreateTranslationSession(@NonNull TranslationContext translationContext, int sessionId); @@ -253,19 +275,30 @@ public abstract class TranslationService extends Service { // TODO(b/176464808): Need to handle client dying case - // TODO(b/176464808): Need to handle the failure case. e.g. if the context is not supported. - private void handleOnCreateTranslationSession(@NonNull TranslationContext translationContext, int sessionId, IResultReceiver resultReceiver) { - try { - final Bundle extras = new Bundle(); - extras.putBinder(EXTRA_SERVICE_BINDER, mClientInterface.asBinder()); - extras.putInt(EXTRA_SESSION_ID, sessionId); - resultReceiver.send(0, extras); - } catch (RemoteException e) { - Log.w(TAG, "RemoteException sending client interface: " + e); - } - onCreateTranslationSession(translationContext, sessionId); + onCreateTranslationSession(translationContext, sessionId, + new Consumer<Boolean>() { + @Override + public void accept(Boolean created) { + try { + if (!created) { + Log.w(TAG, "handleOnCreateTranslationSession(): context=" + + translationContext + " not supported by service."); + resultReceiver.send(STATUS_SYNC_CALL_FAIL, null); + return; + } + + final Bundle extras = new Bundle(); + extras.putBinder(EXTRA_SERVICE_BINDER, mClientInterface.asBinder()); + extras.putInt(EXTRA_SESSION_ID, sessionId); + resultReceiver.send(STATUS_SYNC_CALL_SUCCESS, extras); + } catch (RemoteException e) { + Log.w(TAG, "RemoteException sending client interface: " + e); + } + } + }); + } private void handleOnTranslationCapabilitiesRequest( @@ -280,7 +313,7 @@ public abstract class TranslationService extends Service { final Bundle bundle = new Bundle(); bundle.putParcelableArray(TranslationManager.EXTRA_CAPABILITIES, capabilities.toArray(new TranslationCapability[0])); - resultReceiver.send(TranslationManager.STATUS_SYNC_CALL_SUCCESS, bundle); + resultReceiver.send(STATUS_SYNC_CALL_SUCCESS, bundle); } }); } |