From 114d3550115611be029ed146d6229db86cb7a8b8 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Tue, 26 Jul 2022 21:18:33 -0600 Subject: [PATCH] detail: make transitions shared axis Make detail transitions operate on a shared axis. This just looks nicer. --- .../auxio/detail/AlbumDetailFragment.kt | 9 +++ .../auxio/detail/ArtistDetailFragment.kt | 9 +++ .../auxio/detail/GenreDetailFragment.kt | 9 +++ .../org/oxycblt/auxio/home/HomeFragment.kt | 8 +++ app/src/main/res/layout/fragment_detail.xml | 3 +- app/src/main/res/layout/fragment_home.xml | 3 +- app/src/main/res/navigation/nav_explore.xml | 72 ++++--------------- 7 files changed, 51 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index 6cb98cdd2..645334cdb 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -28,6 +28,7 @@ import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearSmoothScroller +import com.google.android.material.transition.MaterialSharedAxis import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentDetailBinding import org.oxycblt.auxio.detail.recycler.AlbumDetailAdapter @@ -67,6 +68,14 @@ class AlbumDetailFragment : private val detailAdapter = AlbumDetailAdapter(this) private val settings: Settings by lifecycleObject { binding -> Settings(binding.context) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false) + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false) + } + override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) override fun onBindingCreated(binding: FragmentDetailBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 9bf838b22..6aa5c9e1a 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -25,6 +25,7 @@ import androidx.appcompat.widget.Toolbar import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs +import com.google.android.material.transition.MaterialSharedAxis import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentDetailBinding import org.oxycblt.auxio.detail.recycler.ArtistDetailAdapter @@ -62,6 +63,14 @@ class ArtistDetailFragment : private val detailAdapter = ArtistDetailAdapter(this) private val settings: Settings by lifecycleObject { binding -> Settings(binding.context) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false) + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false) + } + override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) override fun onBindingCreated(binding: FragmentDetailBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index 0b226625e..b0f0a619c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -25,6 +25,7 @@ import androidx.appcompat.widget.Toolbar import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs +import com.google.android.material.transition.MaterialSharedAxis import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentDetailBinding import org.oxycblt.auxio.detail.recycler.DetailAdapter @@ -63,6 +64,14 @@ class GenreDetailFragment : private val detailAdapter = GenreDetailAdapter(this) private val settings: Settings by lifecycleObject { binding -> Settings(binding.context) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false) + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false) + } + override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) override fun onBindingCreated(binding: FragmentDetailBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index 526d19e2b..58e644bd9 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -35,6 +35,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayoutMediator +import com.google.android.material.transition.MaterialSharedAxis import java.lang.reflect.Field import kotlin.math.abs import org.oxycblt.auxio.R @@ -88,6 +89,13 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI binding.homeToolbar.menu.findItem(R.id.submenu_sorting) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false) + } + override fun onCreateBinding(inflater: LayoutInflater) = FragmentHomeBinding.inflate(inflater) override fun onBindingCreated(binding: FragmentHomeBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/res/layout/fragment_detail.xml b/app/src/main/res/layout/fragment_detail.xml index 8d16a980f..657488c00 100644 --- a/app/src/main/res/layout/fragment_detail.xml +++ b/app/src/main/res/layout/fragment_detail.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:background="?attr/colorSurface"> + android:layout_height="match_parent" + android:background="?attr/colorSurface"> + app:destination="@id/artist_detail_fragment" /> + app:destination="@id/album_detail_fragment" /> + app:destination="@id/artist_detail_fragment" /> + app:destination="@id/album_detail_fragment" /> + app:destination="@id/artist_detail_fragment" /> + app:destination="@id/album_detail_fragment" /> + app:destination="@id/genre_detail_fragment" /> + app:destination="@id/artist_detail_fragment" /> + app:destination="@id/album_detail_fragment" /> + app:destination="@id/genre_detail_fragment" /> + app:destination="@id/artist_detail_fragment" /> + app:destination="@id/album_detail_fragment" /> \ No newline at end of file