From 15e36f3a04bd2dc22b1f09c7a9e50b056ef65dfd Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Tue, 24 Oct 2023 21:39:24 +0800 Subject: [PATCH] settings: Prevent crash when a category service is empty or null 4 22:13:24.995 7022 7022 E AndroidRuntime: FATAL EXCEPTION: main 10-24 22:13:24.995 7022 7022 E AndroidRuntime: Process: com.android.settings, PID: 7022 10-24 22:13:24.995 7022 7022 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: java.lang.NullPointerException: Attempt to invoke virtual method 'int androidx.preference.PreferenceGroup.getPreferenceCount()' on a null object reference 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:205) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.os.Looper.loop(Looper.java:294) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8177) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int androidx.preference.PreferenceGroup.getPreferenceCount()' on a null object reference 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at com.android.settings.accessibility.AccessibilitySettings.updateCategoryOrderFromArray(AccessibilitySettings.java:479) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at com.android.settings.accessibility.AccessibilitySettings.updateServicePreferences(AccessibilitySettings.java:398) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at com.android.settings.accessibility.AccessibilitySettings.updateAllPreferences(AccessibilitySettings.java:320) 10-24 22:13:24.995 7022 7022 E AndroidRuntime: at com.android.settings.accessibility.AccessibilitySettings.onCreate(AccessibilitySettings.java:201) Signed-off-by: minaripenguin Signed-off-by: Dmitrii --- .../android/settings/accessibility/AccessibilitySettings.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index b4b1ef69a08..a2a72e243e5 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -37,6 +37,7 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; +import com.android.internal.util.ArrayUtils; import com.android.internal.accessibility.AccessibilityShortcutController; import com.android.internal.accessibility.util.AccessibilityUtils; import com.android.internal.content.PackageMonitor; @@ -509,7 +510,9 @@ public class AccessibilitySettings extends DashboardFragment implements */ private void updateCategoryOrderFromArray(String categoryKey, int key) { String[] services = getResources().getStringArray(key); + if (ArrayUtils.isEmpty(services)) return; PreferenceCategory category = mCategoryToPrefCategoryMap.get(categoryKey); + if (category == null) return; int preferenceCount = category.getPreferenceCount(); int serviceLength = services.length; for (int preferenceIndex = 0; preferenceIndex < preferenceCount; preferenceIndex++) { @@ -530,6 +533,7 @@ public class AccessibilitySettings extends DashboardFragment implements */ private void updatePreferenceCategoryVisibility(String categoryKey) { final PreferenceCategory category = mCategoryToPrefCategoryMap.get(categoryKey); + if (category == null) return; category.setVisible(category.getPreferenceCount() != 0); }