diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseListAdapter.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseListAdapter.kt index 6f04932b6..4f385d0af 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseListAdapter.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseListAdapter.kt @@ -29,8 +29,9 @@ open class BaseListAdapter : AsyncListDifferDelegationAdapter( return this } - fun addListListener(listListener: ListListener) { + fun addListListener(listListener: ListListener): BaseListAdapter { differ.addListListener(listListener) + return this } fun removeListListener(listListener: ListListener) { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/stats/ui/StatsActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/stats/ui/StatsActivity.kt index 9f1ebcc8c..967f6f7ca 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/stats/ui/StatsActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/stats/ui/StatsActivity.kt @@ -12,13 +12,18 @@ import android.view.Menu import android.view.MenuItem import android.view.View import android.view.ViewGroup +import android.view.ViewStub import android.widget.Toast import androidx.activity.viewModels import androidx.appcompat.widget.PopupMenu import androidx.core.graphics.Insets import androidx.core.text.buildSpannedString import androidx.core.text.inSpans +import androidx.core.view.isGone +import androidx.core.view.isVisible import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.AsyncListDiffer +import coil.ImageLoader import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint import org.koitharu.kotatsu.R @@ -28,21 +33,32 @@ import org.koitharu.kotatsu.core.ui.BaseListAdapter import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener import org.koitharu.kotatsu.core.ui.util.ReversibleActionObserver import org.koitharu.kotatsu.core.util.ext.DIALOG_THEME_CENTERED +import org.koitharu.kotatsu.core.util.ext.enqueueWith import org.koitharu.kotatsu.core.util.ext.getThemeColor +import org.koitharu.kotatsu.core.util.ext.newImageRequest import org.koitharu.kotatsu.core.util.ext.observe import org.koitharu.kotatsu.core.util.ext.observeEvent +import org.koitharu.kotatsu.core.util.ext.setTextAndVisible import org.koitharu.kotatsu.core.util.ext.showOrHide import org.koitharu.kotatsu.databinding.ActivityStatsBinding +import org.koitharu.kotatsu.databinding.ItemEmptyStateBinding import org.koitharu.kotatsu.details.ui.DetailsActivity import org.koitharu.kotatsu.list.ui.adapter.ListItemType import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.stats.domain.StatsPeriod import org.koitharu.kotatsu.stats.domain.StatsRecord import org.koitharu.kotatsu.stats.ui.views.PieChartView +import javax.inject.Inject @AndroidEntryPoint -class StatsActivity : BaseActivity(), OnListItemClickListener, - PieChartView.OnSegmentClickListener { +class StatsActivity : BaseActivity(), + OnListItemClickListener, + PieChartView.OnSegmentClickListener, + AsyncListDiffer.ListListener, + ViewStub.OnInflateListener { + + @Inject + lateinit var coil: ImageLoader private val viewModel: StatsViewModel by viewModels() @@ -52,8 +68,11 @@ class StatsActivity : BaseActivity(), OnListItemClickListe supportActionBar?.setDisplayHomeAsUpEnabled(true) val adapter = BaseListAdapter() .addDelegate(ListItemType.FEED, statsAD(this)) + .addListListener(this) viewBinding.recyclerView.adapter = adapter viewBinding.chart.onSegmentClickListener = this + viewBinding.stubEmpty.setOnInflateListener(this) + viewModel.isLoading.observe(this) { viewBinding.progressBar.showOrHide(it) } @@ -110,6 +129,23 @@ class StatsActivity : BaseActivity(), OnListItemClickListe } } + override fun onCurrentListChanged(previousList: MutableList, currentList: MutableList) { + val isEmpty = currentList.isEmpty() + with(viewBinding) { + chart.isGone = isEmpty + recyclerView.isGone = isEmpty + stubEmpty.isVisible = isEmpty + } + } + + override fun onInflate(stub: ViewStub?, inflated: View) { + val stubBinding = ItemEmptyStateBinding.bind(inflated) + stubBinding.icon.newImageRequest(this, R.drawable.ic_empty_history)?.enqueueWith(coil) + stubBinding.textPrimary.setText(R.string.text_empty_holder_primary) + stubBinding.textSecondary.setTextAndVisible(R.string.empty_stats_text) + stubBinding.buttonRetry.isVisible = false + } + private fun showClearConfirmDialog() { MaterialAlertDialogBuilder(this, DIALOG_THEME_CENTERED) .setMessage(R.string.clear_stats_confirm) diff --git a/app/src/main/res/layout/activity_stats.xml b/app/src/main/res/layout/activity_stats.xml index e02466630..2fbf80a3f 100644 --- a/app/src/main/res/layout/activity_stats.xml +++ b/app/src/main/res/layout/activity_stats.xml @@ -66,4 +66,15 @@ tools:itemCount="4" tools:listitem="@layout/item_stats" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0b0fbec9d..fb9ad2283 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -616,4 +616,5 @@ All time Day Three months + There are no statistics for the selected period