diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt index a9b4e85..ffedbf8 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt @@ -53,8 +53,8 @@ import kotlinx.coroutines.launch import org.mosad.teapod.R import org.mosad.teapod.parser.crunchyroll.NoneEpisode import org.mosad.teapod.preferences.Preferences +import org.mosad.teapod.ui.activity.player.fragment.EpisodeListDialogFragment import org.mosad.teapod.ui.activity.player.fragment.LanguageSettingsDialogFragment -import org.mosad.teapod.ui.components.EpisodesListPlayer import org.mosad.teapod.util.hideBars import org.mosad.teapod.util.isInPiPMode import org.mosad.teapod.util.navToLauncherTask @@ -480,11 +480,8 @@ class PlayerActivity : AppCompatActivity() { } private fun showEpisodesList() { - val episodesList = EpisodesListPlayer(this, model = model).apply { - onViewRemovedAction = { model.player.play() } - } - player_layout.addView(episodesList) pauseAndHideControls() + EpisodeListDialogFragment().show(supportFragmentManager, EpisodeListDialogFragment.TAG) } private fun showLanguageSettings() { diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/player/fragment/EpisodeListDialogFragment.kt b/app/src/main/java/org/mosad/teapod/ui/activity/player/fragment/EpisodeListDialogFragment.kt new file mode 100644 index 0000000..b80d404 --- /dev/null +++ b/app/src/main/java/org/mosad/teapod/ui/activity/player/fragment/EpisodeListDialogFragment.kt @@ -0,0 +1,68 @@ +package org.mosad.teapod.ui.activity.player.fragment + +import android.content.DialogInterface +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.DialogFragment +import androidx.lifecycle.ViewModelProvider +import org.mosad.teapod.R +import org.mosad.teapod.databinding.PlayerEpisodesListBinding +import org.mosad.teapod.ui.activity.player.PlayerViewModel +import org.mosad.teapod.util.adapter.EpisodeItemAdapter +import org.mosad.teapod.util.hideBars + +class EpisodeListDialogFragment : DialogFragment() { + + private lateinit var model: PlayerViewModel + private lateinit var binding: PlayerEpisodesListBinding + + companion object { + const val TAG = "LanguageSettingsDialogFragment" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setStyle(STYLE_NO_TITLE, R.style.FullScreenDialogStyle) + model = ViewModelProvider(requireActivity())[PlayerViewModel::class.java] + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = PlayerEpisodesListBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + binding.buttonCloseEpisodesList.setOnClickListener { + dismiss() + } + + val adapterRecEpisodes = EpisodeItemAdapter( + model.episodes.items, + null, + mapOf(), + EpisodeItemAdapter.OnClickListener { episode -> + dismiss() + model.setCurrentEpisode(episode.id, startPlayback = true) + }, + EpisodeItemAdapter.ViewType.PLAYER + ) + + // episodeNumber starts at 1, we need the episode index -> - 1 + adapterRecEpisodes.currentSelected = model.currentEpisode.episodeNumber?.minus(1) ?: 0 + + binding.recyclerEpisodesPlayer.adapter = adapterRecEpisodes + binding.recyclerEpisodesPlayer.scrollToPosition(adapterRecEpisodes.currentSelected) + + // initially hide the status and navigation bar + hideBars(requireDialog().window, binding.root) + } + + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + model.player.play() + } +} diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/player/fragment/LanguageSettingsDialogFragment.kt b/app/src/main/java/org/mosad/teapod/ui/activity/player/fragment/LanguageSettingsDialogFragment.kt index ceb3da8..c0a4860 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/player/fragment/LanguageSettingsDialogFragment.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/player/fragment/LanguageSettingsDialogFragment.kt @@ -116,4 +116,4 @@ class LanguageSettingsDialogFragment : DialogFragment() { compoundDrawablePadding = 12 } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/mosad/teapod/ui/components/EpisodesListPlayer.kt b/app/src/main/java/org/mosad/teapod/ui/components/EpisodesListPlayer.kt deleted file mode 100644 index 143432e..0000000 --- a/app/src/main/java/org/mosad/teapod/ui/components/EpisodesListPlayer.kt +++ /dev/null @@ -1,48 +0,0 @@ -package org.mosad.teapod.ui.components - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.ViewGroup -import android.widget.LinearLayout -import org.mosad.teapod.databinding.PlayerEpisodesListBinding -import org.mosad.teapod.ui.activity.player.PlayerViewModel -import org.mosad.teapod.util.adapter.EpisodeItemAdapter - -class EpisodesListPlayer @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0, - model: PlayerViewModel? = null -) : LinearLayout(context, attrs, defStyleAttr) { - - private val binding = PlayerEpisodesListBinding.inflate(LayoutInflater.from(context), this, true) - var onViewRemovedAction: (() -> Unit)? = null // TODO find a better solution for this - - init { - binding.buttonCloseEpisodesList.setOnClickListener { - (this.parent as ViewGroup).removeView(this) - onViewRemovedAction?.invoke() - } - - model?.let { - val adapterRecEpisodes = EpisodeItemAdapter( - model.episodes.items, - null, - mapOf(), - EpisodeItemAdapter.OnClickListener { episode -> - (this.parent as ViewGroup).removeView(this) - model.setCurrentEpisode(episode.id, startPlayback = true) - }, - EpisodeItemAdapter.ViewType.PLAYER - ) - - // episodeNumber starts at 1, we need the episode index -> - 1 - adapterRecEpisodes.currentSelected = model.currentEpisode.episodeNumber?.minus(1) ?: 0 - - binding.recyclerEpisodesPlayer.adapter = adapterRecEpisodes - binding.recyclerEpisodesPlayer.scrollToPosition(adapterRecEpisodes.currentSelected) - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/org/mosad/teapod/util/Utils.kt b/app/src/main/java/org/mosad/teapod/util/Utils.kt index 09116ea..f999fc8 100644 --- a/app/src/main/java/org/mosad/teapod/util/Utils.kt +++ b/app/src/main/java/org/mosad/teapod/util/Utils.kt @@ -61,7 +61,7 @@ fun hideBars(window: Window?, root: View) { WindowCompat.setDecorFitsSystemWindows(window, false) WindowInsetsControllerCompat(window, root).let { controller -> controller.hide(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.navigationBars()) - controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE + controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } } } diff --git a/app/src/main/res/layout/player_controls.xml b/app/src/main/res/layout/player_controls.xml index c014874..52b3962 100644 --- a/app/src/main/res/layout/player_controls.xml +++ b/app/src/main/res/layout/player_controls.xml @@ -1,6 +1,7 @@ @@ -17,12 +18,12 @@ + android:textColor="@color/player_white" + android:textSize="16sp" + tools:ignore="TextContrastCheck" /> + android:layout_marginBottom="@dimen/player_styled_progress_margin_bottom"> + + 48dp + 52dp +