diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0071c1b67..e6b190ab9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -135,7 +135,9 @@
+ android:enableOnBackInvokedCallback="true"
+ android:exported="false"
+ android:windowSoftInputMode="adjustPan|stateHidden" />
- val edit = appCtx.defaultSharedPreferences.edit()
+ appCtx.defaultSharedPreferences.edit {
- map.forEach { (key, value) ->
- if (BackupConfig.keyIsNotIgnore(key)) {
- when (key) {
- PreferKey.webDavPassword -> {
- kotlin.runCatching {
- aes.decryptStr(value.toString())
- }.getOrNull()?.let {
- edit.putString(key, it)
- } ?: let {
- if (appCtx.getPrefString(PreferKey.webDavPassword)
- .isNullOrBlank()
- ) {
- edit.putString(key, value.toString())
+ map.forEach { (key, value) ->
+ if (BackupConfig.keyIsNotIgnore(key)) {
+ when (key) {
+ PreferKey.webDavPassword -> {
+ kotlin.runCatching {
+ aes.decryptStr(value.toString())
+ }.getOrNull()?.let {
+ putString(key, it)
+ } ?: let {
+ if (appCtx.getPrefString(PreferKey.webDavPassword)
+ .isNullOrBlank()
+ ) {
+ putString(key, value.toString())
+ }
}
}
- }
- else -> when (value) {
- is Int -> edit.putInt(key, value)
- is Boolean -> edit.putBoolean(key, value)
- is Long -> edit.putLong(key, value)
- is Float -> edit.putFloat(key, value)
- is String -> edit.putString(key, value)
+ else -> when (value) {
+ is Int -> putInt(key, value)
+ is Boolean -> putBoolean(key, value)
+ is Long -> putLong(key, value)
+ is Float -> putFloat(key, value)
+ is String -> putString(key, value)
+ }
}
}
}
}
- edit.apply()
}
ReadBookConfig.apply {
comicStyleSelect = appCtx.getPrefInt(PreferKey.comicStyleSelect)
diff --git a/app/src/main/java/io/legato/kazusa/ui/welcome/WebDavFragment.kt b/app/src/main/java/io/legato/kazusa/ui/welcome/WebDavFragment.kt
index d82c0cdfb..539e607e0 100644
--- a/app/src/main/java/io/legato/kazusa/ui/welcome/WebDavFragment.kt
+++ b/app/src/main/java/io/legato/kazusa/ui/welcome/WebDavFragment.kt
@@ -26,7 +26,9 @@ import io.legato.kazusa.lib.dialogs.alert
import io.legato.kazusa.lib.dialogs.selector
import io.legato.kazusa.ui.file.HandleFileContract
import io.legato.kazusa.ui.widget.dialog.WaitDialog
+import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.toastOnUi
+import io.legato.kazusa.utils.visible
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.Job
@@ -43,12 +45,6 @@ class WebDavFragment : BaseFragment(R.layout.fragment_webdav_auth) {
private var restoreJob: Job? = null
private val waitDialog by lazy { WaitDialog(requireContext()) }
- interface WebDavActions {
- fun onSaveWebDavConfig()
- }
-
- var listener: WebDavActions? = null
-
private val restoreDoc = registerForActivityResult(HandleFileContract()) {
it.uri?.let { uri ->
waitDialog.setText("恢复中…")
@@ -102,28 +98,44 @@ class WebDavFragment : BaseFragment(R.layout.fragment_webdav_auth) {
}
binding.btnCheck.setOnClickListener {
- saveWebDavConfig()
-
+ val config = WebDavConfig(
+ url = binding.editUrl.text.toString(),
+ account = binding.editAccount.text.toString(),
+ password = binding.editPassword.text.toString()
+ )
+ saveWebDavConfig(config)
lifecycleScope.launch {
testWebDav()
}
}
binding.btnRestore.setOnClickListener {
- restore()
+ val config = WebDavConfig(
+ url = binding.editUrl.text.toString(),
+ account = binding.editAccount.text.toString(),
+ password = binding.editPassword.text.toString()
+ )
+ lifecycleScope.launch {
+ try {
+ binding.progressRestore.visible()
+ binding.btnRestore.text = ""
+ saveWebDavConfig(config)
+ AppWebDav.upConfig()
+ restore()
+ } finally {
+ binding.progressRestore.gone()
+ binding.btnRestore.text = "获取备份"
+ }
+ }
}
}
- fun saveWebDavConfig(onSaved: (() -> Unit)? = null) {
- val url = binding.editUrl.text.toString()
- val account = binding.editAccount.text.toString()
- val password = binding.editPassword.text.toString()
-
+ fun saveWebDavConfig(config: WebDavConfig, onSaved: (() -> Unit)? = null) {
PreferenceManager.getDefaultSharedPreferences(requireContext()).edit {
- putString(PreferKey.webDavUrl, url)
- putString(PreferKey.webDavAccount, account)
- putString(PreferKey.webDavPassword, password)
+ putString(PreferKey.webDavUrl, config.url)
+ putString(PreferKey.webDavAccount, config.account)
+ putString(PreferKey.webDavPassword, config.password)
}
onSaved?.invoke()
@@ -205,6 +217,14 @@ class WebDavFragment : BaseFragment(R.layout.fragment_webdav_auth) {
override fun onDestroyView() {
super.onDestroyView()
+ waitDialog.dismiss() // 确保释放
_binding = null
}
+
}
+
+data class WebDavConfig(
+ val url: String,
+ val account: String,
+ val password: String
+)
diff --git a/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt b/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt
index bc6c39961..3f26e5ea4 100644
--- a/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt
+++ b/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt
@@ -17,8 +17,6 @@ class WelcomeActivity : BaseActivity() {
override val binding by viewBinding(ActivityWelcomeBinding::inflate)
- private val webDavFragment: WebDavFragment
- get() = pages[1] as WebDavFragment
private val pages = listOf(
PrivacyFragment(),
WebDavFragment(),
@@ -71,13 +69,6 @@ class WelcomeActivity : BaseActivity() {
// 初始化按钮文字
binding.btnNext.text = "阅读并同意"
- (webDavFragment).listener = object : WebDavFragment.WebDavActions {
- override fun onSaveWebDavConfig() {
- webDavFragment.saveWebDavConfig()
- }
- }
-
-
binding.btnNext.setOnClickListener {
val current = binding.viewPager.currentItem
when (current) {
@@ -92,7 +83,6 @@ class WelcomeActivity : BaseActivity() {
}
else -> {
- webDavFragment.listener?.onSaveWebDavConfig()
binding.viewPager.currentItem = current + 1
}
}
diff --git a/app/src/main/res/layout/fragment_privacy.xml b/app/src/main/res/layout/fragment_privacy.xml
index b9bc6e778..635c007f8 100644
--- a/app/src/main/res/layout/fragment_privacy.xml
+++ b/app/src/main/res/layout/fragment_privacy.xml
@@ -1,45 +1,65 @@
-
+ android:paddingHorizontal="16dp"
+ android:paddingBottom="8dp">
-
+ android:layout_height="match_parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
-
+ android:orientation="vertical">
-
+
-
+
-
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_webdav_auth.xml b/app/src/main/res/layout/fragment_webdav_auth.xml
index da44664fd..11b96b49d 100644
--- a/app/src/main/res/layout/fragment_webdav_auth.xml
+++ b/app/src/main/res/layout/fragment_webdav_auth.xml
@@ -56,20 +56,41 @@
android:layout_height="wrap_content"
android:orientation="horizontal">
-
+ android:layout_marginEnd="8dp"
+ android:layout_weight="1">
+
+
+
+
+
+