Fix state restore in QuickPhrase{List,Edit}Fragment

This commit is contained in:
Rocka 2025-08-02 17:53:43 +08:00
parent 60b63cd9fb
commit adadaa802e
No known key found for this signature in database
GPG Key ID: 28031158FFDD6853
5 changed files with 31 additions and 17 deletions

View File

@ -4,12 +4,15 @@
*/
package org.fcitx.fcitx5.android.data.quickphrase
import kotlinx.parcelize.Parcelize
import java.io.File
@Parcelize
class BuiltinQuickPhrase(
override val file: File,
// always be .mb (not disabled)
private val overrideFile: File
private val overrideFile: File,
private var _override: CustomQuickPhrase? = null
) : QuickPhrase() {
init {
@ -20,8 +23,11 @@ class BuiltinQuickPhrase(
val overrideFilePath: String
get() = overrideFile.absolutePath
var override: CustomQuickPhrase? = null
private set
var override: CustomQuickPhrase?
get() = _override
private set(value) {
_override = value
}
override val isEnabled: Boolean
get() = override?.isEnabled ?: true

View File

@ -4,17 +4,28 @@
*/
package org.fcitx.fcitx5.android.data.quickphrase
import kotlinx.parcelize.Parcelize
import org.fcitx.fcitx5.android.R
import org.fcitx.fcitx5.android.utils.errorArg
import java.io.File
class CustomQuickPhrase(file: File) : QuickPhrase() {
@Parcelize
class CustomQuickPhrase(
private var _file: File,
private var _enabled: Boolean = false
) : QuickPhrase() {
override var isEnabled = false
private set
override var isEnabled: Boolean
get() = _enabled
private set(value) {
_enabled = value
}
override var file: File = file
private set
override var file: File
get() = _file
private set(value) {
_file = value
}
override val name: String
get() = if (isEnabled) super.name

View File

@ -29,7 +29,6 @@ import splitties.views.dsl.core.lParams
import splitties.views.dsl.core.matchParent
import splitties.views.dsl.core.verticalLayout
import splitties.views.setPaddingDp
import timber.log.Timber
class QuickPhraseEditFragment : ProgressFragment(), OnItemChangedListener<QuickPhraseEntry> {
private val args by lazyRoute<SettingsRoute.QuickPhraseEdit>()
@ -152,7 +151,7 @@ class QuickPhraseEditFragment : ProgressFragment(), OnItemChangedListener<QuickP
quickPhrase.saveData(QuickPhraseData(ui.entries))
launch(Dispatchers.Main) {
// tell parent that we need to reload
parentFragmentManager.setFragmentResult(RESULT, bundleOf(RESULT to true))
parentFragmentManager.setFragmentResult(RESULT, bundleOf(RESULT to quickPhrase))
}
}
}

View File

@ -40,6 +40,7 @@ import org.fcitx.fcitx5.android.utils.materialTextInput
import org.fcitx.fcitx5.android.utils.navigateWithAnim
import org.fcitx.fcitx5.android.utils.notificationManager
import org.fcitx.fcitx5.android.utils.onPositiveButtonClick
import org.fcitx.fcitx5.android.utils.parcelable
import org.fcitx.fcitx5.android.utils.queryFileName
import org.fcitx.fcitx5.android.utils.str
import splitties.resources.drawable
@ -85,10 +86,9 @@ class QuickPhraseListFragment : Fragment(), OnItemChangedListener<QuickPhrase> {
parentFragmentManager.setFragmentResultListener(
QuickPhraseEditFragment.RESULT,
this@QuickPhraseListFragment
) { _, _ ->
if (entry is BuiltinQuickPhrase)
entry.evaluateOverride()
ui.updateItem(ui.indexItem(entry), entry)
) listener@{ requestKey, result ->
val newItem = result.parcelable<QuickPhrase>(requestKey) ?: return@listener
ui.updateItem(ui.indexItem(entry), newItem)
// editor changed file content
dustman.forceDirty()
}

View File

@ -151,9 +151,7 @@ sealed class SettingsRoute : Parcelable {
@Serializable
@Parcelize
data class Param(
val quickPhrase: QuickPhrase
) : Parcelable {
data class Param(val quickPhrase: QuickPhrase) : Parcelable {
companion object {
val NavType = object : NavType<Param>(isNullableAllowed = false) {
override fun put(bundle: SavedState, key: String, value: Param) {