From db0b4f49c926152b892878fea789dedabb55d859 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Thu, 26 Jul 2018 14:14:15 -0700 Subject: [PATCH] Update AppCheckBoxPreference to show summary The summary is invisible by default if we use preference_app.xml, this CL turn it on if summary is not empty. Bug: 111366678 Test: RunSettingsRoboTests Change-Id: I3fe5827a5e80a8e21309b163dbbaa1070f5ee61e --- .../settings/widget/AppCheckBoxPreference.java | 21 ++++++++++++ .../settings/widget/AppCheckBoxPreferenceTest.java | 37 ++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/src/com/android/settings/widget/AppCheckBoxPreference.java b/src/com/android/settings/widget/AppCheckBoxPreference.java index a0d95e94c3..bd643ba248 100644 --- a/src/com/android/settings/widget/AppCheckBoxPreference.java +++ b/src/com/android/settings/widget/AppCheckBoxPreference.java @@ -17,11 +17,16 @@ package com.android.settings.widget; import android.content.Context; +import android.text.TextUtils; import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; import com.android.settings.R; import androidx.preference.CheckBoxPreference; +import androidx.preference.PreferenceViewHolder; /** * {@link CheckBoxPreference} that used only to display app @@ -36,4 +41,20 @@ public class AppCheckBoxPreference extends CheckBoxPreference { super(context); setLayoutResource(R.layout.preference_app); } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + + final TextView appendix = (TextView) holder.findViewById(R.id.appendix); + if (appendix != null) { + appendix.setVisibility(View.GONE); + } + + final LinearLayout layout = (LinearLayout) holder.findViewById(R.id.summary_container); + if (layout != null) { + // If summary doesn't exist, make it gone + layout.setVisibility(TextUtils.isEmpty(getSummary()) ? View.GONE : View.VISIBLE); + } + } } diff --git a/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java index af867e6c01..e20520f3ea 100644 --- a/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java @@ -19,6 +19,8 @@ package com.android.settings.widget; import static com.google.common.truth.Truth.assertThat; import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -28,18 +30,25 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; +import androidx.preference.PreferenceViewHolder; + @RunWith(SettingsRobolectricTestRunner.class) public class AppCheckBoxPreferenceTest { + private static final String SUMMARY = "summary info"; + private Context mContext; private AppCheckBoxPreference mPreference; private AppCheckBoxPreference mAttrPreference; + private PreferenceViewHolder mPreferenceViewHolder; @Before public void setUp() { mContext = RuntimeEnvironment.application; mPreference = new AppCheckBoxPreference(mContext); mAttrPreference = new AppCheckBoxPreference(mContext, null /* attrs */); + mPreferenceViewHolder = PreferenceViewHolder.createInstanceForTests( + LayoutInflater.from(mContext).inflate(R.layout.preference_app, null)); } @Test @@ -47,4 +56,32 @@ public class AppCheckBoxPreferenceTest { assertThat(mPreference.getLayoutResource()).isEqualTo(R.layout.preference_app); assertThat(mAttrPreference.getLayoutResource()).isEqualTo(R.layout.preference_app); } + + @Test + public void onBindViewHolder_noSummary_layoutGone() { + mPreference.setSummary(""); + + mPreference.onBindViewHolder(mPreferenceViewHolder); + + assertThat(mPreferenceViewHolder.findViewById(R.id.summary_container).getVisibility()) + .isEqualTo(View.GONE); + } + + @Test + public void onBindViewHolder_hasSummary_layoutVisible() { + mPreference.setSummary(SUMMARY); + + mPreference.onBindViewHolder(mPreferenceViewHolder); + + assertThat(mPreferenceViewHolder.findViewById(R.id.summary_container).getVisibility()) + .isEqualTo(View.VISIBLE); + } + + @Test + public void onBindViewHolder_appendixGone() { + mPreference.onBindViewHolder(mPreferenceViewHolder); + + assertThat(mPreferenceViewHolder.findViewById(R.id.appendix).getVisibility()) + .isEqualTo(View.GONE); + } } -- 2.11.0