diff --git a/core/java/android/service/translation/TranslationService.java b/core/java/android/service/translation/TranslationService.java index 93c006aff4351..756a70c129d10 100644 --- a/core/java/android/service/translation/TranslationService.java +++ b/core/java/android/service/translation/TranslationService.java @@ -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 capabilities = new ArraySet<>(values); final Bundle bundle = new Bundle(); - bundle.putParcelableArray(TranslationManager.EXTRA_CAPABILITIES, - capabilities.toArray(new TranslationCapability[0])); + final ParceledListSlice listSlice = + new ParceledListSlice<>(Arrays.asList( + values.toArray(new TranslationCapability[0]))); + bundle.putParcelable(TranslationManager.EXTRA_CAPABILITIES, listSlice); resultReceiver.send(STATUS_SYNC_CALL_SUCCESS, bundle); } }); diff --git a/core/java/android/view/translation/TranslationManager.java b/core/java/android/view/translation/TranslationManager.java index 54c455c19621d..6610375d46dfa 100644 --- a/core/java/android/view/translation/TranslationManager.java +++ b/core/java/android/view/translation/TranslationManager.java @@ -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 capabilities = new ArraySet(); - for (Parcelable obj : parcelables) { - if (obj instanceof TranslationCapability) { - capabilities.add((TranslationCapability) obj); - } - } + ParceledListSlice listSlice = + result.bundle.getParcelable(EXTRA_CAPABILITIES); + ArraySet capabilities = + new ArraySet<>(listSlice == null ? null : listSlice.getList()); return capabilities; } catch (RemoteException e) { throw e.rethrowFromSystemServer();