This commit is contained in:
kunfei
2023-03-07 21:38:06 +08:00
parent 42e6e9b2bc
commit 258dc9eeea
5 changed files with 64 additions and 14 deletions
@@ -27,7 +27,7 @@ class GroupEditDialog() : BaseDialogFragment(R.layout.dialog_book_group_edit) {
private val binding by viewBinding(DialogBookGroupEditBinding::bind) private val binding by viewBinding(DialogBookGroupEditBinding::bind)
private val viewModel by viewModels<GroupViewModel>() private val viewModel by viewModels<GroupViewModel>()
private var bookGroup: BookGroup? = null private var bookGroup: BookGroup? = null
val selectImage = registerForActivityResult(SelectImageContract()) { private val selectImage = registerForActivityResult(SelectImageContract()) {
it ?: return@registerForActivityResult it ?: return@registerForActivityResult
it.uri ?: return@registerForActivityResult it.uri ?: return@registerForActivityResult
readUri(it.uri) { fileDoc, inputStream -> readUri(it.uri) { fileDoc, inputStream ->
@@ -94,7 +94,7 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.menu_refresh -> upPath() 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_log -> showDialogFragment<AppLogDialog>()
R.id.menu_help -> showHelp("webDavBookHelp") R.id.menu_help -> showHelp("webDavBookHelp")
R.id.menu_sort_name -> { R.id.menu_sort_name -> {
@@ -20,9 +20,15 @@ import io.legado.app.utils.applyTint
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.viewbindingdelegate.viewBinding 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 { Toolbar.OnMenuItemClickListener {
constructor(id: Long) : this() {
arguments = Bundle().apply {
putLong("id", id)
}
}
private val binding by viewBinding(DialogWebdavServerBinding::bind) private val binding by viewBinding(DialogWebdavServerBinding::bind)
private val serverUi = listOf( 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.inflateMenu(R.menu.server_config)
binding.toolBar.menu.applyTint(requireContext()) binding.toolBar.menu.applyTint(requireContext())
binding.toolBar.setOnMenuItemClickListener(this) binding.toolBar.setOnMenuItemClickListener(this)
initConfigView()
upConfigView(null)
} }
override fun onMenuItemClick(item: MenuItem): Boolean { override fun onMenuItemClick(item: MenuItem): Boolean {
@@ -64,7 +71,7 @@ class ServerConfigDialog : BaseDialogFragment(R.layout.dialog_webdav_server, tru
return true return true
} }
private fun initConfigView() { private fun upConfigView(server: Server?) {
val data = appDb.serverDao.get(10001)?.getConfigJsonObject() val data = appDb.serverDao.get(10001)?.getConfigJsonObject()
serverUi.forEachIndexed { index, rowUi -> serverUi.forEachIndexed { index, rowUi ->
when (rowUi.type) { when (rowUi.type) {
@@ -3,9 +3,12 @@ package io.legado.app.ui.book.import.remote
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.adapter.ItemViewHolder 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.databinding.ItemServerSelectBinding
import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor 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.setLayout
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.viewbindingdelegate.viewBinding 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 binding by viewBinding(DialogRecyclerViewBinding::bind)
val viewModel by viewModels<ServersViewModel>() val viewModel by viewModels<ServersViewModel>()
@@ -34,23 +41,37 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view) {
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.server_config)
initView()
initData()
} }
private fun initView() { 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() { 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) { override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog) super.onDismiss(dialog)
callback?.onDialogDismiss("serversDialog") callback?.onDialogDismiss("serversDialog")
} }
class ServersAdapter(context: Context) : inner class ServersAdapter(context: Context) :
RecyclerAdapter<Server, ItemServerSelectBinding>(context) { RecyclerAdapter<Server, ItemServerSelectBinding>(context) {
private var selectServerId: Long? = null private var selectServerId: Long? = null
@@ -60,7 +81,16 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view) {
} }
override fun registerListener(holder: ItemViewHolder, binding: ItemServerSelectBinding) { 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( override fun convert(
@@ -69,10 +99,12 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view) {
item: Server, item: Server,
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
binding.run { if (payloads.isEmpty()) {
root.setBackgroundColor(context.backgroundColor) binding.root.setBackgroundColor(context.backgroundColor)
rbServer.text = item.name binding.rbServer.text = item.name
rbServer.isChecked = item.id == selectServerId binding.rbServer.isChecked = item.id == selectServerId
} else {
binding.rbServer.isChecked = item.id == selectServerId
} }
} }
+11
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>