From 765a31838e1be3acc76052aa77fe69affcab235c Mon Sep 17 00:00:00 2001 From: jarnedemeulemeester Date: Sat, 13 May 2023 11:27:24 +0200 Subject: [PATCH] fix: info text overlapping in movie and show fragments Closes: #358 --- .../jellyfin/fragments/MovieFragment.kt | 37 +-- .../jdtech/jellyfin/fragments/ShowFragment.kt | 22 +- .../main/res/layout-w600dp/fragment_show.xml | 195 +--------------- .../src/main/res/layout/fragment_movie.xml | 193 +--------------- .../src/main/res/layout/fragment_show.xml | 193 +--------------- app/phone/src/main/res/layout/item_info.xml | 211 ++++++++++++++++++ .../jellyfin/viewmodels/ShowViewModel.kt | 22 -- .../JellyfinRepositoryOfflineImpl.kt | 2 +- 8 files changed, 252 insertions(+), 623 deletions(-) create mode 100644 app/phone/src/main/res/layout/item_info.xml diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MovieFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MovieFragment.kt index b55dd78c..c9e07f7b 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MovieFragment.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MovieFragment.kt @@ -309,18 +309,6 @@ class MovieFragment : Fragment() { } binding.officialRating.text = item.officialRating binding.communityRating.text = item.communityRating.toString() - binding.genresLayout.isVisible = item.genres.isNotEmpty() - binding.genres.text = genresString - binding.videoMeta.text = videoString - binding.audio.text = audioString - binding.subtitles.text = subtitleString - binding.subsChip.isVisible = subtitleString.isNotEmpty() - - if (appPreferences.displayExtraInfo) { - binding.subtitlesLayout.isVisible = subtitleString.isNotEmpty() - binding.videoMetaLayout.isVisible = videoString.isNotEmpty() - binding.audioLayout.isVisible = audioString.isNotEmpty() - } videoMetadata.let { with(binding) { @@ -373,11 +361,26 @@ class MovieFragment : Fragment() { } } } - binding.directorLayout.isVisible = director != null - binding.director.text = director?.name - binding.writersLayout.isVisible = writers.isNotEmpty() - binding.writers.text = writersString - binding.description.text = item.overview + + binding.subsChip.isVisible = subtitleString.isNotEmpty() + + if (appPreferences.displayExtraInfo) { + binding.info.video.text = videoString + binding.info.videoGroup.isVisible = videoString.isNotEmpty() + binding.info.audio.text = audioString + binding.info.audioGroup.isVisible = audioString.isNotEmpty() + binding.info.subtitles.text = subtitleString + binding.info.subtitlesGroup.isVisible = subtitleString.isNotEmpty() + } + + binding.info.description.text = item.overview + binding.info.genres.text = genresString + binding.info.genresGroup.isVisible = item.genres.isNotEmpty() + binding.info.director.text = director?.name + binding.info.directorGroup.isVisible = director != null + binding.info.writers.text = writersString + binding.info.writersGroup.isVisible = writers.isNotEmpty() + val actorsAdapter = binding.peopleRecyclerView.adapter as PersonListAdapter actorsAdapter.submitList(actors) bindItemBackdropImage(binding.itemBanner, item) diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt index a0d8bfaa..b6d3aacd 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt @@ -208,23 +208,15 @@ class ShowFragment : Fragment() { } binding.officialRating.text = item.officialRating binding.communityRating.text = item.communityRating.toString() - binding.genresLayout.isVisible = item.genres.isNotEmpty() - binding.genres.text = genresString - binding.videoMeta.text = videoString - binding.audio.text = audioString - binding.subtitles.text = subtitleString - if (appPreferences.displayExtraInfo) { - binding.subtitlesLayout.isVisible = subtitleString.isNotEmpty() - binding.videoMetaLayout.isVisible = videoString.isNotEmpty() - binding.audioLayout.isVisible = audioString.isNotEmpty() - } + binding.info.description.text = item.overview + binding.info.genres.text = genresString + binding.info.genresGroup.isVisible = item.genres.isNotEmpty() + binding.info.director.text = director?.name + binding.info.directorGroup.isVisible = director != null + binding.info.writers.text = writersString + binding.info.writersGroup.isVisible = writers.isNotEmpty() - binding.directorLayout.isVisible = director != null - binding.director.text = director?.name - binding.writersLayout.isVisible = writers.isNotEmpty() - binding.writers.text = writersString - binding.description.text = item.overview binding.nextUpLayout.isVisible = nextUp != null if (nextUp?.indexNumberEnd == null) { binding.nextUpName.text = getString( diff --git a/app/phone/src/main/res/layout-w600dp/fragment_show.xml b/app/phone/src/main/res/layout-w600dp/fragment_show.xml index 1a7be92c..4b84d2e1 100644 --- a/app/phone/src/main/res/layout-w600dp/fragment_show.xml +++ b/app/phone/src/main/res/layout-w600dp/fragment_show.xml @@ -132,17 +132,15 @@ layout="@layout/item_actions" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="24dp" - android:layout_marginBottom="16dp" /> + android:layout_marginHorizontal="24dp" /> @@ -164,192 +162,9 @@ android:textColor="?attr/colorError" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + layout="@layout/item_info" /> diff --git a/app/phone/src/main/res/layout/fragment_movie.xml b/app/phone/src/main/res/layout/fragment_movie.xml index 545b38bb..6d66782d 100644 --- a/app/phone/src/main/res/layout/fragment_movie.xml +++ b/app/phone/src/main/res/layout/fragment_movie.xml @@ -198,16 +198,14 @@ layout="@layout/item_actions" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="24dp" - android:layout_marginBottom="16dp" /> + android:layout_marginHorizontal="24dp" /> @@ -230,192 +228,9 @@ android:textColor="?attr/colorError" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + layout="@layout/item_info" /> + android:layout_marginHorizontal="24dp" /> @@ -151,192 +149,9 @@ android:textColor="?attr/colorError" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + layout="@layout/item_info" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/ShowViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/ShowViewModel.kt index 3703a3c8..6f17c8e0 100644 --- a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/ShowViewModel.kt +++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/ShowViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.models.FindroidEpisode -import dev.jdtech.jellyfin.models.FindroidMediaStream import dev.jdtech.jellyfin.models.FindroidSeason import dev.jdtech.jellyfin.models.FindroidShow import dev.jdtech.jellyfin.repository.JellyfinRepository @@ -18,7 +17,6 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.jellyfin.sdk.model.api.BaseItemPerson -import org.jellyfin.sdk.model.api.MediaStreamType @HiltViewModel class ShowViewModel @@ -40,9 +38,6 @@ constructor( val writers: List, val writersString: String, val genresString: String, - val videoString: String, - val audioString: String, - val subtitleString: String, val runTime: String, val dateString: String, val nextUp: FindroidEpisode?, @@ -61,9 +56,6 @@ constructor( private var writers: List = emptyList() private var writersString: String = "" private var genresString: String = "" - private var videoString: String = "" - private var audioString: String = "" - private var subtitleString: String = "" private var runTime: String = "" private var dateString: String = "" var nextUp: FindroidEpisode? = null @@ -81,9 +73,6 @@ constructor( writers = getWriters(item) writersString = writers.joinToString(separator = ", ") { it.name.toString() } genresString = item.genres.joinToString(separator = ", ") - videoString = getMediaString(item, MediaStreamType.VIDEO) - audioString = getMediaString(item, MediaStreamType.AUDIO) - subtitleString = getMediaString(item, MediaStreamType.SUBTITLE) runTime = "${item.runtimeTicks.div(600000000)} min" dateString = getDateString(item) nextUp = getNextUp(itemId) @@ -96,9 +85,6 @@ constructor( writers, writersString, genresString, - videoString, - audioString, - subtitleString, runTime, dateString, nextUp, @@ -138,14 +124,6 @@ constructor( return writers } - private suspend fun getMediaString(item: FindroidShow, type: MediaStreamType): String { - val streams: List - withContext(Dispatchers.Default) { - streams = item.sources.getOrNull(0)?.mediaStreams?.filter { it.type == type } ?: emptyList() - } - return streams.map { it.displayTitle }.joinToString(separator = ", ") - } - private suspend fun getNextUp(seriesId: UUID): FindroidEpisode? { val nextUpItems = jellyfinRepository.getNextUp(seriesId) return nextUpItems.getOrNull(0) diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt index 0be119a2..e10aea68 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt @@ -112,7 +112,7 @@ class JellyfinRepositoryOfflineImpl( } override suspend fun getSearchItems(searchQuery: String): List { - return withContext(Dispatchers.IO) { + return withContext(Dispatchers.IO) { val movies = database.searchMovies(appPreferences.currentServer!!, searchQuery).map { it.toFindroidMovie(database, jellyfinApi.userId!!) } val shows = database.searchShows(appPreferences.currentServer!!, searchQuery).map { it.toFindroidShow(database, jellyfinApi.userId!!) } val episodes = database.searchEpisodes(appPreferences.currentServer!!, searchQuery).map { it.toFindroidEpisode(database, jellyfinApi.userId!!) }