Add cancellationSignal to the Translator#translate() api.
Bug: 176208267 Bug: 183605243 Test: atest CtsTranslationTestCases Change-Id: I974ef773dac360d04ee3a67f63e0ffb95ee7bafc
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,11 +229,13 @@ 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
|
||||
*/
|
||||
//TODO: Add cancellation signal
|
||||
@Deprecated
|
||||
@Nullable
|
||||
public void translate(@NonNull TranslationRequest request,
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@@ -250,7 +254,52 @@ public class Translator {
|
||||
final ITranslationCallback responseCallback =
|
||||
new TranslationResponseCallbackImpl(callback, executor);
|
||||
try {
|
||||
mDirectServiceBinder.onTranslationRequest(request, mId, responseCallback);
|
||||
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.
|
||||
*/
|
||||
@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");
|
||||
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");
|
||||
}
|
||||
|
||||
ICancellationSignal transport = null;
|
||||
if (cancellationSignal != null) {
|
||||
transport = CancellationSignal.createTransport();
|
||||
cancellationSignal.setRemote(transport);
|
||||
}
|
||||
final ITranslationCallback responseCallback =
|
||||
new TranslationResponseCallbackImpl(callback, executor);
|
||||
|
||||
try {
|
||||
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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user