From 201a85acd7f2cd667a0a737173e7690437800f2b Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 20 Jun 2017 16:40:03 +0100 Subject: [PATCH] Android: Added a virtual backButtonPressed() method to JUCEApplicationBase which can be overridden to be informed when the back button is pressed on a device. --- modules/juce_core/native/java/JuceAppActivity.java | 9 ++++++++- modules/juce_events/messages/juce_ApplicationBase.h | 7 +++++++ .../juce_gui_basics/native/juce_android_Windowing.cpp | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/modules/juce_core/native/java/JuceAppActivity.java b/modules/juce_core/native/java/JuceAppActivity.java index c30d5a2f3e..5253c30ea2 100644 --- a/modules/juce_core/native/java/JuceAppActivity.java +++ b/modules/juce_core/native/java/JuceAppActivity.java @@ -630,6 +630,7 @@ public class JuceAppActivity extends Activity //============================================================================== 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); public void showKeyboard (String type) { @@ -657,8 +658,14 @@ public class JuceAppActivity extends Activity case KeyEvent.KEYCODE_VOLUME_UP: case KeyEvent.KEYCODE_VOLUME_DOWN: return super.onKeyDown (keyCode, event); + case KeyEvent.KEYCODE_BACK: + { + handleBackButton (host); + return true; + } - default: break; + default: + break; } handleKeyDown (host, keyCode, event.getUnicodeChar()); diff --git a/modules/juce_events/messages/juce_ApplicationBase.h b/modules/juce_events/messages/juce_ApplicationBase.h index 75ee107ede..c9ffc5f0b9 100644 --- a/modules/juce_events/messages/juce_ApplicationBase.h +++ b/modules/juce_events/messages/juce_ApplicationBase.h @@ -188,6 +188,13 @@ public: const String& sourceFilename, int lineNumber) = 0; + //============================================================================== + /** Override this method to be informed when the back button is pressed on a device. + + This is currently only implemented on Android devices. + */ + virtual void backButtonPressed() { } + //============================================================================== /** Signals that the main message loop should stop and the application should terminate. diff --git a/modules/juce_gui_basics/native/juce_android_Windowing.cpp b/modules/juce_gui_basics/native/juce_android_Windowing.cpp index fc66e32129..65ea8533f0 100644 --- a/modules/juce_gui_basics/native/juce_android_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_android_Windowing.cpp @@ -437,6 +437,12 @@ public: { } + void handleBackButtonCallback() + { + if (JUCEApplicationBase* const app = JUCEApplicationBase::getInstance()) + app->backButtonPressed(); + } + //============================================================================== bool isFocused() const override { @@ -664,6 +670,7 @@ JUCE_VIEW_CALLBACK (void, viewSizeChanged, (JNIEnv* env, jobject /*view*/, jlon JUCE_VIEW_CALLBACK (void, focusChanged, (JNIEnv* env, jobject /*view*/, jlong host, jboolean hasFocus), handleFocusChangeCallback (hasFocus)) JUCE_VIEW_CALLBACK (void, handleKeyDown, (JNIEnv* env, jobject /*view*/, jlong host, jint k, jint kc), handleKeyDownCallback ((int) k, (int) kc)) JUCE_VIEW_CALLBACK (void, handleKeyUp, (JNIEnv* env, jobject /*view*/, jlong host, jint k, jint kc), handleKeyUpCallback ((int) k, (int) kc)) +JUCE_VIEW_CALLBACK (void, handleBackButton, (JNIEnv* env, jobject /*view*/, jlong host), handleBackButtonCallback()) //============================================================================== ComponentPeer* Component::createNewPeer (int styleFlags, void*)