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

@ -11,6 +11,11 @@ import android.graphics.Color
import android.util.Log
import android.view.KeyEvent
import android.view.InputDevice
import android.graphics.Rect
import android.view.View
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
class HighScoresActivity : AppCompatActivity() {
private lateinit var binding: HighScoresBinding
@ -26,6 +31,20 @@ class HighScoresActivity : AppCompatActivity() {
binding = HighScoresBinding.inflate(layoutInflater)
setContentView(binding.root)
// Apply insets to the root view
val initialPadding = Rect(binding.root.paddingLeft, binding.root.paddingTop,
binding.root.paddingRight, binding.root.paddingBottom)
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
view.updatePadding(
left = initialPadding.left + insets.left,
top = initialPadding.top + insets.top,
right = initialPadding.right + insets.right,
bottom = initialPadding.bottom + insets.bottom
)
WindowInsetsCompat.CONSUMED
}
highScoreManager = HighScoreManager(this)
progressionManager = PlayerProgressionManager(this)

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

View file

@ -1,12 +1,17 @@
package com.pixelmintdrop
import android.graphics.Color
import android.graphics.Rect
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
import com.pixelmintdrop.databinding.ActivityStatsBinding
import com.pixelmintdrop.model.StatsManager
import com.pixelmintdrop.model.PlayerProgressionManager
import android.graphics.Color
import java.text.SimpleDateFormat
import java.util.*
@ -21,6 +26,20 @@ class StatsActivity : AppCompatActivity() {
binding = ActivityStatsBinding.inflate(layoutInflater)
setContentView(binding.root)
// Apply insets to the root view
val initialPadding = Rect(binding.root.paddingLeft, binding.root.paddingTop,
binding.root.paddingRight, binding.root.paddingBottom)
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
view.updatePadding(
left = initialPadding.left + insets.left,
top = initialPadding.top + insets.top,
right = initialPadding.right + insets.right,
bottom = initialPadding.bottom + insets.bottom
)
WindowInsetsCompat.CONSUMED
}
statsManager = StatsManager(this)
progressionManager = PlayerProgressionManager(this)