diff --git a/app/src/main/java/com/gamedog/vididin/features/version/VersionActivity.kt b/app/src/main/java/com/gamedog/vididin/features/version/VersionActivity.kt index e1a2061..2dc4658 100644 --- a/app/src/main/java/com/gamedog/vididin/features/version/VersionActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/version/VersionActivity.kt @@ -39,7 +39,7 @@ class VersionActivity : AppViewsActivity(), OnT // For Testing - val shouldShowDebug = false//BuildConfig.DEBUG + val shouldShowDebug = true//BuildConfig.DEBUG llTesting.isVisible = shouldShowDebug if (shouldShowDebug) { butCash.setOnClickListener { diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt index af24bc7..06c4586 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt @@ -14,7 +14,6 @@ import android.view.animation.Animation import android.view.animation.AnimationSet import android.view.animation.ScaleAnimation import android.widget.FrameLayout -import androidx.annotation.NonNull import androidx.core.view.isVisible import com.ama.core.architecture.appBase.AppViewsEmptyViewModelFragment import com.ama.core.architecture.util.AndroidUtil @@ -28,8 +27,6 @@ import com.gamedog.vididin.youtubestatistic.TickerTimer import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener -import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.YouTubePlayerCallback -import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.utils.loadOrCueVideo import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.options.IFramePlayerOptions import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView import com.viddin.videos.free.databinding.VididinappFeatureHomeItemLayoutBinding as ViewBinding @@ -192,7 +189,6 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { mPlayer = youTubePlayer val playerUiController = MyPlayerControlView(mPlayerView!!) mPlayerView!!.setCustomPlayerUi(playerUiController.rootView) - if (mPendingPlay) { mPlayer?.loadVideo(mVideoData!!.id, mCurPlayedSecond) } else if (mIsPreloading) { @@ -392,7 +388,6 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { private fun hidePlayIconAnim() { - return if (!binding?.playIcon!!.isVisible) { return } @@ -400,7 +395,7 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { with (binding?.playIcon!!) { val animationSet = AnimationSet(true) - animationSet.duration = 250 + animationSet.duration = 100 val alphaAnimation = AlphaAnimation(0.6f, 0.3f) val scaleAnimation = ScaleAnimation( 1.0f, 0.5f, @@ -428,12 +423,11 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { } private fun showPlayIconAnim() { - return with (binding?.playIcon!!) { visibility = View.VISIBLE val animationSet = AnimationSet(true) - animationSet.duration = 250 + animationSet.duration = 100 val alphaAnimation = AlphaAnimation(0.3f, 0.6f) val scaleAnimation = ScaleAnimation( 0.5f, 1.0f, diff --git a/app/src/main/res/mipmap-xxhdpi/icon_play.png b/app/src/main/res/mipmap-xxhdpi/icon_play.png new file mode 100644 index 0000000..c94ae93 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_play.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_play.webp b/app/src/main/res/mipmap-xxhdpi/icon_play.webp deleted file mode 100644 index 803a4fa..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/icon_play.webp and /dev/null differ diff --git a/youtube/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/options/IFramePlayerOptions.kt b/youtube/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/options/IFramePlayerOptions.kt index fa0ca5b..6a1b537 100644 --- a/youtube/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/options/IFramePlayerOptions.kt +++ b/youtube/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/options/IFramePlayerOptions.kt @@ -11,7 +11,7 @@ import org.json.JSONObject class IFramePlayerOptions private constructor(private val playerOptions: JSONObject) { companion object { - fun getDefault(context: Context) = Builder(context).controls(1).build() + fun getDefault(context: Context) = Builder(context).controls(0).build() } override fun toString(): String { diff --git a/youtube/core/src/main/res/raw/ayp_youtube_player.html b/youtube/core/src/main/res/raw/ayp_youtube_player.html index 33d518a..77b9c97 100644 --- a/youtube/core/src/main/res/raw/ayp_youtube_player.html +++ b/youtube/core/src/main/res/raw/ayp_youtube_player.html @@ -37,23 +37,89 @@ var player; var timerId; + function hideYouTubeUI() { + setInterval(() => { + const playerIFrame = document.querySelector("iframe"); + if (!playerIFrame) { + return; + } + const frameDoc = playerIFrame.contentDocument || playerIFrame.contentWindow.document; + if (!frameDoc) { + return; + } + + const selectorsToHide = [ + '.ytp-chrome-top', + '.ytp-chrome-bottom', + '.ytp-gradient-top', + '.ytp-gradient-bottom', + '.ytp-youtube-button', + '.ytp-watermark', + '.ytp-ce-element', + '.ytp-paid-content-overlay', + '.ytp-bezel-container', + '.ytp-spinner', + '.ytp-cards-teaser', + '.ytp-cards-button', + '.ytp-show-cards-title' + ]; + + selectorsToHide.forEach(selector => { + const elements = frameDoc.querySelectorAll(selector); + elements.forEach(el => { + if (el.style.display !== 'none') { + el.style.display = 'none'; + } + }); + }); + + // Special handling for pause overlays to avoid black screen issue + const pauseOverlays = ['.ytp-pause-overlay', '.ytp-pause-overlay-container']; + pauseOverlays.forEach(selector => { + const elements = frameDoc.querySelectorAll(selector); + elements.forEach(el => { + if (el.style.visibility !== 'hidden') { + el.style.visibility = 'hidden'; + el.style.pointerEvents = 'none'; + } + }); + }); + + if (player && typeof player.unloadModule === 'function') { + player.unloadModule('captions'); + } + + // Disable captions if any + const captions = frameDoc.querySelector('.ytp-caption-window-container'); + if (captions) { + captions.style.display = 'none'; + } + }, 50); + } function onYouTubeIframeAPIReady() { YouTubePlayerBridge.sendYouTubeIFrameAPIReady(); + var playerVars = <>; + // Force some player vars to hide UI elements at the API level + // but avoid overriding everything to stay compatible + playerVars.rel = 0; + playerVars.iv_load_policy = 3; + playerVars.modestbranding = 1; + var youtubePlayerConfig = { height: '100%', width: '100%', events: { - onReady: function(event) { YouTubePlayerBridge.sendReady() }, + onReady: function(event) { YouTubePlayerBridge.sendReady();hideYouTubeUI(); }, onStateChange: function(event) { sendPlayerStateChange(event.data) }, onPlaybackQualityChange: function(event) { YouTubePlayerBridge.sendPlaybackQualityChange(event.data) }, onPlaybackRateChange: function(event) { YouTubePlayerBridge.sendPlaybackRateChange(event.data) }, onError: function(error) { YouTubePlayerBridge.sendError(error.data) }, onApiChange: function(event) { YouTubePlayerBridge.sendApiChange() } }, - playerVars: <> + playerVars: playerVars }; if (<>) { diff --git a/youtube/custom-ui/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/customui/DefaultPlayerUiController.kt b/youtube/custom-ui/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/customui/DefaultPlayerUiController.kt index b6bac32..dcc1c76 100644 --- a/youtube/custom-ui/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/customui/DefaultPlayerUiController.kt +++ b/youtube/custom-ui/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/customui/DefaultPlayerUiController.kt @@ -21,269 +21,285 @@ import com.pierfrancescosoffritti.androidyoutubeplayer.core.customui.views.YouTu import com.pierfrancescosoffritti.androidyoutubeplayer.core.customui.views.YouTubePlayerSeekBarListener class DefaultPlayerUiController( - private val youTubePlayerView: YouTubePlayerView, - private val youTubePlayer: YouTubePlayer + private val youTubePlayerView: YouTubePlayerView, + private val youTubePlayer: YouTubePlayer ) : PlayerUiController { - val rootView: View = View.inflate(youTubePlayerView.context, R.layout.ayp_default_player_ui, null) + val rootView: View = + View.inflate(youTubePlayerView.context, R.layout.ayp_default_player_ui, null) - private var youTubePlayerMenu: YouTubePlayerMenu = DefaultYouTubePlayerMenu( - youTubePlayerView.context - ) + private var youTubePlayerMenu: YouTubePlayerMenu = DefaultYouTubePlayerMenu( + youTubePlayerView.context + ) - /** - * View used for for intercepting clicks and for drawing a black background. - * Could have used controlsContainer, but in this way I'm able to hide all the control at once by hiding controlsContainer - */ - private val panel: View = rootView.findViewById(R.id.panel) + /** + * View used for for intercepting clicks and for drawing a black background. + * Could have used controlsContainer, but in this way I'm able to hide all the control at once by hiding controlsContainer + */ + private val panel: View = rootView.findViewById(R.id.panel) - private val controlsContainer: View = rootView.findViewById(R.id.controls_container) - private val extraViewsContainer: LinearLayout = rootView.findViewById(R.id.extra_views_container) + private val controlsContainer: View = rootView.findViewById(R.id.controls_container) + private val extraViewsContainer: LinearLayout = + rootView.findViewById(R.id.extra_views_container) - private val videoTitle: TextView = rootView.findViewById(R.id.video_title) - private val liveVideoIndicator: TextView = rootView.findViewById(R.id.live_video_indicator) + private val videoTitle: TextView = rootView.findViewById(R.id.video_title) + private val liveVideoIndicator: TextView = rootView.findViewById(R.id.live_video_indicator) - private val progressBar: ProgressBar = rootView.findViewById(R.id.progress) - private val menuButton: ImageView = rootView.findViewById(R.id.menu_button) - private val playPauseButton: ImageView = rootView.findViewById(R.id.play_pause_button) - private val youTubeButton: ImageView = rootView.findViewById(R.id.youtube_button) - private val fullscreenButton: ImageView = rootView.findViewById(R.id.fullscreen_button) + private val progressBar: ProgressBar = rootView.findViewById(R.id.progress) + private val menuButton: ImageView = rootView.findViewById(R.id.menu_button) + private val playPauseButton: ImageView = rootView.findViewById(R.id.play_pause_button) + private val youTubeButton: ImageView = rootView.findViewById(R.id.youtube_button) + private val fullscreenButton: ImageView = rootView.findViewById(R.id.fullscreen_button) - private val customActionLeft: ImageView = rootView.findViewById(R.id.custom_action_left_button) - private val customActionRight: ImageView = rootView.findViewById(R.id.custom_action_right_button) + private val customActionLeft: ImageView = rootView.findViewById(R.id.custom_action_left_button) + private val customActionRight: ImageView = + rootView.findViewById(R.id.custom_action_right_button) - private val youtubePlayerSeekBar: YouTubePlayerSeekBar = rootView.findViewById(R.id.youtube_player_seekbar) - private val fadeControlsContainer: FadeViewHelper = FadeViewHelper(controlsContainer) + private val youtubePlayerSeekBar: YouTubePlayerSeekBar = + rootView.findViewById(R.id.youtube_player_seekbar) + private val fadeControlsContainer: FadeViewHelper = FadeViewHelper(controlsContainer) - private var onFullscreenButtonListener: View.OnClickListener - private var onMenuButtonClickListener: View.OnClickListener + private var onFullscreenButtonListener: View.OnClickListener + private var onMenuButtonClickListener: View.OnClickListener - private var isPlaying = false - private var isPlayPauseButtonEnabled = true - private var isCustomActionLeftEnabled = false - private var isCustomActionRightEnabled = false + private var isPlaying = false + private var isPlayPauseButtonEnabled = true + private var isCustomActionLeftEnabled = false + private var isCustomActionRightEnabled = false - private var isMatchParent = false + private var isMatchParent = false - private val youTubePlayerStateListener = object : AbstractYouTubePlayerListener() { - override fun onStateChange(youTubePlayer: YouTubePlayer, state: PlayerConstants.PlayerState) { - updateState(state) + private val youTubePlayerStateListener = object : AbstractYouTubePlayerListener() { + override fun onStateChange( + youTubePlayer: YouTubePlayer, + state: PlayerConstants.PlayerState + ) { + updateState(state) - if (state === PlayerConstants.PlayerState.PLAYING || state === PlayerConstants.PlayerState.PAUSED || state === PlayerConstants.PlayerState.VIDEO_CUED) { - panel.setBackgroundColor(ContextCompat.getColor(panel.context, android.R.color.transparent)) - progressBar.visibility = View.GONE + if (state === PlayerConstants.PlayerState.PLAYING || state === PlayerConstants.PlayerState.PAUSED || state === PlayerConstants.PlayerState.VIDEO_CUED) { + panel.setBackgroundColor( + ContextCompat.getColor( + panel.context, + android.R.color.transparent + ) + ) + progressBar.visibility = View.GONE - if (isPlayPauseButtonEnabled) playPauseButton.visibility = View.VISIBLE - if (isCustomActionLeftEnabled) customActionLeft.visibility = View.VISIBLE - if (isCustomActionRightEnabled) customActionRight.visibility = View.VISIBLE + if (isPlayPauseButtonEnabled) playPauseButton.visibility = View.VISIBLE + if (isCustomActionLeftEnabled) customActionLeft.visibility = View.VISIBLE + if (isCustomActionRightEnabled) customActionRight.visibility = View.VISIBLE - updatePlayPauseButtonIcon(state === PlayerConstants.PlayerState.PLAYING) + updatePlayPauseButtonIcon(state === PlayerConstants.PlayerState.PLAYING) - } else { - updatePlayPauseButtonIcon(false) + } else { + updatePlayPauseButtonIcon(false) - if (state === PlayerConstants.PlayerState.BUFFERING) { - progressBar.visibility = View.VISIBLE - panel.setBackgroundColor( - ContextCompat.getColor( - panel.context, - android.R.color.transparent - ) - ) - if (isPlayPauseButtonEnabled) playPauseButton.visibility = View.INVISIBLE + if (state === PlayerConstants.PlayerState.BUFFERING) { +// progressBar.visibility = View.VISIBLE + progressBar.visibility = View.GONE + panel.setBackgroundColor( + ContextCompat.getColor( + panel.context, + android.R.color.transparent + ) + ) + if (isPlayPauseButtonEnabled) playPauseButton.visibility = View.INVISIBLE - customActionLeft.visibility = View.GONE - customActionRight.visibility = View.GONE + customActionLeft.visibility = View.GONE + customActionRight.visibility = View.GONE + } + + if (state === PlayerConstants.PlayerState.UNSTARTED) { + progressBar.visibility = View.GONE + if (isPlayPauseButtonEnabled) playPauseButton.visibility = View.VISIBLE + } + } } - if (state === PlayerConstants.PlayerState.UNSTARTED) { - progressBar.visibility = View.GONE - if (isPlayPauseButtonEnabled) playPauseButton.visibility = View.VISIBLE + override fun onVideoId(youTubePlayer: YouTubePlayer, videoId: String) { + youTubeButton.setOnClickListener { + val intent = Intent( + Intent.ACTION_VIEW, + Uri.parse("https://www.youtube.com/watch?v=" + videoId + "#t=" + youtubePlayerSeekBar.seekBar.progress) + ) + try { + youTubeButton.context.startActivity(intent) + } catch (e: Exception) { + Log.e(javaClass.simpleName, e.message ?: "Can't open url to YouTube") + } + } } - } } - override fun onVideoId(youTubePlayer: YouTubePlayer, videoId: String) { - youTubeButton.setOnClickListener { - val intent = Intent( - Intent.ACTION_VIEW, - Uri.parse("https://www.youtube.com/watch?v=" + videoId + "#t=" + youtubePlayerSeekBar.seekBar.progress) - ) - try { - youTubeButton.context.startActivity(intent) - } catch (e: Exception) { - Log.e(javaClass.simpleName, e.message ?: "Can't open url to YouTube") + init { + onFullscreenButtonListener = View.OnClickListener { + isMatchParent = !isMatchParent + when (isMatchParent) { + true -> youTubePlayerView.matchParent() + false -> youTubePlayerView.wrapContent() + } } - } - } - } - init { - onFullscreenButtonListener = View.OnClickListener { - isMatchParent = !isMatchParent - when (isMatchParent) { - true -> youTubePlayerView.matchParent() - false -> youTubePlayerView.wrapContent() - } + onMenuButtonClickListener = View.OnClickListener { youTubePlayerMenu.show(menuButton) } + + initClickListeners() } - onMenuButtonClickListener = View.OnClickListener { youTubePlayerMenu.show(menuButton) } + private fun initClickListeners() { + fadeControlsContainer.isDisabled = true + youTubePlayer.addListener(youtubePlayerSeekBar) + youTubePlayer.addListener(fadeControlsContainer) + youTubePlayer.addListener(youTubePlayerStateListener) - initClickListeners() - } - - private fun initClickListeners() { - youTubePlayer.addListener(youtubePlayerSeekBar) - youTubePlayer.addListener(fadeControlsContainer) - youTubePlayer.addListener(youTubePlayerStateListener) - - youtubePlayerSeekBar.youtubePlayerSeekBarListener = object : YouTubePlayerSeekBarListener { - override fun seekTo(time: Float) = youTubePlayer.seekTo(time) - } - panel.setOnClickListener { fadeControlsContainer.toggleVisibility() } - playPauseButton.setOnClickListener { onPlayButtonPressed() } - fullscreenButton.setOnClickListener { onFullscreenButtonListener.onClick(fullscreenButton) } - menuButton.setOnClickListener { onMenuButtonClickListener.onClick(menuButton) } - } - - override fun showVideoTitle(show: Boolean): PlayerUiController { - videoTitle.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun setVideoTitle(videoTitle: String): PlayerUiController { - this.videoTitle.text = videoTitle - return this - } - - override fun showUi(show: Boolean): PlayerUiController { - fadeControlsContainer.isDisabled = !show - controlsContainer.visibility = if (show) View.VISIBLE else View.INVISIBLE - return this - } - - override fun showPlayPauseButton(show: Boolean): PlayerUiController { - playPauseButton.visibility = if (show) View.VISIBLE else View.GONE - - isPlayPauseButtonEnabled = show - return this - } - - override fun enableLiveVideoUi(enable: Boolean): PlayerUiController { - youtubePlayerSeekBar.visibility = if (enable) View.INVISIBLE else View.VISIBLE - liveVideoIndicator.visibility = if (enable) View.VISIBLE else View.GONE - return this - } - - override fun setCustomAction1( - icon: Drawable, - clickListener: View.OnClickListener? - ): PlayerUiController { - customActionLeft.setImageDrawable(icon) - customActionLeft.setOnClickListener(clickListener) - showCustomAction1(true) - return this - } - - override fun setCustomAction2( - icon: Drawable, - clickListener: View.OnClickListener? - ): PlayerUiController { - customActionRight.setImageDrawable(icon) - customActionRight.setOnClickListener(clickListener) - showCustomAction2(true) - return this - } - - override fun showCustomAction1(show: Boolean): PlayerUiController { - isCustomActionLeftEnabled = show - customActionLeft.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun showCustomAction2(show: Boolean): PlayerUiController { - isCustomActionRightEnabled = show - customActionRight.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun showMenuButton(show: Boolean): PlayerUiController { - menuButton.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun setMenuButtonClickListener(customMenuButtonClickListener: View.OnClickListener): PlayerUiController { - onMenuButtonClickListener = customMenuButtonClickListener - return this - } - - override fun showCurrentTime(show: Boolean): PlayerUiController { - youtubePlayerSeekBar.videoCurrentTimeTextView.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun showDuration(show: Boolean): PlayerUiController { - youtubePlayerSeekBar.videoDurationTextView.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun showSeekBar(show: Boolean): PlayerUiController { - youtubePlayerSeekBar.seekBar.visibility = if (show) View.VISIBLE else View.INVISIBLE - return this - } - - override fun showBufferingProgress(show: Boolean): PlayerUiController { - youtubePlayerSeekBar.showBufferingProgress = show - return this - } - - override fun showYouTubeButton(show: Boolean): PlayerUiController { - youTubeButton.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun addView(view: View): PlayerUiController { - extraViewsContainer.addView(view, 0) - return this - } - - override fun removeView(view: View): PlayerUiController { - extraViewsContainer.removeView(view) - return this - } - - override fun getMenu(): YouTubePlayerMenu = youTubePlayerMenu - - override fun showFullscreenButton(show: Boolean): PlayerUiController { - fullscreenButton.visibility = if (show) View.VISIBLE else View.GONE - return this - } - - override fun setFullscreenButtonClickListener(customFullscreenButtonClickListener: View.OnClickListener): PlayerUiController { - onFullscreenButtonListener = customFullscreenButtonClickListener - return this - } - - private fun onPlayButtonPressed() { - if (isPlaying) - youTubePlayer.pause() - else - youTubePlayer.play() - } - - private fun updateState(state: PlayerConstants.PlayerState) { - when (state) { - PlayerConstants.PlayerState.ENDED -> isPlaying = false - PlayerConstants.PlayerState.PAUSED -> isPlaying = false - PlayerConstants.PlayerState.PLAYING -> isPlaying = true - else -> {} + youtubePlayerSeekBar.youtubePlayerSeekBarListener = object : YouTubePlayerSeekBarListener { + override fun seekTo(time: Float) = youTubePlayer.seekTo(time) + } + panel.setOnClickListener { fadeControlsContainer.toggleVisibility() } + playPauseButton.setOnClickListener { onPlayButtonPressed() } + fullscreenButton.setOnClickListener { onFullscreenButtonListener.onClick(fullscreenButton) } + menuButton.setOnClickListener { onMenuButtonClickListener.onClick(menuButton) } } - updatePlayPauseButtonIcon(!isPlaying) - } + override fun showVideoTitle(show: Boolean): PlayerUiController { + videoTitle.visibility = if (show) View.VISIBLE else View.GONE + return this + } - private fun updatePlayPauseButtonIcon(playing: Boolean) { - val drawable = if (playing) R.drawable.ayp_ic_pause_36dp else R.drawable.ayp_ic_play_36dp - playPauseButton.setImageResource(drawable) - } + override fun setVideoTitle(videoTitle: String): PlayerUiController { + this.videoTitle.text = videoTitle + return this + } + + override fun showUi(show: Boolean): PlayerUiController { + fadeControlsContainer.isDisabled = !show + controlsContainer.visibility = if (show) View.VISIBLE else View.INVISIBLE + return this + } + + override fun showPlayPauseButton(show: Boolean): PlayerUiController { + playPauseButton.visibility = if (show) View.VISIBLE else View.GONE + + isPlayPauseButtonEnabled = show + return this + } + + override fun enableLiveVideoUi(enable: Boolean): PlayerUiController { + youtubePlayerSeekBar.visibility = if (enable) View.INVISIBLE else View.VISIBLE + liveVideoIndicator.visibility = if (enable) View.VISIBLE else View.GONE + return this + } + + override fun setCustomAction1( + icon: Drawable, + clickListener: View.OnClickListener? + ): PlayerUiController { + customActionLeft.setImageDrawable(icon) + customActionLeft.setOnClickListener(clickListener) + showCustomAction1(true) + return this + } + + override fun setCustomAction2( + icon: Drawable, + clickListener: View.OnClickListener? + ): PlayerUiController { + customActionRight.setImageDrawable(icon) + customActionRight.setOnClickListener(clickListener) + showCustomAction2(true) + return this + } + + override fun showCustomAction1(show: Boolean): PlayerUiController { + isCustomActionLeftEnabled = show + customActionLeft.visibility = if (show) View.VISIBLE else View.GONE + return this + } + + override fun showCustomAction2(show: Boolean): PlayerUiController { + isCustomActionRightEnabled = show + customActionRight.visibility = if (show) View.VISIBLE else View.GONE + return this + } + + override fun showMenuButton(show: Boolean): PlayerUiController { + menuButton.visibility = if (show) View.VISIBLE else View.GONE + return this + } + + override fun setMenuButtonClickListener(customMenuButtonClickListener: View.OnClickListener): PlayerUiController { + onMenuButtonClickListener = customMenuButtonClickListener + return this + } + + override fun showCurrentTime(show: Boolean): PlayerUiController { + youtubePlayerSeekBar.videoCurrentTimeTextView.visibility = + if (show) View.VISIBLE else View.GONE + return this + } + + override fun showDuration(show: Boolean): PlayerUiController { + youtubePlayerSeekBar.videoDurationTextView.visibility = + if (show) View.VISIBLE else View.GONE + return this + } + + override fun showSeekBar(show: Boolean): PlayerUiController { + youtubePlayerSeekBar.seekBar.visibility = if (show) View.VISIBLE else View.INVISIBLE + return this + } + + override fun showBufferingProgress(show: Boolean): PlayerUiController { + youtubePlayerSeekBar.showBufferingProgress = show + return this + } + + override fun showYouTubeButton(show: Boolean): PlayerUiController { + youTubeButton.visibility = if (show) View.VISIBLE else View.GONE + return this + } + + override fun addView(view: View): PlayerUiController { + extraViewsContainer.addView(view, 0) + return this + } + + override fun removeView(view: View): PlayerUiController { + extraViewsContainer.removeView(view) + return this + } + + override fun getMenu(): YouTubePlayerMenu = youTubePlayerMenu + + override fun showFullscreenButton(show: Boolean): PlayerUiController { + fullscreenButton.visibility = if (show) View.VISIBLE else View.GONE + return this + } + + override fun setFullscreenButtonClickListener(customFullscreenButtonClickListener: View.OnClickListener): PlayerUiController { + onFullscreenButtonListener = customFullscreenButtonClickListener + return this + } + + private fun onPlayButtonPressed() { + if (isPlaying) + youTubePlayer.pause() + else + youTubePlayer.play() + } + + private fun updateState(state: PlayerConstants.PlayerState) { + when (state) { + PlayerConstants.PlayerState.ENDED -> isPlaying = false + PlayerConstants.PlayerState.PAUSED -> isPlaying = false + PlayerConstants.PlayerState.PLAYING -> isPlaying = true + else -> {} + } + + updatePlayPauseButtonIcon(!isPlaying) + } + + private fun updatePlayPauseButtonIcon(playing: Boolean) { + val drawable = if (playing) R.drawable.ayp_ic_pause_36dp else R.drawable.ayp_ic_play_36dp + playPauseButton.setImageResource(drawable) + } } diff --git a/youtube/custom-ui/src/main/res/layout/ayp_default_player_ui.xml b/youtube/custom-ui/src/main/res/layout/ayp_default_player_ui.xml index 3d95d5e..0412d01 100644 --- a/youtube/custom-ui/src/main/res/layout/ayp_default_player_ui.xml +++ b/youtube/custom-ui/src/main/res/layout/ayp_default_player_ui.xml @@ -2,6 +2,7 @@