diff --git a/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java b/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java index bc8e46d90a..61e7f86c55 100644 --- a/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java +++ b/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java @@ -71,6 +71,20 @@ public final class JuceDemo extends Activity super.onDestroy(); } + @Override + protected final void onPause() + { + suspendApp(); + super.onPause(); + } + + @Override + protected final void onResume() + { + super.onResume(); + resumeApp(); + } + @Override public void onConfigurationChanged (Configuration cfg) { @@ -87,6 +101,8 @@ public final class JuceDemo extends Activity //============================================================================== private native void launchApp (String appFile, String appDataDir); private native void quitApp(); + private native void suspendApp(); + private native void resumeApp(); private native void setScreenSize (int screenWidth, int screenHeight); //============================================================================== diff --git a/modules/juce_core/native/java/JuceAppActivity.java b/modules/juce_core/native/java/JuceAppActivity.java index e70a6a2dc8..c8d719e4f4 100644 --- a/modules/juce_core/native/java/JuceAppActivity.java +++ b/modules/juce_core/native/java/JuceAppActivity.java @@ -71,6 +71,20 @@ public final class JuceAppActivity extends Activity super.onDestroy(); } + @Override + protected final void onPause() + { + suspendApp(); + super.onPause(); + } + + @Override + protected final void onResume() + { + super.onResume(); + resumeApp(); + } + @Override public void onConfigurationChanged (Configuration cfg) { @@ -87,6 +101,8 @@ public final class JuceAppActivity extends Activity //============================================================================== private native void launchApp (String appFile, String appDataDir); private native void quitApp(); + private native void suspendApp(); + private native void resumeApp(); private native void setScreenSize (int screenWidth, int screenHeight); //============================================================================== diff --git a/modules/juce_events/messages/juce_ApplicationBase.h b/modules/juce_events/messages/juce_ApplicationBase.h index f3139fd1e0..c887c7d6d3 100644 --- a/modules/juce_events/messages/juce_ApplicationBase.h +++ b/modules/juce_events/messages/juce_ApplicationBase.h @@ -127,6 +127,16 @@ public: */ virtual void systemRequestedQuit() = 0; + /** This method is called when the application is being put into background mode + by the operating system. + */ + virtual void suspended() = 0; + + /** This method is called when the application is being woken from background mode + by the operating system. + */ + virtual void resumed() = 0; + /** If any unhandled exceptions make it through to the message dispatch loop, this callback will be triggered, in case you want to log them or do some other type of error-handling. diff --git a/modules/juce_gui_basics/application/juce_Application.cpp b/modules/juce_gui_basics/application/juce_Application.cpp index 2c812cab84..e01bd40a11 100644 --- a/modules/juce_gui_basics/application/juce_Application.cpp +++ b/modules/juce_gui_basics/application/juce_Application.cpp @@ -60,14 +60,11 @@ JUCEApplication::~JUCEApplication() } //============================================================================== -bool JUCEApplication::moreThanOneInstanceAllowed() -{ - return true; -} +bool JUCEApplication::moreThanOneInstanceAllowed() { return true; } +void JUCEApplication::anotherInstanceStarted (const String&) {} -void JUCEApplication::anotherInstanceStarted (const String&) -{ -} +void JUCEApplication::suspended() {} +void JUCEApplication::resumed() {} void JUCEApplication::systemRequestedQuit() { diff --git a/modules/juce_gui_basics/application/juce_Application.h b/modules/juce_gui_basics/application/juce_Application.h index 1fd621e31e..d9fa216c64 100644 --- a/modules/juce_gui_basics/application/juce_Application.h +++ b/modules/juce_gui_basics/application/juce_Application.h @@ -161,6 +161,16 @@ public: */ virtual void systemRequestedQuit(); + /** This method is called when the application is being put into background mode + by the operating system. + */ + virtual void suspended(); + + /** This method is called when the application is being woken from background mode + by the operating system. + */ + virtual void resumed(); + /** If any unhandled exceptions make it through to the message dispatch loop, this callback will be triggered, in case you want to log them or do some other type of error-handling. diff --git a/modules/juce_gui_basics/native/juce_android_Windowing.cpp b/modules/juce_gui_basics/native/juce_android_Windowing.cpp index cade2d36e5..cecc5f2150 100644 --- a/modules/juce_gui_basics/native/juce_android_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_android_Windowing.cpp @@ -49,6 +49,20 @@ JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, launchApp, void, (JNIEnv* en jassert (MessageManager::getInstance()->isThisTheMessageThread()); } +JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, suspendApp, void, (JNIEnv* env, jobject activity)) +{ + JUCEApplicationBase* const app = JUCEApplicationBase::getInstance(); + if (app != nullptr) + app->suspended(); +} + +JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, resumeApp, void, (JNIEnv* env, jobject activity)) +{ + JUCEApplicationBase* const app = JUCEApplicationBase::getInstance(); + if (app != nullptr) + app->resumed(); +} + JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, quitApp, void, (JNIEnv* env, jobject activity)) { JUCEApplicationBase::appWillTerminateByForce(); diff --git a/modules/juce_gui_basics/native/juce_ios_Windowing.mm b/modules/juce_gui_basics/native/juce_ios_Windowing.mm index c1e839d4ce..b40dccf4ab 100644 --- a/modules/juce_gui_basics/native/juce_ios_Windowing.mm +++ b/modules/juce_gui_basics/native/juce_ios_Windowing.mm @@ -31,6 +31,8 @@ - (void) applicationDidFinishLaunching: (UIApplication*) application; - (void) applicationWillTerminate: (UIApplication*) application; +- (void) applicationDidEnterBackground: (UIApplication*) application; +- (void) applicationWillEnterForeground: (UIApplication*) application; @end @@ -50,6 +52,20 @@ JUCEApplicationBase::appWillTerminateByForce(); } +- (void) applicationDidEnterBackground: (UIApplication*) application +{ + JUCEApplicationBase* const app = JUCEApplicationBase::getInstance(); + if (app != nullptr) + app->suspended(); +} + +- (void) applicationWillEnterForeground: (UIApplication*) application +{ + JUCEApplicationBase* const app = JUCEApplicationBase::getInstance(); + if (app != nullptr) + app->resumed(); +} + @end namespace juce