summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Liu <dswliu@google.com> 2023-04-12 01:02:04 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-04-12 01:02:04 +0000
commit85b00fa9b1fb11a96379984d0c499615ac1c6c98 (patch)
tree142395221ac5fb858084a67b7b180828a0654ea4
parentfe6fd1dc0d90178e95f9b77b65022f56749f5292 (diff)
parenta1c680f8f418e45817aa8ad88a5c8ab6df67cb0b (diff)
Merge "Add safety check for potential NPE." into udc-dev
-rw-r--r--packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java38
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java51
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();
+ }
}