diff options
3 files changed, 83 insertions, 23 deletions
diff --git a/packages/SettingsLib/BarChartPreference/res/layout/settings_bar_chart.xml b/packages/SettingsLib/BarChartPreference/res/layout/settings_bar_chart.xml index 1a4d7b7dee14..b063e13bcc12 100644 --- a/packages/SettingsLib/BarChartPreference/res/layout/settings_bar_chart.xml +++ b/packages/SettingsLib/BarChartPreference/res/layout/settings_bar_chart.xml @@ -33,33 +33,49 @@ android:textAppearance="@style/BarChart.Text.HeaderTitle"/> <LinearLayout + android:id="@+id/bar_views_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:gravity="center|bottom"> + android:gravity="center" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center|bottom"> - <com.android.settingslib.widget.BarView - android:id="@+id/bar_view1" - style="@style/BarViewStyle" - settings:barColor="#FA7B17"/> - <com.android.settingslib.widget.BarView - android:id="@+id/bar_view2" - style="@style/BarViewStyle" - settings:barColor="#F439A0"/> - <com.android.settingslib.widget.BarView - android:id="@+id/bar_view3" - style="@style/BarViewStyle" - settings:barColor="#A142F4"/> - <com.android.settingslib.widget.BarView - android:id="@+id/bar_view4" - style="@style/BarViewStyle" - settings:barColor="#24C1E0"/> + <com.android.settingslib.widget.BarView + android:id="@+id/bar_view1" + style="@style/BarViewStyle" + settings:barColor="#FA7B17"/> + <com.android.settingslib.widget.BarView + android:id="@+id/bar_view2" + style="@style/BarViewStyle" + settings:barColor="#F439A0"/> + <com.android.settingslib.widget.BarView + android:id="@+id/bar_view3" + style="@style/BarViewStyle" + settings:barColor="#A142F4"/> + <com.android.settingslib.widget.BarView + android:id="@+id/bar_view4" + style="@style/BarViewStyle" + settings:barColor="#24C1E0"/> + </LinearLayout> + + <Button + android:id="@+id/bar_chart_details" + style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored" + android:layout_width="wrap_content" + android:layout_height="48dp" + android:gravity="center"/> </LinearLayout> - <Button - android:id="@+id/bar_chart_details" - style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored" - android:layout_width="wrap_content" - android:layout_height="48dp" - android:gravity="center"/> + <TextView + android:id="@+id/empty_view" + android:layout_width="match_parent" + android:layout_height="@dimen/settings_bar_view_max_height" + android:gravity="center" + android:visibility="gone" + android:textAppearance="@style/BarChart.Text.Summary"/> </LinearLayout> diff --git a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java index ba82a5b44348..eed66e94a9ef 100644 --- a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java +++ b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java @@ -140,7 +140,17 @@ public class BarChartPreference extends Preference { holder.setDividerAllowedAbove(true); holder.setDividerAllowedBelow(true); + // We must show title of bar chart. bindChartTitleView(holder); + + final BarViewInfo[] barViewInfos = mBarChartInfo.getBarViewInfos(); + // If there is no any bar view, we just show an empty text. + if (barViewInfos == null || barViewInfos.length == 0) { + setEmptyViewVisible(holder, true /* visible */); + return; + } + setEmptyViewVisible(holder, false /* visible */); + bindChartDetailsView(holder); updateBarChart(holder); } @@ -206,4 +216,16 @@ public class BarChartPreference extends Preference { barView.setNormalizedHeight(barView.getHeight() * unit); } } + + private void setEmptyViewVisible(PreferenceViewHolder holder, boolean visible) { + final View barViewsContainer = holder.findViewById(R.id.bar_views_container); + final TextView emptyView = (TextView) holder.findViewById(R.id.empty_view); + final int emptyTextRes = mBarChartInfo.getEmptyText(); + + if (emptyTextRes != 0) { + emptyView.setText(emptyTextRes); + } + emptyView.setVisibility(visible ? View.VISIBLE : View.GONE); + barViewsContainer.setVisibility(visible ? View.GONE : View.VISIBLE); + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java index 83b9f810e28b..cf6137d47bb0 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java @@ -89,10 +89,30 @@ public class BarChartPreferenceTest { } @Test + public void initializeBarChart_noBarViewSet_shouldShowTitleAndEmptyView() { + final BarChartInfo barChartInfo = new BarChartInfo.Builder() + .setTitle(R.string.debug_app) + .setEmptyText(R.string.debug_app) + .build(); + + mPreference.initializeBarChart(barChartInfo); + // We don't add any bar view yet. + mPreference.onBindViewHolder(mHolder); + + assertThat(mBarChartView.findViewById(R.id.bar_chart_title).getVisibility()) + .isEqualTo(View.VISIBLE); + assertThat(mBarChartView.findViewById(R.id.empty_view).getVisibility()) + .isEqualTo(View.VISIBLE); + assertThat(mBarChartView.findViewById(R.id.bar_views_container).getVisibility()) + .isEqualTo(View.GONE); + } + + @Test public void initializeBarChart_detailsSet_shouldShowBarChartDetailsView() { final BarChartInfo barChartInfo = new BarChartInfo.Builder() .setTitle(R.string.debug_app) .setDetails(R.string.debug_app) + .addBarViewInfo(new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app)) .build(); mPreference.initializeBarChart(barChartInfo); @@ -107,6 +127,7 @@ public class BarChartPreferenceTest { // We don't call BarChartInfo.Builder#setDetails yet. final BarChartInfo barChartInfo = new BarChartInfo.Builder() .setTitle(R.string.debug_app) + .addBarViewInfo(new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app)) .build(); mPreference.initializeBarChart(barChartInfo); @@ -122,6 +143,7 @@ public class BarChartPreferenceTest { .setDetails(R.string.debug_app) .setDetailsOnClickListener(v -> { }) + .addBarViewInfo(new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app)) .build(); mPreference.initializeBarChart(barChartInfo); |