Fix media transitions, reduce code duplication between media fragments (#894)

* Fix media transitions, reduce code duplication between media fragments

* Remove redundant helper

* Fix occasional crash when swiping between mixed media

* Hide controls when swiping between media
This commit is contained in:
Levi Bard 2018-11-01 14:52:22 +01:00 committed by Konrad Pozniak
commit 4ba6b4adfe
4 changed files with 45 additions and 73 deletions

View file

@ -22,17 +22,17 @@ import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.support.v4.view.ViewCompat
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.MediaController
import android.widget.TextView
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.ViewMediaActivity
import com.keylesspalace.tusky.entity.Attachment
import com.keylesspalace.tusky.util.hide
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.visible
import kotlinx.android.synthetic.main.activity_view_media.*
import kotlinx.android.synthetic.main.fragment_view_video.*
@ -46,9 +46,8 @@ class ViewVideoFragment : ViewMediaFragment() {
}
private lateinit var mediaActivity: ViewMediaActivity
private val TOOLBAR_HIDE_DELAY_MS = 3000L
private var showingDescription = false
private var isDescriptionVisible = false
override lateinit var descriptionView : TextView
private lateinit var mediaController : MediaController
companion object {
private const val TAG = "ViewVideoFragment"
@ -65,20 +64,23 @@ class ViewVideoFragment : ViewMediaFragment() {
if (mediaActivity.isToolbarVisible()) {
handler.postDelayed(hideToolbar, TOOLBAR_HIDE_DELAY_MS)
}
videoPlayer?.start()
videoPlayer.start()
} else {
handler.removeCallbacks(hideToolbar)
videoPlayer?.pause()
videoPlayer.pause()
mediaController.hide()
}
}
@SuppressLint("ClickableViewAccessibility")
override fun setupMediaView(url: String) {
descriptionView = mediaDescription
val videoView = videoPlayer
ViewCompat.setTransitionName(videoView, url)
videoView.setVideoPath(url)
val controller = MediaController(mediaActivity)
controller.setMediaPlayer(videoView)
videoView.setMediaController(controller)
mediaController = MediaController(mediaActivity)
mediaController.setMediaPlayer(videoPlayer)
videoPlayer.setMediaController(mediaController)
videoView.requestFocus()
videoView.setOnTouchListener { _, _ ->
mediaActivity.onPhotoTap()
@ -110,34 +112,14 @@ class ViewVideoFragment : ViewMediaFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val arguments = this.arguments!!
val attachment = arguments.getParcelable<Attachment>(ViewMediaFragment.ARG_ATTACHMENT)
val attachment = arguments?.getParcelable<Attachment>(ViewMediaFragment.ARG_ATTACHMENT)
val url: String
if (attachment == null) {
throw IllegalArgumentException("attachment has to be set")
}
url = attachment.url
val description = attachment.description
mediaDescription.text = description
showingDescription = !TextUtils.isEmpty(description)
isDescriptionVisible = showingDescription
// Setting visibility without animations so it looks nice when you scroll media
//noinspection ConstantConditions
if (showingDescription && mediaActivity.isToolbarVisible()) {
mediaDescription.show()
} else {
mediaDescription.hide()
}
ViewCompat.setTransitionName(videoPlayer!!, url)
setupMediaView(url)
setupToolbarVisibilityListener()
finalizeViewSetup(url, attachment.description)
}
override fun onToolbarVisibilityChange(visible: Boolean) {
@ -147,14 +129,10 @@ class ViewVideoFragment : ViewMediaFragment() {
isDescriptionVisible = showingDescription && visible
val alpha = if (isDescriptionVisible) 1.0f else 0.0f
mediaDescription.animate().alpha(alpha)
descriptionView.animate().alpha(alpha)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
if (isDescriptionVisible) {
mediaDescription.show()
} else {
mediaDescription.hide()
}
descriptionView.visible(isDescriptionVisible)
animation.removeListener(this)
}
})