From aa496ed4d381c70f84d49ab22b325f44ae57b5ce Mon Sep 17 00:00:00 2001 From: Link-AM Date: Sat, 7 Feb 2026 11:27:33 -0500 Subject: [PATCH 1/2] feat: add key event handling to pause/resume autoscroll with arrow keys --- .../chordreader2/views/AutoScrollView.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java b/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java index 63cf3ec..dd7a264 100644 --- a/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java +++ b/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java @@ -20,6 +20,7 @@ import android.animation.ObjectAnimator; import android.content.Context; import android.util.AttributeSet; +import android.view.KeyEvent; import android.view.MotionEvent; import android.widget.ScrollView; import android.widget.TextView; @@ -294,6 +295,45 @@ public void run() { return false; } + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + // Handle arrow keys to pause/resume autoscroll, just like touch events + int action = event.getAction(); + int keyCode = event.getKeyCode(); + + // Check if it's an arrow key + if (keyCode == KeyEvent.KEYCODE_DPAD_UP || + keyCode == KeyEvent.KEYCODE_DPAD_DOWN || + keyCode == KeyEvent.KEYCODE_DPAD_LEFT || + keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { + + if (action == KeyEvent.ACTION_DOWN) { + // Key pressed - pause autoscroll like touch down + this.isTouched = true; + if(this.isAutoScrollOn()) { + this.stopAutoScroll(); + } + } else if (action == KeyEvent.ACTION_UP) { + // Key released - resume autoscroll like touch up + this.isTouched = false; + if(this.isAutoScrollOn()) { + this.postDelayed(new Runnable() { + @Override + public void run() { + if(!AutoScrollView.this.isFlingActive() && + AutoScrollView.this.isAutoScrollOn() && + !AutoScrollView.this.isAutoScrollActive()) { + AutoScrollView.this.startAutoScroll(); + } + } + }, 100); + } + } + } + + return super.dispatchKeyEvent(event); + } + From 05b81e243847044b68a4bfd9f7e4f6683d1619cf Mon Sep 17 00:00:00 2001 From: Link-AM Date: Thu, 12 Feb 2026 13:11:38 -0500 Subject: [PATCH 2/2] Improve smoothscroll animation with autoscroll for manual scrolling with bluetooth control devices --- .../chordreader2/views/AutoScrollView.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java b/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java index dd7a264..01a27d9 100644 --- a/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java +++ b/app/src/main/java/org/hollowbamboo/chordreader2/views/AutoScrollView.java @@ -297,24 +297,31 @@ public void run() { @Override public boolean dispatchKeyEvent(KeyEvent event) { - // Handle arrow keys to pause/resume autoscroll, just like touch events + // Handle arrow keys with scrolling for bluetooth control devices (e.g. STOMP foot pedals) int action = event.getAction(); int keyCode = event.getKeyCode(); - // Check if it's an arrow key if (keyCode == KeyEvent.KEYCODE_DPAD_UP || - keyCode == KeyEvent.KEYCODE_DPAD_DOWN || - keyCode == KeyEvent.KEYCODE_DPAD_LEFT || - keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { + keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { if (action == KeyEvent.ACTION_DOWN) { - // Key pressed - pause autoscroll like touch down this.isTouched = true; if(this.isAutoScrollOn()) { this.stopAutoScroll(); } + + final int SCROLL_AMOUNT = 200; + if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { + smoothScrollBy(0, -SCROLL_AMOUNT); + } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { + smoothScrollBy(0, SCROLL_AMOUNT); + } + // Left/Right arrows do nothing + + return true; // Consume the event - prevent default behavior + } else if (action == KeyEvent.ACTION_UP) { - // Key released - resume autoscroll like touch up + // Key released - resume autoscroll after animation completes this.isTouched = false; if(this.isAutoScrollOn()) { this.postDelayed(new Runnable() { @@ -326,8 +333,9 @@ public void run() { AutoScrollView.this.startAutoScroll(); } } - }, 100); + }, 250); } + return true; } }