Improve play button display logic on video editor fragment.
This commit is contained in:
parent
89eeae36c4
commit
5416c3b8aa
1 changed files with 22 additions and 27 deletions
|
@ -13,13 +13,13 @@ import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import org.signal.core.util.logging.Log
|
import org.signal.core.util.logging.Log
|
||||||
import org.thoughtcrime.securesms.R
|
import org.thoughtcrime.securesms.R
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState
|
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData
|
import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData
|
||||||
import org.thoughtcrime.securesms.mms.MediaConstraints
|
import org.thoughtcrime.securesms.mms.MediaConstraints
|
||||||
import org.thoughtcrime.securesms.mms.VideoSlide
|
import org.thoughtcrime.securesms.mms.VideoSlide
|
||||||
import org.thoughtcrime.securesms.scribbles.VideoEditorPlayButtonLayout
|
import org.thoughtcrime.securesms.scribbles.VideoEditorPlayButtonLayout
|
||||||
import org.thoughtcrime.securesms.util.Throttler
|
import org.thoughtcrime.securesms.util.Throttler
|
||||||
|
import org.thoughtcrime.securesms.util.visible
|
||||||
import org.thoughtcrime.securesms.video.VideoPlayer
|
import org.thoughtcrime.securesms.video.VideoPlayer
|
||||||
import org.thoughtcrime.securesms.video.VideoPlayer.PlayerCallback
|
import org.thoughtcrime.securesms.video.VideoPlayer.PlayerCallback
|
||||||
import org.thoughtcrime.securesms.video.videoconverter.VideoThumbnailsRangeSelectorView
|
import org.thoughtcrime.securesms.video.videoconverter.VideoThumbnailsRangeSelectorView
|
||||||
|
@ -32,7 +32,6 @@ class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragm
|
||||||
private val videoScanThrottle = Throttler(150)
|
private val videoScanThrottle = Throttler(150)
|
||||||
private val handler = Handler(Looper.getMainLooper())
|
private val handler = Handler(Looper.getMainLooper())
|
||||||
|
|
||||||
private var canEdit = false
|
|
||||||
private var isVideoGif = false
|
private var isVideoGif = false
|
||||||
private var isInEdit = false
|
private var isInEdit = false
|
||||||
private var isFocused = false
|
private var isFocused = false
|
||||||
|
@ -87,6 +86,8 @@ class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragm
|
||||||
player.setWindow(requireActivity().window)
|
player.setWindow(requireActivity().window)
|
||||||
player.setVideoSource(slide, isVideoGif, TAG)
|
player.setVideoSource(slide, isVideoGif, TAG)
|
||||||
|
|
||||||
|
hud.visible = !slide.isVideoGif
|
||||||
|
|
||||||
if (slide.isVideoGif) {
|
if (slide.isVideoGif) {
|
||||||
player.setPlayerCallback(object : PlayerCallback {
|
player.setPlayerCallback(object : PlayerCallback {
|
||||||
override fun onPlaying() {
|
override fun onPlaying() {
|
||||||
|
@ -101,14 +102,8 @@ class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragm
|
||||||
})
|
})
|
||||||
player.hideControls()
|
player.hideControls()
|
||||||
player.loopForever()
|
player.loopForever()
|
||||||
|
player.play()
|
||||||
} else {
|
} else {
|
||||||
if (MediaConstraints.isVideoTranscodeAvailable()) {
|
|
||||||
sharedViewModel.state.value?.let { state ->
|
|
||||||
bindVideoTimeline(state)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
hud.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
hud.setPlayClickListener {
|
hud.setPlayClickListener {
|
||||||
player.play()
|
player.play()
|
||||||
}
|
}
|
||||||
|
@ -139,18 +134,23 @@ class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragm
|
||||||
sharedViewModel.state.observe(viewLifecycleOwner) { incomingState ->
|
sharedViewModel.state.observe(viewLifecycleOwner) { incomingState ->
|
||||||
val focusedUri = incomingState.focusedMedia?.uri
|
val focusedUri = incomingState.focusedMedia?.uri
|
||||||
val currentlyFocused = focusedUri != null && focusedUri == uri
|
val currentlyFocused = focusedUri != null && focusedUri == uri
|
||||||
if (MediaConstraints.isVideoTranscodeAvailable() && canEdit) {
|
if (MediaConstraints.isVideoTranscodeAvailable()) {
|
||||||
if (currentlyFocused) {
|
if (currentlyFocused) {
|
||||||
|
if (isVideoGif) {
|
||||||
|
player.play()
|
||||||
|
} else {
|
||||||
if (!isFocused) {
|
if (!isFocused) {
|
||||||
bindVideoTimeline(incomingState)
|
bindVideoTimeline(incomingState.getOrCreateVideoTrimData(uri))
|
||||||
} else {
|
} else {
|
||||||
val videoTrimData = if (focusedUri != null) {
|
val videoTrimData = if (focusedUri != null) {
|
||||||
incomingState.getOrCreateVideoTrimData(focusedUri)
|
incomingState.getOrCreateVideoTrimData(focusedUri)
|
||||||
} else {
|
} else {
|
||||||
VideoTrimData()
|
VideoTrimData()
|
||||||
}
|
}
|
||||||
|
hud.visible = incomingState.isTouchEnabled && !isVideoGif
|
||||||
onEditVideoDuration(videoTrimData, incomingState.isTouchEnabled)
|
onEditVideoDuration(videoTrimData, incomingState.isTouchEnabled)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
stopPositionUpdates()
|
stopPositionUpdates()
|
||||||
player.pause()
|
player.pause()
|
||||||
|
@ -161,22 +161,15 @@ class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragm
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(23)
|
@RequiresApi(23)
|
||||||
private fun bindVideoTimeline(state: MediaSelectionState) {
|
private fun bindVideoTimeline(data: VideoTrimData) {
|
||||||
val uri = state.focusedMedia?.uri ?: return
|
|
||||||
if (uri != this.uri) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val autoplay = isVideoGif
|
val autoplay = isVideoGif
|
||||||
val slide = VideoSlide(requireContext(), uri, 0, autoplay)
|
val slide = VideoSlide(requireContext(), uri, 0, autoplay)
|
||||||
|
|
||||||
val data = state.getOrCreateVideoTrimData(uri)
|
|
||||||
if (data.isDurationEdited) {
|
if (data.isDurationEdited) {
|
||||||
player.clip(data.startTimeUs, data.endTimeUs, autoplay)
|
player.clip(data.startTimeUs, data.endTimeUs, autoplay)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (slide.hasVideo()) {
|
if (slide.hasVideo() && !autoplay) {
|
||||||
canEdit = true
|
|
||||||
try {
|
try {
|
||||||
videoTimeLine.registerPlayerDragListener(this)
|
videoTimeLine.registerPlayerDragListener(this)
|
||||||
|
|
||||||
|
@ -258,8 +251,6 @@ class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragm
|
||||||
|
|
||||||
@RequiresApi(23)
|
@RequiresApi(23)
|
||||||
private fun onEditVideoDuration(data: VideoTrimData, editingComplete: Boolean) {
|
private fun onEditVideoDuration(data: VideoTrimData, editingComplete: Boolean) {
|
||||||
hud.hidePlayButton()
|
|
||||||
|
|
||||||
if (editingComplete) {
|
if (editingComplete) {
|
||||||
isInEdit = false
|
isInEdit = false
|
||||||
videoScanThrottle.clear()
|
videoScanThrottle.clear()
|
||||||
|
@ -268,6 +259,10 @@ class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragm
|
||||||
wasPlayingBeforeEdit = player.isPlaying
|
wasPlayingBeforeEdit = player.isPlaying
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wasPlayingBeforeEdit) {
|
||||||
|
hud.hidePlayButton()
|
||||||
|
}
|
||||||
|
|
||||||
videoScanThrottle.publish {
|
videoScanThrottle.publish {
|
||||||
player.pause()
|
player.pause()
|
||||||
if (!editingComplete) {
|
if (!editingComplete) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue