diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt index 724ada280..6803fa8e3 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt @@ -23,8 +23,8 @@ import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.book.group.GroupManageDialog import io.legado.app.ui.book.group.GroupSelectDialog -import io.legado.app.ui.theme.AppTheme import io.legado.app.ui.widget.SelectActionBar +import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.recycler.DragSelectTouchHelper import io.legado.app.ui.widget.recycler.ItemTouchCallback import io.legado.app.ui.widget.recycler.VerticalDivider @@ -59,6 +59,7 @@ class BookshelfManageActivity : private var menu: Menu? = null private var searchView: SearchView? = null private var books: List? = null + private val waitDialog by lazy { WaitDialog(this) } override fun onActivityCreated(savedInstanceState: Bundle?) { viewModel.groupId = intent.getLongExtra("groupId", -1) @@ -75,6 +76,20 @@ class BookshelfManageActivity : upBookDataByGroupId() } + override fun observeLiveBus() { + viewModel.batchChangeSourceState.observe(this) { + if (it) { + waitDialog.setText(R.string.change_source_batch) + waitDialog.show() + } else { + waitDialog.dismiss() + } + } + viewModel.batchChangeSourceProcessLiveData.observe(this) { + waitDialog.setText(it) + } + } + override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.bookshelf_manage, menu) initSearchView(menu) @@ -150,16 +165,8 @@ class BookshelfManageActivity : binding.selectActionBar.inflateMenu(R.menu.bookshelf_menage_sel) binding.selectActionBar.setOnMenuItemClickListener(this) binding.selectActionBar.setCallBack(this) - binding.composeView.setContent { - AppTheme { - BatchChangeSourceDialog( - state = viewModel.batchChangeSourceState, - size = viewModel.batchChangeSourceSize, - position = viewModel.batchChangeSourcePosition - ) { - viewModel.batchChangeSourceCoroutine?.cancel() - } - } + waitDialog.setOnCancelListener { + viewModel.batchChangeSourceCoroutine?.cancel() } } diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt index 7eb71ecea..4ee9308e3 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt @@ -1,7 +1,7 @@ package io.legado.app.ui.book.manage import android.app.Application -import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.MutableLiveData import io.legado.app.base.BaseViewModel import io.legado.app.constant.BookType import io.legado.app.data.appDb @@ -17,9 +17,8 @@ import io.legado.app.utils.toastOnUi class BookshelfManageViewModel(application: Application) : BaseViewModel(application) { var groupId: Long = -1L var groupName: String? = null - val batchChangeSourceState = mutableStateOf(false) - val batchChangeSourceSize = mutableStateOf(0) - val batchChangeSourcePosition = mutableStateOf(0) + val batchChangeSourceState = MutableLiveData() + val batchChangeSourceProcessLiveData = MutableLiveData() var batchChangeSourceCoroutine: Coroutine? = null fun upCanUpdate(books: List, canUpdate: Boolean) { @@ -46,9 +45,8 @@ class BookshelfManageViewModel(application: Application) : BaseViewModel(applica fun changeSource(books: List, source: BookSource) { batchChangeSourceCoroutine?.cancel() batchChangeSourceCoroutine = execute { - batchChangeSourceSize.value = books.size books.forEachIndexed { index, book -> - batchChangeSourcePosition.value = index + 1 + batchChangeSourceProcessLiveData.postValue("${index + 1}/${books.size}") if (book.isLocal) return@forEachIndexed if (book.origin == source.bookSourceUrl) return@forEachIndexed WebBook.preciseSearchAwait(this, source, book.name, book.author) @@ -66,8 +64,10 @@ class BookshelfManageViewModel(application: Application) : BaseViewModel(applica } } } + }.onStart { + batchChangeSourceState.postValue(true) }.onFinally { - batchChangeSourceState.value = false + batchChangeSourceState.postValue(false) } } diff --git a/app/src/main/java/io/legado/app/ui/book/manage/ComposeView.kt b/app/src/main/java/io/legado/app/ui/book/manage/ComposeView.kt deleted file mode 100644 index c3a813de4..000000000 --- a/app/src/main/java/io/legado/app/ui/book/manage/ComposeView.kt +++ /dev/null @@ -1,45 +0,0 @@ -package io.legado.app.ui.book.manage - -import androidx.compose.foundation.layout.Column -import androidx.compose.material.AlertDialog -import androidx.compose.material.LinearProgressIndicator -import androidx.compose.material.Text -import androidx.compose.material.TextButton -import androidx.compose.runtime.Composable -import androidx.compose.runtime.MutableState -import androidx.compose.ui.Alignment -import io.legado.app.R -import splitties.init.appCtx - -@Composable -fun BatchChangeSourceDialog( - state: MutableState, - size: MutableState, - position: MutableState, - cancel: () -> Unit -) { - if (state.value) { - AlertDialog( - onDismissRequest = { }, - confirmButton = { - TextButton(onClick = { - cancel.invoke() - state.value = false - }, content = { - Text(text = appCtx.getString(R.string.cancel)) - }) - }, - title = { - Text(text = appCtx.getString(R.string.change_source_batch)) - }, - text = { - Column(horizontalAlignment = Alignment.CenterHorizontally) { - Text(text = "${position.value}/${size.value}") - LinearProgressIndicator( - progress = position.value / size.value.toFloat() - ) - } - } - ) - } -} \ No newline at end of file