diff --git a/packages/SettingsLib/UsageProgressBarPreference/Android.bp b/packages/SettingsLib/UsageProgressBarPreference/Android.bp index f346a5962d1c5..3331550d05359 100644 --- a/packages/SettingsLib/UsageProgressBarPreference/Android.bp +++ b/packages/SettingsLib/UsageProgressBarPreference/Android.bp @@ -6,6 +6,7 @@ android_library { static_libs: [ "androidx.preference_preference", + "androidx-constraintlayout_constraintlayout", ], sdk_version: "system_current", diff --git a/packages/SettingsLib/UsageProgressBarPreference/res/layout/preference_usage_progress_bar.xml b/packages/SettingsLib/UsageProgressBarPreference/res/layout/preference_usage_progress_bar.xml index 9dbd5fa4b2d2b..f45105dc3311b 100644 --- a/packages/SettingsLib/UsageProgressBarPreference/res/layout/preference_usage_progress_bar.xml +++ b/packages/SettingsLib/UsageProgressBarPreference/res/layout/preference_usage_progress_bar.xml @@ -17,6 +17,7 @@ - + android:textSize="14sp" + android:textAlignment="viewStart"/> - + android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body1" + android:textSize="14sp" + android:textAlignment="viewEnd"/> + + void setCustomContent(T imageView) { + if (imageView == mCustomImageView) { + return; + } + mCustomImageView = imageView; + notifyChanged(); + } + /** * Binds the created View to the data for this preference. * @@ -141,6 +154,15 @@ public class UsageProgressBarPreference extends Preference { progressBar.setIndeterminate(false); progressBar.setProgress(mPercent); } + + final FrameLayout customLayout = (FrameLayout) holder.findViewById(R.id.custom_content); + if (mCustomImageView == null) { + customLayout.removeAllViews(); + customLayout.setVisibility(View.GONE); + } else { + customLayout.addView(mCustomImageView); + customLayout.setVisibility(View.VISIBLE); + } } private CharSequence enlargeFontOfNumber(CharSequence summary) { 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 85e2174bf87ad..1a8477d9b86eb 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 @@ -18,11 +18,15 @@ package com.android.settingslib.widget; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; + import android.content.Context; import android.text.SpannedString; import android.text.style.RelativeSizeSpan; import android.view.LayoutInflater; import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; @@ -97,4 +101,30 @@ public class UsageProgressBarPreferenceTest { .findViewById(android.R.id.progress); assertThat(progressBar.getProgress()).isEqualTo((int) (31.0f / 80 * 100)); } + + @Test + public void setCustomContent_setNullImageView_noChild() { + mUsageProgressBarPreference.setCustomContent(null /* imageView */); + + mUsageProgressBarPreference.onBindViewHolder(mViewHolder); + + final FrameLayout customContent = + (FrameLayout) mViewHolder.findViewById(R.id.custom_content); + assertThat(customContent.getChildCount()).isEqualTo(0); + assertThat(customContent.getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void setCustomContent_setImageView_oneChild() { + final ImageView imageView = mock(ImageView.class); + mUsageProgressBarPreference.setCustomContent(imageView); + + mUsageProgressBarPreference.onBindViewHolder(mViewHolder); + + final FrameLayout customContent = + (FrameLayout) mViewHolder.findViewById(R.id.custom_content); + assertThat(customContent.getChildCount()).isEqualTo(1); + assertThat(customContent.getChildAt(0)).isEqualTo(imageView); + assertThat(customContent.getVisibility()).isEqualTo(View.VISIBLE); + } }