Skip to content

Commit

Permalink
Add movies runtime sorting progress/collection
Browse files Browse the repository at this point in the history
  • Loading branch information
michaldrabik committed Sep 1, 2024
1 parent 715cbc1 commit 9aa262f
Show file tree
Hide file tree
Showing 27 changed files with 153 additions and 7 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
/captures
.externalNativeBuild
.cxx
.kotlin
ktlint2.jar
/app/google-services.json
/app/keystore.properties
Expand Down
9 changes: 8 additions & 1 deletion ui-base/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
<string name="textNo">Нет</string>
<string name="textApply">Применить</string>
<string name="textCancel">Отменить</string>
<string name="textContinue">Продолжить</string>
<string name="textClose">Закрыть</string>
<string name="textNow">Сейчас</string>
<string name="textNotNow">Позже</string>
<string name="textNew">Новое</string>
<string name="textSelect">Выбрать</string>
Expand Down Expand Up @@ -34,15 +36,20 @@
<string name="textPleaseWait">Подождите…</string>
<string name="textRate">Оценить</string>
<string name="textLink">Ссылка</string>
<string name="textDisabled">Отключено</string>
<string name="textRateSaved">Ваша оценка была сохранена.</string>
<string name="textRateRemoved">Ваша оценка была удалена.</string>
<string name="textDays">%1$d дней</string>
<string name="textSelectDate">Выбрать дату</string>
<string name="textDateSelectionTitle">Выбор даты</string>
<string name="textDateSelectionDescription">Когда вы смотрели это?</string>
<plurals name="textEpisodesLeft" comment="Number of episodes left to see">
<item quantity="one">%d осталось</item>
<item quantity="few">%d осталось</item>
<item quantity="many">%d осталось</item>
<item quantity="other">%d осталось</item>
</plurals>
<string name="textPeople">Люди:</string>
<string name="textPeople">Актерский состав &amp; Съемочная команда</string>
<string name="textDirecting">Режиссура</string>
<string name="textDirector">Режиссер</string>
<string name="textWriting">Сценарий</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ enum class SortOrder(
RANK("rank", R.string.textSortRank),
NAME("title", R.string.textSortName),
NEWEST("released", R.string.textSortNewest),
RUNTIME("runtime", R.string.textSortRuntime),
RATING("percentage", R.string.textSortRated),
USER_RATING("user_rating", R.string.textSortRatedUser),
DATE_ADDED("added", R.string.textSortDateAdded),
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">حُدث مؤخرًا</string>
<string name="textSortRecentlyWatched">شوهد مؤخرًا</string>
<string name="textSortEpisodesLeft">عدد الحلقات المتبقية</string>
<string name="textSortRuntime">مدة العرض</string>
<string name="textPeriodThisWeek">هذا الأسبوع</string>
<string name="textPeriodLastWeek">الأسبوع الماضي</string>
<string name="textPeriodThisMonth">هذا الشهر</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Kürzlich Aktualisiert</string>
<string name="textSortRecentlyWatched">Zuletzt Geguckt</string>
<string name="textSortEpisodesLeft">Folgen Übrig</string>
<string name="textSortRuntime">Laufzeit</string>
<string name="textPeriodThisWeek">Diese Woche</string>
<string name="textPeriodLastWeek">Letze Woche</string>
<string name="textPeriodThisMonth">Diesen Monat</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Actualizado Recientemente</string>
<string name="textSortRecentlyWatched">Visto Recientemente</string>
<string name="textSortEpisodesLeft">Episodios Restantes</string>
<string name="textSortRuntime">Duración</string>
<string name="textPeriodThisWeek">Esta semana</string>
<string name="textPeriodLastWeek">Semana pasada</string>
<string name="textPeriodThisMonth">Este mes</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-fi/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Hiljattain päivitetyt</string>
<string name="textSortRecentlyWatched">Katsottu hiljattain</string>
<string name="textSortEpisodesLeft">Jaksoja jäljellä</string>
<string name="textSortRuntime">Kesto</string>
<string name="textPeriodThisWeek">Tällä viikolla</string>
<string name="textPeriodLastWeek">Viime viikolla</string>
<string name="textPeriodThisMonth">Tässä kuussa</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Récemment mis à jour</string>
<string name="textSortRecentlyWatched">Vu récemment</string>
<string name="textSortEpisodesLeft">Épisodes restants</string>
<string name="textSortRuntime">Durée</string>
<string name="textPeriodThisWeek">Cette semaine</string>
<string name="textPeriodLastWeek">Semaine dernière</string>
<string name="textPeriodThisMonth">Ce mois</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Aggiornati di recente</string>
<string name="textSortRecentlyWatched">Visti di recente</string>
<string name="textSortEpisodesLeft">Episodi rimasti</string>
<string name="textSortRuntime">Durata</string>
<string name="textPeriodThisWeek">Questa settimana</string>
<string name="textPeriodLastWeek">Settimana scorsa</string>
<string name="textPeriodThisMonth">Questo mese</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Ostatnio aktualizowane</string>
<string name="textSortRecentlyWatched">Ostatnio Obejrzane</string>
<string name="textSortEpisodesLeft">Pozostałe Odcinki</string>
<string name="textSortRuntime">Czas Trwania</string>
<string name="textPeriodThisWeek">Bieżący tydzień</string>
<string name="textPeriodLastWeek">Poprzedni tydzień</string>
<string name="textPeriodThisMonth">Bieżący miesiąc</string>
Expand Down
10 changes: 10 additions & 0 deletions ui-model/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@
<string name="textSortDateUpdated">Недавно обновленные</string>
<string name="textSortRecentlyWatched">Недавно просмотренные</string>
<string name="textSortEpisodesLeft">Оставшиеся эпизоды</string>
<string name="textSortRuntime">Продолжительность</string>
<string name="textPeriodThisWeek">Эта неделя</string>
<string name="textPeriodLastWeek">Прошлая неделя</string>
<string name="textPeriodThisMonth">Этот месяц</string>
<string name="textPeriodLastMonth">Прошлый месяц</string>
<string name="textPeriodLast30Days">Последние 30 дней</string>
<string name="textPeriodLast90Days">Последние 90 дней</string>
<string name="textPeriodLast365Days">Последние 365 дней</string>
<string name="textPeriodAllTime">За все время</string>
<string name="textHeaderRecentlyAdded">Недавно добавленные</string>
<string name="textHeaderWatching">Смотрю</string>
<string name="textHeaderFinished">Завершенные</string>
Expand All @@ -32,6 +41,7 @@
<string name="textTipWatchlistPinItem">Нажмите и удерживайте элемент списка, чтобы закрепить его вверху.</string>
<string name="textTipBottomModeMenu">Проведите по нижнему меню влево или вправо, чтобы быстро изменить режим.</string>
<string name="textTipListSwipeToDelete">Смахните элементы списка, чтобы удалить их из списка.</string>
<string name="textTipDefaultOption">Параметр по умолчанию может быть настроен в настройках</string>
<string name="textGenreAction">Экшн</string>
<string name="textGenreAdventure">Приключения</string>
<string name="textGenreAnimation">Анимация</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Son Güncellenen</string>
<string name="textSortRecentlyWatched">Son İzlenen</string>
<string name="textSortEpisodesLeft">Kalan Bölümler</string>
<string name="textSortRuntime">Süre</string>
<string name="textPeriodThisWeek">Bu hafta</string>
<string name="textPeriodLastWeek">Geçen hafta</string>
<string name="textPeriodThisMonth">Bu ay</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">За датою оновлення</string>
<string name="textSortRecentlyWatched">За датою перегляду</string>
<string name="textSortEpisodesLeft">За кількістю непереглянутих серій</string>
<string name="textSortRuntime">За тривалістю</string>
<string name="textPeriodThisWeek">Цього тижня</string>
<string name="textPeriodLastWeek">Минулого тижня</string>
<string name="textPeriodThisMonth">Цього місяця</string>
Expand Down
1 change: 1 addition & 0 deletions ui-model/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="textSortDateUpdated">Recently Updated</string>
<string name="textSortRecentlyWatched">Recently Watched</string>
<string name="textSortEpisodesLeft">Episodes Left</string>
<string name="textSortRuntime">Runtime</string>

<string name="textPeriodThisWeek">This week</string>
<string name="textPeriodLastWeek">Last week</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.michaldrabik.ui_model.SortOrder.DATE_ADDED
import com.michaldrabik.ui_model.SortOrder.NAME
import com.michaldrabik.ui_model.SortOrder.NEWEST
import com.michaldrabik.ui_model.SortOrder.RATING
import com.michaldrabik.ui_model.SortOrder.RUNTIME
import com.michaldrabik.ui_model.SortOrder.USER_RATING
import com.michaldrabik.ui_model.SortType
import com.michaldrabik.ui_model.SortType.ASCENDING
Expand All @@ -22,6 +23,7 @@ class CollectionItemSorter @Inject constructor() {
private fun sortAscending(sortOrder: SortOrder) = when (sortOrder) {
NAME -> compareBy { getTitle(it) }
RATING -> compareBy { it.movie.rating }
RUNTIME -> compareBy { it.movie.runtime }
USER_RATING ->
compareByDescending<CollectionListItem.MovieItem> { it.userRating != null }
.thenBy { it.userRating }
Expand All @@ -34,6 +36,7 @@ class CollectionItemSorter @Inject constructor() {
private fun sortDescending(sortOrder: SortOrder) = when (sortOrder) {
NAME -> compareByDescending { getTitle(it) }
RATING -> compareByDescending { it.movie.rating }
RUNTIME -> compareByDescending { it.movie.runtime }
USER_RATING ->
compareByDescending<CollectionListItem.MovieItem> { it.userRating != null }
.thenByDescending { it.userRating }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.michaldrabik.ui_base.utilities.extensions.onLongClick
import com.michaldrabik.ui_base.utilities.extensions.setOutboundRipple
import com.michaldrabik.ui_base.utilities.extensions.visible
import com.michaldrabik.ui_base.utilities.extensions.visibleIf
import com.michaldrabik.ui_model.SortOrder.RUNTIME
import com.michaldrabik.ui_my_movies.R
import com.michaldrabik.ui_my_movies.common.recycler.CollectionListItem
import com.michaldrabik.ui_my_movies.databinding.ViewCollectionMovieBinding
Expand Down Expand Up @@ -101,6 +102,12 @@ class CollectionMovieView : MovieView<CollectionListItem.MovieItem> {
collectionMovieUserRating.visible()
collectionMovieUserRating.text = String.format(ENGLISH, "%d", it)
}

if (item.movie.runtime > 0 && item.sortOrder == RUNTIME) {
collectionMovieRuntimeIcon.visible()
collectionMovieRuntime.visible()
collectionMovieRuntime.text = "${item.movie.runtime} ${context.getString(R.string.textMinutesShort)}"
}
}

loadImage(item)
Expand Down Expand Up @@ -169,6 +176,8 @@ class CollectionMovieView : MovieView<CollectionListItem.MovieItem> {
collectionMoviePlaceholder.gone()
collectionMovieUserStarIcon.gone()
collectionMovieUserRating.gone()
collectionMovieRuntimeIcon.gone()
collectionMovieRuntime.gone()
collectionMovieReleaseDate.gone()
Glide.with(this@CollectionMovieView).clear(collectionMovieImage)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.michaldrabik.ui_model.SortOrder.DATE_ADDED
import com.michaldrabik.ui_model.SortOrder.NAME
import com.michaldrabik.ui_model.SortOrder.NEWEST
import com.michaldrabik.ui_model.SortOrder.RATING
import com.michaldrabik.ui_model.SortOrder.RUNTIME
import com.michaldrabik.ui_model.SortOrder.USER_RATING
import com.michaldrabik.ui_model.SortType
import com.michaldrabik.ui_my_movies.R
Expand Down Expand Up @@ -162,7 +163,7 @@ class HiddenFragment :
}

private fun openSortOrderDialog(order: SortOrder, type: SortType) {
val options = listOf(NAME, RATING, USER_RATING, NEWEST, DATE_ADDED)
val options = listOf(NAME, RATING, USER_RATING, RUNTIME, NEWEST, DATE_ADDED)
val args = SortOrderBottomSheet.createBundle(options, order, type)

requireParentFragment().setFragmentResultListener(NavigationArgs.REQUEST_SORT_ORDER) { _, bundle ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.michaldrabik.ui_model.SortOrder.DATE_ADDED
import com.michaldrabik.ui_model.SortOrder.NAME
import com.michaldrabik.ui_model.SortOrder.NEWEST
import com.michaldrabik.ui_model.SortOrder.RATING
import com.michaldrabik.ui_model.SortOrder.RUNTIME
import com.michaldrabik.ui_model.SortOrder.USER_RATING
import com.michaldrabik.ui_model.SortType
import com.michaldrabik.ui_my_movies.R
Expand Down Expand Up @@ -170,7 +171,7 @@ class MyMoviesFragment :
}

private fun openSortOrderDialog(order: SortOrder, type: SortType) {
val options = listOf(NAME, RATING, USER_RATING, NEWEST, DATE_ADDED)
val options = listOf(NAME, RATING, USER_RATING, RUNTIME, NEWEST, DATE_ADDED)
val args = SortOrderBottomSheet.createBundle(options, order, type)

requireParentFragment().setFragmentResultListener(NavigationArgs.REQUEST_SORT_ORDER) { _, bundle ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.michaldrabik.ui_model.SortOrder.DATE_ADDED
import com.michaldrabik.ui_model.SortOrder.NAME
import com.michaldrabik.ui_model.SortOrder.NEWEST
import com.michaldrabik.ui_model.SortOrder.RATING
import com.michaldrabik.ui_model.SortOrder.RUNTIME
import com.michaldrabik.ui_model.SortOrder.USER_RATING
import com.michaldrabik.ui_model.SortType
import com.michaldrabik.ui_model.SortType.ASCENDING
Expand All @@ -29,6 +30,7 @@ class MyMoviesSorter @Inject constructor() {
.thenBy { it.userRating }
.thenBy { getTitle(it) }
DATE_ADDED -> compareBy { it.movie.updatedAt }
RUNTIME -> compareBy { it.movie.runtime }
NEWEST -> compareBy<MyMoviesItem> { it.movie.year }.thenBy { it.movie.released }
else -> throw IllegalStateException("Invalid sort order")
}
Expand All @@ -41,6 +43,7 @@ class MyMoviesSorter @Inject constructor() {
.thenByDescending { it.userRating }
.thenBy { getTitle(it) }
DATE_ADDED -> compareByDescending { it.movie.updatedAt }
RUNTIME -> compareByDescending { it.movie.runtime }
NEWEST -> compareByDescending<MyMoviesItem> { it.movie.year }.thenByDescending { it.movie.released }
else -> throw IllegalStateException("Invalid sort order")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ class MyMoviesItemDiffCallback : DiffUtil.ItemCallback<MyMoviesItem>() {
oldItem.isLoading == newItem.isLoading &&
oldItem.translation == newItem.translation &&
oldItem.spoilers == newItem.spoilers &&
oldItem.userRating == newItem.userRating
oldItem.userRating == newItem.userRating &&
oldItem.sortOrder == newItem.sortOrder &&
oldItem.dateFormat.toString() == newItem.dateFormat.toString()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.michaldrabik.ui_base.utilities.extensions.onLongClick
import com.michaldrabik.ui_base.utilities.extensions.setOutboundRipple
import com.michaldrabik.ui_base.utilities.extensions.visible
import com.michaldrabik.ui_base.utilities.extensions.visibleIf
import com.michaldrabik.ui_model.SortOrder
import com.michaldrabik.ui_my_movies.R
import com.michaldrabik.ui_my_movies.databinding.ViewCollectionMovieBinding
import com.michaldrabik.ui_my_movies.mymovies.recycler.MyMoviesItem
Expand Down Expand Up @@ -81,6 +82,12 @@ class MyMovieAllView : MovieView<MyMoviesItem> {
collectionMovieUserRating.visible()
collectionMovieUserRating.text = String.format(ENGLISH, "%d", it)
}

if (item.movie.runtime > 0 && item.sortOrder == SortOrder.RUNTIME) {
collectionMovieRuntimeIcon.visible()
collectionMovieRuntime.visible()
collectionMovieRuntime.text = "${item.movie.runtime} ${context.getString(R.string.textMinutesShort)}"
}
}
loadImage(item)
}
Expand Down Expand Up @@ -145,6 +152,8 @@ class MyMovieAllView : MovieView<MyMoviesItem> {
collectionMovieRating.text = ""
collectionMovieUserRating.gone()
collectionMovieUserStarIcon.gone()
collectionMovieRuntime.gone()
collectionMovieRuntimeIcon.gone()
collectionMoviePlaceholder.gone()
Glide.with(this@MyMovieAllView).clear(collectionMovieImage)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.michaldrabik.ui_model.SortOrder.DATE_ADDED
import com.michaldrabik.ui_model.SortOrder.NAME
import com.michaldrabik.ui_model.SortOrder.NEWEST
import com.michaldrabik.ui_model.SortOrder.RATING
import com.michaldrabik.ui_model.SortOrder.RUNTIME
import com.michaldrabik.ui_model.SortOrder.USER_RATING
import com.michaldrabik.ui_model.SortType
import com.michaldrabik.ui_my_movies.R
Expand Down Expand Up @@ -164,7 +165,7 @@ class WatchlistFragment :
}

private fun openSortOrderDialog(order: SortOrder, type: SortType) {
val options = listOf(NAME, RATING, USER_RATING, NEWEST, DATE_ADDED)
val options = listOf(NAME, RATING, USER_RATING, RUNTIME, NEWEST, DATE_ADDED)
val args = SortOrderBottomSheet.createBundle(options, order, type)

requireParentFragment().setFragmentResultListener(NavigationArgs.REQUEST_SORT_ORDER) { _, bundle ->
Expand Down
29 changes: 29 additions & 0 deletions ui-my-movies/src/main/res/layout/view_collection_movie.xml
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,35 @@
tools:visibility="visible"
/>

<ImageView
android:id="@+id/collectionMovieRuntimeIcon"
android:layout_width="20dp"
android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/collectionMovieTitle"
app:layout_constraintEnd_toStartOf="@id/collectionMovieRuntime"
app:layout_constraintTop_toTopOf="@id/collectionMovieYear"
app:srcCompat="@drawable/ic_clock"
app:tint="?android:attr/textColorPrimary"
tools:visibility="visible"
/>

<TextView
android:id="@+id/collectionMovieRuntime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spaceTiny"
android:gravity="end"
android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/collectionMovieTitle"
app:layout_constraintEnd_toStartOf="@id/collectionMovieUserStarIcon"
app:layout_constraintTop_toTopOf="@id/collectionMovieYear"
tools:text="123 min"
tools:visibility="visible"
/>

<TextView
android:id="@+id/collectionMovieDescription"
style="@style/CollectionItem.Description"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.michaldrabik.ui_model.SortOrder.DATE_ADDED
import com.michaldrabik.ui_model.SortOrder.NAME
import com.michaldrabik.ui_model.SortOrder.NEWEST
import com.michaldrabik.ui_model.SortOrder.RATING
import com.michaldrabik.ui_model.SortOrder.RUNTIME
import com.michaldrabik.ui_model.SortOrder.USER_RATING
import com.michaldrabik.ui_model.SortType
import com.michaldrabik.ui_model.SortType.ASCENDING
Expand All @@ -23,6 +24,7 @@ class ProgressMoviesItemsSorter @Inject constructor() {

private fun sortAscending(sortOrder: SortOrder) = when (sortOrder) {
NAME -> compareBy { getTitle(it) }
RUNTIME -> compareBy { it.movie.runtime }
RATING -> compareBy { it.movie.rating }
USER_RATING ->
compareByDescending<ProgressMovieListItem.MovieItem> { it.userRating != null }
Expand All @@ -37,6 +39,7 @@ class ProgressMoviesItemsSorter @Inject constructor() {

private fun sortDescending(sortOrder: SortOrder) = when (sortOrder) {
NAME -> compareByDescending { getTitle(it) }
RUNTIME -> compareByDescending { it.movie.runtime }
RATING -> compareByDescending { it.movie.rating }
USER_RATING ->
compareByDescending<ProgressMovieListItem.MovieItem> { it.userRating != null }
Expand Down
Loading

0 comments on commit 9aa262f

Please sign in to comment.