diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index f66f46550..a22e6d6c5 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -27,7 +27,6 @@ import androidx.annotation.RequiresApi import androidx.constraintlayout.motion.widget.MotionLayout import androidx.core.net.toUri import androidx.core.os.bundleOf -import androidx.core.view.isEmpty import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.lifecycle.Lifecycle @@ -66,7 +65,6 @@ import com.github.libretube.services.BackgroundMode import com.github.libretube.services.DownloadService import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.adapters.ChaptersAdapter -import com.github.libretube.ui.adapters.CommentsAdapter import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.dialogs.AddToPlaylistDialog @@ -78,6 +76,7 @@ import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.interfaces.OnlinePlayerOptions import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.sheets.BaseBottomSheet +import com.github.libretube.ui.sheets.CommentsSheet import com.github.libretube.ui.sheets.PlayingQueueSheet import com.github.libretube.util.BackgroundHelper import com.github.libretube.util.DashHelper @@ -137,13 +136,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { private var eId: Int = 0 private var transitioning = false - /** - * for the comments - */ - private var commentsAdapter: CommentsAdapter? = null - private var nextPage: String? = null - private var isLoading = true - /** * for the player */ @@ -331,7 +323,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { } binding.commentsToggle.setOnClickListener { - toggleComments() + CommentsSheet(videoId!!).show(childFragmentManager) } playerBinding.queueToggle.visibility = View.VISIBLE @@ -383,19 +375,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { ) } - binding.playerScrollView.viewTreeObserver - .addOnScrollChangedListener { - if (binding.playerScrollView.getChildAt(0).bottom - == (binding.playerScrollView.height + binding.playerScrollView.scrollY) && - nextPage != null - ) { - fetchNextComments() - } - } - - binding.commentsRecView.layoutManager = LinearLayoutManager(view?.context) - binding.commentsRecView.setItemViewCacheSize(20) - binding.relatedRecView.layoutManager = VideosAdapter.getLayout(requireContext()) binding.alternativeTrendingRec.layoutManager = LinearLayoutManager( @@ -474,17 +453,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { } } - private fun toggleComments() { - if (binding.commentsRecView.isVisible) { - binding.commentsRecView.visibility = View.GONE - binding.relatedRecView.visibility = View.VISIBLE - } else { - binding.commentsRecView.visibility = View.VISIBLE - binding.relatedRecView.visibility = View.GONE - if (binding.commentsRecView.isEmpty()) fetchComments() - } - } - override fun onStart() { super.onStart() @@ -649,9 +617,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { initializePlayerNotification() if (PlayerHelper.sponsorBlockEnabled) fetchSponsorBlockSegments() - // show comments if related streams are disabled or the alternative related streams layout is chosen - if (!PlayerHelper.relatedStreamsEnabled || PlayerHelper.alternativeVideoLayout) toggleComments() - // add the video to the watch history if (PlayerHelper.watchHistoryEnabled) { DatabaseHelper.addToWatchHistory(videoId!!, streams) @@ -740,8 +705,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { if (nextVideoId != null) { videoId = nextVideoId - // forces the comments to reload for the new video - binding.commentsRecView.adapter = null + // TODO Reset comments playVideo() } } @@ -1265,47 +1229,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { nowPlayingNotification.updatePlayerNotification(videoId!!, streams) } - private fun fetchComments() { - lifecycleScope.launchWhenCreated { - val commentsResponse = try { - RetrofitInstance.api.getComments(videoId!!) - } catch (e: IOException) { - println(e) - Log.e(TAG(), "IOException, you might not have internet connection") - Toast.makeText(context, R.string.unknown_error, Toast.LENGTH_SHORT).show() - return@launchWhenCreated - } catch (e: HttpException) { - Log.e(TAG(), "HttpException, unexpected response") - return@launchWhenCreated - } - commentsAdapter = CommentsAdapter(videoId!!, commentsResponse.comments) - binding.commentsRecView.adapter = commentsAdapter - nextPage = commentsResponse.nextpage - isLoading = false - } - } - - private fun fetchNextComments() { - lifecycleScope.launchWhenCreated { - if (!isLoading) { - isLoading = true - val response = try { - RetrofitInstance.api.getCommentsNextPage(videoId!!, nextPage!!) - } catch (e: IOException) { - println(e) - Log.e(TAG(), "IOException, you might not have internet connection") - return@launchWhenCreated - } catch (e: HttpException) { - Log.e(TAG(), "HttpException, unexpected response," + e.response()) - return@launchWhenCreated - } - nextPage = response.nextpage - commentsAdapter?.updateItems(response.comments) - isLoading = false - } - } - } - /** * Use the sensor mode if auto fullscreen is enabled */ diff --git a/app/src/main/java/com/github/libretube/ui/sheets/CommentsSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/CommentsSheet.kt new file mode 100644 index 000000000..1beadc6f3 --- /dev/null +++ b/app/src/main/java/com/github/libretube/ui/sheets/CommentsSheet.kt @@ -0,0 +1,89 @@ +package com.github.libretube.ui.sheets + +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.LinearLayoutManager +import com.github.libretube.R +import com.github.libretube.api.RetrofitInstance +import com.github.libretube.databinding.BottomSheetBinding +import com.github.libretube.extensions.TAG +import com.github.libretube.ui.adapters.CommentsAdapter +import retrofit2.HttpException +import java.io.IOException + +class CommentsSheet( + private val videoId: String +) : ExpandedBottomSheet() { + private lateinit var binding: BottomSheetBinding + + private var commentsAdapter: CommentsAdapter? = null + private var nextPage: String? = null + private var isLoading = true + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = BottomSheetBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + binding.optionsRecycler.layoutManager = LinearLayoutManager(requireContext()) + binding.optionsRecycler.setItemViewCacheSize(20) + + binding.optionsRecycler.viewTreeObserver + .addOnScrollChangedListener { + if (!binding.optionsRecycler.canScrollVertically(1)) { + fetchNextComments() + } + } + + fetchComments() + } + + private fun fetchComments() { + lifecycleScope.launchWhenCreated { + val commentsResponse = try { + RetrofitInstance.api.getComments(videoId) + } catch (e: IOException) { + println(e) + Log.e(TAG(), "IOException, you might not have internet connection") + Toast.makeText(context, R.string.unknown_error, Toast.LENGTH_SHORT).show() + return@launchWhenCreated + } catch (e: HttpException) { + Log.e(TAG(), "HttpException, unexpected response") + return@launchWhenCreated + } + commentsAdapter = CommentsAdapter(videoId, commentsResponse.comments) + binding.optionsRecycler.adapter = commentsAdapter + nextPage = commentsResponse.nextpage + isLoading = false + } + } + + private fun fetchNextComments() { + lifecycleScope.launchWhenCreated { + if (!isLoading) { + isLoading = true + val response = try { + RetrofitInstance.api.getCommentsNextPage(videoId, nextPage!!) + } catch (e: IOException) { + println(e) + Log.e(TAG(), "IOException, you might not have internet connection") + return@launchWhenCreated + } catch (e: HttpException) { + Log.e(TAG(), "HttpException, unexpected response," + e.response()) + return@launchWhenCreated + } + nextPage = response.nextpage + commentsAdapter?.updateItems(response.comments) + isLoading = false + } + } + } +} diff --git a/app/src/main/res/layout/fragment_player.xml b/app/src/main/res/layout/fragment_player.xml index 9a9bb75db..123e3be31 100644 --- a/app/src/main/res/layout/fragment_player.xml +++ b/app/src/main/res/layout/fragment_player.xml @@ -346,15 +346,6 @@ android:animateLayoutChanges="true" android:descendantFocusability="blocksDescendants"> - -