|
|
|
@ -1,19 +1,28 @@
|
|
|
|
package org.koitharu.kotatsu.stats.ui
|
|
|
|
package org.koitharu.kotatsu.stats.ui
|
|
|
|
|
|
|
|
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.os.Bundle
|
|
|
|
|
|
|
|
import android.view.Gravity
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
|
|
|
|
import android.view.Menu
|
|
|
|
|
|
|
|
import android.view.MenuItem
|
|
|
|
import android.view.View
|
|
|
|
import android.view.View
|
|
|
|
import android.view.ViewGroup
|
|
|
|
import android.view.ViewGroup
|
|
|
|
|
|
|
|
import android.widget.Toast
|
|
|
|
import androidx.activity.viewModels
|
|
|
|
import androidx.activity.viewModels
|
|
|
|
import androidx.core.graphics.Insets
|
|
|
|
import androidx.core.graphics.Insets
|
|
|
|
import androidx.fragment.app.viewModels
|
|
|
|
import androidx.fragment.app.viewModels
|
|
|
|
|
|
|
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
import org.koitharu.kotatsu.R
|
|
|
|
import org.koitharu.kotatsu.R
|
|
|
|
import org.koitharu.kotatsu.core.ui.BaseActivity
|
|
|
|
import org.koitharu.kotatsu.core.ui.BaseActivity
|
|
|
|
import org.koitharu.kotatsu.core.ui.BaseFragment
|
|
|
|
import org.koitharu.kotatsu.core.ui.BaseFragment
|
|
|
|
import org.koitharu.kotatsu.core.ui.BaseListAdapter
|
|
|
|
import org.koitharu.kotatsu.core.ui.BaseListAdapter
|
|
|
|
import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener
|
|
|
|
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.observe
|
|
|
|
import org.koitharu.kotatsu.core.util.ext.observe
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.core.util.ext.showOrHide
|
|
|
|
import org.koitharu.kotatsu.databinding.ActivityStatsBinding
|
|
|
|
import org.koitharu.kotatsu.databinding.ActivityStatsBinding
|
|
|
|
import org.koitharu.kotatsu.details.ui.DetailsActivity
|
|
|
|
import org.koitharu.kotatsu.details.ui.DetailsActivity
|
|
|
|
import org.koitharu.kotatsu.list.ui.adapter.ListItemType
|
|
|
|
import org.koitharu.kotatsu.list.ui.adapter.ListItemType
|
|
|
|
@ -22,7 +31,8 @@ import org.koitharu.kotatsu.stats.domain.StatsRecord
|
|
|
|
import org.koitharu.kotatsu.stats.ui.views.PieChartView
|
|
|
|
import org.koitharu.kotatsu.stats.ui.views.PieChartView
|
|
|
|
|
|
|
|
|
|
|
|
@AndroidEntryPoint
|
|
|
|
@AndroidEntryPoint
|
|
|
|
class StatsActivity : BaseActivity<ActivityStatsBinding>(), OnListItemClickListener<Manga> {
|
|
|
|
class StatsActivity : BaseActivity<ActivityStatsBinding>(), OnListItemClickListener<Manga>,
|
|
|
|
|
|
|
|
PieChartView.OnSegmentClickListener {
|
|
|
|
|
|
|
|
|
|
|
|
private val viewModel: StatsViewModel by viewModels()
|
|
|
|
private val viewModel: StatsViewModel by viewModels()
|
|
|
|
|
|
|
|
|
|
|
|
@ -33,6 +43,11 @@ class StatsActivity : BaseActivity<ActivityStatsBinding>(), OnListItemClickListe
|
|
|
|
val adapter = BaseListAdapter<StatsRecord>()
|
|
|
|
val adapter = BaseListAdapter<StatsRecord>()
|
|
|
|
.addDelegate(ListItemType.FEED, statsAD(this))
|
|
|
|
.addDelegate(ListItemType.FEED, statsAD(this))
|
|
|
|
viewBinding.recyclerView.adapter = adapter
|
|
|
|
viewBinding.recyclerView.adapter = adapter
|
|
|
|
|
|
|
|
viewBinding.chart.onSegmentClickListener = this
|
|
|
|
|
|
|
|
viewModel.isLoading.observe(this) {
|
|
|
|
|
|
|
|
viewBinding.progressBar.showOrHide(it)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
viewModel.onActionDone.observeEvent(this, ReversibleActionObserver(viewBinding.recyclerView))
|
|
|
|
viewModel.readingStats.observe(this) {
|
|
|
|
viewModel.readingStats.observe(this) {
|
|
|
|
val sum = it.sumOf { it.duration }
|
|
|
|
val sum = it.sumOf { it.duration }
|
|
|
|
viewBinding.chart.setData(
|
|
|
|
viewBinding.chart.setData(
|
|
|
|
@ -54,4 +69,37 @@ class StatsActivity : BaseActivity<ActivityStatsBinding>(), OnListItemClickListe
|
|
|
|
override fun onItemClick(item: Manga, view: View) {
|
|
|
|
override fun onItemClick(item: Manga, view: View) {
|
|
|
|
startActivity(DetailsActivity.newIntent(view.context, item))
|
|
|
|
startActivity(DetailsActivity.newIntent(view.context, item))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onSegmentClick(view: PieChartView, segment: PieChartView.Segment) {
|
|
|
|
|
|
|
|
Toast.makeText(this, segment.label, Toast.LENGTH_SHORT).apply {
|
|
|
|
|
|
|
|
setGravity(Gravity.TOP, 0, view.top + view.height / 2)
|
|
|
|
|
|
|
|
}.show()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
|
|
|
|
|
|
|
menuInflater.inflate(R.menu.opt_stats, menu)
|
|
|
|
|
|
|
|
return super.onCreateOptionsMenu(menu)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
|
|
|
|
return when (item.itemId) {
|
|
|
|
|
|
|
|
R.id.action_clear -> {
|
|
|
|
|
|
|
|
showClearConfirmDialog()
|
|
|
|
|
|
|
|
true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else -> super.onOptionsItemSelected(item)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun showClearConfirmDialog() {
|
|
|
|
|
|
|
|
MaterialAlertDialogBuilder(this, DIALOG_THEME_CENTERED)
|
|
|
|
|
|
|
|
.setMessage(R.string.clear_stats_confirm)
|
|
|
|
|
|
|
|
.setTitle(R.string.clear_stats)
|
|
|
|
|
|
|
|
.setIcon(R.drawable.ic_delete)
|
|
|
|
|
|
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
|
|
|
|
|
|
.setPositiveButton(R.string.clear) { _, _ ->
|
|
|
|
|
|
|
|
viewModel.clear()
|
|
|
|
|
|
|
|
}.show()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|