android: Switch from a colored status bar to a custom view
Allows for smoother transitions with the search bar
This commit is contained in:
		| @@ -87,13 +87,6 @@ class OptionsFragment : Fragment() { | |||||||
|             adapter = HomeOptionAdapter(requireActivity() as AppCompatActivity, optionsList) |             adapter = HomeOptionAdapter(requireActivity() as AppCompatActivity, optionsList) | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         requireActivity().window.statusBarColor = ThemeHelper.getColorWithOpacity( |  | ||||||
|             MaterialColors.getColor( |  | ||||||
|                 binding.root, |  | ||||||
|                 R.attr.colorSurface |  | ||||||
|             ), ThemeHelper.SYSTEM_BAR_ALPHA |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         setInsets() |         setInsets() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,7 +9,6 @@ import android.view.View | |||||||
| import android.view.ViewGroup | import android.view.ViewGroup | ||||||
| import androidx.activity.OnBackPressedCallback | import androidx.activity.OnBackPressedCallback | ||||||
| import androidx.appcompat.app.AppCompatActivity | import androidx.appcompat.app.AppCompatActivity | ||||||
| import androidx.core.content.ContextCompat |  | ||||||
| import androidx.core.view.ViewCompat | import androidx.core.view.ViewCompat | ||||||
| import androidx.core.view.WindowInsetsCompat | import androidx.core.view.WindowInsetsCompat | ||||||
| import androidx.core.view.updatePadding | import androidx.core.view.updatePadding | ||||||
| @@ -27,7 +26,6 @@ import org.yuzu.yuzu_emu.layout.AutofitGridLayoutManager | |||||||
| import org.yuzu.yuzu_emu.model.Game | import org.yuzu.yuzu_emu.model.Game | ||||||
| import org.yuzu.yuzu_emu.model.GamesViewModel | import org.yuzu.yuzu_emu.model.GamesViewModel | ||||||
| import org.yuzu.yuzu_emu.model.HomeViewModel | import org.yuzu.yuzu_emu.model.HomeViewModel | ||||||
| import org.yuzu.yuzu_emu.utils.ThemeHelper |  | ||||||
| import java.util.Locale | import java.util.Locale | ||||||
|  |  | ||||||
| class GamesFragment : Fragment() { | class GamesFragment : Fragment() { | ||||||
| @@ -145,21 +143,9 @@ class GamesFragment : Fragment() { | |||||||
|         _binding = null |         _binding = null | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun searchShown() { |     private fun searchShown() = homeViewModel.setNavigationVisible(false) | ||||||
|         homeViewModel.setNavigationVisible(false) |  | ||||||
|         requireActivity().window.statusBarColor = |  | ||||||
|             ContextCompat.getColor(requireContext(), android.R.color.transparent) |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private fun searchHidden() { |     private fun searchHidden() = homeViewModel.setNavigationVisible(true) | ||||||
|         homeViewModel.setNavigationVisible(true) |  | ||||||
|         requireActivity().window.statusBarColor = ThemeHelper.getColorWithOpacity( |  | ||||||
|             MaterialColors.getColor( |  | ||||||
|                 binding.root, |  | ||||||
|                 R.attr.colorSurface |  | ||||||
|             ), ThemeHelper.SYSTEM_BAR_ALPHA |  | ||||||
|         ) |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private inner class ScoredGame(val score: Double, val item: Game) |     private inner class ScoredGame(val score: Double, val item: Game) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import android.view.ViewGroup.MarginLayoutParams | |||||||
| import android.view.animation.PathInterpolator | import android.view.animation.PathInterpolator | ||||||
| import androidx.activity.viewModels | import androidx.activity.viewModels | ||||||
| import androidx.appcompat.app.AppCompatActivity | import androidx.appcompat.app.AppCompatActivity | ||||||
|  | import androidx.core.content.ContextCompat | ||||||
| import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen | import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen | ||||||
| import androidx.core.view.ViewCompat | import androidx.core.view.ViewCompat | ||||||
| import androidx.core.view.WindowCompat | import androidx.core.view.WindowCompat | ||||||
| @@ -41,6 +42,8 @@ class MainActivity : AppCompatActivity() { | |||||||
|  |  | ||||||
|         WindowCompat.setDecorFitsSystemWindows(window, false) |         WindowCompat.setDecorFitsSystemWindows(window, false) | ||||||
|  |  | ||||||
|  |         window.statusBarColor = | ||||||
|  |             ContextCompat.getColor(applicationContext, android.R.color.transparent) | ||||||
|         ThemeHelper.setNavigationBarColor( |         ThemeHelper.setNavigationBarColor( | ||||||
|             this, |             this, | ||||||
|             ElevationOverlayProvider(binding.navigationBar.context).compositeOverlay( |             ElevationOverlayProvider(binding.navigationBar.context).compositeOverlay( | ||||||
| @@ -80,6 +83,25 @@ class MainActivity : AppCompatActivity() { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun showNavigation(visible: Boolean) { |     private fun showNavigation(visible: Boolean) { | ||||||
|  |         // TODO: This should be decoupled from navigation in the future | ||||||
|  |         binding.statusBarShade.animate().apply { | ||||||
|  |             if (visible) { | ||||||
|  |                 binding.statusBarShade.visibility = View.VISIBLE | ||||||
|  |                 binding.statusBarShade.translationY = binding.statusBarShade.height.toFloat() * -2 | ||||||
|  |                 duration = 300 | ||||||
|  |                 translationY(0f) | ||||||
|  |                 interpolator = PathInterpolator(0.05f, 0.7f, 0.1f, 1f) | ||||||
|  |             } else { | ||||||
|  |                 duration = 300 | ||||||
|  |                 translationY(binding.navigationBar.height.toFloat() * -2) | ||||||
|  |                 interpolator = PathInterpolator(0.3f, 0f, 0.8f, 0.15f) | ||||||
|  |             } | ||||||
|  |         }.withEndAction { | ||||||
|  |             if (!visible) { | ||||||
|  |                 binding.statusBarShade.visibility = View.INVISIBLE | ||||||
|  |             } | ||||||
|  |         }.start() | ||||||
|  |  | ||||||
|         binding.navigationBar.animate().apply { |         binding.navigationBar.animate().apply { | ||||||
|             if (visible) { |             if (visible) { | ||||||
|                 binding.navigationBar.visibility = View.VISIBLE |                 binding.navigationBar.visibility = View.VISIBLE | ||||||
|   | |||||||
| @@ -29,4 +29,15 @@ | |||||||
|         app:layout_constraintRight_toRightOf="parent" |         app:layout_constraintRight_toRightOf="parent" | ||||||
|         app:menu="@menu/menu_navigation" /> |         app:menu="@menu/menu_navigation" /> | ||||||
|  |  | ||||||
|  |     <View | ||||||
|  |         android:id="@+id/status_bar_shade" | ||||||
|  |         android:layout_width="0dp" | ||||||
|  |         android:layout_height="1px" | ||||||
|  |         android:background="@android:color/transparent" | ||||||
|  |         android:clickable="false" | ||||||
|  |         android:focusable="false" | ||||||
|  |         app:layout_constraintTop_toTopOf="parent" | ||||||
|  |         app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |         app:layout_constraintStart_toStartOf="parent" /> | ||||||
|  |  | ||||||
| </androidx.constraintlayout.widget.ConstraintLayout> | </androidx.constraintlayout.widget.ConstraintLayout> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user