mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 08:20:32 +05:30
move the comments into a bottom sheet
This commit is contained in:
parent
9c4928b862
commit
35602aaaca
@ -27,7 +27,6 @@ import androidx.annotation.RequiresApi
|
|||||||
import androidx.constraintlayout.motion.widget.MotionLayout
|
import androidx.constraintlayout.motion.widget.MotionLayout
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.core.view.isEmpty
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
@ -66,7 +65,6 @@ import com.github.libretube.services.BackgroundMode
|
|||||||
import com.github.libretube.services.DownloadService
|
import com.github.libretube.services.DownloadService
|
||||||
import com.github.libretube.ui.activities.MainActivity
|
import com.github.libretube.ui.activities.MainActivity
|
||||||
import com.github.libretube.ui.adapters.ChaptersAdapter
|
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.adapters.VideosAdapter
|
||||||
import com.github.libretube.ui.base.BaseFragment
|
import com.github.libretube.ui.base.BaseFragment
|
||||||
import com.github.libretube.ui.dialogs.AddToPlaylistDialog
|
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.interfaces.OnlinePlayerOptions
|
||||||
import com.github.libretube.ui.models.PlayerViewModel
|
import com.github.libretube.ui.models.PlayerViewModel
|
||||||
import com.github.libretube.ui.sheets.BaseBottomSheet
|
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.ui.sheets.PlayingQueueSheet
|
||||||
import com.github.libretube.util.BackgroundHelper
|
import com.github.libretube.util.BackgroundHelper
|
||||||
import com.github.libretube.util.DashHelper
|
import com.github.libretube.util.DashHelper
|
||||||
@ -137,13 +136,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
|
|||||||
private var eId: Int = 0
|
private var eId: Int = 0
|
||||||
private var transitioning = false
|
private var transitioning = false
|
||||||
|
|
||||||
/**
|
|
||||||
* for the comments
|
|
||||||
*/
|
|
||||||
private var commentsAdapter: CommentsAdapter? = null
|
|
||||||
private var nextPage: String? = null
|
|
||||||
private var isLoading = true
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* for the player
|
* for the player
|
||||||
*/
|
*/
|
||||||
@ -331,7 +323,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.commentsToggle.setOnClickListener {
|
binding.commentsToggle.setOnClickListener {
|
||||||
toggleComments()
|
CommentsSheet(videoId!!).show(childFragmentManager)
|
||||||
}
|
}
|
||||||
|
|
||||||
playerBinding.queueToggle.visibility = View.VISIBLE
|
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.relatedRecView.layoutManager = VideosAdapter.getLayout(requireContext())
|
||||||
|
|
||||||
binding.alternativeTrendingRec.layoutManager = LinearLayoutManager(
|
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() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
|
|
||||||
@ -649,9 +617,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
|
|||||||
initializePlayerNotification()
|
initializePlayerNotification()
|
||||||
if (PlayerHelper.sponsorBlockEnabled) fetchSponsorBlockSegments()
|
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
|
// add the video to the watch history
|
||||||
if (PlayerHelper.watchHistoryEnabled) {
|
if (PlayerHelper.watchHistoryEnabled) {
|
||||||
DatabaseHelper.addToWatchHistory(videoId!!, streams)
|
DatabaseHelper.addToWatchHistory(videoId!!, streams)
|
||||||
@ -740,8 +705,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
|
|||||||
if (nextVideoId != null) {
|
if (nextVideoId != null) {
|
||||||
videoId = nextVideoId
|
videoId = nextVideoId
|
||||||
|
|
||||||
// forces the comments to reload for the new video
|
// TODO Reset comments
|
||||||
binding.commentsRecView.adapter = null
|
|
||||||
playVideo()
|
playVideo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1265,47 +1229,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
|
|||||||
nowPlayingNotification.updatePlayerNotification(videoId!!, streams)
|
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
|
* Use the sensor mode if auto fullscreen is enabled
|
||||||
*/
|
*/
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -346,15 +346,6 @@
|
|||||||
android:animateLayoutChanges="true"
|
android:animateLayoutChanges="true"
|
||||||
android:descendantFocusability="blocksDescendants">
|
android:descendantFocusability="blocksDescendants">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:id="@+id/comments_recView"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:layout_marginBottom="10dp"
|
|
||||||
android:nestedScrollingEnabled="false"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/related_rec_view"
|
android:id="@+id/related_rec_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user