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
This commit is contained in:
tmfang
2018-12-20 19:21:04 +08:00
parent d8551b11be
commit ff3ba83410
3 changed files with 83 additions and 23 deletions

View File

@@ -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">
<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
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"/>
</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>

View File

@@ -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);
}
}

View File

@@ -88,11 +88,31 @@ public class BarChartPreferenceTest {
assertThat(titleView.getText()).isEqualTo(mContext.getText(R.string.debug_app));
}
@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);