diff options
| author | 2023-04-12 01:02:04 +0000 | |
|---|---|---|
| committer | 2023-04-12 01:02:04 +0000 | |
| commit | 85b00fa9b1fb11a96379984d0c499615ac1c6c98 (patch) | |
| tree | 142395221ac5fb858084a67b7b180828a0654ea4 | |
| parent | fe6fd1dc0d90178e95f9b77b65022f56749f5292 (diff) | |
| parent | a1c680f8f418e45817aa8ad88a5c8ab6df67cb0b (diff) | |
Merge "Add safety check for potential NPE." into udc-dev
2 files changed, 72 insertions, 17 deletions
diff --git a/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java index 8cda37665035..bf24c86b8d8b 100644 --- a/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java +++ b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java @@ -59,32 +59,36 @@ public class FooterPreference extends Preference { public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); TextView title = holder.itemView.findViewById(android.R.id.title); - if (!TextUtils.isEmpty(mContentDescription)) { + if (title != null && !TextUtils.isEmpty(mContentDescription)) { title.setContentDescription(mContentDescription); } TextView learnMore = holder.itemView.findViewById(R.id.settingslib_learn_more); - if (learnMore != null && mLearnMoreListener != null) { - learnMore.setVisibility(View.VISIBLE); - if (TextUtils.isEmpty(mLearnMoreText)) { - mLearnMoreText = learnMore.getText(); + if (learnMore != null) { + if (mLearnMoreListener != null) { + learnMore.setVisibility(View.VISIBLE); + if (TextUtils.isEmpty(mLearnMoreText)) { + mLearnMoreText = learnMore.getText(); + } else { + learnMore.setText(mLearnMoreText); + } + SpannableString learnMoreText = new SpannableString(mLearnMoreText); + if (mLearnMoreSpan != null) { + learnMoreText.removeSpan(mLearnMoreSpan); + } + mLearnMoreSpan = new FooterLearnMoreSpan(mLearnMoreListener); + learnMoreText.setSpan(mLearnMoreSpan, 0, + learnMoreText.length(), 0); + learnMore.setText(learnMoreText); } else { - learnMore.setText(mLearnMoreText); + learnMore.setVisibility(View.GONE); } - SpannableString learnMoreText = new SpannableString(mLearnMoreText); - if (mLearnMoreSpan != null) { - learnMoreText.removeSpan(mLearnMoreSpan); - } - mLearnMoreSpan = new FooterLearnMoreSpan(mLearnMoreListener); - learnMoreText.setSpan(mLearnMoreSpan, 0, - learnMoreText.length(), 0); - learnMore.setText(learnMoreText); - } else { - learnMore.setVisibility(View.GONE); } View icon = holder.itemView.findViewById(R.id.icon_frame); - icon.setVisibility(mIconVisibility); + if (icon != null) { + icon.setVisibility(mIconVisibility); + } } @Override diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java index 55125c53b4c9..049c90e971a9 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java @@ -18,6 +18,9 @@ package com.android.settingslib.widget; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -87,4 +90,52 @@ public class FooterPreferenceTest { assertThat(mFooterPreference.mIconVisibility).isEqualTo(View.GONE); } + + @Test + public void onBindViewHolder_whenTitleIsNull_shouldNotRaiseNpe() { + PreferenceViewHolder viewHolder = spy(PreferenceViewHolder.createInstanceForTests( + LayoutInflater.from(mContext).inflate(R.layout.preference_footer, null))); + when(viewHolder.findViewById(R.id.title)).thenReturn(null); + + Throwable actualThrowable = null; + try { + mFooterPreference.onBindViewHolder(viewHolder); + } catch (Throwable throwable) { + actualThrowable = throwable; + } + + assertThat(actualThrowable).isNull(); + } + + @Test + public void onBindViewHolder_whenLearnMoreIsNull_shouldNotRaiseNpe() { + PreferenceViewHolder viewHolder = spy(PreferenceViewHolder.createInstanceForTests( + LayoutInflater.from(mContext).inflate(R.layout.preference_footer, null))); + when(viewHolder.findViewById(R.id.settingslib_learn_more)).thenReturn(null); + + Throwable actualThrowable = null; + try { + mFooterPreference.onBindViewHolder(viewHolder); + } catch (Throwable throwable) { + actualThrowable = throwable; + } + + assertThat(actualThrowable).isNull(); + } + + @Test + public void onBindViewHolder_whenIconFrameIsNull_shouldNotRaiseNpe() { + PreferenceViewHolder viewHolder = spy(PreferenceViewHolder.createInstanceForTests( + LayoutInflater.from(mContext).inflate(R.layout.preference_footer, null))); + when(viewHolder.findViewById(R.id.icon_frame)).thenReturn(null); + + Throwable actualThrowable = null; + try { + mFooterPreference.onBindViewHolder(viewHolder); + } catch (Throwable throwable) { + actualThrowable = throwable; + } + + assertThat(actualThrowable).isNull(); + } } |