commit
814112060a
@ -1,55 +0,0 @@ |
||||
package io.legado.app.ui.book.group |
||||
|
||||
import android.content.Context |
||||
import android.view.LayoutInflater |
||||
import io.legado.app.R |
||||
import io.legado.app.data.appDb |
||||
import io.legado.app.data.entities.BookGroup |
||||
import io.legado.app.databinding.DialogEditTextBinding |
||||
import io.legado.app.help.coroutine.Coroutine |
||||
import io.legado.app.lib.dialogs.alert |
||||
import io.legado.app.utils.requestInputMethod |
||||
|
||||
object GroupEdit { |
||||
|
||||
fun show(context: Context, layoutInflater: LayoutInflater, bookGroup: BookGroup) = context.run { |
||||
alert(title = getString(R.string.group_edit)) { |
||||
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { |
||||
textInputLayout.setHint(R.string.group_name) |
||||
editView.setText(bookGroup.groupName) |
||||
} |
||||
if (bookGroup.groupId >= 0) { |
||||
neutralButton(R.string.delete) { |
||||
deleteGroup(context, bookGroup) |
||||
} |
||||
} |
||||
customView { alertBinding.root } |
||||
yesButton { |
||||
alertBinding.editView.text?.toString()?.let { |
||||
bookGroup.groupName = it |
||||
Coroutine.async { |
||||
appDb.bookGroupDao.update(bookGroup) |
||||
} |
||||
} |
||||
} |
||||
noButton() |
||||
}.show().requestInputMethod() |
||||
} |
||||
|
||||
private fun deleteGroup(context: Context, bookGroup: BookGroup) = context.run { |
||||
alert(R.string.delete, R.string.sure_del) { |
||||
okButton { |
||||
Coroutine.async { |
||||
appDb.bookGroupDao.delete(bookGroup) |
||||
val books = appDb.bookDao.getBooksByGroup(bookGroup.groupId) |
||||
books.forEach { |
||||
it.group = it.group - bookGroup.groupId |
||||
} |
||||
appDb.bookDao.update(*books.toTypedArray()) |
||||
} |
||||
} |
||||
noButton() |
||||
}.show() |
||||
} |
||||
|
||||
} |
@ -0,0 +1,110 @@ |
||||
package io.legado.app.ui.book.group |
||||
|
||||
import android.os.Bundle |
||||
import android.view.LayoutInflater |
||||
import android.view.View |
||||
import android.view.ViewGroup |
||||
import androidx.fragment.app.FragmentManager |
||||
import androidx.fragment.app.viewModels |
||||
import io.legado.app.R |
||||
import io.legado.app.base.BaseDialogFragment |
||||
import io.legado.app.data.entities.BookGroup |
||||
import io.legado.app.databinding.DialogBookGroupEditBinding |
||||
import io.legado.app.lib.dialogs.alert |
||||
import io.legado.app.lib.theme.primaryColor |
||||
import io.legado.app.utils.gone |
||||
import io.legado.app.utils.toastOnUi |
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding |
||||
import io.legado.app.utils.windowSize |
||||
import splitties.views.onClick |
||||
|
||||
class GroupEditDialog : BaseDialogFragment() { |
||||
|
||||
companion object { |
||||
|
||||
fun start(fragmentManager: FragmentManager, bookGroup: BookGroup? = null) { |
||||
GroupEditDialog().apply { |
||||
arguments = Bundle().apply { |
||||
putParcelable("group", bookGroup) |
||||
} |
||||
}.show(fragmentManager, "bookGroupEdit") |
||||
} |
||||
|
||||
} |
||||
|
||||
private val binding by viewBinding(DialogBookGroupEditBinding::bind) |
||||
private val viewModel by viewModels<GroupViewModel>() |
||||
private var bookGroup: BookGroup? = null |
||||
|
||||
override fun onStart() { |
||||
super.onStart() |
||||
val dm = requireActivity().windowSize |
||||
dialog?.window?.setLayout( |
||||
(dm.widthPixels * 0.9).toInt(), |
||||
ViewGroup.LayoutParams.WRAP_CONTENT |
||||
) |
||||
} |
||||
|
||||
override fun onCreateView( |
||||
inflater: LayoutInflater, |
||||
container: ViewGroup?, |
||||
savedInstanceState: Bundle? |
||||
): View? { |
||||
return inflater.inflate(R.layout.dialog_book_group_edit, container) |
||||
} |
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { |
||||
binding.toolBar.setBackgroundColor(primaryColor) |
||||
bookGroup = arguments?.getParcelable("group") |
||||
bookGroup?.let { |
||||
binding.tieGroupName.setText(it.groupName) |
||||
binding.ivCover.load(it.cover) |
||||
} ?: let { |
||||
binding.toolBar.title = getString(R.string.add_group) |
||||
binding.btnDelete.gone() |
||||
} |
||||
binding.run { |
||||
btnCancel.onClick { |
||||
dismiss() |
||||
} |
||||
btnOk.onClick { |
||||
val groupName = tieGroupName.text?.toString() |
||||
if (groupName.isNullOrEmpty()) { |
||||
toastOnUi("分组名称不能为空") |
||||
} else { |
||||
bookGroup?.let { |
||||
it.groupName = groupName |
||||
it.cover = binding.ivCover.path |
||||
viewModel.upGroup(it) { |
||||
dismiss() |
||||
} |
||||
} ?: let { |
||||
viewModel.addGroup(groupName, binding.ivCover.path) { |
||||
dismiss() |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
btnDelete.onClick { |
||||
deleteGroup { |
||||
bookGroup?.let { |
||||
viewModel.delGroup(it) { |
||||
dismiss() |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
private fun deleteGroup(ok: () -> Unit) { |
||||
alert(R.string.delete, R.string.sure_del) { |
||||
okButton { |
||||
ok.invoke() |
||||
} |
||||
noButton() |
||||
}.show() |
||||
} |
||||
|
||||
} |
@ -0,0 +1,89 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||
xmlns:app="http://schemas.android.com/apk/res-auto" |
||||
xmlns:tools="http://schemas.android.com/tools" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:background="@color/background_menu"> |
||||
|
||||
<androidx.appcompat.widget.Toolbar |
||||
android:id="@+id/tool_bar" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:background="@color/background_menu" |
||||
android:elevation="5dp" |
||||
android:theme="?attr/actionBarStyle" |
||||
app:displayHomeAsUp="false" |
||||
app:fitStatusBar="false" |
||||
app:layout_constraintTop_toTopOf="parent" |
||||
app:popupTheme="@style/AppTheme.PopupOverlay" |
||||
app:title="@string/group_edit" |
||||
app:titleTextAppearance="@style/ToolbarTitle" /> |
||||
|
||||
<io.legado.app.ui.widget.image.CoverImageView |
||||
android:id="@+id/iv_cover" |
||||
android:layout_width="90dp" |
||||
android:layout_height="126dp" |
||||
android:layout_margin="6dp" |
||||
android:contentDescription="@string/img_cover" |
||||
android:scaleType="centerCrop" |
||||
android:src="@drawable/image_cover_default" |
||||
app:layout_constraintBottom_toBottomOf="parent" |
||||
app:layout_constraintLeft_toLeftOf="parent" |
||||
app:layout_constraintTop_toBottomOf="@+id/tool_bar" /> |
||||
|
||||
|
||||
<io.legado.app.ui.widget.text.TextInputLayout |
||||
android:id="@+id/til_group_name" |
||||
android:layout_width="0dp" |
||||
android:layout_height="wrap_content" |
||||
android:layout_margin="6dp" |
||||
android:hint="@string/group_name" |
||||
app:layout_constraintLeft_toRightOf="@+id/iv_cover" |
||||
app:layout_constraintRight_toRightOf="parent" |
||||
app:layout_constraintTop_toBottomOf="@+id/tool_bar" |
||||
app:layout_constraintBottom_toTopOf="@+id/btn_ok"> |
||||
|
||||
<io.legado.app.ui.widget.text.EditText |
||||
android:id="@+id/tie_group_name" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:singleLine="true" |
||||
tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck" /> |
||||
</io.legado.app.ui.widget.text.TextInputLayout> |
||||
|
||||
<io.legado.app.ui.widget.text.AccentTextView |
||||
android:id="@+id/btn_delete" |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:padding="12dp" |
||||
android:layout_marginLeft="12dp" |
||||
android:text="@string/delete" |
||||
app:layout_constraintBottom_toBottomOf="@id/btn_ok" |
||||
app:layout_constraintLeft_toRightOf="@+id/iv_cover" |
||||
app:layout_constraintTop_toTopOf="@+id/btn_ok" |
||||
tools:ignore="RtlHardcoded" /> |
||||
|
||||
<io.legado.app.ui.widget.text.AccentTextView |
||||
android:id="@+id/btn_ok" |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:padding="12dp" |
||||
android:layout_marginRight="12dp" |
||||
android:text="@string/ok" |
||||
app:layout_constraintBottom_toBottomOf="parent" |
||||
app:layout_constraintRight_toRightOf="parent" |
||||
app:layout_constraintTop_toBottomOf="@+id/til_group_name" |
||||
tools:ignore="RtlHardcoded" /> |
||||
|
||||
<io.legado.app.ui.widget.text.AccentTextView |
||||
android:id="@+id/btn_cancel" |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:padding="12dp" |
||||
android:text="@string/cancel" |
||||
app:layout_constraintBottom_toBottomOf="@id/btn_ok" |
||||
app:layout_constraintRight_toLeftOf="@+id/btn_ok" |
||||
app:layout_constraintTop_toTopOf="@+id/btn_ok" /> |
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout> |
Loading…
Reference in new issue