No issue: Simplify and speed up shared element transitions
parent
43a961fe73
commit
8dbed67f7f
|
@ -181,6 +181,12 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sharedElementEnterTransition =
|
||||||
|
TransitionInflater.from(context).inflateTransition(android.R.transition.move).setDuration(
|
||||||
|
SHARED_TRANSITION_MS
|
||||||
|
)
|
||||||
|
startPostponedEnterTransition()
|
||||||
|
|
||||||
QuickActionComponent(
|
QuickActionComponent(
|
||||||
view.nestedScrollQuickAction,
|
view.nestedScrollQuickAction,
|
||||||
ActionBusFactory.get(this),
|
ActionBusFactory.get(this),
|
||||||
|
@ -223,9 +229,6 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
view = view
|
view = view
|
||||||
)
|
)
|
||||||
|
|
||||||
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
|
|
||||||
startPostponedEnterTransition()
|
|
||||||
|
|
||||||
val sessionManager = requireComponents.core.sessionManager
|
val sessionManager = requireComponents.core.sessionManager
|
||||||
|
|
||||||
contextMenuFeature.set(
|
contextMenuFeature.set(
|
||||||
|
@ -829,6 +832,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
private const val SHARED_TRANSITION_MS = 200L
|
||||||
private const val TAB_ITEM_TRANSITION_NAME = "tab_item"
|
private const val TAB_ITEM_TRANSITION_NAME = "tab_item"
|
||||||
private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1
|
private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1
|
||||||
private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2
|
private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2
|
||||||
|
|
|
@ -15,16 +15,11 @@ import android.view.ViewGroup
|
||||||
import android.view.ViewTreeObserver
|
import android.view.ViewTreeObserver
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.constraintlayout.motion.widget.MotionLayout
|
|
||||||
import androidx.constraintlayout.motion.widget.MotionScene
|
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.PARENT_ID
|
import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.PARENT_ID
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
import androidx.navigation.NavController
|
|
||||||
import androidx.navigation.NavDirections
|
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
import androidx.navigation.Navigator
|
|
||||||
import androidx.navigation.fragment.FragmentNavigator
|
import androidx.navigation.fragment.FragmentNavigator
|
||||||
import androidx.navigation.fragment.NavHostFragment.findNavController
|
import androidx.navigation.fragment.NavHostFragment.findNavController
|
||||||
import androidx.transition.TransitionInflater
|
import androidx.transition.TransitionInflater
|
||||||
|
@ -109,6 +104,7 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
postponeEnterTransition()
|
postponeEnterTransition()
|
||||||
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
|
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
|
||||||
|
.setDuration(SHARED_TRANSITION_MS)
|
||||||
|
|
||||||
sessionObserver = BrowserSessionsObserver(requireComponents.core.sessionManager, singleSessionObserver) {
|
sessionObserver = BrowserSessionsObserver(requireComponents.core.sessionManager, singleSessionObserver) {
|
||||||
emitSessionChanges()
|
emitSessionChanges()
|
||||||
|
@ -202,16 +198,7 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver {
|
||||||
FragmentNavigator.Extras.Builder()
|
FragmentNavigator.Extras.Builder()
|
||||||
.addSharedElement(toolbar_wrapper, "toolbar_wrapper_transition")
|
.addSharedElement(toolbar_wrapper, "toolbar_wrapper_transition")
|
||||||
.build()
|
.build()
|
||||||
|
Navigation.findNavController(it).navigate(directions, extras)
|
||||||
if (homeLayout.progress == 1.0F) {
|
|
||||||
Navigation.findNavController(it).navigate(directions, extras)
|
|
||||||
} else {
|
|
||||||
homeLayout.setTransitionDuration(TRANSITION_DURATION_MOTION)
|
|
||||||
homeLayout.transitionToEnd()
|
|
||||||
val listener = getTransitionListener(Navigation.findNavController(it), directions, extras)
|
|
||||||
homeLayout.setTransitionListener(listener)
|
|
||||||
}
|
|
||||||
|
|
||||||
requireComponents.analytics.metrics.track(Event.SearchBarTapped(Event.SearchBarTapped.Source.HOME))
|
requireComponents.analytics.metrics.track(Event.SearchBarTapped(Event.SearchBarTapped.Source.HOME))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,26 +227,6 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver {
|
||||||
homeDividerShadow.bringToFront()
|
homeDividerShadow.bringToFront()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getTransitionListener(
|
|
||||||
navController: NavController,
|
|
||||||
directions: NavDirections,
|
|
||||||
extras: Navigator.Extras
|
|
||||||
) = object : MotionLayout.TransitionListener {
|
|
||||||
override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}
|
|
||||||
|
|
||||||
override fun allowsTransition(p0: MotionScene.Transition?): Boolean {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
|
|
||||||
navController.navigate(directions, extras)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {}
|
|
||||||
|
|
||||||
override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
homeMenu = null
|
homeMenu = null
|
||||||
job.cancel()
|
job.cancel()
|
||||||
|
@ -689,7 +656,7 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver {
|
||||||
override fun onProfileUpdated(profile: Profile) { emitAccountChanges() }
|
override fun onProfileUpdated(profile: Profile) { emitAccountChanges() }
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val TRANSITION_DURATION_MOTION = 400
|
private const val SHARED_TRANSITION_MS = 200L
|
||||||
private const val TAB_ITEM_TRANSITION_NAME = "tab_item"
|
private const val TAB_ITEM_TRANSITION_NAME = "tab_item"
|
||||||
private const val toolbarPaddingDp = 12f
|
private const val toolbarPaddingDp = 12f
|
||||||
private const val MOTION_LAYOUT_PROGRESS_ROUND_POINT = 0.25f
|
private const val MOTION_LAYOUT_PROGRESS_ROUND_POINT = 0.25f
|
||||||
|
|
|
@ -63,7 +63,10 @@ class SearchFragment : Fragment(), BackHandler {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
postponeEnterTransition()
|
postponeEnterTransition()
|
||||||
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
|
sharedElementEnterTransition =
|
||||||
|
TransitionInflater.from(context).inflateTransition(android.R.transition.move).setDuration(
|
||||||
|
SHARED_TRANSITION_MS
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
|
@ -321,6 +324,7 @@ class SearchFragment : Fragment(), BackHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
private const val SHARED_TRANSITION_MS = 150L
|
||||||
private const val REQUEST_CODE_CAMERA_PERMISSIONS = 1
|
private const val REQUEST_CODE_CAMERA_PERMISSIONS = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue