diff --git a/app/src/main/java/com/mintris/MainActivity.kt b/app/src/main/java/com/mintris/MainActivity.kt index c535adf..9ec72af 100644 --- a/app/src/main/java/com/mintris/MainActivity.kt +++ b/app/src/main/java/com/mintris/MainActivity.kt @@ -38,6 +38,11 @@ import android.widget.Toast import android.content.BroadcastReceiver import android.content.IntentFilter import android.app.AlertDialog +import android.graphics.drawable.ColorDrawable +import androidx.core.content.ContextCompat +import android.widget.Button +import android.widget.ScrollView +import android.widget.ImageButton class MainActivity : AppCompatActivity(), GamepadController.GamepadConnectionListener, @@ -61,6 +66,7 @@ class MainActivity : AppCompatActivity(), private lateinit var progressionScreen: ProgressionScreen private lateinit var themeSelector: ThemeSelector private lateinit var blockSkinSelector: BlockSkinSelector + private var pauseMenuScrollView: ScrollView? = null // Game state private var isSoundEnabled = true @@ -124,6 +130,7 @@ class MainActivity : AppCompatActivity(), progressionManager = PlayerProgressionManager(this) themeSelector = binding.themeSelector blockSkinSelector = binding.blockSkinSelector + pauseMenuScrollView = binding.pauseMenuScrollView // Initialize gamepad controller gamepadController = GamepadController(gameView) @@ -1227,6 +1234,14 @@ class MainActivity : AppCompatActivity(), item.alpha = if (i == index) 1.0f else 0.7f item.scaleX = if (i == index) 1.2f else 1.0f item.scaleY = if (i == index) 1.2f else 1.0f + // Add or remove border based on selection + if (item is Button) { + item.background = if (i == index) { + ContextCompat.getDrawable(this, R.drawable.menu_item_selected) + } else { + ColorDrawable(Color.TRANSPARENT) + } + } } } @@ -1237,6 +1252,7 @@ class MainActivity : AppCompatActivity(), if (pauseMenuItems.isEmpty()) return currentMenuSelection = (currentMenuSelection - 1 + pauseMenuItems.size) % pauseMenuItems.size highlightMenuItem(currentMenuSelection) + scrollToSelectedItem() gameHaptics.vibrateForPieceMove() } @@ -1247,8 +1263,30 @@ class MainActivity : AppCompatActivity(), if (pauseMenuItems.isEmpty()) return currentMenuSelection = (currentMenuSelection + 1) % pauseMenuItems.size highlightMenuItem(currentMenuSelection) + scrollToSelectedItem() gameHaptics.vibrateForPieceMove() } + + private fun scrollToSelectedItem() { + if (pauseMenuItems.isEmpty()) return + + val selectedItem = pauseMenuItems[currentMenuSelection] + val scrollView = pauseMenuScrollView ?: return + + // Calculate the item's position relative to the scroll view + val itemTop = selectedItem.top + val itemBottom = selectedItem.bottom + val scrollViewHeight = scrollView.height + + // If the item is partially or fully below the visible area, scroll down + if (itemBottom > scrollViewHeight) { + scrollView.smoothScrollTo(0, itemBottom - scrollViewHeight) + } + // If the item is partially or fully above the visible area, scroll up + else if (itemTop < 0) { + scrollView.smoothScrollTo(0, itemTop) + } + } /** * Activate the currently selected menu item diff --git a/app/src/main/res/drawable/menu_item_selected.xml b/app/src/main/res/drawable/menu_item_selected.xml new file mode 100644 index 0000000..3beb40d --- /dev/null +++ b/app/src/main/res/drawable/menu_item_selected.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 0e03b36..7630ab8 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -242,8 +242,12 @@ + android:layout_height="match_parent" + android:scrollbars="none" + android:overScrollMode="never" + android:fillViewport="true"> + + android:gravity="center" + android:layout_marginTop="16dp"> + android:fontFamily="sans-serif" />