Skip to content

Commit

Permalink
Remove extensions for statistics
Browse files Browse the repository at this point in the history
  • Loading branch information
michaldrabik committed Jul 16, 2023
1 parent 66d9572 commit 07fa08c
Show file tree
Hide file tree
Showing 10 changed files with 104 additions and 73 deletions.
5 changes: 4 additions & 1 deletion ui-statistics/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
apply from: '../versions.gradle'
Expand All @@ -23,6 +22,10 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildFeatures {
viewBinding true
}

buildTypes {
release {
minifyEnabled false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,19 @@ import com.michaldrabik.ui_base.BaseFragment
import com.michaldrabik.ui_base.utilities.extensions.doOnApplyWindowInsets
import com.michaldrabik.ui_base.utilities.extensions.fadeIf
import com.michaldrabik.ui_base.utilities.extensions.visibleIf
import com.michaldrabik.ui_base.utilities.viewBinding
import com.michaldrabik.ui_navigation.java.NavigationArgs.ARG_SHOW_ID
import com.michaldrabik.ui_statistics.databinding.FragmentStatisticsBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.android.synthetic.main.fragment_statistics.*
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch

@AndroidEntryPoint
class StatisticsFragment : BaseFragment<StatisticsViewModel>(R.layout.fragment_statistics) {

override val viewModel by viewModels<StatisticsViewModel>()

private val binding by viewBinding(FragmentStatisticsBinding::bind)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupView()
Expand All @@ -44,37 +46,41 @@ class StatisticsFragment : BaseFragment<StatisticsViewModel>(R.layout.fragment_s
}

private fun setupView() {
statisticsToolbar.setNavigationOnClickListener { activity?.onBackPressed() }
statisticsMostWatchedShows.run {
onLoadMoreClickListener = { addLimit -> viewModel.loadData(addLimit) }
onShowClickListener = {
openShowDetails(it.traktId)
with(binding) {
statisticsToolbar.setNavigationOnClickListener { activity?.onBackPressed() }
statisticsMostWatchedShows.run {
onLoadMoreClickListener = { addLimit -> viewModel.loadData(addLimit) }
onShowClickListener = {
openShowDetails(it.traktId)
}
}
statisticsRatings.onShowClickListener = {
openShowDetails(it.show.traktId)
}
}
statisticsRatings.onShowClickListener = {
openShowDetails(it.show.traktId)
}
}

private fun setupStatusBar() {
statisticsRoot.doOnApplyWindowInsets { view, insets, padding, _ ->
binding.statisticsRoot.doOnApplyWindowInsets { view, insets, padding, _ ->
val inset = insets.getInsets(WindowInsetsCompat.Type.systemBars()).top
view.updatePadding(top = padding.top + inset)
}
}

private fun render(uiState: StatisticsUiState) {
uiState.run {
statisticsMostWatchedShows.bind(mostWatchedShows ?: emptyList(), mostWatchedTotalCount ?: 0)
statisticsTotalTimeSpent.bind(totalTimeSpentMinutes ?: 0)
statisticsTotalEpisodes.bind(totalWatchedEpisodes ?: 0, totalWatchedEpisodesShows ?: 0)
statisticsTopGenres.bind(topGenres ?: emptyList())
statisticsRatings.bind(ratings ?: emptyList())
with(binding) {
statisticsMostWatchedShows.bind(mostWatchedShows ?: emptyList(), mostWatchedTotalCount ?: 0)
statisticsTotalTimeSpent.bind(totalTimeSpentMinutes ?: 0)
statisticsTotalEpisodes.bind(totalWatchedEpisodes ?: 0, totalWatchedEpisodesShows ?: 0)
statisticsTopGenres.bind(topGenres ?: emptyList())
statisticsRatings.bind(ratings ?: emptyList())

ratings?.let { statisticsRatings.visibleIf(it.isNotEmpty()) }
mostWatchedShows?.let {
statisticsContent.fadeIf(it.isNotEmpty())
statisticsEmptyView.fadeIf(it.isEmpty())
ratings?.let { statisticsRatings.visibleIf(it.isNotEmpty()) }
mostWatchedShows?.let {
statisticsContent.fadeIf(it.isNotEmpty())
statisticsEmptyView.rootLayout.fadeIf(it.isEmpty())
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ package com.michaldrabik.ui_statistics.views
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import com.google.android.material.card.MaterialCardView
import com.michaldrabik.ui_base.utilities.extensions.colorFromAttr
import com.michaldrabik.ui_base.utilities.extensions.dimenToPx
import com.michaldrabik.ui_base.utilities.extensions.onClick
import com.michaldrabik.ui_model.Genre
import com.michaldrabik.ui_statistics.R
import kotlinx.android.synthetic.main.view_statistics_card_top_genre.view.*
import com.michaldrabik.ui_statistics.databinding.ViewStatisticsCardTopGenreBinding

@SuppressLint("SetTextI18n")
class StatisticsTopGenresView : MaterialCardView {
Expand All @@ -19,18 +20,19 @@ class StatisticsTopGenresView : MaterialCardView {
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

private val binding = ViewStatisticsCardTopGenreBinding.inflate(LayoutInflater.from(context), this)

private var topGenres = emptyList<Genre>()

init {
inflate(context, R.layout.view_statistics_card_top_genre, this)
layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
setCardBackgroundColor(context.colorFromAttr(R.attr.colorCardBackground))
cardElevation = context.dimenToPx(R.dimen.elevationSmall).toFloat()
strokeWidth = 0
onClick {
showGenres(10)
isClickable = false
viewTopGenresSubValue.text = context.getString(R.string.textStatisticsTopGenreSubValue2)
binding.viewTopGenresSubValue.text = context.getString(R.string.textStatisticsTopGenreSubValue2)
}
}

Expand All @@ -40,7 +42,7 @@ class StatisticsTopGenresView : MaterialCardView {
}

private fun showGenres(limit: Int) {
viewTopGenresValue.text = topGenres
binding.viewTopGenresValue.text = topGenres
.take(limit)
.joinToString("\n") {
context.getString(it.displayName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package com.michaldrabik.ui_statistics.views
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import com.google.android.material.card.MaterialCardView
import com.michaldrabik.ui_base.utilities.extensions.colorFromAttr
import com.michaldrabik.ui_base.utilities.extensions.dimenToPx
import com.michaldrabik.ui_statistics.R
import kotlinx.android.synthetic.main.view_statistics_card_total_episodes.view.*
import com.michaldrabik.ui_statistics.databinding.ViewStatisticsCardTotalEpisodesBinding
import java.text.NumberFormat
import java.util.Locale

Expand All @@ -19,8 +20,9 @@ class StatisticsTotalEpisodesView : MaterialCardView {
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

private val binding = ViewStatisticsCardTotalEpisodesBinding.inflate(LayoutInflater.from(context), this)

init {
inflate(context, R.layout.view_statistics_card_total_episodes, this)
layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
setCardBackgroundColor(context.colorFromAttr(R.attr.colorCardBackground))
cardElevation = context.dimenToPx(R.dimen.elevationSmall).toFloat()
Expand All @@ -29,15 +31,15 @@ class StatisticsTotalEpisodesView : MaterialCardView {

fun bind(episodesCount: Int, episodesShowsCount: Int) {
val formatter = NumberFormat.getNumberInstance(Locale.ENGLISH)

viewTotalEpisodesValue.text = context.getString(
R.string.textStatisticsTotalEpisodesCount,
formatter.format(episodesCount)
)

viewTotalEpisodesSubValue.text = context.getString(
R.string.textStatisticsTotalEpisodesShowsCount,
formatter.format(episodesShowsCount)
)
with(binding) {
viewTotalEpisodesValue.text = context.getString(
R.string.textStatisticsTotalEpisodesCount,
formatter.format(episodesCount)
)
viewTotalEpisodesSubValue.text = context.getString(
R.string.textStatisticsTotalEpisodesShowsCount,
formatter.format(episodesShowsCount)
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package com.michaldrabik.ui_statistics.views
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import com.google.android.material.card.MaterialCardView
import com.michaldrabik.ui_base.utilities.extensions.colorFromAttr
import com.michaldrabik.ui_base.utilities.extensions.dimenToPx
import com.michaldrabik.ui_statistics.R
import kotlinx.android.synthetic.main.view_statistics_card_total_time.view.*
import com.michaldrabik.ui_statistics.databinding.ViewStatisticsCardTotalTimeBinding
import java.text.NumberFormat
import java.util.Locale.ENGLISH
import java.util.concurrent.TimeUnit
Expand All @@ -20,8 +21,9 @@ class StatisticsTotalTimeSpentView : MaterialCardView {
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

private val binding = ViewStatisticsCardTotalTimeBinding.inflate(LayoutInflater.from(context), this)

init {
inflate(context, R.layout.view_statistics_card_total_time, this)
layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
setCardBackgroundColor(context.colorFromAttr(R.attr.colorCardBackground))
cardElevation = context.dimenToPx(R.dimen.elevationSmall).toFloat()
Expand All @@ -34,8 +36,10 @@ class StatisticsTotalTimeSpentView : MaterialCardView {
val hours = TimeUnit.MINUTES.toHours(timeMinutes.toLong())
val days = TimeUnit.HOURS.toDays(hours)

viewTotalTimeSpentHoursValue.text = context.getString(R.string.textStatisticsTotalTimeSpentHours, formatter.format(hours))
viewTotalTimeSpentMinutesValue.text = context.getString(R.string.textStatisticsTotalTimeSpentMinutes, formatter.format(timeMinutes))
viewTotalTimeSpentSubValue.text = context.getString(R.string.textStatisticsTotalTimeSpentDays, formatter.format(days))
with(binding) {
viewTotalTimeSpentHoursValue.text = context.getString(R.string.textStatisticsTotalTimeSpentHours, formatter.format(hours))
viewTotalTimeSpentMinutesValue.text = context.getString(R.string.textStatisticsTotalTimeSpentMinutes, formatter.format(timeMinutes))
viewTotalTimeSpentSubValue.text = context.getString(R.string.textStatisticsTotalTimeSpentDays, formatter.format(days))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ package com.michaldrabik.ui_statistics.views.mostWatched
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.michaldrabik.ui_base.common.views.ShowView
import com.michaldrabik.ui_base.utilities.extensions.onClick
import com.michaldrabik.ui_statistics.R
import kotlinx.android.synthetic.main.view_statistics_most_watched_item.view.*
import com.michaldrabik.ui_statistics.databinding.ViewStatisticsMostWatchedItemBinding

@SuppressLint("SetTextI18n")
class StatisticsMostWatchedItemView : ShowView<StatisticsMostWatchedItem> {
Expand All @@ -19,32 +19,35 @@ class StatisticsMostWatchedItemView : ShowView<StatisticsMostWatchedItem> {
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

private val binding = ViewStatisticsMostWatchedItemBinding.inflate(LayoutInflater.from(context), this)

init {
inflate(context, R.layout.view_statistics_most_watched_item, this)
layoutParams = LayoutParams(MATCH_PARENT, WRAP_CONTENT)

viewMostWatchedItem.onClick { itemClickListener?.invoke(item) }
binding.viewMostWatchedItem.onClick { itemClickListener?.invoke(item) }
}

override val imageView: ImageView = viewMostWatchedItemImage
override val placeholderView: ImageView = viewMostWatchedItemPlaceholder
override val imageView: ImageView = binding.viewMostWatchedItemImage
override val placeholderView: ImageView = binding.viewMostWatchedItemPlaceholder

private lateinit var item: StatisticsMostWatchedItem

override fun bind(item: StatisticsMostWatchedItem) {
this.item = item
clear()

viewMostWatchedItemTitle.text =
if (item.translation?.title.isNullOrBlank()) item.show.title
else item.translation?.title
viewMostWatchedItemHoursValue.text = "${item.episodes.sumOf { it.runtime } / 60}"
viewMostWatchedItemEpisodesValue.text = "${item.episodes.size}"
viewMostWatchedItemSeasonsValue.text = "${item.seasonsCount}"
with(binding) {
viewMostWatchedItemTitle.text =
if (item.translation?.title.isNullOrBlank()) item.show.title
else item.translation?.title
viewMostWatchedItemHoursValue.text = "${item.episodes.sumOf { it.runtime } / 60}"
viewMostWatchedItemEpisodesValue.text = "${item.episodes.size}"
viewMostWatchedItemSeasonsValue.text = "${item.seasonsCount}"
}

loadImage(item)
}

private fun clear() {
Glide.with(this).clear(viewMostWatchedItemImage)
Glide.with(this).clear(binding.viewMostWatchedItemImage)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.michaldrabik.ui_statistics.views.mostWatched
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import androidx.constraintlayout.widget.ConstraintLayout
Expand All @@ -13,8 +14,8 @@ import com.michaldrabik.ui_base.utilities.extensions.onClick
import com.michaldrabik.ui_base.utilities.extensions.visibleIf
import com.michaldrabik.ui_model.Show
import com.michaldrabik.ui_statistics.R
import com.michaldrabik.ui_statistics.databinding.ViewStatisticsCardMostWatchedShowsBinding
import com.michaldrabik.ui_statistics.views.mostWatched.recycler.MostWatchedAdapter
import kotlinx.android.synthetic.main.view_statistics_card_most_watched_shows.view.*

@SuppressLint("SetTextI18n")
class StatisticsMostWatchedShowsView : ConstraintLayout {
Expand All @@ -23,14 +24,15 @@ class StatisticsMostWatchedShowsView : ConstraintLayout {
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

private val binding = ViewStatisticsCardMostWatchedShowsBinding.inflate(LayoutInflater.from(context), this)

private var adapter: MostWatchedAdapter? = null
private var layoutManager: LinearLayoutManager? = null

var onLoadMoreClickListener: ((Int) -> Unit)? = null
var onShowClickListener: ((Show) -> Unit)? = null

init {
inflate(context, R.layout.view_statistics_card_most_watched_shows, this)
layoutParams = LayoutParams(MATCH_PARENT, WRAP_CONTENT)
setupRecycler()
}
Expand All @@ -40,7 +42,7 @@ class StatisticsMostWatchedShowsView : ConstraintLayout {
adapter = MostWatchedAdapter(
itemClickListener = { onShowClickListener?.invoke(it.show) }
)
viewMostWatchedShowsRecycler.apply {
binding.viewMostWatchedShowsRecycler.apply {
adapter = this@StatisticsMostWatchedShowsView.adapter
layoutManager = this@StatisticsMostWatchedShowsView.layoutManager
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
Expand All @@ -53,7 +55,7 @@ class StatisticsMostWatchedShowsView : ConstraintLayout {
totalCount: Int
) {
adapter?.setItems(items)
viewMostWatchedShowsMoreButton.run {
binding.viewMostWatchedShowsMoreButton.run {
visibleIf(items.size < totalCount)
onClick { onLoadMoreClickListener?.invoke(10) }
}
Expand Down
Loading

0 comments on commit 07fa08c

Please sign in to comment.