Avoid crashing in SourcePreferencesFragment if source can't be loaded
Should probably wait for sources to definitely be loaded first, but that's sort of a bigger change and needs to be lifecycle-aware. (cherry picked from commit e36a2c68f112f98155f5eea859a59a13cc22e168) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt
This commit is contained in:
parent
7de2e72228
commit
b9fb77aeb1
@ -66,8 +66,7 @@ class SourcePreferencesScreen(val sourceId: Long) : Screen() {
|
||||
.fillMaxSize()
|
||||
.padding(contentPadding),
|
||||
) {
|
||||
val fragment = SourcePreferencesFragment.getInstance(sourceId)
|
||||
add(it, fragment, null)
|
||||
add(it, SourcePreferencesFragment.getInstance(sourceId), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -130,7 +129,7 @@ class SourcePreferencesFragment : PreferenceFragmentCompat() {
|
||||
val sourceId = requireArguments().getLong(SOURCE_ID)
|
||||
// SY -->
|
||||
val source = Injekt.get<SourceManager>()
|
||||
.get(sourceId)
|
||||
.getOrStub(sourceId)
|
||||
?.let { source ->
|
||||
if (source is EnhancedHttpSource) {
|
||||
if (source.enhancedSource is ConfigurableSource) {
|
||||
@ -144,27 +143,27 @@ class SourcePreferencesFragment : PreferenceFragmentCompat() {
|
||||
}
|
||||
?: throw NullPointerException("source = null, SOURCE_ID = $SOURCE_ID")
|
||||
// SY <--
|
||||
|
||||
check(source is ConfigurableSource)
|
||||
|
||||
val dataStore = SharedPreferencesDataStore(source.sourcePreferences())
|
||||
preferenceManager.preferenceDataStore = dataStore
|
||||
|
||||
val sourceScreen = preferenceManager.createPreferenceScreen(requireContext())
|
||||
source.setupPreferenceScreen(sourceScreen)
|
||||
sourceScreen.forEach { pref ->
|
||||
pref.isIconSpaceReserved = false
|
||||
pref.isSingleLineTitle = false
|
||||
if (pref is DialogPreference && pref.dialogTitle.isNullOrEmpty()) {
|
||||
pref.dialogTitle = pref.title
|
||||
}
|
||||
|
||||
// Apply incognito IME for EditTextPreference
|
||||
if (pref is EditTextPreference) {
|
||||
val setListener = pref.getOnBindEditTextListener()
|
||||
pref.setOnBindEditTextListener {
|
||||
setListener?.onBindEditText(it)
|
||||
it.setIncognito(lifecycleScope)
|
||||
if (source is ConfigurableSource) {
|
||||
val dataStore = SharedPreferencesDataStore(source.sourcePreferences())
|
||||
preferenceManager.preferenceDataStore = dataStore
|
||||
|
||||
source.setupPreferenceScreen(sourceScreen)
|
||||
sourceScreen.forEach { pref ->
|
||||
pref.isIconSpaceReserved = false
|
||||
pref.isSingleLineTitle = false
|
||||
if (pref is DialogPreference && pref.dialogTitle.isNullOrEmpty()) {
|
||||
pref.dialogTitle = pref.title
|
||||
}
|
||||
|
||||
// Apply incognito IME for EditTextPreference
|
||||
if (pref is EditTextPreference) {
|
||||
val setListener = pref.getOnBindEditTextListener()
|
||||
pref.setOnBindEditTextListener {
|
||||
setListener?.onBindEditText(it)
|
||||
it.setIncognito(lifecycleScope)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -176,9 +175,9 @@ class SourcePreferencesFragment : PreferenceFragmentCompat() {
|
||||
private const val SOURCE_ID = "source_id"
|
||||
|
||||
fun getInstance(sourceId: Long): SourcePreferencesFragment {
|
||||
val fragment = SourcePreferencesFragment()
|
||||
fragment.arguments = bundleOf(SOURCE_ID to sourceId)
|
||||
return fragment
|
||||
return SourcePreferencesFragment().apply {
|
||||
arguments = bundleOf(SOURCE_ID to sourceId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user