From a9454a1455e8599a6e691210412e6d2398dcb550 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 2 Mar 2022 18:11:56 +0200 Subject: [PATCH] Suggestions update action --- .../reader/ui/SimpleSettingsActivity.kt | 15 +++++--- .../suggestions/ui/SuggestionsFragment.kt | 35 +++++++++++++++++-- .../suggestions/ui/SuggestionsViewModel.kt | 12 ++++--- .../kotatsu/tracker/ui/FeedFragment.kt | 2 +- app/src/main/res/menu/opt_suggestions.xml | 18 ++++++++++ 5 files changed, 68 insertions(+), 14 deletions(-) create mode 100644 app/src/main/res/menu/opt_suggestions.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/SimpleSettingsActivity.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/SimpleSettingsActivity.kt index 8efab6827..c32605b96 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/SimpleSettingsActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/SimpleSettingsActivity.kt @@ -14,10 +14,7 @@ import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.BaseActivity import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.databinding.ActivitySettingsSimpleBinding -import org.koitharu.kotatsu.settings.MainSettingsFragment -import org.koitharu.kotatsu.settings.NetworkSettingsFragment -import org.koitharu.kotatsu.settings.ReaderSettingsFragment -import org.koitharu.kotatsu.settings.SourceSettingsFragment +import org.koitharu.kotatsu.settings.* class SimpleSettingsActivity : BaseActivity() { @@ -27,9 +24,11 @@ class SimpleSettingsActivity : BaseActivity() { supportActionBar?.setDisplayHomeAsUpEnabled(true) supportFragmentManager.commit { replace( - R.id.container, when (intent?.action) { + R.id.container, + when (intent?.action) { Intent.ACTION_MANAGE_NETWORK_USAGE -> NetworkSettingsFragment() ACTION_READER -> ReaderSettingsFragment() + ACTION_SUGGESTIONS -> SuggestionsSettingsFragment() ACTION_SOURCE -> SourceSettingsFragment.newInstance( intent.getParcelableExtra(EXTRA_SOURCE) ?: MangaSource.LOCAL ) @@ -55,6 +54,8 @@ class SimpleSettingsActivity : BaseActivity() { private const val ACTION_READER = "${BuildConfig.APPLICATION_ID}.action.MANAGE_READER_SETTINGS" + private const val ACTION_SUGGESTIONS = + "${BuildConfig.APPLICATION_ID}.action.MANAGE_SUGGESTIONS" private const val ACTION_SOURCE = "${BuildConfig.APPLICATION_ID}.action.MANAGE_SOURCE_SETTINGS" private const val EXTRA_SOURCE = "source" @@ -63,6 +64,10 @@ class SimpleSettingsActivity : BaseActivity() { Intent(context, SimpleSettingsActivity::class.java) .setAction(ACTION_READER) + fun newSuggestionsSettingsIntent(context: Context) = + Intent(context, SimpleSettingsActivity::class.java) + .setAction(ACTION_SUGGESTIONS) + fun newSourceSettingsIntent(context: Context, source: MangaSource) = Intent(context, SimpleSettingsActivity::class.java) .setAction(ACTION_SOURCE) diff --git a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsFragment.kt index b4f61427b..c70793405 100644 --- a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsFragment.kt @@ -1,18 +1,47 @@ package org.koitharu.kotatsu.suggestions.ui import android.os.Bundle -import android.view.View +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import com.google.android.material.snackbar.Snackbar import org.koin.androidx.viewmodel.ext.android.viewModel import org.koitharu.kotatsu.R import org.koitharu.kotatsu.list.ui.MangaListFragment +import org.koitharu.kotatsu.reader.ui.SimpleSettingsActivity class SuggestionsFragment : MangaListFragment() { override val viewModel by viewModel() override val isSwipeRefreshEnabled = false - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) + inflater.inflate(R.menu.opt_suggestions, menu) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + R.id.action_update -> { + SuggestionsWorker.startNow(requireContext()) + Snackbar.make( + binding.recyclerView, + R.string.feed_will_update_soon, + Snackbar.LENGTH_LONG, + ).show() + true + } + R.id.action_settings -> { + startActivity(SimpleSettingsActivity.newSuggestionsSettingsIntent(requireContext())) + true + } + else -> super.onOptionsItemSelected(item) + } } override fun onScrolledToEnd() = Unit diff --git a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt index a15099d68..9d5190a93 100644 --- a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt @@ -7,10 +7,7 @@ import kotlinx.coroutines.flow.combine import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.list.ui.MangaListViewModel -import org.koitharu.kotatsu.list.ui.model.EmptyState -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.list.ui.model.* import org.koitharu.kotatsu.suggestions.domain.SuggestionRepository import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import org.koitharu.kotatsu.utils.ext.onFirst @@ -20,6 +17,8 @@ class SuggestionsViewModel( settings: AppSettings, ) : MangaListViewModel(settings) { + private val headerModel = ListHeader(null, R.string.suggestions) + override val content = combine( repository.observeAll(), createListModeFlow() @@ -30,7 +29,10 @@ class SuggestionsViewModel( textPrimary = R.string.nothing_found, textSecondary = R.string.text_suggestion_holder, )) - else -> list.toUi(mode) + else -> buildList(list.size + 1) { + add(headerModel) + list.toUi(this, mode) + } } }.onFirst { isLoading.postValue(false) diff --git a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt index a98bf12ad..2fd2448f2 100644 --- a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt @@ -78,7 +78,7 @@ class FeedFragment : BaseFragment(), PaginationScrollListen Snackbar.make( binding.recyclerView, R.string.feed_will_update_soon, - Snackbar.LENGTH_SHORT + Snackbar.LENGTH_LONG, ).show() true } diff --git a/app/src/main/res/menu/opt_suggestions.xml b/app/src/main/res/menu/opt_suggestions.xml new file mode 100644 index 000000000..5e665f49e --- /dev/null +++ b/app/src/main/res/menu/opt_suggestions.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file