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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user