From e19085a0cd4a5f6705d352d8d681ff061ed9b31c Mon Sep 17 00:00:00 2001 From: Ahaan Ugale Date: Mon, 3 May 2021 19:45:02 -0700 Subject: [PATCH] Fix UiTranslationStateCallback crash due to null locales. The locales aren't available on a RESUMED event; now they're stored on a STARTED event. The crash happens because the default Callback impl converts the Locale to a string to support a deprecated method. Fix: 186392998 Test: manual - install test apk which triggers the crash. no crash with this change. Change-Id: Iaceca8d29f4c2b0d692c8f6780b0ab963e4e2243 --- .../android/view/translation/UiTranslationManager.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/java/android/view/translation/UiTranslationManager.java b/core/java/android/view/translation/UiTranslationManager.java index 541b4941c62e0..7726086a47876 100644 --- a/core/java/android/view/translation/UiTranslationManager.java +++ b/core/java/android/view/translation/UiTranslationManager.java @@ -315,6 +315,8 @@ public final class UiTranslationManager { private static class UiTranslationStateRemoteCallback extends IRemoteCallback.Stub { private final Executor mExecutor; private final UiTranslationStateCallback mCallback; + private ULocale mSourceLocale; + private ULocale mTargetLocale; UiTranslationStateRemoteCallback(Executor executor, UiTranslationStateCallback callback) { @@ -331,10 +333,12 @@ public final class UiTranslationManager { int state = bundle.getInt(EXTRA_STATE); switch (state) { case STATE_UI_TRANSLATION_STARTED: + mSourceLocale = (ULocale) bundle.getSerializable(EXTRA_SOURCE_LOCALE); + mTargetLocale = (ULocale) bundle.getSerializable(EXTRA_TARGET_LOCALE); + mCallback.onStarted(mSourceLocale, mTargetLocale); + break; case STATE_UI_TRANSLATION_RESUMED: - mCallback.onStarted( - (ULocale) bundle.getSerializable(EXTRA_SOURCE_LOCALE), - (ULocale) bundle.getSerializable(EXTRA_TARGET_LOCALE)); + mCallback.onStarted(mSourceLocale, mTargetLocale); break; case STATE_UI_TRANSLATION_PAUSED: mCallback.onPaused();