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 <minaripenguin@users.noreply.github.com>
Signed-off-by: Dmitrii <bankersenator@gmail.com>
This commit is contained in:
minaripenguin
2023-10-24 21:39:24 +08:00
committed by Joey
parent 3e40de9cb7
commit 15e36f3a04

View File

@@ -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);
}