Wrap translation capabilities in ParceledListSlice before sending due to

potentially large amount of data sent.

Bug: 191231597
Test: atest CtsTranslationTestCases
Change-Id: I21abdfb3feacd9e12b8a1f3d4012c86a69930355
This commit is contained in:
Adam He
2021-07-02 14:07:19 -07:00
parent 55d44b1eda
commit 8669c0d5b0
2 changed files with 11 additions and 12 deletions

View File

@@ -29,6 +29,7 @@ import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.Service;
import android.content.Intent;
import android.content.pm.ParceledListSlice;
import android.os.BaseBundle;
import android.os.Bundle;
import android.os.CancellationSignal;
@@ -38,7 +39,6 @@ import android.os.ICancellationSignal;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.util.ArraySet;
import android.util.Log;
import android.view.translation.ITranslationDirectManager;
import android.view.translation.ITranslationServiceCallback;
@@ -51,6 +51,7 @@ import android.view.translation.TranslationSpec;
import com.android.internal.os.IResultReceiver;
import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer;
@@ -366,10 +367,11 @@ public abstract class TranslationService extends Service {
+ "format compatibility");
}
final ArraySet<TranslationCapability> capabilities = new ArraySet<>(values);
final Bundle bundle = new Bundle();
bundle.putParcelableArray(TranslationManager.EXTRA_CAPABILITIES,
capabilities.toArray(new TranslationCapability[0]));
final ParceledListSlice<TranslationCapability> listSlice =
new ParceledListSlice<>(Arrays.asList(
values.toArray(new TranslationCapability[0])));
bundle.putParcelable(TranslationManager.EXTRA_CAPABILITIES, listSlice);
resultReceiver.send(STATUS_SYNC_CALL_SUCCESS, bundle);
}
});

View File

@@ -23,12 +23,12 @@ import android.annotation.SystemService;
import android.annotation.WorkerThread;
import android.app.PendingIntent;
import android.content.Context;
import android.content.pm.ParceledListSlice;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IRemoteCallback;
import android.os.Looper;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.SynchronousResultReceiver;
import android.util.ArrayMap;
@@ -271,13 +271,10 @@ public final class TranslationManager {
if (result.resultCode != STATUS_SYNC_CALL_SUCCESS) {
return Collections.emptySet();
}
Parcelable[] parcelables = result.bundle.getParcelableArray(EXTRA_CAPABILITIES);
ArraySet<TranslationCapability> capabilities = new ArraySet();
for (Parcelable obj : parcelables) {
if (obj instanceof TranslationCapability) {
capabilities.add((TranslationCapability) obj);
}
}
ParceledListSlice<TranslationCapability> listSlice =
result.bundle.getParcelable(EXTRA_CAPABILITIES);
ArraySet<TranslationCapability> capabilities =
new ArraySet<>(listSlice == null ? null : listSlice.getList());
return capabilities;
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();