Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aabd98f3 authored by Adam He's avatar Adam He
Browse files

Add cancellationSignal to the Translator#translate() api.

Bug: 176208267
Bug: 183605243
Test: atest CtsTranslationTestCases
Change-Id: I974ef773dac360d04ee3a67f63e0ffb95ee7bafc
parent 212351e0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -52896,7 +52896,7 @@ package android.view.translation {
  public class Translator {
    method public void destroy();
    method public boolean isDestroyed();
    method @Nullable public void translate(@NonNull android.view.translation.TranslationRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
    method @Nullable public void translate(@NonNull android.view.translation.TranslationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
  }
  public final class UiTranslationManager {
+1 −1
Original line number Diff line number Diff line
@@ -10322,7 +10322,7 @@ package android.service.translation {
    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>>);
    method public abstract void onTranslationRequest(@NonNull android.view.translation.TranslationRequest, int, @NonNull android.os.CancellationSignal, @NonNull android.service.translation.TranslationService.OnTranslationResultCallback);
    method public abstract void onTranslationRequest(@NonNull android.view.translation.TranslationRequest, int, @Nullable android.os.CancellationSignal, @NonNull android.service.translation.TranslationService.OnTranslationResultCallback);
    field public static final String SERVICE_INTERFACE = "android.service.translation.TranslationService";
    field public static final String SERVICE_META_DATA = "android.translation_service";
  }
+5 −7
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ResultReceiver;
@@ -149,18 +150,15 @@ public abstract class TranslationService extends Service {
     */
    private final ITranslationDirectManager mClientInterface =
            new ITranslationDirectManager.Stub() {
                // TODO: Implement cancellation signal
                @NonNull
                private final CancellationSignal mCancellationSignal = new CancellationSignal();

                @Override
                public void onTranslationRequest(TranslationRequest request, int sessionId,
                        ITranslationCallback callback)
                        ICancellationSignal transport, ITranslationCallback callback)
                        throws RemoteException {
                    final OnTranslationResultCallback translationResultCallback =
                            new OnTranslationResultCallbackWrapper(callback);
                    mHandler.sendMessage(obtainMessage(TranslationService::onTranslationRequest,
                            TranslationService.this, request, sessionId, mCancellationSignal,
                            TranslationService.this, request, sessionId,
                            CancellationSignal.fromTransport(transport),
                            translationResultCallback));
                }

@@ -235,7 +233,7 @@ public abstract class TranslationService extends Service {
     * @param cancellationSignal
     */
    public abstract void onTranslationRequest(@NonNull TranslationRequest request, int sessionId,
            @NonNull CancellationSignal cancellationSignal,
            @Nullable CancellationSignal cancellationSignal,
            @NonNull OnTranslationResultCallback callback);

    /**
+2 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.view.translation;

import android.os.ICancellationSignal;
import android.view.translation.TranslationRequest;
import android.service.translation.ITranslationCallback;

@@ -27,6 +28,6 @@ import android.service.translation.ITranslationCallback;
  */
oneway interface ITranslationDirectManager {
    void onTranslationRequest(in TranslationRequest request, int sessionId,
         in ITranslationCallback callback);
         in ICancellationSignal transport, in ITranslationCallback callback);
    void onFinishTranslationSession(int sessionId);
}
+56 −6
Original line number Diff line number Diff line
@@ -26,8 +26,10 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Binder;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.RemoteException;
import android.service.translation.ITranslationCallback;
import android.util.Log;
@@ -227,13 +229,53 @@ public class Translator {
     *
     * @param request {@link TranslationRequest} request to be translate.
     *
     * @return {@link TranslationRequest} containing translated request,
     *         or null if translation could not be done.
     * @throws IllegalStateException if this TextClassification session was destroyed when calls
     * @throws IllegalStateException if this Translator session was destroyed when called.
     *
     * @deprecated use {@link #translate(TranslationRequest, CancellationSignal,
     *             Executor, Consumer)} instead.
     * @hide
     */
    @Deprecated
    @Nullable
    public void translate(@NonNull TranslationRequest request,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<TranslationResponse> callback) {
        Objects.requireNonNull(request, "Translation request cannot be null");
        Objects.requireNonNull(executor, "Executor cannot be null");
        Objects.requireNonNull(callback, "Callback cannot be null");

        if (isDestroyed()) {
            // TODO(b/176464808): Disallow multiple Translator now, it will throw
            //  IllegalStateException. Need to discuss if we can allow multiple Translators.
            throw new IllegalStateException(
                    "This translator has been destroyed");
        }

        final ITranslationCallback responseCallback =
                new TranslationResponseCallbackImpl(callback, executor);
        try {
            mDirectServiceBinder.onTranslationRequest(request, mId,
                    CancellationSignal.createTransport(), responseCallback);
        } catch (RemoteException e) {
            Log.w(TAG, "RemoteException calling requestTranslate(): " + e);
        }
    }

    /**
     * Requests a translation for the provided {@link TranslationRequest} using the Translator's
     * source spec and destination spec.
     *
     * @param request {@link TranslationRequest} request to be translate.
     * @param cancellationSignal signal to cancel the operation in progress.
     * @param executor Executor to run callback operations
     * @param callback {@link Consumer} to receive the translation response. Multiple responses may
     *                 be received if {@link TranslationRequest#FLAG_PARTIAL_RESPONSES} is set.
     *
     * @throws IllegalStateException if this Translator session was destroyed when called.
     */
    //TODO: Add cancellation signal
    @Nullable
    public void translate(@NonNull TranslationRequest request,
            @Nullable CancellationSignal cancellationSignal,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<TranslationResponse> callback) {
        Objects.requireNonNull(request, "Translation request cannot be null");
@@ -247,10 +289,17 @@ public class Translator {
                    "This translator has been destroyed");
        }

        ICancellationSignal transport = null;
        if (cancellationSignal != null) {
            transport = CancellationSignal.createTransport();
            cancellationSignal.setRemote(transport);
        }
        final ITranslationCallback responseCallback =
                new TranslationResponseCallbackImpl(callback, executor);

        try {
            mDirectServiceBinder.onTranslationRequest(request, mId, responseCallback);
            mDirectServiceBinder.onTranslationRequest(request, mId, transport,
                    responseCallback);
        } catch (RemoteException e) {
            Log.w(TAG, "RemoteException calling requestTranslate(): " + e);
        }
@@ -298,7 +347,8 @@ public class Translator {
        final ITranslationCallback translationCallback =
                new TranslationResponseCallbackImpl(callback, executor);
        try {
            mDirectServiceBinder.onTranslationRequest(request, mId, translationCallback);
            mDirectServiceBinder.onTranslationRequest(request, mId,
                    CancellationSignal.createTransport(), translationCallback);
        } catch (RemoteException e) {
            Log.w(TAG, "RemoteException calling flushRequest");
        }