diff --git a/src/org/evolution/settings/fragments/OptimizedSettingsFragment.kt b/src/org/evolution/settings/fragments/OptimizedSettingsFragment.kt index 81b7313..25cb62b 100644 --- a/src/org/evolution/settings/fragments/OptimizedSettingsFragment.kt +++ b/src/org/evolution/settings/fragments/OptimizedSettingsFragment.kt @@ -17,6 +17,7 @@ package org.evolution.settings.fragments import android.content.Context +import android.graphics.drawable.Drawable import android.os.Bundle import android.os.Handler import android.os.Looper @@ -216,4 +217,20 @@ abstract class OptimizedSettingsFragment : SettingsPreferenceFragment() { protected fun removeCallbacks() { mHandler?.removeCallbacksAndMessages(null) } + + /** + * Fix crash: RecyclerView is sometimes null when setDivider() is called. + * We retry after view is attached instead of crashing. + */ + override fun setDivider(divider: Drawable?) { + val list = listView + if (list == null) { + view?.post { + if (isAdded) setDivider(divider) + } + return + } + + super.setDivider(divider) + } } diff --git a/src/org/evolution/settings/fragments/themes/Fonts.java b/src/org/evolution/settings/fragments/themes/Fonts.java index 5fa501f..fb9a7ff 100644 --- a/src/org/evolution/settings/fragments/themes/Fonts.java +++ b/src/org/evolution/settings/fragments/themes/Fonts.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Typeface; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -79,6 +80,20 @@ public class Fonts extends SettingsPreferenceFragment { } } + @Override + public void setDivider(@Nullable final Drawable divider) { + RecyclerView list = getListView(); + if (list == null) { + View root = getView(); + if (root != null) { + root.post(() -> setDivider(divider)); + } + return; + } + + super.setDivider(divider); + } + @Override public int getMetricsCategory() { return MetricsEvent.EVOLVER; diff --git a/src/org/evolution/settings/fragments/themes/NavigationBarIcons.java b/src/org/evolution/settings/fragments/themes/NavigationBarIcons.java index ac3f543..e8e72f5 100644 --- a/src/org/evolution/settings/fragments/themes/NavigationBarIcons.java +++ b/src/org/evolution/settings/fragments/themes/NavigationBarIcons.java @@ -105,6 +105,20 @@ public class NavigationBarIcons extends SettingsPreferenceFragment { return view; } + @Override + public void setDivider(@Nullable final Drawable divider) { + RecyclerView list = getListView(); + if (list == null) { + View root = getView(); + if (root != null) { + root.post(() -> setDivider(divider)); + } + return; + } + + super.setDivider(divider); + } + @Override public int getMetricsCategory() { return MetricsEvent.EVOLVER; diff --git a/src/org/evolution/settings/fragments/themes/UdfpsAnimations.java b/src/org/evolution/settings/fragments/themes/UdfpsAnimations.java index 667b0d6..d400aa1 100644 --- a/src/org/evolution/settings/fragments/themes/UdfpsAnimations.java +++ b/src/org/evolution/settings/fragments/themes/UdfpsAnimations.java @@ -103,6 +103,20 @@ public class UdfpsAnimations extends SettingsPreferenceFragment { return view; } + @Override + public void setDivider(@Nullable final Drawable divider) { + RecyclerView list = getListView(); + if (list == null) { + View root = getView(); + if (root != null) { + root.post(() -> setDivider(divider)); + } + return; + } + + super.setDivider(divider); + } + @Override public int getMetricsCategory() { return MetricsEvent.EVOLVER; diff --git a/src/org/evolution/settings/fragments/themes/UdfpsIcons.java b/src/org/evolution/settings/fragments/themes/UdfpsIcons.java index 5571dcf..8e41b0b 100644 --- a/src/org/evolution/settings/fragments/themes/UdfpsIcons.java +++ b/src/org/evolution/settings/fragments/themes/UdfpsIcons.java @@ -110,6 +110,20 @@ public class UdfpsIcons extends SettingsPreferenceFragment { return view; } + @Override + public void setDivider(@Nullable final Drawable divider) { + RecyclerView list = getListView(); + if (list == null) { + View root = getView(); + if (root != null) { + root.post(() -> setDivider(divider)); + } + return; + } + + super.setDivider(divider); + } + @Override public int getMetricsCategory() { return MetricsEvent.EVOLVER;