Login screens: Animate the logo in screen transition

This commit is contained in:
Benoit Marty 2019-11-19 17:25:33 +01:00
parent 1dc7dfc896
commit c18c140ec9
5 changed files with 28 additions and 2 deletions

View File

@ -18,6 +18,7 @@ package im.vector.riotx.core.extensions
import android.os.Parcelable
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import im.vector.riotx.core.platform.VectorBaseActivity
fun VectorBaseActivity.addFragment(frameId: Int, fragment: Fragment) {
@ -44,8 +45,13 @@ fun VectorBaseActivity.addFragmentToBackstack(frameId: Int, fragment: Fragment,
supportFragmentManager.commitTransaction { replace(frameId, fragment).addToBackStack(tag) }
}
fun <T : Fragment> VectorBaseActivity.addFragmentToBackstack(frameId: Int, fragmentClass: Class<T>, params: Parcelable? = null, tag: String? = null) {
fun <T : Fragment> VectorBaseActivity.addFragmentToBackstack(frameId: Int,
fragmentClass: Class<T>,
params: Parcelable? = null,
tag: String? = null,
option: ((FragmentTransaction) -> Unit)? = null) {
supportFragmentManager.commitTransaction {
option?.invoke(this)
replace(frameId, fragmentClass, params.toMvRxBundle(), tag).addToBackStack(tag)
}
}

View File

@ -18,7 +18,9 @@ package im.vector.riotx.features.login
import android.content.Context
import android.content.Intent
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.core.view.ViewCompat
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentManager
import com.airbnb.mvrx.viewModel
@ -70,7 +72,13 @@ class LoginActivity : VectorBaseActivity() {
loginSharedActionViewModel.observe()
.subscribe {
when (it) {
is LoginNavigation.OpenServerSelection -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginServerSelectionFragment::class.java)
is LoginNavigation.OpenServerSelection -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginServerSelectionFragment::class.java,
option = { ft ->
val view = findViewById<View?>(R.id.loginSplashLogo)
if (view != null) {
ft.addSharedElement(view, ViewCompat.getTransitionName(view) ?: "")
}
})
is LoginNavigation.OnServerSelectionDone -> onServerSelectionDone()
is LoginNavigation.OnSignModeSelected -> onSignModeSelected()
is LoginNavigation.OnLoginFlowRetrieved -> onLoginFlowRetrieved()

View File

@ -16,8 +16,10 @@
package im.vector.riotx.features.login
import android.os.Build
import android.os.Bundle
import android.view.View
import androidx.transition.TransitionInflater
import butterknife.OnClick
import com.airbnb.mvrx.Fail
import com.airbnb.mvrx.Success
@ -35,6 +37,14 @@ class LoginServerSelectionFragment @Inject constructor() : AbstractLoginFragment
override fun getLayoutResId() = R.layout.fragment_login_server_selection
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

View File

@ -16,6 +16,7 @@
<ImageView
android:id="@+id/loginServerLogo"
style="@style/LoginTopIcon"
android:transitionName="loginLogoTransition"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

View File

@ -14,6 +14,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/riotx_logo"
android:transitionName="loginLogoTransition"
app:layout_constraintBottom_toTopOf="@+id/loginSplashTitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"