Misc cleanup

- Migrate sources filter screen to full compose
- Use standard "OK"/"Cancel" actions for delete category dialog
- Abstract some AppBar logic
- Remove some dead code
- Group related strings
This commit is contained in:
arkon
2022-07-18 18:32:25 -04:00
parent 00519e3b93
commit e2510c144a
13 changed files with 160 additions and 274 deletions

View File

@@ -1,22 +1,18 @@
package eu.kanade.tachiyomi.ui.browse.source
import androidx.compose.runtime.Composable
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import eu.kanade.domain.source.model.Source
import eu.kanade.presentation.browse.SourcesFilterScreen
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.base.controller.ComposeController
import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
class SourceFilterController : ComposeController<SourcesFilterPresenter>() {
override fun getTitle() = resources?.getString(R.string.label_sources)
class SourceFilterController : FullComposeController<SourcesFilterPresenter>() {
override fun createPresenter(): SourcesFilterPresenter = SourcesFilterPresenter()
@Composable
override fun ComposeContent(nestedScrollInterop: NestedScrollConnection) {
override fun ComposeContent() {
SourcesFilterScreen(
nestedScrollInterop = nestedScrollInterop,
navigateUp = router::popCurrentController,
presenter = presenter,
onClickLang = { language ->
presenter.toggleLanguage(language)

View File

@@ -1,41 +0,0 @@
package eu.kanade.tachiyomi.ui.manga.chapter
import android.content.Context
import android.util.AttributeSet
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.AbstractComposeView
import eu.kanade.presentation.components.ChapterDownloadAction
import eu.kanade.presentation.components.ChapterDownloadIndicator
import eu.kanade.presentation.theme.TachiyomiTheme
import eu.kanade.tachiyomi.data.download.model.Download
class ChapterDownloadView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0,
) : AbstractComposeView(context, attrs, defStyle) {
private var state by mutableStateOf(Download.State.NOT_DOWNLOADED)
private var progress by mutableStateOf(0)
var listener: (ChapterDownloadAction) -> Unit = {}
@Composable
override fun Content() {
TachiyomiTheme {
ChapterDownloadIndicator(
downloadStateProvider = { state },
downloadProgressProvider = { progress },
onClick = listener,
)
}
}
fun setState(state: Download.State, progress: Int = 0) {
this.state = state
this.progress = progress
}
}

View File

@@ -1,21 +0,0 @@
package eu.kanade.tachiyomi.ui.manga.chapter.base
import android.view.View
import eu.davidea.viewholders.FlexibleViewHolder
import eu.kanade.presentation.components.ChapterDownloadAction
open class BaseChapterHolder(
view: View,
private val adapter: BaseChaptersAdapter<*>,
) : FlexibleViewHolder(view, adapter) {
val downloadActionListener: (ChapterDownloadAction) -> Unit = { action ->
when (action) {
ChapterDownloadAction.START -> adapter.clickListener.downloadChapter(bindingAdapterPosition)
ChapterDownloadAction.START_NOW -> adapter.clickListener.startDownloadNow(bindingAdapterPosition)
ChapterDownloadAction.CANCEL, ChapterDownloadAction.DELETE -> {
adapter.clickListener.deleteChapter(bindingAdapterPosition)
}
}
}
}

View File

@@ -1,47 +0,0 @@
package eu.kanade.tachiyomi.ui.manga.chapter.base
import eu.davidea.flexibleadapter.items.AbstractHeaderItem
import eu.davidea.flexibleadapter.items.AbstractSectionableItem
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.source.model.Page
abstract class BaseChapterItem<T : BaseChapterHolder, H : AbstractHeaderItem<*>>(
val chapter: Chapter,
header: H? = null,
) : AbstractSectionableItem<T, H?>(header) {
private var _status: Download.State = Download.State.NOT_DOWNLOADED
var status: Download.State
get() = download?.status ?: _status
set(value) {
_status = value
}
val progress: Int
get() {
val pages = download?.pages ?: return 0
return pages.map(Page::progress).average().toInt()
}
@Transient
var download: Download? = null
val isDownloaded: Boolean
get() = status == Download.State.DOWNLOADED
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other is BaseChapterItem<*, *>) {
return chapter.id == other.chapter.id && chapter.read == other.chapter.read
}
return false
}
override fun hashCode(): Int {
var result = chapter.id.hashCode()
result = 31 * result + chapter.read.hashCode()
return result
}
}

View File

@@ -1,24 +0,0 @@
package eu.kanade.tachiyomi.ui.manga.chapter.base
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible
abstract class BaseChaptersAdapter<T : IFlexible<*>>(
controller: OnChapterClickListener,
items: List<T>? = null,
) : FlexibleAdapter<T>(items, controller, true) {
/**
* Listener for browse item clicks.
*/
val clickListener: OnChapterClickListener = controller
/**
* Listener which should be called when user clicks the download icons.
*/
interface OnChapterClickListener {
fun downloadChapter(position: Int)
fun deleteChapter(position: Int)
fun startDownloadNow(position: Int)
}
}