From db245a73f0fe0cd6282265752e2fea5b644e4445 Mon Sep 17 00:00:00 2001 From: rockhero1234 Date: Thu, 29 Jan 2026 00:36:17 +0530 Subject: [PATCH 1/4] revert circular progress,check icon & reapply accent color to watchprogress --- .../ui/download/DownloadAdapter.kt | 19 +- .../cloudstream3/ui/result/EpisodeAdapter.kt | 47 ++--- .../ui/result/ResultFragmentPhone.kt | 70 ++++--- app/src/main/res/drawable/play_button.xml | 2 +- .../res/layout/download_child_episode.xml | 52 ++--- .../res/layout/download_header_episode.xml | 37 +--- app/src/main/res/layout/fragment_result.xml | 196 ++++++++---------- .../main/res/layout/fragment_result_tv.xml | 122 ++++++----- app/src/main/res/layout/home_result_grid.xml | 37 ++-- .../res/layout/home_result_grid_expanded.xml | 84 ++------ app/src/main/res/layout/result_episode.xml | 44 ++-- .../main/res/layout/result_episode_large.xml | 41 ++-- .../main/res/layout/search_result_grid.xml | 4 +- .../layout/search_result_grid_expanded.xml | 6 +- app/src/main/res/values/colors.xml | 1 - app/src/main/res/values/dimens.xml | 6 - app/src/main/res/values/styles.xml | 71 ------- 17 files changed, 309 insertions(+), 530 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt index 1b48143a635..0cd43437464 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt @@ -17,6 +17,7 @@ import com.lagradost.cloudstream3.ui.NoStateAdapter import com.lagradost.cloudstream3.ui.ViewHolderState import com.lagradost.cloudstream3.ui.download.button.DownloadStatusTell import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull +import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos import com.lagradost.cloudstream3.utils.ImageLoader.loadImage import com.lagradost.cloudstream3.utils.downloader.DownloadObjects @@ -152,22 +153,12 @@ class DownloadAdapter( downloadHeaderGotoChild.isVisible = false val posDur = getViewPos(card.data.id) - watchProgressContainer.isVisible = true downloadHeaderEpisodeProgress.apply { isVisible = posDur != null posDur?.let { - val max = (it.duration / 1000).toInt() - val progress = (it.position / 1000).toInt() - - if (max > 0 && progress >= (0.95 * max).toInt()) { - playIcon.setImageResource(R.drawable.ic_baseline_check_24) - isVisible = false - } else { - playIcon.setImageResource(R.drawable.netflix_play) - this.max = max - this.progress = progress - isVisible = true - } + val visualPos = it.fixVisual() + max = (visualPos.duration / 1000).toInt() + progress = (visualPos.position / 1000).toInt() } } @@ -200,7 +191,6 @@ class DownloadAdapter( ) } - downloadHeaderInfo.isVisible = true downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, onItemClickEvent) downloadButton.isVisible = !isMultiDeleteState @@ -221,7 +211,6 @@ class DownloadAdapter( formattedSize: String ) { downloadButton.resetViewData() - watchProgressContainer.isVisible = false downloadButton.isVisible = false downloadHeaderEpisodeProgress.isVisible = false downloadHeaderGotoChild.isVisible = !isMultiDeleteState diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 7ff3904d8d7..9e7dd6362df 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -215,26 +215,13 @@ class EpisodeAdapter( if (item.videoWatchState == VideoWatchState.Watched) { // This cannot be done in getDisplayPosition() as when you have not watched something // the duration and position is 0 - //episodeProgress.max = 1 - //episodeProgress.progress = 1 - episodePlayIcon.setImageResource(R.drawable.ic_baseline_check_24) - episodeProgress.isVisible = false + episodeProgress.max = 1 + episodeProgress.progress = 1 } else { val displayPos = item.getDisplayPosition() - val durationSec = (item.duration / 1000).toInt() - val progressSec = (displayPos / 1000).toInt() - - if (displayPos >= item.duration && displayPos > 0) { - episodePlayIcon.setImageResource(R.drawable.ic_baseline_check_24) - episodeProgress.isVisible = false - } else { - episodePlayIcon.setImageResource(R.drawable.netflix_play) - episodeProgress.apply { - max = durationSec - progress = progressSec - isVisible = displayPos > 0L - } - } + episodeProgress.max = (item.duration / 1000).toInt() + episodeProgress.progress = (displayPos / 1000).toInt() + episodeProgress.isVisible = displayPos > 0L } val posterVisible = !item.poster.isNullOrBlank() @@ -434,24 +421,16 @@ class EpisodeAdapter( episodeText.isSelected = true // is needed for text repeating if (item.videoWatchState == VideoWatchState.Watched) { - episodePlayIcon.setImageResource(R.drawable.ic_baseline_check_24) - episodeProgress.isVisible = false + // This cannot be done in getDisplayPosition() as when you have not watched something + // the duration and position is 0 + episodeProgress.max = 1 + episodeProgress.progress = 1 + episodeProgress.isVisible = true } else { val displayPos = item.getDisplayPosition() - val durationSec = (item.duration / 1000).toInt() - val progressSec = (displayPos / 1000).toInt() - - if (displayPos >= item.duration && displayPos > 0) { - episodePlayIcon.setImageResource(R.drawable.ic_baseline_check_24) - episodeProgress.isVisible = false - } else { - episodePlayIcon.setImageResource(R.drawable.play_button_transparent) - episodeProgress.apply { - max = durationSec - progress = progressSec - isVisible = displayPos > 0L - } - } + episodeProgress.max = (item.duration / 1000).toInt() + episodeProgress.progress = (displayPos / 1000).toInt() + episodeProgress.isVisible = displayPos > 0L } itemView.setOnClickListener { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index af8d229a93f..0e3b088efb3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -17,6 +17,7 @@ import android.view.animation.Animation import android.view.animation.DecelerateInterpolator import android.widget.AbsListView import android.widget.ArrayAdapter +import android.widget.Button import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.core.view.isGone @@ -619,57 +620,58 @@ open class ResultFragmentPhone : FullScreenPlayer() { }*/ observeNullable(viewModel.resumeWatching) { resume -> + if (resume == null) { + resultBinding?.resultResumeParent?.isVisible = false + return@observeNullable + } + resultBinding?.apply { - if (resume == null) { - resultResumeParent.isVisible = false - resultPlayParent.isVisible = true - resultResumeProgressHolder.isVisible = false - return@observeNullable - } resultResumeParent.isVisible = true + + val setEpisodeText: (Button) -> Unit = { button -> + button.text = context?.getNameFull( + resume.result.name, + resume.result.episode, + resume.result.season + ) + } + resume.progress?.let { progress -> resultNextSeriesButton.isVisible = false - resultResumeSeriesTitle.apply { - isVisible = !resume.isMovie - text = - if (resume.isMovie) null else context?.getNameFull( - resume.result.name, - resume.result.episode, - resume.result.season - ) - } - if (resume.isMovie) { - resultPlayParent.isGone = true - resultResumeSeriesProgressText.isVisible = true - resultResumeSeriesProgressText.setText(progress.progressLeft) - } + resultResumeSeriesProgressText.setText(progress.progressLeft) + resultResumeSeriesProgress.apply { isVisible = true - this.max = progress.maxProgress + max = progress.maxProgress this.progress = progress.progress } + + if (!resume.isMovie) { + setEpisodeText(resultResumeSeriesButton) + resultMovieParent.isGone = true + } + + resultResumeSeriesButton.isVisible = true + resultPlayMovie.isGone = true resultResumeProgressHolder.isVisible = true + } ?: run { - resultResumeProgressHolder.isVisible = false if (!resume.isMovie) { + resultResumeSeriesButton.isVisible = false + setEpisodeText(resultNextSeriesButton) resultNextSeriesButton.isVisible = true - resultNextSeriesButton.text = context?.getNameFull( - resume.result.name, - resume.result.episode, - resume.result.season - ) + resultMovieParent.isGone = true + } else { + resultResumeParent.isGone = true } + + resultResumeProgressHolder.isVisible = false resultResumeSeriesProgress.isVisible = false - resultResumeSeriesTitle.isVisible = false resultResumeSeriesProgressText.isVisible = false } - resultResumeSeriesButton.setOnClickListener { - resumeAction(storedData, resume) - } - resultNextSeriesButton.setOnClickListener { - resumeAction(storedData, resume) - } + resultResumeSeriesButton.setOnClickListener { resumeAction(storedData, resume) } + resultNextSeriesButton.setOnClickListener { resumeAction(storedData, resume) } } } diff --git a/app/src/main/res/drawable/play_button.xml b/app/src/main/res/drawable/play_button.xml index ee3d47dfe97..9148e6c3cc7 100644 --- a/app/src/main/res/drawable/play_button.xml +++ b/app/src/main/res/drawable/play_button.xml @@ -9,7 +9,7 @@ - - - - - - - - - - + - - - - - - - - + - + - - - - - - - - - - + - - - - - - + - - - - - - - - - - - - - - - - + android:layout_gravity="center_vertical" + android:layout_marginStart="0dp" + android:layout_marginEnd="0dp" + android:nextFocusUp="@id/result_bookmark_Button" + android:nextFocusDown="@id/result_download_movie" + android:text="@string/resume" + app:icon="@drawable/ic_baseline_play_arrow_24" + tools:visibility="visible" + android:visibility="gone" + android:ellipsize="end" + android:maxLines="1"/> + android:visibility="gone" + tools:visibility="visible" + android:ellipsize="end" + android:maxLines="1"/> + + + + + + + + + + - - + android:layout_gravity="center_vertical" + android:layout_marginStart="0dp" + android:layout_marginEnd="0dp" + android:layout_marginBottom="10dp" + android:nextFocusUp="@id/result_bookmark_Button" + android:nextFocusDown="@id/result_download_movie" + android:text="@string/play_movie_button" + android:visibility="visible" + app:icon="@drawable/ic_baseline_play_arrow_24"> + + + + - - - + + + + + + + + + --> - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 3dff8f0d535..e56cd3e8b7c 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -38,24 +38,24 @@ https://developer.android.com/design/ui/tv/samples/jet-fit tools:src="@drawable/profile_bg_dark_blue" /> + android:contentDescription="@null" + android:maxWidth="220dp" + android:maxHeight="72dp" + android:scaleType="fitStart" /> @@ -236,71 +236,69 @@ https://developer.android.com/design/ui/tv/samples/jet-fit - - - - - - - - - - - - - - - - - - - - - - + - - + - + + + + tools:progress="25" + tools:visibility="visible" + android:layout_marginTop="5dp"/> diff --git a/app/src/main/res/layout/home_result_grid.xml b/app/src/main/res/layout/home_result_grid.xml index ff07d9a954f..34bde53299f 100644 --- a/app/src/main/res/layout/home_result_grid.xml +++ b/app/src/main/res/layout/home_result_grid.xml @@ -61,9 +61,23 @@ tools:text="The Perfect Run" /> + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - + - - - - - - + android:layout_height="match_parent" + android:layout_gravity="center_vertical" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:contentDescription="@string/episode_play_img_des" + android:src="@drawable/ic_baseline_play_arrow_24" + app:tint="?attr/textColor" /> - - - - - - - - + - - - - - + diff --git a/app/src/main/res/layout/search_result_grid_expanded.xml b/app/src/main/res/layout/search_result_grid_expanded.xml index b43d3b85268..41d58bbb175 100644 --- a/app/src/main/res/layout/search_result_grid_expanded.xml +++ b/app/src/main/res/layout/search_result_grid_expanded.xml @@ -93,8 +93,8 @@ android:layout_height="5dp" android:layout_gravity="bottom" android:layout_marginBottom="-1.5dp" - android:progressBackgroundTint="?attr/white" - android:progressTint="?attr/white" + android:progressBackgroundTint="?attr/colorPrimary" + android:progressTint="?attr/colorPrimary" android:visibility="gone" tools:progress="50" tools:visibility="visible" /> @@ -130,4 +130,4 @@ android:textSize="13sp" tools:text="The Perfect Run\nThe Perfect Run" /> - + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 48b69232abe..1864ff5b907 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -121,5 +121,4 @@ #48E484 #ea596e #FF9800 - #B3000000 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index b0c150000b5..bf75ed44108 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -26,10 +26,4 @@ 100dp 5dp - - 50dp - 40dp - 25dp - 2dp - 35dp \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f386bb62eff..67ab9de0edc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1054,75 +1054,4 @@ @drawable/cast_ic_mini_controller_closed_caption - - - - - - - - - - - - - - - - - - - - - From daca46886f651fa4d1d92ad7e105492a0ed2cca4 Mon Sep 17 00:00:00 2001 From: rockhero1234 Date: Thu, 29 Jan 2026 10:57:40 +0530 Subject: [PATCH 2/4] minor fix --- .../java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 9e7dd6362df..4367a43ef70 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -217,6 +217,7 @@ class EpisodeAdapter( // the duration and position is 0 episodeProgress.max = 1 episodeProgress.progress = 1 + episodeProgress.isVisible = true } else { val displayPos = item.getDisplayPosition() episodeProgress.max = (item.duration / 1000).toInt() From 5c48bcb18645475061d8ce7ef5d77f93f94faf98 Mon Sep 17 00:00:00 2001 From: rockhero1234 Date: Thu, 29 Jan 2026 22:08:04 +0530 Subject: [PATCH 3/4] minor fix --- app/src/main/res/drawable/play_button.xml | 10 ++++++++-- app/src/main/res/layout/home_result_grid_expanded.xml | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/drawable/play_button.xml b/app/src/main/res/drawable/play_button.xml index 9148e6c3cc7..3f5d1a92130 100644 --- a/app/src/main/res/drawable/play_button.xml +++ b/app/src/main/res/drawable/play_button.xml @@ -9,11 +9,17 @@ + diff --git a/app/src/main/res/layout/home_result_grid_expanded.xml b/app/src/main/res/layout/home_result_grid_expanded.xml index 7b9c7a0e428..1c87f36c6b6 100644 --- a/app/src/main/res/layout/home_result_grid_expanded.xml +++ b/app/src/main/res/layout/home_result_grid_expanded.xml @@ -124,7 +124,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:orientation="vertical" - android:paddingBottom="3dp"> + android:paddingBottom="5dp"> Date: Wed, 4 Feb 2026 21:34:41 +0530 Subject: [PATCH 4/4] use only short episode text in resume btn to avoid name overflow in text --- .../ui/result/ResultFragmentPhone.kt | 12 +++++++----- .../main/res/drawable/progress_bar_rounded.xml | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/drawable/progress_bar_rounded.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 0e3b088efb3..ced411a8337 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -67,6 +67,7 @@ import com.lagradost.cloudstream3.ui.result.ResultFragment.updateUIEvent import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchHelper import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull +import com.lagradost.cloudstream3.utils.AppContextUtils.getShortSeasonText import com.lagradost.cloudstream3.utils.AppContextUtils.isCastApiAvailable import com.lagradost.cloudstream3.utils.AppContextUtils.loadCache import com.lagradost.cloudstream3.utils.AppContextUtils.openBrowser @@ -629,11 +630,12 @@ open class ResultFragmentPhone : FullScreenPlayer() { resultResumeParent.isVisible = true val setEpisodeText: (Button) -> Unit = { button -> - button.text = context?.getNameFull( - resume.result.name, - resume.result.episode, - resume.result.season - ) + button.text = context?.let { + "${it.getString(R.string.resume)} ${it.getShortSeasonText( + resume.result.episode, + resume.result.season + )}" + } } resume.progress?.let { progress -> diff --git a/app/src/main/res/drawable/progress_bar_rounded.xml b/app/src/main/res/drawable/progress_bar_rounded.xml new file mode 100644 index 00000000000..142bce1a35b --- /dev/null +++ b/app/src/main/res/drawable/progress_bar_rounded.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + +