From 72116171ccd5634d2b2b125c790cb06385e73d32 Mon Sep 17 00:00:00 2001 From: Lukasz Kozakiewicz Date: Mon, 5 Feb 2018 16:11:17 +0100 Subject: [PATCH] Android: rework back button handling to catch also programmatic requests. --- .../native/java/JuceAppActivity.java | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/modules/juce_core/native/java/JuceAppActivity.java b/modules/juce_core/native/java/JuceAppActivity.java index a8f5fe3976..6e199bed63 100644 --- a/modules/juce_core/native/java/JuceAppActivity.java +++ b/modules/juce_core/native/java/JuceAppActivity.java @@ -238,6 +238,32 @@ public class JuceAppActivity extends $$JuceAppActivityBaseClass$$ { launchApp (getApplicationInfo().publicSourceDir, getApplicationInfo().dataDir); + } + + // Need to override this as the default implementation always finishes the activity. + @Override + public void onBackPressed() + { + ComponentPeerView focusedView = getViewWithFocusOrDefaultView(); + + if (focusedView == null) + return; + + focusedView.backButtonPressed(); + } + + private ComponentPeerView getViewWithFocusOrDefaultView() + { + for (int i = 0; i < viewHolder.getChildCount(); ++i) + { + if (viewHolder.getChildAt (i).hasFocus()) + return (ComponentPeerView) viewHolder.getChildAt (i); + } + + if (viewHolder.getChildCount() > 0) + return (ComponentPeerView) viewHolder.getChildAt (0); + + return null; } //============================================================================== @@ -675,7 +701,7 @@ public class JuceAppActivity extends $$JuceAppActivityBaseClass$$ //============================================================================== private native void handleKeyDown (long host, int keycode, int textchar); private native void handleKeyUp (long host, int keycode, int textchar); - private native void handleBackButton (long host); + private native void handleBackButton (long host); public void showKeyboard (String type) { @@ -693,6 +719,14 @@ public class JuceAppActivity extends $$JuceAppActivityBaseClass$$ imm.hideSoftInputFromWindow (getWindowToken(), 0); } } + } + + public void backButtonPressed() + { + if (host == 0) + return; + + handleBackButton (host); } @Override @@ -705,11 +739,11 @@ public class JuceAppActivity extends $$JuceAppActivityBaseClass$$ { case KeyEvent.KEYCODE_VOLUME_UP: case KeyEvent.KEYCODE_VOLUME_DOWN: - return super.onKeyDown (keyCode, event); - case KeyEvent.KEYCODE_BACK: - { - handleBackButton (host); - return true; + return super.onKeyDown (keyCode, event); + case KeyEvent.KEYCODE_BACK: + { + ((Activity) getContext()).onBackPressed(); + return true; } default: