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

Commit 8669c0d5 authored by Adam He's avatar Adam He
Browse files

Wrap translation capabilities in ParceledListSlice before sending due to

potentially large amount of data sent.

Bug: 191231597
Test: atest CtsTranslationTestCases
Change-Id: I21abdfb3feacd9e12b8a1f3d4012c86a69930355
parent 55d44b1e
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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);
                    }
                });
+5 −8
Original line number Diff line number Diff line
@@ -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();