From b1a94c0f34926c19f4a9994568771136a1033809 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 15 Mar 2023 19:57:16 +0200 Subject: [PATCH] Remove obsolete code --- .../bookmarks/ui/BookmarksViewModel.kt | 6 ++--- .../kotatsu/browser/ProgressChromeClient.kt | 7 +++--- .../kotatsu/details/ui/DetailsViewModel.kt | 9 +++---- .../kotatsu/explore/ui/ExploreViewModel.kt | 3 +-- .../FavouritesCategoriesViewModel.kt | 10 ++++---- .../select/MangaCategoriesViewModel.kt | 4 +-- .../ui/list/FavouritesListViewModel.kt | 3 +-- .../list/ui/filter/FilterCoordinator.kt | 4 +-- .../kotatsu/local/ui/LocalListViewModel.kt | 4 +-- .../koitharu/kotatsu/main/ui/MainViewModel.kt | 3 +-- .../reader/ui/pager/standard/PageHolder.kt | 6 ++--- .../reader/ui/pager/webtoon/WebtoonHolder.kt | 8 +++--- .../remotelist/ui/RemoteListViewModel.kt | 4 +-- .../ui/config/ScrobblerConfigActivity.kt | 6 ++--- .../selector/ScrobblingSelectorViewModel.kt | 4 +-- .../kotatsu/search/ui/SearchViewModel.kt | 4 +-- .../search/ui/multi/MultiSearchViewModel.kt | 4 +-- .../settings/protect/ProtectSetupViewModel.kt | 6 ++--- .../koitharu/kotatsu/utils/ext/LiveDataExt.kt | 23 ----------------- .../kotatsu/utils/ext/ProgressBarExt.kt | 25 ------------------- .../koitharu/kotatsu/utils/ext/TextViewExt.kt | 9 +++++++ .../koitharu/kotatsu/utils/ext/ThemeExt.kt | 9 ------- .../widget/shelf/ShelfConfigViewModel.kt | 6 ++--- .../res/layout-v23/item_loading_footer.xml | 16 ------------ .../res/layout-v23/item_loading_state.xml | 14 ----------- .../main/res/layout/item_loading_footer.xml | 11 ++++---- .../main/res/layout/item_loading_state.xml | 4 +-- 27 files changed, 63 insertions(+), 149 deletions(-) delete mode 100644 app/src/main/java/org/koitharu/kotatsu/utils/ext/ProgressBarExt.kt delete mode 100644 app/src/main/res/layout-v23/item_loading_footer.xml delete mode 100644 app/src/main/res/layout-v23/item_loading_state.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt index 87adf5a1c..7ba0b2a79 100644 --- a/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.bookmarks.ui import androidx.lifecycle.LiveData import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.map @@ -18,7 +17,8 @@ import org.koitharu.kotatsu.list.ui.model.LoadingState import org.koitharu.kotatsu.list.ui.model.toErrorState import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.utils.SingleLiveEvent -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData +import javax.inject.Inject @HiltViewModel class BookmarksViewModel @Inject constructor( @@ -43,7 +43,7 @@ class BookmarksViewModel @Inject constructor( } } .catch { e -> emit(listOf(e.toErrorState(canRetry = false))) } - .asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + .asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) fun removeBookmarks(ids: Map>) { launchJob(Dispatchers.Default) { diff --git a/app/src/main/java/org/koitharu/kotatsu/browser/ProgressChromeClient.kt b/app/src/main/java/org/koitharu/kotatsu/browser/ProgressChromeClient.kt index 27e7f9b38..55bdc9707 100644 --- a/app/src/main/java/org/koitharu/kotatsu/browser/ProgressChromeClient.kt +++ b/app/src/main/java/org/koitharu/kotatsu/browser/ProgressChromeClient.kt @@ -2,14 +2,13 @@ package org.koitharu.kotatsu.browser import android.webkit.WebChromeClient import android.webkit.WebView -import android.widget.ProgressBar import androidx.core.view.isVisible -import org.koitharu.kotatsu.utils.ext.setProgressCompat +import com.google.android.material.progressindicator.BaseProgressIndicator private const val PROGRESS_MAX = 100 class ProgressChromeClient( - private val progressIndicator: ProgressBar, + private val progressIndicator: BaseProgressIndicator<*>, ) : WebChromeClient() { init { @@ -28,4 +27,4 @@ class ProgressChromeClient( progressIndicator.isIndeterminate = true } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt index d3a7f6f7c..19b807a4d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt @@ -46,7 +46,6 @@ import org.koitharu.kotatsu.scrobbling.common.domain.model.ScrobblingStatus import org.koitharu.kotatsu.tracker.domain.TrackingRepository import org.koitharu.kotatsu.utils.SingleLiveEvent import org.koitharu.kotatsu.utils.asFlowLiveData -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import org.koitharu.kotatsu.utils.ext.printStackTraceDebug import org.koitharu.kotatsu.utils.ext.runCatchingCancellable import java.io.IOException @@ -107,7 +106,7 @@ class DetailsViewModel @Inject constructor( val bookmarks = delegate.manga.flatMapLatest { if (it != null) bookmarksRepository.observeBookmarks(it) else flowOf(emptyList()) - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) val description = delegate.manga .distinctUntilChangedBy { it?.description.orEmpty() } @@ -119,7 +118,7 @@ class DetailsViewModel @Inject constructor( emit(description.parseAsHtml().filterSpans()) emit(description.parseAsHtml(imageGetter = imageGetter).filterSpans()) } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, null) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, null) val onMangaRemoved = SingleLiveEvent() val isScrobblingAvailable: Boolean @@ -141,7 +140,7 @@ class DetailsViewModel @Inject constructor( delegate.selectedBranch, ) { branches, selected -> branches.indexOf(selected) - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, -1) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, -1) val selectedBranchName = delegate.selectedBranch .asFlowLiveData(viewModelScope.coroutineContext, null) @@ -151,7 +150,7 @@ class DetailsViewModel @Inject constructor( isLoading.asFlow(), ) { m, loading -> m != null && m.chapters.isNullOrEmpty() && !loading - }.asLiveDataDistinct(viewModelScope.coroutineContext, false) + }.asFlowLiveData(viewModelScope.coroutineContext, false) val chapters = combine( combine( diff --git a/app/src/main/java/org/koitharu/kotatsu/explore/ui/ExploreViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/explore/ui/ExploreViewModel.kt index 19989fb7c..85f32745f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/explore/ui/ExploreViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/explore/ui/ExploreViewModel.kt @@ -25,7 +25,6 @@ import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.utils.SingleLiveEvent import org.koitharu.kotatsu.utils.asFlowLiveData -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import javax.inject.Inject @HiltViewModel @@ -50,7 +49,7 @@ class ExploreViewModel @Inject constructor( } else { createContentFlow() } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(ExploreItem.Loading)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(ExploreItem.Loading)) fun openRandom() { launchLoadingJob(Dispatchers.Default) { diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt index e2d7b277d..6c8d48798 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt @@ -3,8 +3,6 @@ package org.koitharu.kotatsu.favourites.ui.categories import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import java.util.* -import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.MutableStateFlow @@ -16,9 +14,11 @@ import org.koitharu.kotatsu.favourites.domain.FavouritesRepository import org.koitharu.kotatsu.favourites.ui.categories.adapter.CategoryListModel import org.koitharu.kotatsu.list.ui.model.EmptyState import org.koitharu.kotatsu.list.ui.model.LoadingState -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.mapItems import org.koitharu.kotatsu.utils.ext.requireValue +import java.util.Collections +import javax.inject.Inject @HiltViewModel class FavouritesCategoriesViewModel @Inject constructor( @@ -39,7 +39,7 @@ class FavouritesCategoriesViewModel @Inject constructor( category = it, isReorderMode = false, ) - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) val detalizedCategories = combine( repository.observeCategoriesWithCovers(), @@ -62,7 +62,7 @@ class FavouritesCategoriesViewModel @Inject constructor( ), ) } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) fun deleteCategory(id: Long) { launchJob { diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/select/MangaCategoriesViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/select/MangaCategoriesViewModel.kt index 49b554c63..791a79787 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/select/MangaCategoriesViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/select/MangaCategoriesViewModel.kt @@ -11,7 +11,7 @@ import org.koitharu.kotatsu.core.model.parcelable.ParcelableManga import org.koitharu.kotatsu.favourites.domain.FavouritesRepository import org.koitharu.kotatsu.favourites.ui.categories.select.FavouriteCategoriesBottomSheet.Companion.KEY_MANGA_LIST import org.koitharu.kotatsu.favourites.ui.categories.select.model.MangaCategoryItem -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import javax.inject.Inject @HiltViewModel @@ -33,7 +33,7 @@ class MangaCategoriesViewModel @Inject constructor( isChecked = it.id in checked, ) } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) fun setChecked(categoryId: Long, isChecked: Boolean) { launchJob(Dispatchers.Default) { diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt index 42deff770..674701581 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt @@ -28,7 +28,6 @@ import org.koitharu.kotatsu.list.ui.model.toUi import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.tracker.domain.TrackingRepository import org.koitharu.kotatsu.utils.asFlowLiveData -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import org.koitharu.kotatsu.utils.ext.runCatchingCancellable import javax.inject.Inject @@ -52,7 +51,7 @@ class FavouritesListViewModel @Inject constructor( } else { repository.observeCategory(categoryId) .map { it?.order } - .asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, null) + .asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, null) } override val content = combine( diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/filter/FilterCoordinator.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/filter/FilterCoordinator.kt index 42930502d..96fb630ae 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/filter/FilterCoordinator.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/filter/FilterCoordinator.kt @@ -16,7 +16,7 @@ import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.domain.MangaDataRepository import org.koitharu.kotatsu.core.parser.RemoteMangaRepository import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.printStackTraceDebug import org.koitharu.kotatsu.utils.ext.runCatchingCancellable import java.text.Collator @@ -37,7 +37,7 @@ class FilterCoordinator( private var availableTagsDeferred = loadTagsAsync() val items: LiveData> = getItemsFlow() - .asLiveDataDistinct(coroutineScope.coroutineContext + Dispatchers.Default, listOf(FilterItem.Loading)) + .asFlowLiveData(coroutineScope.coroutineContext + Dispatchers.Default, listOf(FilterItem.Loading)) init { observeState() diff --git a/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt index 240c3649f..62613ffb5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt @@ -34,7 +34,7 @@ import org.koitharu.kotatsu.parsers.model.MangaTag import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.tracker.domain.TrackingRepository import org.koitharu.kotatsu.utils.SingleLiveEvent -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.printStackTraceDebug import org.koitharu.kotatsu.utils.ext.runCatchingCancellable import java.io.IOException @@ -81,7 +81,7 @@ class LocalListViewModel @Inject constructor( list.toUi(this, mode, this@LocalListViewModel, tagHighlighter) } } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) init { onRefresh() diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainViewModel.kt index 423b88fbb..978e0d235 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainViewModel.kt @@ -20,7 +20,6 @@ import org.koitharu.kotatsu.sync.domain.SyncController import org.koitharu.kotatsu.tracker.domain.TrackingRepository import org.koitharu.kotatsu.utils.SingleLiveEvent import org.koitharu.kotatsu.utils.asFlowLiveData -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import javax.inject.Inject @HiltViewModel @@ -56,7 +55,7 @@ class MainViewModel @Inject constructor( a[R.id.nav_tools] = if (appUpdate != null) 1 else 0 a[R.id.nav_feed] = tracks a - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, SparseIntArray(0)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, SparseIntArray(0)) init { launchJob { diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt index d377e6833..edf8bce98 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt @@ -51,7 +51,7 @@ open class PageHolder( override fun onLoadingStarted() { bindingInfo.layoutError.isVisible = false - bindingInfo.progressBar.showCompat() + bindingInfo.progressBar.show() binding.ssiv.recycle() } @@ -109,7 +109,7 @@ open class PageHolder( } override fun onImageShown() { - bindingInfo.progressBar.hideCompat() + bindingInfo.progressBar.hide() } override fun onClick(v: View) { @@ -125,6 +125,6 @@ open class PageHolder( ExceptionResolver.getResolveStringId(e).ifZero { R.string.try_again }, ) bindingInfo.layoutError.isVisible = true - bindingInfo.progressBar.hideCompat() + bindingInfo.progressBar.hide() } } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt index 7e629a704..1301a96b0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt @@ -17,9 +17,7 @@ import org.koitharu.kotatsu.reader.ui.pager.BasePageHolder import org.koitharu.kotatsu.reader.ui.pager.ReaderPage import org.koitharu.kotatsu.utils.GoneOnInvisibleListener import org.koitharu.kotatsu.utils.ext.getDisplayMessage -import org.koitharu.kotatsu.utils.ext.hideCompat import org.koitharu.kotatsu.utils.ext.ifZero -import org.koitharu.kotatsu.utils.ext.showCompat class WebtoonHolder( owner: LifecycleOwner, @@ -63,7 +61,7 @@ class WebtoonHolder( override fun onLoadingStarted() { bindingInfo.layoutError.isVisible = false - bindingInfo.progressBar.showCompat() + bindingInfo.progressBar.show() binding.ssiv.recycle() } @@ -98,7 +96,7 @@ class WebtoonHolder( } override fun onImageShown() { - bindingInfo.progressBar.hideCompat() + bindingInfo.progressBar.hide() } override fun onClick(v: View) { @@ -114,7 +112,7 @@ class WebtoonHolder( ExceptionResolver.getResolveStringId(e).ifZero { R.string.try_again }, ) bindingInfo.layoutError.isVisible = true - bindingInfo.progressBar.hideCompat() + bindingInfo.progressBar.hide() } fun getScrollY() = binding.ssiv.getScroll() diff --git a/app/src/main/java/org/koitharu/kotatsu/remotelist/ui/RemoteListViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/remotelist/ui/RemoteListViewModel.kt index 416b0383b..1e23e2f02 100644 --- a/app/src/main/java/org/koitharu/kotatsu/remotelist/ui/RemoteListViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/remotelist/ui/RemoteListViewModel.kt @@ -37,7 +37,7 @@ import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaTag import org.koitharu.kotatsu.search.domain.MangaSearchRepository -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.printStackTraceDebug import org.koitharu.kotatsu.utils.ext.require import java.util.LinkedList @@ -88,7 +88,7 @@ class RemoteListViewModel @Inject constructor( } } } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) init { filter.observeState() diff --git a/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/config/ScrobblerConfigActivity.kt b/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/config/ScrobblerConfigActivity.kt index fd9c39d22..ccfcc2186 100644 --- a/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/config/ScrobblerConfigActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/config/ScrobblerConfigActivity.kt @@ -25,9 +25,7 @@ import org.koitharu.kotatsu.scrobbling.common.ui.config.adapter.ScrobblingMangaA import org.koitharu.kotatsu.tracker.ui.feed.adapter.FeedAdapter import org.koitharu.kotatsu.utils.ext.disposeImageRequest import org.koitharu.kotatsu.utils.ext.enqueueWith -import org.koitharu.kotatsu.utils.ext.hideCompat import org.koitharu.kotatsu.utils.ext.newImageRequest -import org.koitharu.kotatsu.utils.ext.showCompat import javax.inject.Inject @AndroidEntryPoint @@ -126,9 +124,9 @@ class ScrobblerConfigActivity : BaseActivity(), private fun onLoadingStateChanged(isLoading: Boolean) { binding.progressBar.run { if (isLoading) { - showCompat() + show() } else { - hideCompat() + hide() } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt index 357736cc5..7af348b48 100644 --- a/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt @@ -22,7 +22,7 @@ import org.koitharu.kotatsu.scrobbling.common.domain.Scrobbler import org.koitharu.kotatsu.scrobbling.common.domain.model.ScrobblerManga import org.koitharu.kotatsu.scrobbling.common.ui.selector.model.ScrobblerHint import org.koitharu.kotatsu.utils.SingleLiveEvent -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.printStackTraceDebug import org.koitharu.kotatsu.utils.ext.require import org.koitharu.kotatsu.utils.ext.requireValue @@ -70,7 +70,7 @@ class ScrobblingSelectorViewModel @Inject constructor( }, ) } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) val selectedItemId = MutableLiveData(NO_ID) val searchQuery = MutableLiveData(manga.title) diff --git a/app/src/main/java/org/koitharu/kotatsu/search/ui/SearchViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/search/ui/SearchViewModel.kt index d2ea88c4f..08e6db9c3 100644 --- a/app/src/main/java/org/koitharu/kotatsu/search/ui/SearchViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/search/ui/SearchViewModel.kt @@ -21,7 +21,7 @@ import org.koitharu.kotatsu.list.ui.model.toErrorFooter import org.koitharu.kotatsu.list.ui.model.toErrorState import org.koitharu.kotatsu.list.ui.model.toUi import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.require import javax.inject.Inject @@ -68,7 +68,7 @@ class SearchViewModel @Inject constructor( result } } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) init { loadList(append = false) diff --git a/app/src/main/java/org/koitharu/kotatsu/search/ui/multi/MultiSearchViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/search/ui/multi/MultiSearchViewModel.kt index d32717f6f..fad26f82f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/search/ui/multi/MultiSearchViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/search/ui/multi/MultiSearchViewModel.kt @@ -27,7 +27,7 @@ import org.koitharu.kotatsu.list.ui.model.LoadingState import org.koitharu.kotatsu.list.ui.model.toErrorState import org.koitharu.kotatsu.list.ui.model.toUi import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.printStackTraceDebug import org.koitharu.kotatsu.utils.ext.runCatchingCancellable import javax.inject.Inject @@ -70,7 +70,7 @@ class MultiSearchViewModel @Inject constructor( loading -> list + LoadingFooter else -> list } - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) init { doSearch(query.value.orEmpty()) diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt index b07860bbe..351ccc360 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt @@ -2,14 +2,14 @@ package org.koitharu.kotatsu.settings.protect import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.map import org.koitharu.kotatsu.base.ui.BaseViewModel import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.parsers.util.md5 import org.koitharu.kotatsu.utils.SingleLiveEvent -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData +import javax.inject.Inject @HiltViewModel class ProtectSetupViewModel @Inject constructor( @@ -20,7 +20,7 @@ class ProtectSetupViewModel @Inject constructor( val isSecondStep = firstPassword.map { it != null - }.asLiveDataDistinct(viewModelScope.coroutineContext, false) + }.asFlowLiveData(viewModelScope.coroutineContext, false) val onPasswordSet = SingleLiveEvent() val onPasswordMismatch = SingleLiveEvent() val onClearText = SingleLiveEvent() diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt index 6024452dd..310b3a91d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt @@ -2,11 +2,6 @@ package org.koitharu.kotatsu.utils.ext import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData -import androidx.lifecycle.liveData -import kotlin.coroutines.CoroutineContext -import kotlin.coroutines.EmptyCoroutineContext -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.StateFlow import org.koitharu.kotatsu.utils.BufferedObserver fun LiveData.requireValue(): T = checkNotNull(value) { @@ -20,21 +15,3 @@ fun LiveData.observeWithPrevious(owner: LifecycleOwner, observer: Buffere previous = it } } - -fun StateFlow.asLiveDataDistinct( - context: CoroutineContext = EmptyCoroutineContext, -): LiveData = asLiveDataDistinct(context, value) - -fun Flow.asLiveDataDistinct( - context: CoroutineContext = EmptyCoroutineContext, - defaultValue: T, -): LiveData = liveData(context) { - if (latestValue == null) { - emit(defaultValue) - } - collect { - if (it != latestValue) { - emit(it) - } - } -} diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ProgressBarExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ProgressBarExt.kt deleted file mode 100644 index db73cb967..000000000 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ProgressBarExt.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.koitharu.kotatsu.utils.ext - -import android.os.Build -import android.widget.ProgressBar -import androidx.core.view.isVisible -import androidx.core.widget.ContentLoadingProgressBar -import com.google.android.material.progressindicator.BaseProgressIndicator - -fun ProgressBar.setProgressCompat(progress: Int, animate: Boolean) = when { - this is BaseProgressIndicator<*> -> setProgressCompat(progress, animate) - Build.VERSION.SDK_INT >= Build.VERSION_CODES.N -> setProgress(progress, animate) - else -> setProgress(progress) -} - -fun ProgressBar.showCompat() = when (this) { - is BaseProgressIndicator<*> -> show() - is ContentLoadingProgressBar -> show() - else -> isVisible = true -} - -fun ProgressBar.hideCompat() = when (this) { - is BaseProgressIndicator<*> -> hide() - is ContentLoadingProgressBar -> hide() - else -> isVisible = false -} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/TextViewExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/TextViewExt.kt index 2197c4348..305b1e5df 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/TextViewExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/TextViewExt.kt @@ -6,7 +6,10 @@ import android.view.View import android.widget.TextView import androidx.annotation.AttrRes import androidx.annotation.StringRes +import androidx.annotation.StyleRes +import androidx.core.content.res.use import androidx.core.view.isGone +import androidx.core.widget.TextViewCompat var TextView.textAndVisible: CharSequence? get() = text?.takeIf { visibility == View.VISIBLE } @@ -61,3 +64,9 @@ var TextView.isBold: Boolean } setTypeface(typeface, style) } + +fun TextView.setThemeTextAppearance(@AttrRes resId: Int, @StyleRes fallback: Int) { + context.obtainStyledAttributes(intArrayOf(resId)).use { + TextViewCompat.setTextAppearance(this, it.getResourceId(0, fallback)) + } +} diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ThemeExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ThemeExt.kt index 6f034b7e2..7896da2e5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ThemeExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ThemeExt.kt @@ -2,14 +2,11 @@ package org.koitharu.kotatsu.utils.ext import android.content.Context import android.graphics.Color -import android.widget.TextView import androidx.annotation.AttrRes import androidx.annotation.ColorInt import androidx.annotation.FloatRange -import androidx.annotation.StyleRes import androidx.core.content.res.use import androidx.core.graphics.ColorUtils -import androidx.core.widget.TextViewCompat fun Context.getThemeDrawable( @AttrRes resId: Int, @@ -46,9 +43,3 @@ fun Context.getThemeColorStateList( ) = obtainStyledAttributes(intArrayOf(resId)).use { it.getColorStateList(0) } - -fun TextView.setThemeTextAppearance(@AttrRes resId: Int, @StyleRes fallback: Int) { - context.obtainStyledAttributes(intArrayOf(resId)).use { - TextViewCompat.setTextAppearance(this, it.getResourceId(0, fallback)) - } -} diff --git a/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigViewModel.kt index 9c3772efb..d8d2f2599 100644 --- a/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigViewModel.kt @@ -3,14 +3,14 @@ package org.koitharu.kotatsu.widget.shelf import androidx.lifecycle.LiveData import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import org.koitharu.kotatsu.base.ui.BaseViewModel import org.koitharu.kotatsu.favourites.domain.FavouritesRepository -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.widget.shelf.model.CategoryItem +import javax.inject.Inject @HiltViewModel class ShelfConfigViewModel @Inject constructor( @@ -29,7 +29,7 @@ class ShelfConfigViewModel @Inject constructor( CategoryItem(it.id, it.title, selectedId == it.id) } list - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, emptyList()) var checkedId: Long by selectedCategoryId::value } diff --git a/app/src/main/res/layout-v23/item_loading_footer.xml b/app/src/main/res/layout-v23/item_loading_footer.xml deleted file mode 100644 index 99a165524..000000000 --- a/app/src/main/res/layout-v23/item_loading_footer.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-v23/item_loading_state.xml b/app/src/main/res/layout-v23/item_loading_state.xml deleted file mode 100644 index 4d5d60aee..000000000 --- a/app/src/main/res/layout-v23/item_loading_state.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_loading_footer.xml b/app/src/main/res/layout/item_loading_footer.xml index 8f3db6dd2..f1237f529 100644 --- a/app/src/main/res/layout/item_loading_footer.xml +++ b/app/src/main/res/layout/item_loading_footer.xml @@ -1,15 +1,16 @@ - + app:indicatorSize="24dp" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/item_loading_state.xml b/app/src/main/res/layout/item_loading_state.xml index 22a462b94..ab836f167 100644 --- a/app/src/main/res/layout/item_loading_state.xml +++ b/app/src/main/res/layout/item_loading_state.xml @@ -5,10 +5,10 @@ android:layout_height="match_parent" android:paddingBottom="?actionBarSize"> - - \ No newline at end of file +