From c7d213c3eae4062d2aa0876b4de1c826fec41c8e Mon Sep 17 00:00:00 2001 From: lynxnb Date: Fri, 31 Mar 2023 20:16:42 +0200 Subject: [PATCH] Make the OSC edit panel collapsible The panel can now be closed to try out the buttons. --- .../input/onscreen/OnScreenControllerView.kt | 1 + .../input/onscreen/OnScreenEditActivity.kt | 50 ++++++++++++++++++- .../res/layout/on_screen_edit_activity.xml | 3 +- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/emu/skyline/input/onscreen/OnScreenControllerView.kt b/app/src/main/java/emu/skyline/input/onscreen/OnScreenControllerView.kt index fcc0a0ac..59214c6f 100644 --- a/app/src/main/java/emu/skyline/input/onscreen/OnScreenControllerView.kt +++ b/app/src/main/java/emu/skyline/input/onscreen/OnScreenControllerView.kt @@ -303,6 +303,7 @@ class OnScreenControllerView @JvmOverloads constructor(context : Context, attrs selectAllButtons() editInfo.isEditing = isEdit setOnTouchListener(if (isEdit) editingTouchHandler else playingTouchHandler) + invalidate() } fun selectAllButtons() { diff --git a/app/src/main/java/emu/skyline/input/onscreen/OnScreenEditActivity.kt b/app/src/main/java/emu/skyline/input/onscreen/OnScreenEditActivity.kt index a0709d3f..ab3fd863 100644 --- a/app/src/main/java/emu/skyline/input/onscreen/OnScreenEditActivity.kt +++ b/app/src/main/java/emu/skyline/input/onscreen/OnScreenEditActivity.kt @@ -6,12 +6,13 @@ package emu.skyline.input.onscreen import android.annotation.SuppressLint +import android.graphics.PointF import android.os.Build import android.os.Bundle import android.os.Vibrator import android.os.VibratorManager +import android.util.TypedValue import android.view.* -import android.view.View.OnTouchListener import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isGone import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -132,6 +133,7 @@ class OnScreenEditActivity : AppCompatActivity() { binding.resetButton.setOnClickListener { resetAction() } binding.dragHandle.setOnTouchListener(dragPanelListener) + binding.closeButton.setOnClickListener { togglePanelVisibility() } binding.onScreenControllerView.setEditMode(true) } @@ -187,11 +189,55 @@ class OnScreenEditActivity : AppCompatActivity() { } @SuppressLint("ClickableViewAccessibility") - private val dragPanelListener = OnTouchListener { view : View, event : MotionEvent -> + private val dragPanelListener = { view : View, event : MotionEvent -> if (event.action == MotionEvent.ACTION_MOVE) { binding.controlPanel.x = event.rawX - binding.controlPanel.width / 2 binding.controlPanel.y = event.rawY - view.height / 2 } true } + + private var isPanelVisible = true + private val openPanelTranslation = PointF() + + private fun togglePanelVisibility() { + isPanelVisible = !isPanelVisible + binding.content.isGone = !isPanelVisible + binding.dragHandle.isGone = !isPanelVisible + + binding.closeButton.apply { + if (isPanelVisible) { + animate().rotation(0f).start() + + val buttonSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32f, resources.displayMetrics).toInt() // 32dp + layoutParams.width = buttonSize + layoutParams.height = buttonSize + } else { + animate().rotation(-225f).start() + + val buttonSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40f, resources.displayMetrics).toInt() // 40dp + layoutParams.width = buttonSize + layoutParams.height = buttonSize + } + } + + if (!isPanelVisible) { + // Save the current open position to restore later + openPanelTranslation.set(binding.controlPanel.translationX, binding.controlPanel.translationY) + + // Animate to the closed position + binding.controlPanel.animate() + .translationX(0f) + .translationY(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, resources.displayMetrics)) // 12dp + .start() + } else { + // Animate to the previously saved open position + binding.controlPanel.animate() + .translationX(openPanelTranslation.x) + .translationY(openPanelTranslation.y) + .start() + } + + binding.onScreenControllerView.setEditMode(isPanelVisible) + } } diff --git a/app/src/main/res/layout/on_screen_edit_activity.xml b/app/src/main/res/layout/on_screen_edit_activity.xml index 2ce1a393..9b30b942 100644 --- a/app/src/main/res/layout/on_screen_edit_activity.xml +++ b/app/src/main/res/layout/on_screen_edit_activity.xml @@ -54,7 +54,8 @@ android:layout_width="32dp" android:layout_height="32dp" android:layout_gravity="end" - android:padding="2dp" + android:padding="0dp" + app:iconGravity="textStart" app:icon="@drawable/ic_close" app:iconTint="?attr/colorOnSurfaceVariant" tools:ignore="ContentDescription,SpeakableTextPresentCheck,TouchTargetSizeCheck" />