From 8d68dd53665247018b03480b36ffc2e75e2790fa Mon Sep 17 00:00:00 2001 From: Johan von Forstner Date: Fri, 31 Dec 2021 15:50:39 +0100 Subject: [PATCH] add some fragment transitions --- app/build.gradle | 2 +- .../vonforst/evmap/fragment/DonateFragment.kt | 17 +++++---- .../vonforst/evmap/fragment/DonateFragment.kt | 23 ++++++++---- .../java/net/vonforst/evmap/MapsActivity.kt | 12 +++++-- .../evmap/fragment/ChargepriceFragment.kt | 13 +++---- .../evmap/fragment/FavoritesFragment.kt | 16 ++++++--- .../vonforst/evmap/fragment/FilterFragment.kt | 36 +++++++++++-------- .../evmap/fragment/FilterProfilesFragment.kt | 22 ++++++++---- .../vonforst/evmap/fragment/MapFragment.kt | 20 +++++++---- .../fragment/preference/AboutFragment.kt | 21 +++++++++-- .../preference/BaseSettingsFragment.kt | 33 +++++++++++++---- .../preference/ChargepriceSettingsFragment.kt | 2 ++ .../preference/DataSettingsFragment.kt | 2 ++ .../fragment/preference/SettingsFragment.kt | 1 + .../fragment/preference/UiSettingsFragment.kt | 2 ++ app/src/main/res/layout/activity_maps.xml | 2 +- .../res/layout/fragment_filter_profiles.xml | 2 +- app/src/main/res/values/styles.xml | 7 ++++ 18 files changed, 164 insertions(+), 69 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c907733b..b42a305a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -115,7 +115,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.core:core-splashscreen:1.0.0-alpha02' implementation "androidx.activity:activity-ktx:1.4.0" - implementation "androidx.fragment:fragment-ktx:1.3.6" + implementation "androidx.fragment:fragment-ktx:1.4.0" implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.preference:preference-ktx:1.1.1' implementation 'com.google.android.material:material:1.5.0-rc01' diff --git a/app/src/foss/java/net/vonforst/evmap/fragment/DonateFragment.kt b/app/src/foss/java/net/vonforst/evmap/fragment/DonateFragment.kt index a1e49247..e30d344d 100644 --- a/app/src/foss/java/net/vonforst/evmap/fragment/DonateFragment.kt +++ b/app/src/foss/java/net/vonforst/evmap/fragment/DonateFragment.kt @@ -15,6 +15,12 @@ import net.vonforst.evmap.databinding.FragmentDonateBinding class DonateFragment : Fragment() { private lateinit var binding: FragmentDonateBinding + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -27,16 +33,13 @@ class DonateFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { (requireActivity() as AppCompatActivity).setSupportActionBar(binding.toolbar) - binding.btnDonate.setOnClickListener { - (activity as? MapsActivity)?.openUrl(getString(R.string.paypal_link)) - } - } - - override fun onResume() { - super.onResume() binding.toolbar.setupWithNavController( findNavController(), (requireActivity() as MapsActivity).appBarConfiguration ) + + binding.btnDonate.setOnClickListener { + (activity as? MapsActivity)?.openUrl(getString(R.string.paypal_link)) + } } } \ No newline at end of file diff --git a/app/src/google/java/net/vonforst/evmap/fragment/DonateFragment.kt b/app/src/google/java/net/vonforst/evmap/fragment/DonateFragment.kt index e0fc2d0f..aed4ff13 100644 --- a/app/src/google/java/net/vonforst/evmap/fragment/DonateFragment.kt +++ b/app/src/google/java/net/vonforst/evmap/fragment/DonateFragment.kt @@ -12,7 +12,9 @@ import androidx.lifecycle.Observer import androidx.navigation.fragment.findNavController import androidx.navigation.ui.setupWithNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.color.MaterialColors import com.google.android.material.snackbar.Snackbar +import com.google.android.material.transition.MaterialSharedAxis import net.vonforst.evmap.MapsActivity import net.vonforst.evmap.R import net.vonforst.evmap.adapter.DonationAdapter @@ -23,6 +25,12 @@ class DonateFragment : Fragment() { private lateinit var binding: FragmentDonateBinding private val vm: DonateViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -31,12 +39,18 @@ class DonateFragment : Fragment() { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_donate, container, false) binding.lifecycleOwner = this binding.vm = vm + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { (requireActivity() as AppCompatActivity).setSupportActionBar(binding.toolbar) + binding.toolbar.setupWithNavController( + findNavController(), + (requireActivity() as MapsActivity).appBarConfiguration + ) + binding.productsList.apply { adapter = DonationAdapter().apply { onClickListener = { @@ -56,13 +70,8 @@ class DonateFragment : Fragment() { vm.purchaseFailed.observe(viewLifecycleOwner, Observer { Snackbar.make(view, R.string.donation_failed, Snackbar.LENGTH_LONG).show() }) - } - override fun onResume() { - super.onResume() - binding.toolbar.setupWithNavController( - findNavController(), - (requireActivity() as MapsActivity).appBarConfiguration - ) + // Workaround for AndroidX bug: https://github.com/material-components/material-components-android/issues/1984 + view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.windowBackground)) } } \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt index 7fa83aa9..2cba305e 100644 --- a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt +++ b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt @@ -19,7 +19,6 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.navigation.NavController -import androidx.navigation.findNavController import androidx.navigation.fragment.FragmentNavigator import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupWithNavController @@ -28,8 +27,10 @@ import androidx.preference.PreferenceFragmentCompat import com.car2go.maps.model.LatLng import com.google.android.material.navigation.NavigationView import com.google.android.material.snackbar.Snackbar +import com.google.android.material.transition.MaterialSharedAxis import net.vonforst.evmap.fragment.MapFragmentArgs import net.vonforst.evmap.model.ChargeLocation +import net.vonforst.evmap.navigation.NavHostFragment import net.vonforst.evmap.storage.PreferenceDataSource import net.vonforst.evmap.utils.LocaleContextWrapper import net.vonforst.evmap.utils.getLocationFromIntent @@ -66,8 +67,6 @@ class MapsActivity : AppCompatActivity(), setContentView(R.layout.activity_maps) - navController = findNavController(R.id.nav_host_fragment) - val navGraph = navController.navInflater.inflate(R.navigation.nav_graph) appBarConfiguration = AppBarConfiguration( setOf( R.id.map, @@ -77,6 +76,10 @@ class MapsActivity : AppCompatActivity(), ), findViewById(R.id.drawer_layout) ) + val navHostFragment = + supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment + navController = navHostFragment.navController + val navGraph = navController.navInflater.inflate(R.navigation.nav_graph) val navView = findViewById(R.id.nav_view) navView.setupWithNavController(navController) @@ -233,6 +236,9 @@ class MapsActivity : AppCompatActivity(), caller: PreferenceFragmentCompat, pref: Preference ): Boolean { + caller.exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + caller.reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + // Identify the Navigation Destination val navDestination = navController.graph .find { target -> target is FragmentNavigator.Destination && pref.fragment == target.className } diff --git a/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt index 60f964f3..78fafa71 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt @@ -82,6 +82,11 @@ class ChargepriceFragment : DialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.toolbar.setupWithNavController( + findNavController(), + (requireActivity() as MapsActivity).appBarConfiguration + ) + val fragmentArgs: ChargepriceFragmentArgs by navArgs() val charger = fragmentArgs.charger val dataSource = fragmentArgs.dataSource @@ -211,12 +216,4 @@ class ChargepriceFragment : DialogFragment() { } } - override fun onResume() { - super.onResume() - binding.toolbar.setupWithNavController( - findNavController(), - (requireActivity() as MapsActivity).appBarConfiguration - ) - } - } \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt index 13a1642b..81368910 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt @@ -17,7 +17,9 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.car2go.maps.model.LatLng +import com.google.android.material.color.MaterialColors import com.google.android.material.snackbar.Snackbar +import com.google.android.material.transition.MaterialFadeThrough import com.mapzen.android.lost.api.LocationServices import com.mapzen.android.lost.api.LostApiClient import net.vonforst.evmap.MapsActivity @@ -51,6 +53,9 @@ class FavoritesFragment : Fragment(), LostApiClient.ConnectionCallbacks { super.onCreate(savedInstanceState) locationClient = LostApiClient.Builder(requireContext()) .addConnectionCallbacks(this).build() + + enterTransition = MaterialFadeThrough() + exitTransition = MaterialFadeThrough() } override fun onCreateView( @@ -70,6 +75,13 @@ class FavoritesFragment : Fragment(), LostApiClient.ConnectionCallbacks { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + // Workaround for AndroidX bug: https://github.com/material-components/material-components-android/issues/1984 + view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.windowBackground)) + + binding.toolbar.setupWithNavController( + findNavController(), + (requireActivity() as MapsActivity).appBarConfiguration + ) adapter = FavoritesAdapter(onDelete = { delete(it.charger) @@ -254,9 +266,5 @@ class FavoritesFragment : Fragment(), LostApiClient.ConnectionCallbacks { override fun onResume() { super.onResume() - binding.toolbar.setupWithNavController( - findNavController(), - (requireActivity() as MapsActivity).appBarConfiguration - ) } } \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt index b4f7217c..1e93c995 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt @@ -11,6 +11,8 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.ui.setupWithNavController import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.color.MaterialColors +import com.google.android.material.transition.MaterialSharedAxis import kotlinx.coroutines.launch import net.vonforst.evmap.MapsActivity import net.vonforst.evmap.R @@ -24,6 +26,12 @@ class FilterFragment : Fragment() { private lateinit var binding: FragmentFilterBinding private val vm: FilterViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -43,6 +51,17 @@ class FilterFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { (requireActivity() as AppCompatActivity).setSupportActionBar(binding.toolbar) + binding.toolbar.setupWithNavController( + findNavController(), + (requireActivity() as MapsActivity).appBarConfiguration + ) + + vm.filterProfile.observe(viewLifecycleOwner) { + if (it != null) { + binding.toolbar.title = getString(R.string.edit_filter_profile, it.name) + } + } + binding.filtersList.apply { adapter = FiltersAdapter() layoutManager = @@ -57,6 +76,9 @@ class FilterFragment : Fragment() { binding.toolbar.setNavigationOnClickListener { findNavController().popBackStack() } + + // Workaround for AndroidX bug: https://github.com/material-components/material-components-android/issues/1984 + view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.windowBackground)) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -108,18 +130,4 @@ class FilterFragment : Fragment() { } } } - - override fun onResume() { - super.onResume() - binding.toolbar.setupWithNavController( - findNavController(), - (requireActivity() as MapsActivity).appBarConfiguration - ) - - vm.filterProfile.observe(viewLifecycleOwner) { - if (it != null) { - binding.toolbar.title = getString(R.string.edit_filter_profile, it.name) - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt index 6187b30b..4c432170 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt @@ -17,7 +17,9 @@ import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.color.MaterialColors import com.google.android.material.snackbar.Snackbar +import com.google.android.material.transition.MaterialSharedAxis import kotlinx.coroutines.launch import net.vonforst.evmap.MapsActivity import net.vonforst.evmap.R @@ -43,6 +45,12 @@ class FilterProfilesFragment : Fragment() { private var deleteSnackbar: Snackbar? = null private var toDelete: FilterProfile? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -58,6 +66,11 @@ class FilterProfilesFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { (requireActivity() as AppCompatActivity).setSupportActionBar(binding.toolbar) + binding.toolbar.setupWithNavController( + findNavController(), + (requireActivity() as MapsActivity).appBarConfiguration + ) + touchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback( ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT or ItemTouchHelper.LEFT @@ -201,14 +214,9 @@ class FilterProfilesFragment : Fragment() { binding.toolbar.setNavigationOnClickListener { findNavController().popBackStack() } - } - override fun onResume() { - super.onResume() - binding.toolbar.setupWithNavController( - findNavController(), - (requireActivity() as MapsActivity).appBarConfiguration - ) + // Workaround for AndroidX bug: https://github.com/material-components/material-components-android/issues/1984 + view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.windowBackground)) } fun delete(fp: FilterProfile) { diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt index d36d9139..27000391 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -53,6 +53,8 @@ import com.car2go.maps.model.MarkerOptions import com.google.android.material.snackbar.Snackbar import com.google.android.material.transition.MaterialArcMotion import com.google.android.material.transition.MaterialContainerTransform +import com.google.android.material.transition.MaterialFadeThrough +import com.google.android.material.transition.MaterialSharedAxis import com.mahc.custombottomsheetbehavior.BottomSheetBehaviorGoogleMapsLike import com.mahc.custombottomsheetbehavior.BottomSheetBehaviorGoogleMapsLike.STATE_COLLAPSED import com.mahc.custombottomsheetbehavior.BottomSheetBehaviorGoogleMapsLike.STATE_HIDDEN @@ -147,6 +149,9 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac .build() locationClient.connect() clusterIconGenerator = ClusterIconGenerator(requireContext()) + + enterTransition = MaterialFadeThrough() + exitTransition = MaterialFadeThrough() } override fun onCreateView( @@ -238,6 +243,11 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac setupAdapters() (activity as? MapsActivity)?.setSupportActionBar(binding.toolbar) + binding.toolbar.setupWithNavController( + findNavController(), + (requireActivity() as MapsActivity).appBarConfiguration + ) + if (prefs.appStartCounter > 5 && !prefs.opensourceDonationsDialogShown) { try { findNavController().navigate(R.id.action_map_to_opensource_donations) @@ -287,12 +297,6 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac val hostActivity = activity as? MapsActivity ?: return hostActivity.fragmentCallback = this - val navController = findNavController() - binding.toolbar.setupWithNavController( - navController, - (requireActivity() as MapsActivity).appBarConfiguration - ) - vm.reloadPrefs() if (requestingLocationUpdates && requireContext().checkAnyLocationPermission() && locationClient.isConnected @@ -1115,6 +1119,8 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac popup.setOnMenuItemClickListener { when (it.itemId) { R.id.menu_edit_filters -> { + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) lifecycleScope.launch { vm.copyFiltersToCustom() requireView().findNavController().navigate( @@ -1124,6 +1130,8 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac true } R.id.menu_manage_filter_profiles -> { + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) requireView().findNavController().navigate( R.id.action_map_to_filterProfilesFragment ) diff --git a/app/src/main/java/net/vonforst/evmap/fragment/preference/AboutFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/preference/AboutFragment.kt index a30d8163..cf353620 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/preference/AboutFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/preference/AboutFragment.kt @@ -1,11 +1,15 @@ package net.vonforst.evmap.fragment.preference import android.os.Bundle +import android.view.View import androidx.appcompat.widget.Toolbar import androidx.navigation.fragment.findNavController import androidx.navigation.ui.setupWithNavController import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import com.google.android.material.color.MaterialColors +import com.google.android.material.transition.MaterialFadeThrough +import com.google.android.material.transition.MaterialSharedAxis import com.mikepenz.aboutlibraries.LibsBuilder import net.vonforst.evmap.BuildConfig import net.vonforst.evmap.MapsActivity @@ -13,14 +17,23 @@ import net.vonforst.evmap.R class AboutFragment : PreferenceFragmentCompat() { - override fun onResume() { - super.onResume() - val toolbar = requireView().findViewById(R.id.toolbar) as Toolbar + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialFadeThrough() + exitTransition = MaterialFadeThrough() + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val toolbar = view.findViewById(R.id.toolbar) toolbar.setupWithNavController( findNavController(), (requireActivity() as MapsActivity).appBarConfiguration ) + + // Workaround for AndroidX bug: https://github.com/material-components/material-components-android/issues/1984 + view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.windowBackground)) } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -54,6 +67,8 @@ class AboutFragment : PreferenceFragmentCompat() { true } "donate" -> { + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) findNavController().navigate(R.id.action_about_to_donateFragment) true } diff --git a/app/src/main/java/net/vonforst/evmap/fragment/preference/BaseSettingsFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/preference/BaseSettingsFragment.kt index 69ba3de6..c8e31728 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/preference/BaseSettingsFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/preference/BaseSettingsFragment.kt @@ -7,6 +7,9 @@ import androidx.appcompat.widget.Toolbar import androidx.navigation.fragment.findNavController import androidx.navigation.ui.setupWithNavController import androidx.preference.PreferenceFragmentCompat +import com.google.android.material.color.MaterialColors +import com.google.android.material.transition.MaterialFadeThrough +import com.google.android.material.transition.MaterialSharedAxis import net.vonforst.evmap.MapsActivity import net.vonforst.evmap.R import net.vonforst.evmap.storage.PreferenceDataSource @@ -14,22 +17,38 @@ import net.vonforst.evmap.storage.PreferenceDataSource abstract class BaseSettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { protected lateinit var prefs: PreferenceDataSource + protected abstract val isTopLevel: Boolean + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + if (isTopLevel) { + enterTransition = MaterialFadeThrough() + exitTransition = MaterialFadeThrough() + } else { + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + } + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + val toolbar = view.findViewById(R.id.toolbar) + toolbar.setupWithNavController( + findNavController(), + (requireActivity() as MapsActivity).appBarConfiguration + ) + prefs = PreferenceDataSource(requireContext()) + + // Workaround for AndroidX bug: https://github.com/material-components/material-components-android/issues/1984 + view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.windowBackground)) } override fun onResume() { super.onResume() preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this) - - val navController = findNavController() - val toolbar = requireView().findViewById(R.id.toolbar) as Toolbar - toolbar.setupWithNavController( - navController, - (requireActivity() as MapsActivity).appBarConfiguration - ) } override fun onPause() { diff --git a/app/src/main/java/net/vonforst/evmap/fragment/preference/ChargepriceSettingsFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/preference/ChargepriceSettingsFragment.kt index 0da81165..c07b0f08 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/preference/ChargepriceSettingsFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/preference/ChargepriceSettingsFragment.kt @@ -10,6 +10,8 @@ import net.vonforst.evmap.viewmodel.SettingsViewModel import net.vonforst.evmap.viewmodel.viewModelFactory class ChargepriceSettingsFragment : BaseSettingsFragment() { + override val isTopLevel = false + private val vm: SettingsViewModel by viewModels(factoryProducer = { viewModelFactory { SettingsViewModel( diff --git a/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt index edb2c6d7..aa0983b9 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt @@ -11,6 +11,8 @@ import net.vonforst.evmap.viewmodel.SettingsViewModel import net.vonforst.evmap.viewmodel.viewModelFactory class DataSettingsFragment : BaseSettingsFragment() { + override val isTopLevel = false + private val vm: SettingsViewModel by viewModels(factoryProducer = { viewModelFactory { SettingsViewModel( diff --git a/app/src/main/java/net/vonforst/evmap/fragment/preference/SettingsFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/preference/SettingsFragment.kt index 3302a080..7cd188ba 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/preference/SettingsFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/preference/SettingsFragment.kt @@ -7,6 +7,7 @@ import net.vonforst.evmap.R class SettingsFragment : BaseSettingsFragment() { + override val isTopLevel = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/net/vonforst/evmap/fragment/preference/UiSettingsFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/preference/UiSettingsFragment.kt index 2cefafc7..5c3ef343 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/preference/UiSettingsFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/preference/UiSettingsFragment.kt @@ -6,6 +6,8 @@ import net.vonforst.evmap.R import net.vonforst.evmap.ui.updateNightMode class UiSettingsFragment : BaseSettingsFragment() { + override val isTopLevel = false + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.settings_ui, rootKey) } diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml index bcbc7864..578ae26a 100644 --- a/app/src/main/res/layout/activity_maps.xml +++ b/app/src/main/res/layout/activity_maps.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3160740f..aac428df 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -25,6 +25,13 @@ @color/background 999 @style/AppTheme + + + @style/AppTheme.Preference + + com.google.android.material.theme.MaterialComponentsViewInflater +