Skip to content

Commit

Permalink
Remove loading and error from MotionLayout to resolve transition issue (
Browse files Browse the repository at this point in the history
  • Loading branch information
mattmook authored Jan 27, 2021
1 parent 9cf4525 commit 7813277
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 209 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
Expand Down Expand Up @@ -75,7 +76,7 @@ class ProfileFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

motionLayoutSavedStateViewModel.bind(binding.mainView)
motionLayoutSavedStateViewModel.bind(binding.motionLayout)

binding.errorButton.setOnClickListener {
profileViewModel.loadProfile()
Expand Down Expand Up @@ -112,28 +113,13 @@ class ProfileFragment : Fragment() {
}

private fun render(state: ProfileState) {
when (state) {
ProfileState.Loading -> {
if (binding.mainView.currentState != R.id.loading) {
binding.mainView.setTransition(R.id.loadingToError)
binding.mainView.transitionToStart()
}
}
ProfileState.Error -> {
if (binding.mainView.currentState != R.id.error) {
binding.mainView.setTransition(R.id.loadingToError)
binding.mainView.transitionToEnd()
}
}
is ProfileState.Ready -> {
if (binding.mainView.currentState != R.id.ready && binding.mainView.currentState != R.id.readyCollapsed) {
binding.mainView.setTransition(R.id.loadingToReady)
binding.mainView.transitionToEnd()
}
binding.errorGroup.isVisible = state is ProfileState.Error
binding.loading.isVisible = state is ProfileState.Loading
binding.motionLayout.isVisible = state is ProfileState.Ready

renderPersonalDetails(state.personalDetails, state.skills)
renderExperiences(state.experiences)
}
if (state is ProfileState.Ready) {
renderPersonalDetails(state.personalDetails, state.skills)
renderExperiences(state.experiences)
}
}

Expand Down
199 changes: 106 additions & 93 deletions androidApp/src/main/res/layout/profile_fragment.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/profile_fragment_scene"
tools:context="com.mattdolan.cv.MainActivity">
android:layout_height="match_parent">

<ImageView
android:id="@+id/loading"
Expand All @@ -19,6 +16,13 @@
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/avd_cv_loading" />

<androidx.constraintlayout.widget.Group
android:id="@+id/error_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
app:constraint_referenced_ids="error,error_text,error_button" />

<ImageView
android:id="@+id/error"
android:layout_width="128dp"
Expand Down Expand Up @@ -51,100 +55,109 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/error" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
<androidx.constraintlayout.motion.widget.MotionLayout
android:id="@+id/motion_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/pad" />
android:layout_height="match_parent"
android:visibility="invisible"
app:layoutDescription="@xml/profile_fragment_scene"
tools:context="com.mattdolan.cv.MainActivity">

<View
android:id="@+id/header_background"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/header_background"
android:paddingBottom="16dp"
app:layout_constraintBottom_toBottomOf="@id/pad"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/header_background"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/header_background"
android:paddingBottom="16dp"
app:layout_constraintBottom_toBottomOf="@id/pad"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:id="@+id/image"
android:layout_width="160dp"
android:layout_height="160dp"
android:layout_marginTop="16dp"
android:importantForAccessibility="no"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_company_placeholder" />
<ImageView
android:id="@+id/image"
android:layout_width="160dp"
android:layout_height="160dp"
android:layout_marginTop="16dp"
android:importantForAccessibility="no"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_company_placeholder" />

<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fontFamily="@font/roboto_bold"
android:textColor="@android:color/black"
android:textSize="28sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/image"
tools:text="Matthew Dolan" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fontFamily="@font/roboto_bold"
android:textColor="@android:color/black"
android:textSize="28sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/image"
tools:text="Matthew Dolan" />

<TextView
android:id="@+id/tagline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_slab"
android:textColor="@android:color/black"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/name"
tools:text="Experienced Mobile Software Specialist" />
<TextView
android:id="@+id/tagline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_slab"
android:textColor="@android:color/black"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/name"
tools:text="Experienced Mobile Software Specialist" />

<TextView
android:id="@+id/location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_slab_light"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="italic"
app:drawableStartCompat="@drawable/map_marker"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tagline"
tools:text="London, UK" />
<TextView
android:id="@+id/location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_slab_light"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="italic"
app:drawableStartCompat="@drawable/map_marker"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tagline"
tools:text="London, UK" />

<com.google.android.material.chip.ChipGroup
android:id="@+id/chipGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:chipSpacingHorizontal="4dp"
app:chipSpacingVertical="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/location" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/chipGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:chipSpacingHorizontal="4dp"
app:chipSpacingVertical="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/location" />

<View
android:id="@+id/pad"
android:layout_width="match_parent"
android:layout_height="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/chipGroup" />
<View
android:id="@+id/pad"
android:layout_width="match_parent"
android:layout_height="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/chipGroup" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/pad" />

</androidx.constraintlayout.motion.widget.MotionLayout>
</androidx.constraintlayout.motion.widget.MotionLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Loading

0 comments on commit 7813277

Please sign in to comment.