diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseMvpView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseMvpView.kt new file mode 100644 index 000000000..7189baff5 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseMvpView.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.ui.common + +import moxy.MvpView +import moxy.viewstate.strategy.alias.AddToEndSingle +import moxy.viewstate.strategy.alias.OneExecution + +interface BaseMvpView : MvpView { + + @OneExecution + fun onError(e: Throwable) + + @AddToEndSingle + fun onLoadingStateChanged(isLoading: Boolean) +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt index daa2b39e4..02641a6aa 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt @@ -7,18 +7,13 @@ import moxy.viewstate.strategy.alias.SingleState import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaHistory +import org.koitharu.kotatsu.ui.common.BaseMvpView -interface MangaDetailsView : MvpView { +interface MangaDetailsView : BaseMvpView { @AddToEndSingle fun onMangaUpdated(manga: Manga) - @AddToEndSingle - fun onLoadingStateChanged(isLoading: Boolean) - - @OneExecution - fun onError(e: Throwable) - @AddToEndSingle fun onHistoryChanged(history: MangaHistory?) diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt index 85462e161..fbc89bc91 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt @@ -151,7 +151,7 @@ abstract class MangaListFragment : BaseFragment(R.layout.fragment_list), Mang } } - override fun onError(e: Exception) { + override fun onError(e: Throwable) { if (recyclerView.hasItems) { Snackbar.make(recyclerView, e.getDisplayMessage(resources), Snackbar.LENGTH_SHORT) .show() @@ -167,7 +167,7 @@ abstract class MangaListFragment : BaseFragment(R.layout.fragment_list), Mang } } - override fun onLoadingChanged(isLoading: Boolean) { + override fun onLoadingStateChanged(isLoading: Boolean) { val hasItems = recyclerView.hasItems progressBar.isVisible = isLoading && !hasItems swipeRefreshLayout.isRefreshing = isLoading && hasItems diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListView.kt index 634e3b950..39155115d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListView.kt @@ -1,13 +1,17 @@ package org.koitharu.kotatsu.ui.main.list -import moxy.MvpView -import moxy.viewstate.strategy.* +import moxy.viewstate.strategy.AddToEndSingleTagStrategy +import moxy.viewstate.strategy.AddToEndStrategy +import moxy.viewstate.strategy.StateStrategyType +import moxy.viewstate.strategy.alias.AddToEnd +import moxy.viewstate.strategy.alias.AddToEndSingle import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaFilter import org.koitharu.kotatsu.core.model.MangaTag import org.koitharu.kotatsu.core.model.SortOrder +import org.koitharu.kotatsu.ui.common.BaseMvpView -interface MangaListView : MvpView { +interface MangaListView : BaseMvpView { @StateStrategyType(AddToEndSingleTagStrategy::class, tag = "content") fun onListChanged(list: List) @@ -15,15 +19,9 @@ interface MangaListView : MvpView { @StateStrategyType(AddToEndStrategy::class, tag = "content") fun onListAppended(list: List) - @StateStrategyType(AddToEndSingleStrategy::class) - fun onLoadingChanged(isLoading: Boolean) - - @StateStrategyType(OneExecutionStateStrategy::class) - fun onError(e: Exception) - - @StateStrategyType(AddToEndSingleStrategy::class) + @AddToEndSingle fun onInitFilter(sortOrders: List, tags: List, currentFilter: MangaFilter?) - @StateStrategyType(AddToEndStrategy::class) + @AddToEnd fun onItemRemoved(item: Manga) } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/FavouritesListPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/FavouritesListPresenter.kt index e6d746c75..5ee42076c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/FavouritesListPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/FavouritesListPresenter.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.ui.main.list.favourites +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -22,7 +23,7 @@ class FavouritesListPresenter : BasePresenter>() { fun loadList(offset: Int) { presenterScope.launch { - viewState.onLoadingChanged(true) + viewState.onLoadingStateChanged(true) try { val list = withContext(Dispatchers.IO) { repository.getAllManga(offset = offset) @@ -32,13 +33,14 @@ class FavouritesListPresenter : BasePresenter>() { } else { viewState.onListAppended(list) } - } catch (e: Exception) { + } catch (e: CancellationException) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } viewState.onError(e) } finally { - viewState.onLoadingChanged(false) + viewState.onLoadingStateChanged(false) } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesDialog.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesDialog.kt index 2dd9ab58c..ac821aa6c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesDialog.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesDialog.kt @@ -58,7 +58,7 @@ class FavouriteCategoriesDialog() : BaseBottomSheet(R.layout.dialog_favorite_cat presenter.removeFromCategory(manga ?: return, category.id) } - override fun onError(e: Exception) { + override fun onError(e: Throwable) { Toast.makeText(context ?: return, e.getDisplayMessage(resources), Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesView.kt index 2a434ee41..fd6f0fbd6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesView.kt @@ -15,5 +15,5 @@ interface FavouriteCategoriesView : MvpView { fun onCheckedCategoriesChanged(checkedIds: Set) @StateStrategyType(OneExecutionStateStrategy::class) - fun onError(e: Exception) + fun onError(e: Throwable) } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/history/HistoryListPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/history/HistoryListPresenter.kt index 1caf2034e..a6046a311 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/history/HistoryListPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/history/HistoryListPresenter.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.ui.main.list.history +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -24,7 +25,7 @@ class HistoryListPresenter : BasePresenter>() { fun loadList(offset: Int) { presenterScope.launch { - viewState.onLoadingChanged(true) + viewState.onLoadingStateChanged(true) try { val list = withContext(Dispatchers.IO) { repository.getList(offset = offset) @@ -34,32 +35,34 @@ class HistoryListPresenter : BasePresenter>() { } else { viewState.onListAppended(list) } - } catch (e: Exception) { + } catch (_: CancellationException) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } viewState.onError(e) } finally { - viewState.onLoadingChanged(false) + viewState.onLoadingStateChanged(false) } } } fun clearHistory() { presenterScope.launch { - viewState.onLoadingChanged(true) + viewState.onLoadingStateChanged(true) try { withContext(Dispatchers.IO) { repository.clear() } viewState.onListChanged(emptyList()) - } catch (e: Exception) { + } catch (_: CancellationException) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } viewState.onError(e) } finally { - viewState.onLoadingChanged(false) + viewState.onLoadingStateChanged(false) } } } @@ -71,7 +74,8 @@ class HistoryListPresenter : BasePresenter>() { repository.delete(manga) } viewState.onItemRemoved(manga) - } catch (e: Exception) { + } catch (_: CancellationException) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/local/LocalListPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/local/LocalListPresenter.kt index 8f4436d5a..8eb3b9ef6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/local/LocalListPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/local/LocalListPresenter.kt @@ -35,20 +35,20 @@ class LocalListPresenter : BasePresenter>() { fun loadList() { presenterScope.launch { - viewState.onLoadingChanged(true) + viewState.onLoadingStateChanged(true) try { val list = withContext(Dispatchers.IO) { repository.getList(0) } viewState.onListChanged(list) } catch (e: CancellationException) { - } catch (e: Exception) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } viewState.onError(e) } finally { - viewState.onLoadingChanged(false) + viewState.onLoadingStateChanged(false) } } } @@ -73,7 +73,7 @@ class LocalListPresenter : BasePresenter>() { viewState.onListChanged(list) } } catch (e: CancellationException) { - } catch (e: Exception) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } @@ -95,7 +95,7 @@ class LocalListPresenter : BasePresenter>() { } viewState.onItemRemoved(manga) } catch (e: CancellationException) { - } catch (e: Exception) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/remote/RemoteListPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/remote/RemoteListPresenter.kt index 08d0c215b..d75fe028d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/remote/RemoteListPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/remote/RemoteListPresenter.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.ui.main.list.remote +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -20,7 +21,7 @@ class RemoteListPresenter : BasePresenter>() { fun loadList(source: MangaSource, offset: Int) { presenterScope.launch { - viewState.onLoadingChanged(true) + viewState.onLoadingStateChanged(true) try { val list = withContext(Dispatchers.IO) { MangaProviderFactory.create(source).getList( @@ -34,13 +35,14 @@ class RemoteListPresenter : BasePresenter>() { } else { viewState.onListAppended(list) } - } catch (e: Exception) { + } catch (_: CancellationException) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } viewState.onError(e) } finally { - viewState.onLoadingChanged(false) + viewState.onLoadingStateChanged(false) } } if (!isFilterInitialized) { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt index d2da10e6d..e4d94f0be 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt @@ -35,7 +35,7 @@ abstract class BaseReaderFragment(@LayoutRes contentLayoutId: Int) : BaseFragmen /** * Handled by activity */ - override fun onError(e: Exception) = Unit + override fun onError(e: Throwable) = Unit /** * Handled by activity diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt index 344a7a9e3..01dca2283 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt @@ -164,7 +164,7 @@ class ReaderActivity : BaseFullscreenActivity(), ReaderView, ChaptersDialog.OnCh progressBar_bottom.isVisible = isLoading && hasPages } - override fun onError(e: Exception) { + override fun onError(e: Throwable) { showDialog { setTitle(R.string.error_occurred) setMessage(e.message) diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderView.kt index 8619b8773..677461aa1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderView.kt @@ -1,14 +1,14 @@ package org.koitharu.kotatsu.ui.reader import android.net.Uri -import moxy.MvpView import moxy.viewstate.strategy.alias.AddToEndSingle import moxy.viewstate.strategy.alias.OneExecution import org.koitharu.kotatsu.core.model.MangaChapter import org.koitharu.kotatsu.core.model.MangaPage import org.koitharu.kotatsu.core.prefs.ReaderMode +import org.koitharu.kotatsu.ui.common.BaseMvpView -interface ReaderView : MvpView { +interface ReaderView : BaseMvpView { @AddToEndSingle fun onInitReader(mode: ReaderMode) @@ -19,12 +19,6 @@ interface ReaderView : MvpView { @AddToEndSingle fun onPagesLoaded(chapterId: Long, pages: List, action: ReaderAction) - @AddToEndSingle - fun onLoadingStateChanged(isLoading: Boolean) - - @OneExecution - fun onError(e: Exception) - @OneExecution fun onPageSaved(uri: Uri?) } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/search/SearchPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/search/SearchPresenter.kt index 84abd7ddb..f21bed83b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/search/SearchPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/search/SearchPresenter.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.ui.search +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -23,7 +24,7 @@ class SearchPresenter : BasePresenter>() { fun loadList(source: MangaSource, query: String, offset: Int) { presenterScope.launch { - viewState.onLoadingChanged(true) + viewState.onLoadingStateChanged(true) try { val list = withContext(Dispatchers.IO) { MangaProviderFactory.create(source) @@ -34,13 +35,14 @@ class SearchPresenter : BasePresenter>() { } else { viewState.onListAppended(list) } - } catch (e: Exception) { + } catch (_: CancellationException) { + } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } viewState.onError(e) } finally { - viewState.onLoadingChanged(false) + viewState.onLoadingStateChanged(false) } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/delegates/prefs/IntPreferenceDelegate.kt b/app/src/main/java/org/koitharu/kotatsu/utils/delegates/prefs/IntPreferenceDelegate.kt index 315292e10..cf9910552 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/delegates/prefs/IntPreferenceDelegate.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/delegates/prefs/IntPreferenceDelegate.kt @@ -9,7 +9,7 @@ class IntPreferenceDelegate(private val key: String, private val defValue: Int) ReadWriteProperty { override fun getValue(thisRef: SharedPreferences, property: KProperty<*>): Int { - return thisRef.getInt(key, defValue) ?: defValue + return thisRef.getInt(key, defValue) } override fun setValue(thisRef: SharedPreferences, property: KProperty<*>, value: Int) {