From d952496f9477a129c07b80a68c7d5d56e571eff5 Mon Sep 17 00:00:00 2001 From: synch Date: Wed, 14 Apr 2021 12:06:00 +0800 Subject: [PATCH] fix bug 184901520. getParcelableArray may return Parcelable[] which cannot be casted to TranslationCapability[] BUG=184901520 Test: Manually Change-Id: Ic49c2b7454e61b470dd766294a58e3dc7b3720b0 --- .../android/view/translation/TranslationManager.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/java/android/view/translation/TranslationManager.java b/core/java/android/view/translation/TranslationManager.java index b61eab97779e2..8785d9cec2c68 100644 --- a/core/java/android/view/translation/TranslationManager.java +++ b/core/java/android/view/translation/TranslationManager.java @@ -24,6 +24,7 @@ import android.app.PendingIntent; import android.content.Context; import android.os.Handler; import android.os.Looper; +import android.os.Parcelable; import android.os.RemoteException; import android.os.SynchronousResultReceiver; import android.util.ArrayMap; @@ -200,8 +201,14 @@ public final class TranslationManager { if (result.resultCode != STATUS_SYNC_CALL_SUCCESS) { return Collections.emptySet(); } - return new ArraySet<>( - (TranslationCapability[]) result.bundle.getParcelableArray(EXTRA_CAPABILITIES)); + Parcelable[] parcelables = result.bundle.getParcelableArray(EXTRA_CAPABILITIES); + ArraySet capabilities = new ArraySet(); + for (Parcelable obj : parcelables) { + if (obj instanceof TranslationCapability) { + capabilities.add((TranslationCapability) obj); + } + } + return capabilities; } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (TimeoutException e) {