From aaaae4e7193dd4543f41a8ec0329872d3bb5539d Mon Sep 17 00:00:00 2001 From: Mitchell Syer Date: Tue, 9 Sep 2025 18:13:40 -0400 Subject: [PATCH] Handle null keys better (#1628) --- .../java/androidx/preference/Preference.java | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/AndroidCompat/src/main/java/androidx/preference/Preference.java b/AndroidCompat/src/main/java/androidx/preference/Preference.java index 90ccd152..61d6683d 100644 --- a/AndroidCompat/src/main/java/androidx/preference/Preference.java +++ b/AndroidCompat/src/main/java/androidx/preference/Preference.java @@ -10,6 +10,9 @@ package androidx.preference; import android.content.Context; import android.content.SharedPreferences; import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.util.HashSet; +import java.util.Objects; import java.util.Set; /** @@ -22,7 +25,7 @@ public class Preference { @JsonIgnore protected Context context; - private boolean isVisible; + private boolean isVisible = true; private boolean isEnabled = true; private String key; private CharSequence title; @@ -130,33 +133,34 @@ public class Preference { /** Tachidesk specific API */ @SuppressWarnings("unchecked") public Object getCurrentValue() { - switch (getDefaultValueType()) { - case "String": - return sharedPreferences.getString(key, (String)defaultValue); - case "Boolean": - return sharedPreferences.getBoolean(key, (Boolean)defaultValue); - case "Set": - return sharedPreferences.getStringSet(key, (Set)defaultValue); - default: - throw new RuntimeException("Unsupported type"); + if (key == null) { + return Objects.requireNonNullElseGet(defaultValue, () -> switch (getDefaultValueType()) { + case "String" -> ""; + case "Boolean" -> false; + case "Set" -> new HashSet<>(); + default -> throw new RuntimeException("Unsupported type"); + }); } + return switch (getDefaultValueType()) { + case "String" -> sharedPreferences.getString(key, (String) defaultValue); + case "Boolean" -> sharedPreferences.getBoolean(key, (Boolean) defaultValue); + case "Set" -> sharedPreferences.getStringSet(key, (Set) defaultValue); + default -> throw new RuntimeException("Unsupported type"); + }; } /** Tachidesk specific API */ @SuppressWarnings("unchecked") public void saveNewValue(Object value) { + if (key == null) { + return; + } switch (getDefaultValueType()) { - case "String": - sharedPreferences.edit().putString(key, (String)value).apply(); - break; - case "Boolean": - sharedPreferences.edit().putBoolean(key, (Boolean)value).apply(); - break; - case "Set": - sharedPreferences.edit().putStringSet(key, (Set)value).apply(); - break; - default: - throw new RuntimeException("Unsupported type"); + case "String" -> sharedPreferences.edit().putString(key, (String) value).apply(); + case "Boolean" -> sharedPreferences.edit().putBoolean(key, (Boolean) value).apply(); + case "Set" -> + sharedPreferences.edit().putStringSet(key, (Set) value).apply(); + default -> throw new RuntimeException("Unsupported type"); } } }