diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 8639af69..dbc7194a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -70,7 +70,7 @@ class ResultFragmentTv : Fragment() { return localBinding.root } - private fun updateUI(id : Int?) { + private fun updateUI(id: Int?) { viewModel.reloadEpisodes() } @@ -141,7 +141,7 @@ class ResultFragmentTv : Fragment() { var loadingDialog: Dialog? = null var popupDialog: Dialog? = null - private fun reloadViewModel(forceReload : Boolean) { + private fun reloadViewModel(forceReload: Boolean) { if (!viewModel.hasLoaded() || forceReload) { val storedData = getStoredData() ?: return viewModel.load( @@ -196,14 +196,14 @@ class ResultFragmentTv : Fragment() { } resultReloadConnectionerror.setOnClickListener { - viewModel.load( - activity, - storedData.url, - storedData.apiName, - storedData.showFillers, - storedData.dubStatus, - storedData.start - ) + viewModel.load( + activity, + storedData.url, + storedData.apiName, + storedData.showFillers, + storedData.dubStatus, + storedData.start + ) } @@ -270,22 +270,8 @@ class ResultFragmentTv : Fragment() { observeNullable(viewModel.resumeWatching) { resume -> binding?.apply { - if (resume == null) { - resultResumeParent.isVisible = false - return@observeNullable - } - resultResumeParent.isVisible = true - resume.progress?.let { progress -> - resultResumeSeriesTitle.apply { - isVisible = !resume.isMovie - text = - if (resume.isMovie) null else context?.getNameFull( - resume.result.name, - resume.result.episode, - resume.result.season - ) - } - + // show progress no matter if series or movie + resume?.progress?.let { progress -> resultResumeSeriesProgressText.setText(progress.progressLeft) resultResumeSeriesProgress.apply { isVisible = true @@ -295,13 +281,41 @@ class ResultFragmentTv : Fragment() { resultResumeProgressHolder.isVisible = true } ?: run { resultResumeProgressHolder.isVisible = false - resultResumeSeriesProgress.isVisible = false - resultResumeSeriesTitle.isVisible = false - resultResumeSeriesProgressText.isVisible = false } - resultResumeSeriesButton.isVisible = !resume.isMovie - resultResumeSeriesButton.setOnClickListener { + // if movie then hide both as movie button is + // always visible on movies, this is done in movie observe + + if(resume?.isMovie == true) { + resultPlaySeries.isVisible = false + resultResumeSeries.isVisible = false + return@observeNullable + } + + // if series then + // > resultPlaySeries is visible when null + // > resultResumeSeries is visible when not null + if (resume == null) { + resultPlaySeries.isVisible = true + resultResumeSeries.isVisible = false + return@observeNullable + } + + resultPlaySeries.isVisible = false + resultResumeSeries.isVisible = true + + if (hasNoFocus()) { + resultResumeSeries.requestFocus() + } + + resultResumeSeries.text = + if (resume.isMovie) context?.getString(R.string.play_movie_button) else context?.getNameFull( + null, // resume.result.name, we don't want episode title + resume.result.episode, + resume.result.season + ) + + resultResumeSeries.setOnClickListener { viewModel.handleAction( EpisodeClickEvent( storedData.playerAction, //?: ACTION_PLAY_EPISODE_IN_PLAYER, @@ -309,6 +323,14 @@ class ResultFragmentTv : Fragment() { ) ) } + + resultResumeSeries.setOnLongClickListener { + viewModel.handleAction( + EpisodeClickEvent(ACTION_SHOW_OPTIONS, resume.result) + ) + return@setOnLongClickListener true + } + } } @@ -351,6 +373,8 @@ class ResultFragmentTv : Fragment() { observeNullable(viewModel.movie) { data -> binding?.apply { resultPlayMovie.isVisible = data is Resource.Success + seriesHolder.isVisible = data == null + (data as? Resource.Success)?.value?.let { (text, ep) -> resultPlayMovie.setText(text) resultPlayMovie.setOnClickListener { @@ -466,6 +490,30 @@ class ResultFragmentTv : Fragment() { resultEpisodes.isVisible = episodes is Resource.Success resultEpisodeLoading.isVisible = episodes is Resource.Loading if (episodes is Resource.Success) { + val first = episodes.value.firstOrNull() + if (first != null) { + resultPlaySeries.text = context?.getNameFull( + null, // resume.result.name, we don't want episode title + first.episode, + first.season + ) + + resultPlaySeries.setOnClickListener { + viewModel.handleAction( + EpisodeClickEvent( + ACTION_PLAY_EPISODE_IN_PLAYER, + first + ) + ) + } + resultPlaySeries.setOnLongClickListener { + viewModel.handleAction( + EpisodeClickEvent(ACTION_SHOW_OPTIONS, first) + ) + return@setOnLongClickListener true + } + } + /* * Okay so what is this fuckery? * Basically Android TV will crash if you request a new focus while @@ -523,6 +571,15 @@ class ResultFragmentTv : Fragment() { resultNextAiringTime.setText(d.nextAiringDate) resultPoster.setImage(d.posterImage) resultDescription.setTextHtml(d.plotText) + resultDescription.setOnClickListener { view -> + view.context?.let { ctx -> + val builder: AlertDialog.Builder = + AlertDialog.Builder(ctx, R.style.AlertDialogCustom) + builder.setMessage(d.plotText.asString(ctx).html()) + .setTitle(d.plotHeaderText.asString(ctx)) + .show() + } + } resultComingSoon.isVisible = d.comingSoon resultDataHolder.isGone = d.comingSoon diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 64e2da17..77e89288 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -161,15 +161,6 @@ - - - - - @@ -230,11 +221,162 @@ android:layout_height="wrap_content" android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - @@ -328,8 +470,8 @@ android:id="@+id/result_cast_items" android:layout_width="match_parent" android:layout_height="wrap_content" - android:descendantFocusability="afterDescendants" + android:fadingEdge="horizontal" android:focusable="false" android:focusableInTouchMode="false" @@ -420,87 +562,15 @@ app:icon="@drawable/ic_baseline_add_24" /> - + - - - - - @color/tag_stroke_color + +