summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt3
-rw-r--r--core/java/android/service/translation/TranslationService.java63
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);
}
});
}