From 919f6ea428192a6ae09552a6f310e2c964afc2ef Mon Sep 17 00:00:00 2001 From: Joel Galenson Date: Thu, 20 Dec 2018 15:09:47 -0800 Subject: [PATCH] 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 --- .../widget/BarChartPreference.java | 8 ++++-- .../widget/BarChartPreferenceTest.java | 25 +++++++++++-------- 2 files changed, 21 insertions(+), 12 deletions(-) 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 d400159984a69..305862af505b9 100644 --- a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java +++ b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java @@ -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) { 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 d4e74810ea3f0..375b45cf46d05 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 @@ -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