android: Switch from a colored status bar to a custom view

Allows for smoother transitions with the search bar
This commit is contained in:
Charles Lombardo 2023-04-11 21:08:37 -04:00 committed by bunnei
parent 3f2b832371
commit 921e6dddcc
4 changed files with 35 additions and 23 deletions

View File

@ -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()
} }

View File

@ -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)

View File

@ -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

View File

@ -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>