From 79035b393aae5eb0789b1c81360eab749cb8c601 Mon Sep 17 00:00:00 2001 From: Gabriel Jacobo Date: Mon, 20 Oct 2014 10:10:39 -0300 Subject: [PATCH] Bug 2739 - [Android] No support for SDL_DisableScreenSaver by Martin Gerhardy --- android-project/src/org/libsdl/app/SDLActivity.java | 7 +++++++ src/core/android/SDL_android.c | 11 ++++++++++- src/core/android/SDL_android.h | 2 ++ src/video/android/SDL_androidvideo.c | 9 +++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/android-project/src/org/libsdl/app/SDLActivity.java b/android-project/src/org/libsdl/app/SDLActivity.java index 8b6c8e9c950f7..20920c9d1aa76 100644 --- a/android-project/src/org/libsdl/app/SDLActivity.java +++ b/android-project/src/org/libsdl/app/SDLActivity.java @@ -187,6 +187,13 @@ public boolean dispatchKeyEvent(KeyEvent event) { return super.dispatchKeyEvent(event); } + public static void suspendScreenSaver(boolean suspend) { + if (suspend) + mSingleton.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + else + mSingleton.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + /** Called by onPause or surfaceDestroyed. Even if surfaceDestroyed * is the first to be called, mIsSurfaceReady should still be set * to 'true' during the call to onPause (in a usual scenario). diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index cf282f4f650e2..a9984995b3ab0 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -77,6 +77,7 @@ static jmethodID midAudioWriteShortBuffer; static jmethodID midAudioWriteByteBuffer; static jmethodID midAudioQuit; static jmethodID midPollInputDevices; +static jmethodID midSuspendScreenSaver; /* Accelerometer data storage */ static float fLastAccelerometer[3]; @@ -131,6 +132,8 @@ JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls) "audioQuit", "()V"); midPollInputDevices = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "pollInputDevices", "()V"); + midSuspendScreenSaver = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, + "suspendScreenSaver", "(Z)V"); bHasNewData = false; @@ -444,7 +447,13 @@ static void LocalReferenceHolder_Cleanup(struct LocalReferenceHolder *refholder) static SDL_bool LocalReferenceHolder_IsActive() { - return s_active > 0; + return s_active > 0; +} + +void Android_JNI_SuspendScreenSaver(SDL_bool suspend) +{ + JNIEnv *env = Android_JNI_GetEnv(); + (*env)->CallStaticObjectMethod(env, mActivityClass, midSuspendScreenSaver, suspend); } ANativeWindow* Android_JNI_GetNativeWindow(void) diff --git a/src/core/android/SDL_android.h b/src/core/android/SDL_android.h index 1294cd9ce0edd..051958a496d2c 100644 --- a/src/core/android/SDL_android.h +++ b/src/core/android/SDL_android.h @@ -68,6 +68,8 @@ int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seco /* Joystick support */ void Android_JNI_PollInputDevices(); +/* Video */ +void Android_JNI_SuspendScreenSaver(SDL_bool suspend); /* Touch support */ int Android_JNI_GetTouchDeviceIds(int **ids); diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c index 0ff6717608a94..05c07537d89bd 100644 --- a/src/video/android/SDL_androidvideo.c +++ b/src/video/android/SDL_androidvideo.c @@ -75,6 +75,12 @@ Android_Available(void) return 1; } +static void +Android_SuspendScreenSaver(_THIS) +{ + Android_JNI_SuspendScreenSaver(_this->suspend_screensaver); +} + static void Android_DeleteDevice(SDL_VideoDevice * device) { @@ -126,6 +132,9 @@ Android_CreateDevice(int devindex) device->GL_SwapWindow = Android_GLES_SwapWindow; device->GL_DeleteContext = Android_GLES_DeleteContext; + /* Screensaver */ + device->SuspendScreenSaver = Android_SuspendScreenSaver; + /* Text input */ device->StartTextInput = Android_StartTextInput; device->StopTextInput = Android_StopTextInput;