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 2f80ba01a7a19..f45105dc3311b 100644 --- a/packages/SettingsLib/UsageProgressBarPreference/res/layout/preference_usage_progress_bar.xml +++ b/packages/SettingsLib/UsageProgressBarPreference/res/layout/preference_usage_progress_bar.xml @@ -34,10 +34,9 @@ android:id="@+id/usage_summary" android:layout_width="0dp" android:layout_height="wrap_content" - app:layout_constraintWidth_percent="0.6" + app:layout_constraintWidth_percent="0.45" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBaseline_toBaselineOf="@id/total_summary" - android:singleLine="true" android:ellipsize="marquee" android:fontFamily="@*android:string/config_headlineFontFamily" android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Display1" @@ -47,13 +46,20 @@ android:id="@+id/total_summary" android:layout_width="0dp" android:layout_height="wrap_content" - app:layout_constraintWidth_percent="0.4" - app:layout_constraintEnd_toEndOf="parent" - android:singleLine="true" + app:layout_constraintWidth_percent="0.45" + app:layout_constraintEnd_toStartOf="@id/custom_content" android:ellipsize="marquee" 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); + } }