OSDN Git Service

Update AppCheckBoxPreference to show summary
authorjackqdyulei <jackqdyulei@google.com>
Thu, 26 Jul 2018 21:14:15 +0000 (14:14 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Thu, 26 Jul 2018 22:06:45 +0000 (15:06 -0700)
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

src/com/android/settings/widget/AppCheckBoxPreference.java
tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java

index a0d95e9..bd643ba 100644 (file)
 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);
+        }
+    }
 }
index af867e6..e20520f 100644 (file)
@@ -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);
+    }
 }