diff options
| author | 2018-12-20 19:21:04 +0800 | |
|---|---|---|
| committer | 2019-01-04 11:01:16 +0800 | |
| commit | ff3ba83410dcf7fd7feebdcf8703885e1a53b6d1 (patch) | |
| tree | 24710196d73a9eedb709ae7246dd6399b29cbc86 | |
| parent | d8551b11beac87a1c215dd9306cafd6d34de851b (diff) | |
Add an empty text when there is no bar view
Bar chart only shows title and empty text in
this BarChartPreference when user didn't
add any bar view for bar chart.
Test: visual and robotest
Change-Id: I66f7fc5376cd7f996f3cbe7a36455127c4e4d81b
Fixes: 117623686
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); |