ui: use z transitions everywhere

Semantically correct, and now reasonable since the UI is no longer
clipped.

Will do shared element at some point once they have predictive
back support.
This commit is contained in:
Alexander Capehart 2024-07-04 22:26:59 -06:00
parent 3d177b05f1
commit a959933036
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
6 changed files with 22 additions and 56 deletions

View file

@ -84,10 +84,10 @@ class AlbumDetailFragment :
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
// Detail transitions are always on the X axis. Shared element transitions are more // Detail transitions are always on the X axis. Shared element transitions are more
// semantically correct, but are also too buggy to be sensible. // semantically correct, but are also too buggy to be sensible.
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
} }
override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater)

View file

@ -82,10 +82,10 @@ class ArtistDetailFragment :
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
// Detail transitions are always on the X axis. Shared element transitions are more // Detail transitions are always on the X axis. Shared element transitions are more
// semantically correct, but are also too buggy to be sensible. // semantically correct, but are also too buggy to be sensible.
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
} }
override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater)

View file

@ -80,10 +80,10 @@ class GenreDetailFragment :
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
} }
override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater)

View file

@ -91,10 +91,10 @@ class PlaylistDetailFragment :
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
} }
override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater)

View file

@ -47,7 +47,6 @@ import dagger.hilt.android.AndroidEntryPoint
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
import kotlin.math.abs import kotlin.math.abs
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentHomeBinding import org.oxycblt.auxio.databinding.FragmentHomeBinding
import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.detail.DetailViewModel
@ -111,15 +110,10 @@ class HomeFragment :
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
if (savedInstanceState != null) { enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
// Orientation change will wipe whatever transition we were using prior, which will returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
// result in no transition when the user navigates back. Make sure we re-initialize exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
// our transitions. reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
val axis = savedInstanceState.getInt(KEY_LAST_TRANSITION_ID, -1)
if (axis > -1) {
applyAxisTransition(axis)
}
}
} }
override fun onCreateBinding(inflater: LayoutInflater) = FragmentHomeBinding.inflate(inflater) override fun onCreateBinding(inflater: LayoutInflater) = FragmentHomeBinding.inflate(inflater)
@ -241,15 +235,6 @@ class HomeFragment :
} }
} }
override fun onSaveInstanceState(outState: Bundle) {
val transition = enterTransition
if (transition is MaterialSharedAxis) {
outState.putInt(KEY_LAST_TRANSITION_ID, transition.axis)
}
super.onSaveInstanceState(outState)
}
override fun onDestroyBinding(binding: FragmentHomeBinding) { override fun onDestroyBinding(binding: FragmentHomeBinding) {
super.onDestroyBinding(binding) super.onDestroyBinding(binding)
storagePermissionLauncher = null storagePermissionLauncher = null
@ -279,7 +264,6 @@ class HomeFragment :
// Handle main actions (Search, Settings, About) // Handle main actions (Search, Settings, About)
R.id.action_search -> { R.id.action_search -> {
logD("Navigating to search") logD("Navigating to search")
applyAxisTransition(MaterialSharedAxis.Z)
findNavController().navigateSafe(HomeFragmentDirections.search()) findNavController().navigateSafe(HomeFragmentDirections.search())
true true
} }
@ -680,18 +664,15 @@ class HomeFragment :
} }
is Show.SongAlbumDetails -> { is Show.SongAlbumDetails -> {
logD("Navigating to the album of ${show.song}") logD("Navigating to the album of ${show.song}")
applyAxisTransition(MaterialSharedAxis.X)
findNavController() findNavController()
.navigateSafe(HomeFragmentDirections.showAlbum(show.song.album.uid)) .navigateSafe(HomeFragmentDirections.showAlbum(show.song.album.uid))
} }
is Show.AlbumDetails -> { is Show.AlbumDetails -> {
logD("Navigating to ${show.album}") logD("Navigating to ${show.album}")
applyAxisTransition(MaterialSharedAxis.X)
findNavController().navigateSafe(HomeFragmentDirections.showAlbum(show.album.uid)) findNavController().navigateSafe(HomeFragmentDirections.showAlbum(show.album.uid))
} }
is Show.ArtistDetails -> { is Show.ArtistDetails -> {
logD("Navigating to ${show.artist}") logD("Navigating to ${show.artist}")
applyAxisTransition(MaterialSharedAxis.X)
findNavController().navigateSafe(HomeFragmentDirections.showArtist(show.artist.uid)) findNavController().navigateSafe(HomeFragmentDirections.showArtist(show.artist.uid))
} }
is Show.SongArtistDecision -> { is Show.SongArtistDecision -> {
@ -706,12 +687,10 @@ class HomeFragment :
} }
is Show.GenreDetails -> { is Show.GenreDetails -> {
logD("Navigating to ${show.genre}") logD("Navigating to ${show.genre}")
applyAxisTransition(MaterialSharedAxis.X)
findNavController().navigateSafe(HomeFragmentDirections.showGenre(show.genre.uid)) findNavController().navigateSafe(HomeFragmentDirections.showGenre(show.genre.uid))
} }
is Show.PlaylistDetails -> { is Show.PlaylistDetails -> {
logD("Navigating to ${show.playlist}") logD("Navigating to ${show.playlist}")
applyAxisTransition(MaterialSharedAxis.X)
findNavController() findNavController()
.navigateSafe(HomeFragmentDirections.showPlaylist(show.playlist.uid)) .navigateSafe(HomeFragmentDirections.showPlaylist(show.playlist.uid))
} }
@ -747,18 +726,6 @@ class HomeFragment :
} }
} }
private fun applyAxisTransition(axis: Int) {
// Sanity check to avoid in-correct axis transitions
check(axis == MaterialSharedAxis.X || axis == MaterialSharedAxis.Z) {
"Not expecting Y axis transition"
}
enterTransition = MaterialSharedAxis(axis, true)
returnTransition = MaterialSharedAxis(axis, false)
exitTransition = MaterialSharedAxis(axis, true)
reenterTransition = MaterialSharedAxis(axis, false)
}
/** /**
* [FragmentStateAdapter] implementation for the [HomeFragment]'s [ViewPager2] instance. * [FragmentStateAdapter] implementation for the [HomeFragment]'s [ViewPager2] instance.
* *
@ -793,6 +760,5 @@ class HomeFragment :
"hide", "hide",
FloatingActionButton.OnVisibilityChangedListener::class, FloatingActionButton.OnVisibilityChangedListener::class,
Boolean::class) Boolean::class)
const val KEY_LAST_TRANSITION_ID = BuildConfig.APPLICATION_ID + ".key.LAST_TRANSITION_AXIS"
} }
} }

View file

@ -92,8 +92,8 @@ class SearchFragment : ListFragment<Music, FragmentSearchBinding>() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
} }
override fun onCreateBinding(inflater: LayoutInflater) = FragmentSearchBinding.inflate(inflater) override fun onCreateBinding(inflater: LayoutInflater) = FragmentSearchBinding.inflate(inflater)