mirror of
https://github.com/cmclark00/mintris.git
synced 2025-05-18 02:45:20 +01:00
Enhance back button handling in HighScoreEntryActivity and update vibration logic in MainActivity for better compatibility with Android versions. Implement edge-to-edge display adjustments for newer Android versions.
This commit is contained in:
parent
af54b735f9
commit
5952cac760
2 changed files with 52 additions and 19 deletions
|
@ -10,6 +10,7 @@ import com.pixelmintdrop.model.PlayerProgressionManager
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
import android.view.InputDevice
|
import android.view.InputDevice
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
|
|
||||||
class HighScoreEntryActivity : AppCompatActivity() {
|
class HighScoreEntryActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: HighScoreEntryBinding
|
private lateinit var binding: HighScoreEntryBinding
|
||||||
|
@ -26,6 +27,17 @@ class HighScoreEntryActivity : AppCompatActivity() {
|
||||||
binding = HighScoreEntryBinding.inflate(layoutInflater)
|
binding = HighScoreEntryBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
|
// Set up back button handling
|
||||||
|
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
// If they haven't saved yet, consider it a cancel
|
||||||
|
if (!hasSaved) {
|
||||||
|
setResult(Activity.RESULT_CANCELED)
|
||||||
|
}
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
highScoreManager = HighScoreManager(this)
|
highScoreManager = HighScoreManager(this)
|
||||||
progressionManager = PlayerProgressionManager(this)
|
progressionManager = PlayerProgressionManager(this)
|
||||||
|
|
||||||
|
@ -87,16 +99,6 @@ class HighScoreEntryActivity : AppCompatActivity() {
|
||||||
return (sources and InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD ||
|
return (sources and InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD ||
|
||||||
(sources and InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK
|
(sources and InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent accidental back button press from causing issues
|
|
||||||
override fun onBackPressed() {
|
|
||||||
super.onBackPressed()
|
|
||||||
// If they haven't saved yet, consider it a cancel
|
|
||||||
if (!hasSaved) {
|
|
||||||
setResult(Activity.RESULT_CANCELED)
|
|
||||||
}
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadThemePreference(): String {
|
private fun loadThemePreference(): String {
|
||||||
return progressionManager.getSelectedTheme()
|
return progressionManager.getSelectedTheme()
|
||||||
|
|
|
@ -6,6 +6,7 @@ import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.VibrationEffect
|
import android.os.VibrationEffect
|
||||||
import android.os.Vibrator
|
import android.os.Vibrator
|
||||||
|
import android.os.VibratorManager
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.HapticFeedbackConstants
|
import android.view.HapticFeedbackConstants
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
@ -490,6 +491,14 @@ class MainActivity : AppCompatActivity(),
|
||||||
|
|
||||||
// Enable edge-to-edge display
|
// Enable edge-to-edge display
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
|
// Use the WindowInsetsController for Android 11+ edge-to-edge display
|
||||||
|
window.insetsController?.let { controller ->
|
||||||
|
controller.hide(android.view.WindowInsets.Type.statusBars() or android.view.WindowInsets.Type.navigationBars())
|
||||||
|
controller.systemBarsBehavior = android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||||
|
}
|
||||||
|
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
// For Android 10, use the deprecated method
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
window.setDecorFitsSystemWindows(false)
|
window.setDecorFitsSystemWindows(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -897,8 +906,17 @@ class MainActivity : AppCompatActivity(),
|
||||||
* Trigger device vibration with predefined effect
|
* Trigger device vibration with predefined effect
|
||||||
*/
|
*/
|
||||||
private fun vibrate(effectId: Int) {
|
private fun vibrate(effectId: Int) {
|
||||||
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
vibrator.vibrate(VibrationEffect.createPredefined(effectId))
|
// For Android 12+ (API 31+)
|
||||||
|
val vibratorManager = getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
|
||||||
|
val vibrator = vibratorManager.defaultVibrator
|
||||||
|
vibrator.vibrate(VibrationEffect.createPredefined(effectId))
|
||||||
|
} else {
|
||||||
|
// For older Android versions
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
|
||||||
|
vibrator.vibrate(VibrationEffect.createPredefined(effectId))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateMusicToggleUI() {
|
private fun updateMusicToggleUI() {
|
||||||
|
@ -1202,13 +1220,26 @@ class MainActivity : AppCompatActivity(),
|
||||||
// Set the entire window to be excluded from the system gesture areas
|
// Set the entire window to be excluded from the system gesture areas
|
||||||
window.decorView.post {
|
window.decorView.post {
|
||||||
// Create a list of rectangles representing the edges of the screen to exclude from system gestures
|
// Create a list of rectangles representing the edges of the screen to exclude from system gestures
|
||||||
val gestureInsets = window.decorView.rootWindowInsets?.systemGestureInsets
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
if (gestureInsets != null) {
|
// Use the new API for Android 11+
|
||||||
val leftEdge = Rect(0, 0, 50, window.decorView.height)
|
window.decorView.rootWindowInsets?.let { insets ->
|
||||||
val rightEdge = Rect(window.decorView.width - 50, 0, window.decorView.width, window.decorView.height)
|
val leftEdge = Rect(0, 0, 50, window.decorView.height)
|
||||||
val bottomEdge = Rect(0, window.decorView.height - 50, window.decorView.width, window.decorView.height)
|
val rightEdge = Rect(window.decorView.width - 50, 0, window.decorView.width, window.decorView.height)
|
||||||
|
val bottomEdge = Rect(0, window.decorView.height - 50, window.decorView.width, window.decorView.height)
|
||||||
window.decorView.systemGestureExclusionRects = listOf(leftEdge, rightEdge, bottomEdge)
|
|
||||||
|
window.decorView.systemGestureExclusionRects = listOf(leftEdge, rightEdge, bottomEdge)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Use the deprecated API for Android 10
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
val gestureInsets = window.decorView.rootWindowInsets?.systemGestureInsets
|
||||||
|
if (gestureInsets != null) {
|
||||||
|
val leftEdge = Rect(0, 0, 50, window.decorView.height)
|
||||||
|
val rightEdge = Rect(window.decorView.width - 50, 0, window.decorView.width, window.decorView.height)
|
||||||
|
val bottomEdge = Rect(0, window.decorView.height - 50, window.decorView.width, window.decorView.height)
|
||||||
|
|
||||||
|
window.decorView.systemGestureExclusionRects = listOf(leftEdge, rightEdge, bottomEdge)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue