parent
0ac5f3b93c
commit
bae391c2c1
3 changed files with 45 additions and 26 deletions
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.ui.reader
|
|||
|
||||
import android.annotation.SuppressLint
|
||||
import android.annotation.TargetApi
|
||||
import android.app.ProgressDialog
|
||||
import android.app.assist.AssistContent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
@ -25,8 +24,16 @@ import android.view.animation.Animation
|
|||
import android.view.animation.AnimationUtils
|
||||
import android.widget.Toast
|
||||
import androidx.activity.viewModels
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.transition.doOnEnd
|
||||
|
@ -128,12 +135,6 @@ class ReaderActivity : BaseActivity() {
|
|||
*/
|
||||
private var config: ReaderConfig? = null
|
||||
|
||||
/**
|
||||
* Progress dialog used when switching chapters from the menu buttons.
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
private var progressDialog: ProgressDialog? = null
|
||||
|
||||
private var menuToggleToast: Toast? = null
|
||||
|
||||
private var readingModeToast: Toast? = null
|
||||
|
@ -242,8 +243,6 @@ class ReaderActivity : BaseActivity() {
|
|||
config = null
|
||||
menuToggleToast?.cancel()
|
||||
readingModeToast?.cancel()
|
||||
progressDialog?.dismiss()
|
||||
progressDialog = null
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -412,6 +411,21 @@ class ReaderActivity : BaseActivity() {
|
|||
val state by viewModel.state.collectAsState()
|
||||
val onDismissRequest = viewModel::closeDialog
|
||||
when (state.dialog) {
|
||||
is ReaderViewModel.Dialog.Loading -> {
|
||||
AlertDialog(
|
||||
onDismissRequest = { /* Non dismissible */ },
|
||||
confirmButton = {},
|
||||
text = {
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
CircularProgressIndicator()
|
||||
Text(stringResource(R.string.loading))
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
is ReaderViewModel.Dialog.ColorFilter -> {
|
||||
setMenuVisibility(false)
|
||||
ReaderColorFilterDialog(
|
||||
|
@ -422,12 +436,14 @@ class ReaderActivity : BaseActivity() {
|
|||
readerPreferences = viewModel.readerPreferences,
|
||||
)
|
||||
}
|
||||
is ReaderViewModel.Dialog.Page -> ReaderPageDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
onSetAsCover = viewModel::setAsCover,
|
||||
onShare = viewModel::shareImage,
|
||||
onSave = viewModel::saveImage,
|
||||
)
|
||||
is ReaderViewModel.Dialog.PageActions -> {
|
||||
ReaderPageActionsDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
onSetAsCover = viewModel::setAsCover,
|
||||
onShare = viewModel::shareImage,
|
||||
onSave = viewModel::saveImage,
|
||||
)
|
||||
}
|
||||
null -> {}
|
||||
}
|
||||
}
|
||||
|
@ -757,13 +773,11 @@ class ReaderActivity : BaseActivity() {
|
|||
* [show]. This is only used when the next/previous buttons on the toolbar are clicked; the
|
||||
* other cases are handled with chapter transitions on the viewers and chapter preloading.
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
private fun setProgressDialog(show: Boolean) {
|
||||
progressDialog?.dismiss()
|
||||
progressDialog = if (show) {
|
||||
ProgressDialog.show(this, null, getString(R.string.loading), true)
|
||||
if (show) {
|
||||
viewModel.showLoadingDialog()
|
||||
} else {
|
||||
null
|
||||
viewModel.closeDialog()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ import tachiyomi.presentation.core.components.ActionButton
|
|||
import tachiyomi.presentation.core.components.material.padding
|
||||
|
||||
@Composable
|
||||
fun ReaderPageDialog(
|
||||
fun ReaderPageActionsDialog(
|
||||
onDismissRequest: () -> Unit,
|
||||
onSetAsCover: () -> Unit,
|
||||
onShare: () -> Unit,
|
|
@ -718,8 +718,12 @@ class ReaderViewModel(
|
|||
) + filenameSuffix
|
||||
}
|
||||
|
||||
fun showLoadingDialog() {
|
||||
mutableState.update { it.copy(dialog = Dialog.Loading) }
|
||||
}
|
||||
|
||||
fun openPageDialog(page: ReaderPage) {
|
||||
mutableState.update { it.copy(dialog = Dialog.Page(page)) }
|
||||
mutableState.update { it.copy(dialog = Dialog.PageActions(page)) }
|
||||
}
|
||||
|
||||
fun openColorFilterDialog() {
|
||||
|
@ -735,7 +739,7 @@ class ReaderViewModel(
|
|||
* There's also a notification to allow sharing the image somewhere else or deleting it.
|
||||
*/
|
||||
fun saveImage() {
|
||||
val page = (state.value.dialog as? Dialog.Page)?.page
|
||||
val page = (state.value.dialog as? Dialog.PageActions)?.page
|
||||
if (page?.status != Page.State.READY) return
|
||||
val manga = manga ?: return
|
||||
|
||||
|
@ -777,7 +781,7 @@ class ReaderViewModel(
|
|||
* image will be kept so it won't be taking lots of internal disk space.
|
||||
*/
|
||||
fun shareImage() {
|
||||
val page = (state.value.dialog as? Dialog.Page)?.page
|
||||
val page = (state.value.dialog as? Dialog.PageActions)?.page
|
||||
if (page?.status != Page.State.READY) return
|
||||
val manga = manga ?: return
|
||||
|
||||
|
@ -807,7 +811,7 @@ class ReaderViewModel(
|
|||
* Sets the image of the selected page as cover and notifies the UI of the result.
|
||||
*/
|
||||
fun setAsCover() {
|
||||
val page = (state.value.dialog as? Dialog.Page)?.page
|
||||
val page = (state.value.dialog as? Dialog.PageActions)?.page
|
||||
if (page?.status != Page.State.READY) return
|
||||
val manga = manga ?: return
|
||||
val stream = page.stream ?: return
|
||||
|
@ -928,8 +932,9 @@ class ReaderViewModel(
|
|||
}
|
||||
|
||||
sealed class Dialog {
|
||||
object Loading : Dialog()
|
||||
object ColorFilter : Dialog()
|
||||
data class Page(val page: ReaderPage) : Dialog()
|
||||
data class PageActions(val page: ReaderPage) : Dialog()
|
||||
}
|
||||
|
||||
sealed class Event {
|
||||
|
|
Reference in a new issue