This commit is contained in:
kunfei
2023-03-07 21:38:06 +08:00
parent a15dd1db71
commit 3aa7a295e7
5 changed files with 64 additions and 14 deletions

View File

@@ -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<GroupViewModel>()
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 ->

View File

@@ -94,7 +94,7 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_refresh -> upPath()
R.id.menu_server_config -> showDialogFragment(ServerConfigDialog())
R.id.menu_server_config -> showDialogFragment<ServersDialog>()
R.id.menu_log -> showDialogFragment<AppLogDialog>()
R.id.menu_help -> showHelp("webDavBookHelp")
R.id.menu_sort_name -> {

View File

@@ -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) {

View File

@@ -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<ServersViewModel>()
@@ -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<Server, ItemServerSelectBinding>(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<Any>
) {
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
}
}

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_add"
android:icon="@drawable/ic_add"
android:title="@string/create"
app:showAsAction="always" />
</menu>