diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt index 2a827322..bccbe8d5 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt @@ -27,6 +27,7 @@ import com.futo.platformplayer.views.adapters.InsertedViewHolder import com.futo.platformplayer.views.adapters.PreviewNestedVideoViewHolder import com.futo.platformplayer.views.adapters.PreviewVideoViewHolder import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuItem +import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuOverlay import kotlin.math.floor abstract class ContentFeedView : FeedView, ContentPreviewViewHolder> where TFragment : MainFragment { @@ -37,6 +38,7 @@ abstract class ContentFeedView : FeedView, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { @@ -70,26 +72,8 @@ abstract class ContentFeedView : FeedView(it) }; adapter.onAddToClicked.subscribe(this) { content -> //TODO: Reconstruct search video from detail if search is null - _overlayContainer.let { - if(content is IPlatformVideo) - UISlideOverlays.showVideoOptionsOverlay(content, it, SlideUpMenuItem(context, R.drawable.ic_visibility_off, context.getString(R.string.hide), context.getString(R.string.hide_from_home), "hide", - { StateMeta.instance.addHiddenVideo(content.url); - if (fragment is HomeFragment) { - val removeIndex = recyclerData.results.indexOf(content); - if (removeIndex >= 0) { - recyclerData.results.removeAt(removeIndex); - recyclerData.adapter.notifyItemRemoved(recyclerData.adapter.childToParentPosition(removeIndex)); - } - } - }), - SlideUpMenuItem(context, R.drawable.ic_playlist, context.getString(R.string.play_feed_as_queue), context.getString(R.string.play_entire_feed), "playFeed", - { - val newQueue = listOf(content) + recyclerData.results - .filterIsInstance() - .filter { it != content }; - StatePlayer.instance.setQueue(newQueue, StatePlayer.TYPE_QUEUE, "Feed Queue", true, false); - }) - ); + if(content is IPlatformVideo) { + showVideoOptionsOverlay(content) } }; adapter.onAddToQueueClicked.subscribe(this) { @@ -99,6 +83,50 @@ abstract class ContentFeedView : FeedView= 0) { + recyclerData.results.removeAt(removeIndex); + recyclerData.adapter.notifyItemRemoved(recyclerData.adapter.childToParentPosition(removeIndex)); + } + } + }), + SlideUpMenuItem(context, R.drawable.ic_playlist, context.getString(R.string.play_feed_as_queue), context.getString(R.string.play_entire_feed), "playFeed", + { + val newQueue = listOf(content) + recyclerData.results + .filterIsInstance() + .filter { it != content }; + StatePlayer.instance.setQueue(newQueue, StatePlayer.TYPE_QUEUE, "Feed Queue", true, false); + }) + ); + } } private fun detachAdapterEvents() { @@ -108,6 +136,7 @@ abstract class ContentFeedView : FeedView, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentSearchResultsFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentSearchResultsFragment.kt index 523eb110..1ed56d87 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentSearchResultsFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentSearchResultsFragment.kt @@ -62,6 +62,13 @@ class ContentSearchResultsFragment : MainFragment() { _view = null; } + override fun onBackPressed(): Boolean { + if (_view?.onBackPressed() == true) + return true + + return super.onBackPressed() + } + fun setPreviewsEnabled(previewsEnabled: Boolean) { _view?.setPreviewsEnabled(previewsEnabled && Settings.instance.search.previewFeedItems); } diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt index 1dcc4084..ebf5d56e 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt @@ -66,6 +66,13 @@ class HomeFragment : MainFragment() { return view; } + override fun onBackPressed(): Boolean { + if (_view?.onBackPressed() == true) + return true + + return super.onBackPressed() + } + override fun onDestroyMainView() { super.onDestroyMainView(); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistSearchResultsFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistSearchResultsFragment.kt index 03536707..bf42b2d4 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistSearchResultsFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistSearchResultsFragment.kt @@ -44,6 +44,13 @@ class PlaylistSearchResultsFragment : MainFragment() { return view; } + override fun onBackPressed(): Boolean { + if (_view?.onBackPressed() == true) + return true + + return super.onBackPressed() + } + override fun onDestroyMainView() { super.onDestroyMainView(); _view?.cleanup(); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt index efb5e021..dea16d7c 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt @@ -80,6 +80,13 @@ class SubscriptionsFeedFragment : MainFragment() { } } + override fun onBackPressed(): Boolean { + if (_view?.onBackPressed() == true) + return true + + return super.onBackPressed() + } + fun setPreviewsEnabled(previewsEnabled: Boolean) { _view?.setPreviewsEnabled(previewsEnabled && Settings.instance.subscriptions.previewFeedItems); } diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewContentListAdapter.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewContentListAdapter.kt index 1e370010..2924e7e1 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewContentListAdapter.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewContentListAdapter.kt @@ -32,6 +32,7 @@ class PreviewContentListAdapter : InsertedViewAdapterWithLoader(); val onAddToClicked = Event1(); val onAddToQueueClicked = Event1(); + val onLongPress = Event1(); private var _taskLoadContent = TaskHandler, Pair>( StateApp.instance.scopeGetter, { (viewHolder, video) -> @@ -93,6 +94,7 @@ class PreviewContentListAdapter : InsertedViewAdapterWithLoader(); + val onLongPress = Event1(); val onChannelClicked = Event1(); val onAddToClicked = Event1(); val onAddToQueueClicked = Event1(); @@ -119,7 +120,13 @@ open class PreviewVideoView : LinearLayout { this._exoPlayer = exoPlayer - setOnClickListener { onOpenClicked() }; + setOnLongClickListener { + onLongPress() + true + }; + setOnClickListener { + onOpenClicked() + }; _imageChannel.setOnClickListener { currentVideo?.let { onChannelClicked.emit(it.author) } }; _textChannelName.setOnClickListener { currentVideo?.let { onChannelClicked.emit(it.author) } }; _textVideoMetadata.setOnClickListener { currentVideo?.let { onChannelClicked.emit(it.author) } }; @@ -145,6 +152,12 @@ open class PreviewVideoView : LinearLayout { } } + protected open fun onLongPress() { + currentVideo?.let { + onLongPress.emit(it); + } + } + open fun bind(content: IPlatformContent) { _taskLoadProfile.cancel(); diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewVideoViewHolder.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewVideoViewHolder.kt index 8fed1d82..e1ea40e8 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewVideoViewHolder.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/PreviewVideoViewHolder.kt @@ -17,6 +17,7 @@ class PreviewVideoViewHolder : ContentPreviewViewHolder { val onChannelClicked = Event1(); val onAddToClicked = Event1(); val onAddToQueueClicked = Event1(); + val onLongPress = Event1(); //val context: Context; val currentVideo: IPlatformVideo? get() = view.currentVideo; @@ -30,6 +31,7 @@ class PreviewVideoViewHolder : ContentPreviewViewHolder { view.onChannelClicked.subscribe(onChannelClicked::emit); view.onAddToClicked.subscribe(onAddToClicked::emit); view.onAddToQueueClicked.subscribe(onAddToQueueClicked::emit); + view.onLongPress.subscribe(onLongPress::emit); } diff --git a/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuOverlay.kt b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuOverlay.kt index fcac9eed..cc8e30f1 100644 --- a/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuOverlay.kt +++ b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuOverlay.kt @@ -134,6 +134,10 @@ class SlideUpMenuOverlay : RelativeLayout { } fun show(){ + if (isVisible) { + return; + } + isVisible = true; _container?.post { _container?.visibility = View.VISIBLE; @@ -146,8 +150,8 @@ class SlideUpMenuOverlay : RelativeLayout { _viewBackground.alpha = 0f; val animations = arrayListOf(); - animations.add(ObjectAnimator.ofFloat(_viewBackground, "alpha", 0.0f, 1.0f).setDuration(500)); - animations.add(ObjectAnimator.ofFloat(_viewOverlayContainer, "translationY", _viewOverlayContainer.measuredHeight.toFloat(), 0.0f).setDuration(500)); + animations.add(ObjectAnimator.ofFloat(_viewBackground, "alpha", 0.0f, 1.0f).setDuration(ANIMATION_DURATION_MS)); + animations.add(ObjectAnimator.ofFloat(_viewOverlayContainer, "translationY", _viewOverlayContainer.measuredHeight.toFloat(), 0.0f).setDuration(ANIMATION_DURATION_MS)); val animatorSet = AnimatorSet(); animatorSet.playTogether(animations); @@ -159,11 +163,15 @@ class SlideUpMenuOverlay : RelativeLayout { } fun hide(animate: Boolean = true){ + if (!isVisible) { + return + } + isVisible = false; if (_animated && animate) { val animations = arrayListOf(); - animations.add(ObjectAnimator.ofFloat(_viewBackground, "alpha", 1.0f, 0.0f).setDuration(500)); - animations.add(ObjectAnimator.ofFloat(_viewOverlayContainer, "translationY", 0.0f, _viewOverlayContainer.measuredHeight.toFloat()).setDuration(500)); + animations.add(ObjectAnimator.ofFloat(_viewBackground, "alpha", 1.0f, 0.0f).setDuration(ANIMATION_DURATION_MS)); + animations.add(ObjectAnimator.ofFloat(_viewOverlayContainer, "translationY", 0.0f, _viewOverlayContainer.measuredHeight.toFloat()).setDuration(ANIMATION_DURATION_MS)); val animatorSet = AnimatorSet(); animatorSet.doOnEnd { @@ -180,4 +188,8 @@ class SlideUpMenuOverlay : RelativeLayout { _container?.visibility = View.GONE; } } + + companion object { + private const val ANIMATION_DURATION_MS = 350L + } } \ No newline at end of file