Cleans up findPreference()s and adds relevant nullness annotations
Also suppresses some lint warnings, and allows lint to fail on
unchecked errors. Cleans up some thrown exceptions as well.
Bug: b/36881810
Bug: b/120269565
Test: Manually verified
Change-Id: I3a1cbe3d6acaab722d6a306b422d9131ad7777bd
diff --git a/preference/api/1.1.0-alpha03.txt b/preference/api/1.1.0-alpha03.txt
index 0671bee..5a60465 100644
--- a/preference/api/1.1.0-alpha03.txt
+++ b/preference/api/1.1.0-alpha03.txt
@@ -33,7 +33,7 @@
}
public static interface DialogPreference.TargetFragment {
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
}
public class DropDownPreference extends androidx.preference.ListPreference {
@@ -150,7 +150,7 @@
ctor public Preference(android.content.Context!);
method public boolean callChangeListener(Object!);
method public int compareTo(androidx.preference.Preference);
- method protected <T extends androidx.preference.Preference> T! findPreferenceInHierarchy(String!);
+ method protected <T extends androidx.preference.Preference> T? findPreferenceInHierarchy(String);
method public android.content.Context! getContext();
method public String! getDependency();
method public android.os.Bundle! getExtras();
@@ -356,7 +356,7 @@
public abstract class PreferenceFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
ctor public PreferenceFragmentCompat();
method public void addPreferencesFromResource(@XmlRes int);
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
method public final androidx.recyclerview.widget.RecyclerView! getListView();
method public androidx.preference.PreferenceManager! getPreferenceManager();
method public androidx.preference.PreferenceScreen! getPreferenceScreen();
@@ -396,7 +396,7 @@
method public boolean addPreference(androidx.preference.Preference!);
method protected void dispatchRestoreInstanceState(android.os.Bundle!);
method protected void dispatchSaveInstanceState(android.os.Bundle!);
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
method public int getInitialExpandedChildrenCount();
method public androidx.preference.Preference! getPreference(int);
method public int getPreferenceCount();
@@ -417,7 +417,7 @@
public class PreferenceManager {
method public androidx.preference.PreferenceScreen! createPreferenceScreen(android.content.Context!);
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
method public android.content.Context! getContext();
method public static android.content.SharedPreferences! getDefaultSharedPreferences(android.content.Context!);
method public androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener! getOnDisplayPreferenceDialogListener();
diff --git a/preference/api/current.txt b/preference/api/current.txt
index 0671bee..5a60465 100644
--- a/preference/api/current.txt
+++ b/preference/api/current.txt
@@ -33,7 +33,7 @@
}
public static interface DialogPreference.TargetFragment {
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
}
public class DropDownPreference extends androidx.preference.ListPreference {
@@ -150,7 +150,7 @@
ctor public Preference(android.content.Context!);
method public boolean callChangeListener(Object!);
method public int compareTo(androidx.preference.Preference);
- method protected <T extends androidx.preference.Preference> T! findPreferenceInHierarchy(String!);
+ method protected <T extends androidx.preference.Preference> T? findPreferenceInHierarchy(String);
method public android.content.Context! getContext();
method public String! getDependency();
method public android.os.Bundle! getExtras();
@@ -356,7 +356,7 @@
public abstract class PreferenceFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
ctor public PreferenceFragmentCompat();
method public void addPreferencesFromResource(@XmlRes int);
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
method public final androidx.recyclerview.widget.RecyclerView! getListView();
method public androidx.preference.PreferenceManager! getPreferenceManager();
method public androidx.preference.PreferenceScreen! getPreferenceScreen();
@@ -396,7 +396,7 @@
method public boolean addPreference(androidx.preference.Preference!);
method protected void dispatchRestoreInstanceState(android.os.Bundle!);
method protected void dispatchSaveInstanceState(android.os.Bundle!);
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
method public int getInitialExpandedChildrenCount();
method public androidx.preference.Preference! getPreference(int);
method public int getPreferenceCount();
@@ -417,7 +417,7 @@
public class PreferenceManager {
method public androidx.preference.PreferenceScreen! createPreferenceScreen(android.content.Context!);
- method public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+ method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
method public android.content.Context! getContext();
method public static android.content.SharedPreferences! getDefaultSharedPreferences(android.content.Context!);
method public androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener! getOnDisplayPreferenceDialogListener();
diff --git a/preference/build.gradle b/preference/build.gradle
index 80ec938..64ad0f5 100644
--- a/preference/build.gradle
+++ b/preference/build.gradle
@@ -60,6 +60,6 @@
mavenGroup = LibraryGroups.PREFERENCE
inceptionYear = "2015"
description = "AndroidX Preference"
- failOnUncheckedWarnings = false
+ // TODO: remove when PreferenceFragment / PreferenceDialogFragment are removed
failOnDeprecationWarnings = false
}
diff --git a/preference/ktx/api/1.0.0.txt b/preference/ktx/api/1.0.0.txt
index e9174e1..e0d9d02 100644
--- a/preference/ktx/api/1.0.0.txt
+++ b/preference/ktx/api/1.0.0.txt
@@ -6,7 +6,7 @@
method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
method public static void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
method public static void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
- method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, CharSequence key);
+ method public static operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
method public static int getSize(androidx.preference.PreferenceGroup);
diff --git a/preference/ktx/api/1.1.0-alpha02.txt b/preference/ktx/api/1.1.0-alpha02.txt
index e09222b8..e0d9d02 100644
--- a/preference/ktx/api/1.1.0-alpha02.txt
+++ b/preference/ktx/api/1.1.0-alpha02.txt
@@ -6,7 +6,7 @@
method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
method public static void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
method public static void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
- method public static operator <T extends androidx.preference.Preference> T get(androidx.preference.PreferenceGroup, CharSequence key);
+ method public static operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
method public static int getSize(androidx.preference.PreferenceGroup);
diff --git a/preference/ktx/api/1.1.0-alpha03.txt b/preference/ktx/api/1.1.0-alpha03.txt
index e09222b8..e0d9d02 100644
--- a/preference/ktx/api/1.1.0-alpha03.txt
+++ b/preference/ktx/api/1.1.0-alpha03.txt
@@ -6,7 +6,7 @@
method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
method public static void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
method public static void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
- method public static operator <T extends androidx.preference.Preference> T get(androidx.preference.PreferenceGroup, CharSequence key);
+ method public static operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
method public static int getSize(androidx.preference.PreferenceGroup);
diff --git a/preference/ktx/api/current.txt b/preference/ktx/api/current.txt
index e09222b8..e0d9d02 100644
--- a/preference/ktx/api/current.txt
+++ b/preference/ktx/api/current.txt
@@ -6,7 +6,7 @@
method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
method public static void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
method public static void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
- method public static operator <T extends androidx.preference.Preference> T get(androidx.preference.PreferenceGroup, CharSequence key);
+ method public static operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
method public static int getSize(androidx.preference.PreferenceGroup);
diff --git a/preference/ktx/src/main/java/androidx/preference/PreferenceGroup.kt b/preference/ktx/src/main/java/androidx/preference/PreferenceGroup.kt
index 2d7377a..4544c35 100644
--- a/preference/ktx/src/main/java/androidx/preference/PreferenceGroup.kt
+++ b/preference/ktx/src/main/java/androidx/preference/PreferenceGroup.kt
@@ -19,11 +19,10 @@
package androidx.preference
/**
- * Returns the preference with `key`.
- *
- * @throws NullPointerException if no preference is found with that key.
+ * Returns the preference with `key`, or `null` if no preference with `key` is found.
*/
-inline operator fun <T : Preference> PreferenceGroup.get(key: CharSequence): T = findPreference(key)
+inline operator fun <T : Preference> PreferenceGroup.get(key: CharSequence): T? =
+ findPreference(key)
/**
* Returns the preference at `index`.
@@ -31,7 +30,7 @@
* @throws IndexOutOfBoundsException if index is less than 0 or greater than or equal to the count.
*/
operator fun PreferenceGroup.get(index: Int): Preference = getPreference(index)
- ?: throw IndexOutOfBoundsException("Index: $index, Size: $preferenceCount")
+ ?: throw IndexOutOfBoundsException("Index: $index, Size: $preferenceCount")
/** Returns `true` if `preference` is found in this preference group. */
operator fun PreferenceGroup.contains(preference: Preference): Boolean {
diff --git a/preference/src/androidTest/java/androidx/preference/tests/EditTextPreferenceTest.java b/preference/src/androidTest/java/androidx/preference/tests/EditTextPreferenceTest.java
index 62b8456..af6ef57 100644
--- a/preference/src/androidTest/java/androidx/preference/tests/EditTextPreferenceTest.java
+++ b/preference/src/androidTest/java/androidx/preference/tests/EditTextPreferenceTest.java
@@ -23,7 +23,7 @@
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNull;
import android.text.InputFilter;
@@ -95,6 +95,6 @@
.findFragmentByTag(
"androidx.preference.PreferenceFragment.DIALOG")).getDialog()
.findViewById(android.R.id.edit);
- assertEquals(filters, editText.getFilters());
+ assertArrayEquals(filters, editText.getFilters());
}
}
diff --git a/preference/src/androidTest/java/androidx/preference/tests/PreferenceGroupFindPreferenceTest.java b/preference/src/androidTest/java/androidx/preference/tests/PreferenceGroupFindPreferenceTest.java
new file mode 100644
index 0000000..9fb8049
--- /dev/null
+++ b/preference/src/androidTest/java/androidx/preference/tests/PreferenceGroupFindPreferenceTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.preference.tests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import android.content.Context;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test for {@link PreferenceGroup#findPreference(CharSequence)}
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class PreferenceGroupFindPreferenceTest {
+
+ private static final String KEY = "test_key";
+
+ private Preference mPreference;
+ private PreferenceScreen mScreen;
+
+ @Before
+ @UiThreadTest
+ public void setup() {
+ Context context = ApplicationProvider.getApplicationContext();
+ PreferenceManager manager = new PreferenceManager(context);
+ mPreference = new Preference(context);
+ mPreference.setKey(KEY);
+ mScreen = manager.createPreferenceScreen(context);
+ }
+
+ /**
+ * Tests that the {@link Preference} with the given key is correctly returned.
+ */
+ @Test
+ @UiThreadTest
+ public void preferenceInGroup_findPreferenceReturnsPreference() {
+ mScreen.addPreference(mPreference);
+ assertEquals(mPreference, mScreen.findPreference(KEY));
+ }
+
+ /**
+ * Tests that {@code null} is returned if no {@link Preference} exists with the given key.
+ */
+ @Test
+ @UiThreadTest
+ public void preferenceNotInGroup_findPreferenceReturnsNull() {
+ // Preference not added to the group
+ assertNull(mScreen.findPreference(KEY));
+ }
+
+ /**
+ * Tests that an exception is thrown if the key is null.
+ */
+ @Test(expected = IllegalArgumentException.class)
+ @UiThreadTest
+ public void findPreferenceWithNullKey_exceptionThrown() {
+ mScreen.findPreference(null);
+ }
+}
diff --git a/preference/src/main/java/androidx/preference/DialogPreference.java b/preference/src/main/java/androidx/preference/DialogPreference.java
index b39a17b..059d3ae 100644
--- a/preference/src/main/java/androidx/preference/DialogPreference.java
+++ b/preference/src/main/java/androidx/preference/DialogPreference.java
@@ -23,6 +23,8 @@
import android.util.AttributeSet;
import android.view.View;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.res.TypedArrayUtils;
@@ -264,13 +266,15 @@
*/
public interface TargetFragment {
/**
- * Finds a {@link Preference} based on its key.
+ * Finds a {@link Preference} with the given key. Returns {@code null} if no
+ * {@link Preference} could be found with the given key.
*
- * @param key The key of the preference to retrieve
+ * @param key The key of the {@link Preference} to retrieve
* @return The {@link Preference} with the key, or {@code null}
* @see PreferenceGroup#findPreference(CharSequence)
*/
@SuppressWarnings("TypeParameterUnusedInFormals")
- <T extends Preference> T findPreference(CharSequence key);
+ @Nullable
+ <T extends Preference> T findPreference(@NonNull CharSequence key);
}
}
diff --git a/preference/src/main/java/androidx/preference/DropDownPreference.java b/preference/src/main/java/androidx/preference/DropDownPreference.java
index 9f3bf62..c158389 100644
--- a/preference/src/main/java/androidx/preference/DropDownPreference.java
+++ b/preference/src/main/java/androidx/preference/DropDownPreference.java
@@ -101,6 +101,7 @@
return new ArrayAdapter<>(mContext, android.R.layout.simple_spinner_dropdown_item);
}
+ @SuppressWarnings("unchecked")
private void updateEntries() {
mAdapter.clear();
if (getEntries() != null) {
diff --git a/preference/src/main/java/androidx/preference/ListPreference.java b/preference/src/main/java/androidx/preference/ListPreference.java
index 2cab574..99ba692 100644
--- a/preference/src/main/java/androidx/preference/ListPreference.java
+++ b/preference/src/main/java/androidx/preference/ListPreference.java
@@ -158,6 +158,7 @@
}
}
+ @SuppressWarnings("unchecked")
@Override
public CharSequence getSummary() {
if (getSummaryProvider() != null) {
@@ -169,7 +170,7 @@
return summary;
}
String formattedString = String.format(mSummary, entry == null ? "" : entry);
- if (formattedString.contentEquals(summary)) {
+ if (TextUtils.equals(formattedString, summary)) {
return summary;
}
Log.w(TAG,
diff --git a/preference/src/main/java/androidx/preference/Preference.java b/preference/src/main/java/androidx/preference/Preference.java
index 31ef4ec..cfa8b4e 100644
--- a/preference/src/main/java/androidx/preference/Preference.java
+++ b/preference/src/main/java/androidx/preference/Preference.java
@@ -715,6 +715,7 @@
* @see #setSummary(CharSequence)
* @see #setSummaryProvider(SummaryProvider)
*/
+ @SuppressWarnings("unchecked")
public CharSequence getSummary() {
if (getSummaryProvider() != null) {
return getSummaryProvider().provideSummary(this);
@@ -1394,17 +1395,19 @@
}
/**
- * Finds a preference in this hierarchy (the whole thing, even above/below your
- * {@link PreferenceScreen} screen break) with the given key.
+ * Finds a preference in the entire hierarchy (above or below this preference) with the given
+ * key. Returns {@code null} if no preference could be found with the given key.
*
- * <p>This only functions after we have been attached to a hierarchy.
+ * <p>This only works after this preference has been attached to a hierarchy.
*
- * @param key The key of the preference to find
- * @return The preference that uses the given key
+ * @param key The key of the preference to retrieve
+ * @return The preference with the key, or {@code null}
+ * @see PreferenceGroup#findPreference(CharSequence)
*/
@SuppressWarnings("TypeParameterUnusedInFormals")
- protected <T extends Preference> T findPreferenceInHierarchy(String key) {
- if (TextUtils.isEmpty(key) || mPreferenceManager == null) {
+ @Nullable
+ protected <T extends Preference> T findPreferenceInHierarchy(@NonNull String key) {
+ if (mPreferenceManager == null) {
return null;
}
diff --git a/preference/src/main/java/androidx/preference/PreferenceFragment.java b/preference/src/main/java/androidx/preference/PreferenceFragment.java
index 4efe0d5..de7e8f1 100644
--- a/preference/src/main/java/androidx/preference/PreferenceFragment.java
+++ b/preference/src/main/java/androidx/preference/PreferenceFragment.java
@@ -92,6 +92,7 @@
*
* @deprecated Use {@link PreferenceFragmentCompat} instead
*/
+@SuppressWarnings("deprecation")
@Deprecated
public abstract class PreferenceFragment extends Fragment implements
PreferenceManager.OnPreferenceTreeClickListener,
diff --git a/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java b/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
index 9a22723..5e22662 100644
--- a/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
+++ b/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
@@ -199,7 +199,7 @@
final View rawListContainer = view.findViewById(AndroidResources.ANDROID_R_LIST_CONTAINER);
if (!(rawListContainer instanceof ViewGroup)) {
- throw new RuntimeException("Content has view with id attribute "
+ throw new IllegalStateException("Content has view with id attribute "
+ "'android.R.id.list_container' that is not a ViewGroup class");
}
@@ -457,7 +457,8 @@
@Override
@SuppressWarnings("TypeParameterUnusedInFormals")
- public <T extends Preference> T findPreference(CharSequence key) {
+ @Nullable
+ public <T extends Preference> T findPreference(@NonNull CharSequence key) {
if (mPreferenceManager == null) {
return null;
}
diff --git a/preference/src/main/java/androidx/preference/PreferenceGroup.java b/preference/src/main/java/androidx/preference/PreferenceGroup.java
index 6afd79e..62a609a 100644
--- a/preference/src/main/java/androidx/preference/PreferenceGroup.java
+++ b/preference/src/main/java/androidx/preference/PreferenceGroup.java
@@ -354,18 +354,20 @@
/**
* Finds a {@link Preference} based on its key. If two {@link Preference}s share the same key
- * (not recommended), the first to appear will be returned (to retrieve the other preference
- * with the same key, call this method on the first preference). If this preference has the
- * key, it will not be returned.
+ * (not recommended), the first to appear will be returned.
*
- * <p>This will recursively search for the preference into children that are also
+ * <p>This will recursively search for the {@link Preference} in any children that are also
* {@link PreferenceGroup}s.
*
- * @param key The key of the preference to retrieve
- * @return The {@link Preference} with the key, or null
+ * @param key The key of the {@link Preference} to retrieve
+ * @return The {@link Preference} with the key, or {@code null}
*/
- @SuppressWarnings("TypeParameterUnusedInFormals")
- public <T extends Preference> T findPreference(CharSequence key) {
+ @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"})
+ @Nullable
+ public <T extends Preference> T findPreference(@NonNull CharSequence key) {
+ if (key == null) {
+ throw new IllegalArgumentException("Key cannot be null");
+ }
if (TextUtils.equals(getKey(), key)) {
return (T) this;
}
@@ -374,7 +376,7 @@
final Preference preference = getPreference(i);
final String curKey = preference.getKey();
- if (curKey != null && curKey.contentEquals(key)) {
+ if (TextUtils.equals(curKey, key)) {
return (T) preference;
}
@@ -385,7 +387,6 @@
}
}
}
-
return null;
}
diff --git a/preference/src/main/java/androidx/preference/PreferenceManager.java b/preference/src/main/java/androidx/preference/PreferenceManager.java
index 622d345..80382a7 100644
--- a/preference/src/main/java/androidx/preference/PreferenceManager.java
+++ b/preference/src/main/java/androidx/preference/PreferenceManager.java
@@ -25,6 +25,7 @@
import android.os.Build.VERSION_CODES;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.core.content.ContextCompat;
@@ -433,14 +434,16 @@
}
/**
- * Finds a {@link Preference} based on its key.
+ * Finds a {@link Preference} with the given key. Returns {@code null} if no
+ * {@link Preference} could be found with the given key.
*
- * @param key The key of the preference to retrieve
+ * @param key The key of the {@link Preference} to retrieve
* @return The {@link Preference} with the key, or {@code null}
* @see PreferenceGroup#findPreference(CharSequence)
*/
@SuppressWarnings("TypeParameterUnusedInFormals")
- public <T extends Preference> T findPreference(CharSequence key) {
+ @Nullable
+ public <T extends Preference> T findPreference(@NonNull CharSequence key) {
if (mPreferenceScreen == null) {
return null;
}