From fb2bf78591672362adbb62ea15e7be4ac34a7dee Mon Sep 17 00:00:00 2001 From: volzhs Date: Fri, 27 Nov 2015 23:40:04 +0900 Subject: Add ability to set "keep screen on" for android --- .../java/src/org/godotengine/godot/Godot.java | 21 +++++++++++++++++---- platform/android/java_glue.cpp | 10 ++++++++-- platform/android/os_android.cpp | 11 ++++++++++- platform/android/os_android.h | 8 ++++++-- 4 files changed, 41 insertions(+), 9 deletions(-) (limited to 'platform') diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/src/org/godotengine/godot/Godot.java index c6bc6a6943..1f208f8fb6 100644 --- a/platform/android/java/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/src/org/godotengine/godot/Godot.java @@ -113,6 +113,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC private boolean use_immersive=false; private boolean mStatePaused; private int mState; + private boolean keep_screen_on=true; private void setState(int newState) { if (mState != newState) { @@ -259,7 +260,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC mView = new GodotView(getApplication(),io,use_gl2,use_32_bits, this); layout.addView(mView,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); - mView.setKeepScreenOn(true); + setKeepScreenOn(GodotLib.getGlobal("display/keep_screen_on").equals("True")); edittext.setView(mView); io.setEdit(edittext); @@ -270,7 +271,19 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC layout.addView(adLayout); } - + + public void setKeepScreenOn(final boolean p_enabled) { + keep_screen_on = p_enabled; + if (mView != null){ + runOnUiThread(new Runnable() { + @Override + public void run() { + mView.setKeepScreenOn(p_enabled); + } + }); + } + } + private static Godot _self; public static Godot getInstance(){ @@ -385,8 +398,8 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC super.onCreate(icicle); _self = this; Window window = getWindow(); - window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON - | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + //window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); //check for apk expansion API diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index 459cf4c994..75c1d78151 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -671,7 +671,7 @@ static jmethodID _playVideo=0; static jmethodID _isVideoPlaying=0; static jmethodID _pauseVideo=0; static jmethodID _stopVideo=0; - +static jmethodID _setKeepScreenOn=0; static void _gfx_init_func(void* ud, bool gl2) { @@ -765,6 +765,11 @@ static void _stop_video() { env->CallVoidMethod(godot_io, _stopVideo); } +static void _set_keep_screen_on(bool p_enabled) { + JNIEnv* env = ThreadAndroid::get_env(); + env->CallVoidMethod(_godot_instance, _setKeepScreenOn, p_enabled); +} + JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv * env, jobject obj, jobject activity,jboolean p_need_reload_hook, jobjectArray p_cmdline,jobject p_asset_manager) { __android_log_print(ANDROID_LOG_INFO,"godot","**INIT EVENT! - %p\n",env); @@ -801,6 +806,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv * e godot_io=gob; _on_video_init = env->GetMethodID(cls, "onVideoInit", "(Z)V"); + _setKeepScreenOn = env->GetMethodID(cls,"setKeepScreenOn","(Z)V"); jclass clsio = env->FindClass("org/godotengine/godot/Godot"); if (cls) { @@ -863,7 +869,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv * e __android_log_print(ANDROID_LOG_INFO,"godot","CMDLINE LEN %i - APK EXPANSION %I\n",cmdlen,int(use_apk_expansion)); - os_android = new OS_Android(_gfx_init_func,env,_open_uri,_get_data_dir,_get_locale, _get_model,_show_vk, _hide_vk,_set_screen_orient,_get_unique_id, _get_system_dir, _play_video,_is_video_playing, _pause_video, _stop_video,use_apk_expansion); + os_android = new OS_Android(_gfx_init_func,env,_open_uri,_get_data_dir,_get_locale, _get_model,_show_vk, _hide_vk,_set_screen_orient,_get_unique_id, _get_system_dir, _play_video,_is_video_playing, _pause_video, _stop_video, _set_keep_screen_on, use_apk_expansion); os_android->set_need_reload_hooks(p_need_reload_hook); char wd[500]; diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index 207e4499bc..03177317af 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -302,6 +302,14 @@ void OS_Android::get_fullscreen_mode_list(List *p_list,int p_screen) p_list->push_back(default_videomode); } +void OS_Android::set_keep_screen_on(bool p_enabled) { + OS::set_keep_screen_on(p_enabled); + + if (set_keep_screen_on_func) { + set_keep_screen_on_func(p_enabled); + } +} + Size2 OS_Android::get_window_size() const { return Vector2(default_videomode.width,default_videomode.height); @@ -734,7 +742,7 @@ void OS_Android::set_context_is_16_bits(bool p_is_16) { rasterizer->set_force_16_bits_fbo(p_is_16); } -OS_Android::OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func,GetModelFunc p_get_model_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient,GetUniqueIDFunc p_get_unique_id,GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func,bool p_use_apk_expansion) { +OS_Android::OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func,GetModelFunc p_get_model_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient,GetUniqueIDFunc p_get_unique_id,GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, bool p_use_apk_expansion) { use_apk_expansion=p_use_apk_expansion; @@ -767,6 +775,7 @@ OS_Android::OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFu hide_virtual_keyboard_func = p_hide_vk; set_screen_orientation_func=p_screen_orient; + set_keep_screen_on_func = p_set_keep_screen_on_func; use_reload_hooks=false; } diff --git a/platform/android/os_android.h b/platform/android/os_android.h index 3e42db8fb1..1ae42e9cc7 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -73,6 +73,7 @@ typedef void (*VideoPlayFunc)(const String&); typedef bool (*VideoIsPlayingFunc)(); typedef void (*VideoPauseFunc)(); typedef void (*VideoStopFunc)(); +typedef void (*SetKeepScreenOnFunc)(bool p_enabled); class OS_Android : public OS_Unix { public: @@ -132,6 +133,7 @@ private: VideoIsPlayingFunc video_is_playing_func; VideoPauseFunc video_pause_func; VideoStopFunc video_stop_func; + SetKeepScreenOnFunc set_keep_screen_on_func; public: @@ -175,7 +177,9 @@ public: virtual void set_video_mode(const VideoMode& p_video_mode,int p_screen=0); virtual VideoMode get_video_mode(int p_screen=0) const; virtual void get_fullscreen_mode_list(List *p_list,int p_screen=0) const; - + + virtual void set_keep_screen_on(bool p_enabled); + virtual Size2 get_window_size() const; virtual String get_name(); @@ -228,7 +232,7 @@ public: virtual void native_video_pause(); virtual void native_video_stop(); - OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func,GetModelFunc p_get_model_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient,GetUniqueIDFunc p_get_unique_id,GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func,bool p_use_apk_expansion); + OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func,GetModelFunc p_get_model_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient,GetUniqueIDFunc p_get_unique_id,GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, bool p_use_apk_expansion); ~OS_Android(); }; -- cgit v1.2.3