diff options
| author | 2021-03-08 15:27:43 +0800 | |
|---|---|---|
| committer | 2021-03-08 08:54:03 +0000 | |
| commit | 0ca9728f35e7b2f2024c4a450e155ed63ddfbd70 (patch) | |
| tree | 345dda342ec679ecf8d00bbba36fa62a3fcad5a3 | |
| parent | b6d634df79c2cc977cc2cc2a1070aa995b207709 (diff) | |
Clear UsageProgressBarPreference image view before setting images
The legacy image view will be kept when setting different image view to UsageProgressBarPreference, this will cause UsageProgressBarPreference display duplicate views after setting many times, add removeAllViews() before addView() to fix it.
Bug: 174964885
Test: atest UsageProgressBarPreferenceTest
Change-Id: Id6b89dccb07a88f2f1be78a19c1de3ac3835087b
2 files changed, 17 insertions, 0 deletions
diff --git a/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java b/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java index af64a1dc2282..21859501c057 100644 --- a/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java +++ b/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java @@ -160,6 +160,7 @@ public class UsageProgressBarPreference extends Preference { customLayout.removeAllViews(); customLayout.setVisibility(View.GONE); } else { + customLayout.removeAllViews(); customLayout.addView(mCustomImageView); customLayout.setVisibility(View.VISIBLE); } diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java index 1a8477d9b86e..fe76b06a9b61 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java @@ -127,4 +127,20 @@ public class UsageProgressBarPreferenceTest { assertThat(customContent.getChildAt(0)).isEqualTo(imageView); assertThat(customContent.getVisibility()).isEqualTo(View.VISIBLE); } + + @Test + public void setCustomContent_setImageViewTwice_oneAndLatestChild() { + final ImageView imageViewLegacy = mock(ImageView.class); + final ImageView imageViewNew = mock(ImageView.class); + mUsageProgressBarPreference.setCustomContent(imageViewLegacy); + mUsageProgressBarPreference.setCustomContent(imageViewNew); + + mUsageProgressBarPreference.onBindViewHolder(mViewHolder); + + final FrameLayout customContent = + (FrameLayout) mViewHolder.findViewById(R.id.custom_content); + assertThat(customContent.getChildCount()).isEqualTo(1); + assertThat(customContent.getChildAt(0)).isEqualTo(imageViewNew); + assertThat(customContent.getVisibility()).isEqualTo(View.VISIBLE); + } } |