Hide the bar chart details text when no string is provided.

Currently the bar chart crashes when no detail text is passed.  This
instead hides the text in that case.

Bug: 117623686
Test: View chart with and without detail string.
Change-Id: I227201af9615b6ec190c8688151cd93cfe058bfb
This commit is contained in:
Joel Galenson
2018-12-20 15:09:47 -08:00
committed by tmfang
parent 891c39ba94
commit 919f6ea428
2 changed files with 21 additions and 12 deletions

View File

@@ -165,8 +165,12 @@ public class BarChartPreference extends Preference {
private void bindChartDetailsView(PreferenceViewHolder holder) {
final Button detailsView = (Button) holder.findViewById(R.id.bar_chart_details);
detailsView.setText(mDetailsId);
detailsView.setOnClickListener(mDetailsOnClickListener);
if (mDetailsId == 0) {
detailsView.setVisibility(View.GONE);
} else {
detailsView.setText(mDetailsId);
detailsView.setOnClickListener(mDetailsOnClickListener);
}
}
private void updateBarChart(PreferenceViewHolder holder) {

View File

@@ -41,6 +41,7 @@ public class BarChartPreferenceTest {
private BarView mBarView2;
private BarView mBarView3;
private BarView mBarView4;
private TextView mDetailsView;
private PreferenceViewHolder mHolder;
private BarChartPreference mPreference;
@@ -51,14 +52,13 @@ public class BarChartPreferenceTest {
mHolder = PreferenceViewHolder.createInstanceForTests(mBarChartView);
mPreference = new BarChartPreference(mContext, null /* attrs */);
mPreference.setBarChartTitle(R.string.debug_app);
mPreference.setBarChartDetails(R.string.debug_app);
mIcon = mContext.getDrawable(R.drawable.ic_menu);
mBarView1 = (BarView) mBarChartView.findViewById(R.id.bar_view1);
mBarView2 = (BarView) mBarChartView.findViewById(R.id.bar_view2);
mBarView3 = (BarView) mBarChartView.findViewById(R.id.bar_view3);
mBarView4 = (BarView) mBarChartView.findViewById(R.id.bar_view4);
mDetailsView = (TextView) mBarChartView.findViewById(R.id.bar_chart_details);
}
@Test
@@ -73,26 +73,31 @@ public class BarChartPreferenceTest {
}
@Test
public void setBarChartDetailsRes_setDetailsRes_showInBarChartDetails() {
final TextView detailsView = (TextView) mBarChartView.findViewById(R.id.bar_chart_details);
public void onBindViewHolder_notSetDetailsRes_barChartDetailsViewIsGone() {
// We don't call BarChartPreference#setBarChartDetails
mPreference.onBindViewHolder(mHolder);
assertThat(mDetailsView.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void setBarChartDetailsRes_setDetailsRes_showInBarChartDetails() {
mPreference.setBarChartDetails(R.string.debug_app);
mPreference.onBindViewHolder(mHolder);
assertThat(detailsView.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(detailsView.getText()).isEqualTo(mContext.getText(R.string.debug_app));
assertThat(mDetailsView.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mDetailsView.getText()).isEqualTo(mContext.getText(R.string.debug_app));
}
@Test
public void setBarChartDetailsClickListener_setClickListener_detailsViewAttachClickListener() {
final TextView detailsView = (TextView) mBarChartView.findViewById(R.id.bar_chart_details);
mPreference.setBarChartDetails(R.string.debug_app);
mPreference.setBarChartDetailsClickListener(v -> {
});
mPreference.onBindViewHolder(mHolder);
assertThat(detailsView.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(detailsView.hasOnClickListeners()).isTrue();
assertThat(mDetailsView.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mDetailsView.hasOnClickListeners()).isTrue();
}
@Test