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 d0740f66a81..f6f02d864a6 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.VideoDownloadHelper @@ -151,22 +152,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() } } @@ -199,7 +190,6 @@ class DownloadAdapter( ) } - downloadHeaderInfo.isVisible = true downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, onItemClickEvent) downloadButton.isVisible = !isMultiDeleteState @@ -220,7 +210,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 818e79d7456..9bc7619ad10 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 @@ -209,26 +209,14 @@ 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 + 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.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() @@ -423,24 +411,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 f6d0fee7680..9c15a6dd365 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.core.view.isGone import androidx.core.view.isInvisible @@ -65,6 +66,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 @@ -607,57 +609,59 @@ 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?.let { + "${it.getString(R.string.resume)} ${it.getShortSeasonText( + 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..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/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 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/download_child_episode.xml b/app/src/main/res/layout/download_child_episode.xml index cb9c13d5394..e53e63d312f 100644 --- a/app/src/main/res/layout/download_child_episode.xml +++ b/app/src/main/res/layout/download_child_episode.xml @@ -14,44 +14,30 @@ app:cardCornerRadius="@dimen/rounded_image_radius" app:cardElevation="0dp"> - - - - - - - - - - + - - - - - - - - + - + - - - - - - - - - - + - - - - - - + - + + - - - - - - - - - - - + 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:ellipsize="end" + android:maxLines="1"/> + + + + + + + + + + + - + - + + + + + + + + + + --> - + \ 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 - - - - - - - - - - - - - - - - - - - - -