Fix: Adjust layout padding to respect display cutouts

This commit is contained in:
cmclark00 2025-04-01 11:47:10 -04:00
parent 501e5b37fc
commit 6044b0d93b
8 changed files with 176 additions and 84 deletions

View file

@ -45,6 +45,10 @@ import android.widget.ImageButton
import android.graphics.drawable.GradientDrawable
import android.widget.TextView
import android.widget.Switch
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import android.view.ViewGroup
import androidx.core.view.updatePadding
class MainActivity : AppCompatActivity(),
GamepadController.GamepadConnectionListener,
@ -135,6 +139,65 @@ class MainActivity : AppCompatActivity(),
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// Store initial padding values before applying insets
val initialPausePadding = Rect(binding.pauseContainer.paddingLeft, binding.pauseContainer.paddingTop,
binding.pauseContainer.paddingRight, binding.pauseContainer.paddingBottom)
val initialGameOverPadding = Rect(binding.gameOverContainer.paddingLeft, binding.gameOverContainer.paddingTop,
binding.gameOverContainer.paddingRight, binding.gameOverContainer.paddingBottom)
val initialCustomizationPadding = Rect(binding.customizationContainer.paddingLeft, binding.customizationContainer.paddingTop,
binding.customizationContainer.paddingRight, binding.customizationContainer.paddingBottom)
val initialProgressionPadding = Rect(binding.progressionScreen.paddingLeft, binding.progressionScreen.paddingTop,
binding.progressionScreen.paddingRight, binding.progressionScreen.paddingBottom)
// Apply insets to the pause container
ViewCompat.setOnApplyWindowInsetsListener(binding.pauseContainer) { view, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
// Apply insets by adding to initial padding
view.updatePadding(
left = initialPausePadding.left + insets.left,
top = initialPausePadding.top + insets.top,
right = initialPausePadding.right + insets.right,
bottom = initialPausePadding.bottom + insets.bottom
)
WindowInsetsCompat.CONSUMED
}
// Apply insets to the game over container
ViewCompat.setOnApplyWindowInsetsListener(binding.gameOverContainer) { view, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
view.updatePadding(
left = initialGameOverPadding.left + insets.left,
top = initialGameOverPadding.top + insets.top,
right = initialGameOverPadding.right + insets.right,
bottom = initialGameOverPadding.bottom + insets.bottom
)
WindowInsetsCompat.CONSUMED
}
// Apply insets to the customization container
ViewCompat.setOnApplyWindowInsetsListener(binding.customizationContainer) { view, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
view.updatePadding(
left = initialCustomizationPadding.left + insets.left,
top = initialCustomizationPadding.top + insets.top,
right = initialCustomizationPadding.right + insets.right,
bottom = initialCustomizationPadding.bottom + insets.bottom
)
WindowInsetsCompat.CONSUMED
}
// Apply insets to the progression screen
ViewCompat.setOnApplyWindowInsetsListener(binding.progressionScreen) { view, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
view.updatePadding(
left = initialProgressionPadding.left + insets.left,
top = initialProgressionPadding.top + insets.top,
right = initialProgressionPadding.right + insets.right,
bottom = initialProgressionPadding.bottom + insets.bottom
)
WindowInsetsCompat.CONSUMED
}
// Disable Android back gesture to prevent accidental app exits
disableAndroidBackGesture()