diff --git a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java index f04b0e338959f..266fc78b2b6ab 100644 --- a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java +++ b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java @@ -267,26 +267,22 @@ public class IllustrationPreference extends Preference { private static void startLottieAnimationWith(LottieAnimationView illustrationView, Uri imageUri) { - try { - final InputStream inputStream = - getInputStreamFromUri(illustrationView.getContext(), imageUri); - illustrationView.setAnimation(inputStream, /* cacheKey= */ null); - illustrationView.setRepeatCount(LottieDrawable.INFINITE); - illustrationView.playAnimation(); - } catch (IllegalStateException e) { - Log.w(TAG, "Invalid illustration image uri: " + imageUri, e); - } + final InputStream inputStream = + getInputStreamFromUri(illustrationView.getContext(), imageUri); + illustrationView.setFailureListener( + result -> Log.w(TAG, "Invalid illustration image uri: " + imageUri, result)); + illustrationView.setAnimation(inputStream, /* cacheKey= */ null); + illustrationView.setRepeatCount(LottieDrawable.INFINITE); + illustrationView.playAnimation(); } private static void startLottieAnimationWith(LottieAnimationView illustrationView, @RawRes int rawRes) { - try { - illustrationView.setAnimation(rawRes); - illustrationView.setRepeatCount(LottieDrawable.INFINITE); - illustrationView.playAnimation(); - } catch (IllegalStateException e) { - Log.w(TAG, "Invalid illustration resource id: " + rawRes, e); - } + illustrationView.setFailureListener( + result -> Log.w(TAG, "Invalid illustration resource id: " + rawRes, result)); + illustrationView.setAnimation(rawRes); + illustrationView.setRepeatCount(LottieDrawable.INFINITE); + illustrationView.playAnimation(); } private static void resetAnimations(LottieAnimationView illustrationView) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java index ea9be04527be1..9e3312ae2ddf8 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java @@ -18,6 +18,8 @@ package com.android.settingslib.widget; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -130,4 +132,27 @@ public class IllustrationPreferenceTest { verify(drawable).start(); } + + @Test + public void playLottieAnimationWithUri_verifyFailureListener() { + doReturn(null).when(mAnimationView).getDrawable(); + + mPreference.setImageUri(mImageUri); + mPreference.onBindViewHolder(mViewHolder); + + verify(mAnimationView).setFailureListener(any()); + } + + @Test + public void playLottieAnimationWithResource_verifyFailureListener() { + // fake the valid lottie image + final int fakeValidResId = 111; + doNothing().when(mAnimationView).setImageResource(fakeValidResId); + doReturn(null).when(mAnimationView).getDrawable(); + + mPreference.setLottieAnimationResId(fakeValidResId); + mPreference.onBindViewHolder(mViewHolder); + + verify(mAnimationView).setFailureListener(any()); + } }