From 2da2444758512fc52f61a59fd5d6ee415369a381 Mon Sep 17 00:00:00 2001 From: cmclark00 Date: Thu, 27 Mar 2025 18:23:32 -0400 Subject: [PATCH] Fix accessibility warning in TitleScreen by adding performClick override and proper touch handling --- .../main/java/com/mintris/game/TitleScreen.kt | 54 +++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/mintris/game/TitleScreen.kt b/app/src/main/java/com/mintris/game/TitleScreen.kt index 379caaf..8ee2523 100644 --- a/app/src/main/java/com/mintris/game/TitleScreen.kt +++ b/app/src/main/java/com/mintris/game/TitleScreen.kt @@ -12,6 +12,7 @@ import java.util.Random import android.util.Log import com.mintris.model.HighScoreManager import com.mintris.model.HighScore +import kotlin.math.abs class TitleScreen @JvmOverloads constructor( context: Context, @@ -30,6 +31,13 @@ class TitleScreen @JvmOverloads constructor( private var height = 0 private val tetrominosToAdd = mutableListOf() + // Touch handling variables + private var startX = 0f + private var startY = 0f + private var lastTouchX = 0f + private var lastTouchY = 0f + private val maxTapMovement = 20f // Maximum movement allowed for a tap (in pixels) + // Callback for when the user touches the screen var onStartGame: (() -> Unit)? = null @@ -274,10 +282,50 @@ class TitleScreen @JvmOverloads constructor( } override fun onTouchEvent(event: MotionEvent): Boolean { - if (event.action == MotionEvent.ACTION_DOWN) { - onStartGame?.invoke() - return true + when (event.action) { + MotionEvent.ACTION_DOWN -> { + startX = event.x + startY = event.y + lastTouchX = event.x + lastTouchY = event.y + return true + } + MotionEvent.ACTION_MOVE -> { + val deltaX = event.x - lastTouchX + val deltaY = event.y - lastTouchY + + // Update tetromino positions + for (tetromino in tetrominos) { + tetromino.x += deltaX * 0.5f + tetromino.y += deltaY * 0.5f + } + + lastTouchX = event.x + lastTouchY = event.y + invalidate() + return true + } + MotionEvent.ACTION_UP -> { + val deltaX = event.x - startX + val deltaY = event.y - startY + + // If the movement was minimal, treat as a tap + if (abs(deltaX) < maxTapMovement && abs(deltaY) < maxTapMovement) { + performClick() + } + + return true + } } return super.onTouchEvent(event) } + + override fun performClick(): Boolean { + // Call the superclass's performClick + super.performClick() + + // Handle the click event + onStartGame?.invoke() + return true + } } \ No newline at end of file