diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupEditDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupEditDialog.kt index 15a39f07b..70845cd3e 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupEditDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupEditDialog.kt @@ -27,7 +27,7 @@ class GroupEditDialog() : BaseDialogFragment(R.layout.dialog_book_group_edit) { private val binding by viewBinding(DialogBookGroupEditBinding::bind) private val viewModel by viewModels() private var bookGroup: BookGroup? = null - val selectImage = registerForActivityResult(SelectImageContract()) { + private val selectImage = registerForActivityResult(SelectImageContract()) { it ?: return@registerForActivityResult it.uri ?: return@registerForActivityResult readUri(it.uri) { fileDoc, inputStream -> diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt index aed485648..3a4aacce6 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt @@ -94,7 +94,7 @@ class RemoteBookActivity : BaseImportBookActivity upPath() - R.id.menu_server_config -> showDialogFragment(ServerConfigDialog()) + R.id.menu_server_config -> showDialogFragment() R.id.menu_log -> showDialogFragment() R.id.menu_help -> showHelp("webDavBookHelp") R.id.menu_sort_name -> { diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt index ec2282c86..20a1009ee 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt @@ -20,9 +20,15 @@ import io.legado.app.utils.applyTint import io.legado.app.utils.setLayout import io.legado.app.utils.viewbindingdelegate.viewBinding -class ServerConfigDialog : BaseDialogFragment(R.layout.dialog_webdav_server, true), +class ServerConfigDialog() : BaseDialogFragment(R.layout.dialog_webdav_server, true), Toolbar.OnMenuItemClickListener { + constructor(id: Long) : this() { + arguments = Bundle().apply { + putLong("id", id) + } + } + private val binding by viewBinding(DialogWebdavServerBinding::bind) private val serverUi = listOf( @@ -41,7 +47,8 @@ class ServerConfigDialog : BaseDialogFragment(R.layout.dialog_webdav_server, tru binding.toolBar.inflateMenu(R.menu.server_config) binding.toolBar.menu.applyTint(requireContext()) binding.toolBar.setOnMenuItemClickListener(this) - initConfigView() + + upConfigView(null) } override fun onMenuItemClick(item: MenuItem): Boolean { @@ -64,7 +71,7 @@ class ServerConfigDialog : BaseDialogFragment(R.layout.dialog_webdav_server, tru return true } - private fun initConfigView() { + private fun upConfigView(server: Server?) { val data = appDb.serverDao.get(10001)?.getConfigJsonObject() serverUi.forEachIndexed { index, rowUi -> when (rowUi.type) { diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt index 7f232aafb..60ef58ce9 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt @@ -3,9 +3,12 @@ package io.legado.app.ui.book.import.remote import android.content.Context import android.content.DialogInterface import android.os.Bundle +import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.appcompat.widget.Toolbar import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.base.adapter.ItemViewHolder @@ -15,10 +18,14 @@ import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.ItemServerSelectBinding import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.primaryColor +import io.legado.app.ui.widget.recycler.VerticalDivider +import io.legado.app.utils.applyTint import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment import io.legado.app.utils.viewbindingdelegate.viewBinding -class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view) { +class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view), + Toolbar.OnMenuItemClickListener { val binding by viewBinding(DialogRecyclerViewBinding::bind) val viewModel by viewModels() @@ -34,23 +41,37 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { binding.toolBar.setBackgroundColor(primaryColor) - + binding.toolBar.setTitle(R.string.server_config) + initView() + initData() } private fun initView() { - + binding.toolBar.inflateMenu(R.menu.servers) + binding.toolBar.menu.applyTint(requireContext()) + binding.toolBar.setOnMenuItemClickListener(this) + binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) + binding.recyclerView.addItemDecoration(VerticalDivider(requireContext())) + binding.recyclerView.adapter = adapter } private fun initData() { } + override fun onMenuItemClick(item: MenuItem): Boolean { + when (item.itemId) { + R.id.menu_add -> showDialogFragment(ServerConfigDialog()) + } + return true + } + override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) callback?.onDialogDismiss("serversDialog") } - class ServersAdapter(context: Context) : + inner class ServersAdapter(context: Context) : RecyclerAdapter(context) { private var selectServerId: Long? = null @@ -60,7 +81,16 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view) { } override fun registerListener(holder: ItemViewHolder, binding: ItemServerSelectBinding) { - + binding.rbServer.setOnCheckedChangeListener { buttonView, isChecked -> + if (buttonView.isPressed && isChecked) { + selectServerId = getItemByLayoutPosition(holder.layoutPosition)?.id + } + } + binding.tvEdit.setOnClickListener { + getItemByLayoutPosition(holder.layoutPosition)?.let { server -> + showDialogFragment(ServerConfigDialog(server.id)) + } + } } override fun convert( @@ -69,10 +99,12 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view) { item: Server, payloads: MutableList ) { - binding.run { - root.setBackgroundColor(context.backgroundColor) - rbServer.text = item.name - rbServer.isChecked = item.id == selectServerId + if (payloads.isEmpty()) { + binding.root.setBackgroundColor(context.backgroundColor) + binding.rbServer.text = item.name + binding.rbServer.isChecked = item.id == selectServerId + } else { + binding.rbServer.isChecked = item.id == selectServerId } } diff --git a/app/src/main/res/menu/servers.xml b/app/src/main/res/menu/servers.xml new file mode 100644 index 000000000..1609e822f --- /dev/null +++ b/app/src/main/res/menu/servers.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file