From b56badf77b652abca012dd4dbd4932a03e4139dd Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Fri, 17 Apr 2015 16:18:46 -0300 Subject: [PATCH] -Added android immersive mode, fixes #303 --- demos/2d/lights_shadows/engine.cfg | 4 ++ platform/android/AndroidManifest.xml.template | 2 +- platform/android/export/export.cpp | 9 ++++ .../java/src/com/android/godot/Godot.java | 44 +++++++++++++++++++ platform/android/project.properties.template | 2 +- 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/demos/2d/lights_shadows/engine.cfg b/demos/2d/lights_shadows/engine.cfg index bb9d1ef256..7e028c3556 100644 --- a/demos/2d/lights_shadows/engine.cfg +++ b/demos/2d/lights_shadows/engine.cfg @@ -3,6 +3,10 @@ name="2D Lighting" main_scene="res://light_shadows.scn" +[display] + +stretch_mode="2d" + [rasterizer] shadow_filter=2 diff --git a/platform/android/AndroidManifest.xml.template b/platform/android/AndroidManifest.xml.template index d31bdbfa53..71e8b866dc 100644 --- a/platform/android/AndroidManifest.xml.template +++ b/platform/android/AndroidManifest.xml.template @@ -200,6 +200,6 @@ $$ADD_PERMISSION_CHUNKS$$ - + diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 8199e7c622..1dca83274a 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -186,6 +186,7 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { bool apk_expansion; bool remove_prev; bool use_32_fb; + bool immersive; String apk_expansion_salt; String apk_expansion_pkey; int orientation; @@ -282,6 +283,8 @@ bool EditorExportPlatformAndroid::_set(const StringName& p_name, const Variant& _signed=p_value; else if (n=="screen/use_32_bits_view") use_32_fb=p_value; + else if (n=="screen/immersive_mode") + immersive=p_value; else if (n=="screen/orientation") orientation=p_value; else if (n=="screen/support_small") @@ -349,6 +352,8 @@ bool EditorExportPlatformAndroid::_get(const StringName& p_name,Variant &r_ret) r_ret=_signed; else if (n=="screen/use_32_bits_view") r_ret=use_32_fb; + else if (n=="screen/immersive_mode") + r_ret=immersive; else if (n=="screen/orientation") r_ret=orientation; else if (n=="screen/support_small") @@ -399,6 +404,7 @@ void EditorExportPlatformAndroid::_get_property_list( List *p_list p_list->push_back( PropertyInfo( Variant::STRING, "package/icon",PROPERTY_HINT_FILE,"png") ); p_list->push_back( PropertyInfo( Variant::BOOL, "package/signed") ); p_list->push_back( PropertyInfo( Variant::BOOL, "screen/use_32_bits_view") ); + p_list->push_back( PropertyInfo( Variant::BOOL, "screen/immersive_mode") ); p_list->push_back( PropertyInfo( Variant::INT, "screen/orientation",PROPERTY_HINT_ENUM,"Landscape,Portrait") ); p_list->push_back( PropertyInfo( Variant::BOOL, "screen/support_small") ); p_list->push_back( PropertyInfo( Variant::BOOL, "screen/support_normal") ); @@ -1171,6 +1177,8 @@ Error EditorExportPlatformAndroid::export_project(const String& p_path, bool p_d if (use_32_fb) cl.push_back("-use_depth_32"); + if (immersive) + cl.push_back("-use_immersive"); if (cl.size()) { //add comandline @@ -1547,6 +1555,7 @@ EditorExportPlatformAndroid::EditorExportPlatformAndroid() { orientation=0; remove_prev=true; use_32_fb=true; + immersive=true; device_thread=Thread::create(_device_poll_thread,this); devices_changed=true; diff --git a/platform/android/java/src/com/android/godot/Godot.java b/platform/android/java/src/com/android/godot/Godot.java index 2abb4cec53..7fd06a01d6 100644 --- a/platform/android/java/src/com/android/godot/Godot.java +++ b/platform/android/java/src/com/android/godot/Godot.java @@ -110,6 +110,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC private Button mWiFiSettingsButton; private boolean use_32_bits=false; + private boolean use_immersive=false; private boolean mStatePaused; private int mState; @@ -374,6 +375,8 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger()); } + + @Override protected void onCreate(Bundle icicle) { @@ -402,6 +405,19 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC boolean has_extra = i< command_line.length -1; if (command_line[i].equals("-use_depth_32")) { use_32_bits=true; + } else if (command_line[i].equals("-use_immersive")) { + use_immersive=true; + if(Build.VERSION.SDK_INT >= 19.0){ // check if the application runs on an android 4.4+ + window.getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar + | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + + UiChangeListener(); + } } else if (command_line[i].equals("-use_apk_expansion")) { use_apk_expansion=true; } else if (has_extra && command_line[i].equals("-apk_expansion_md5")) { @@ -560,6 +576,16 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC mView.onResume(); mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); GodotLib.focusin(); + if(use_immersive && Build.VERSION.SDK_INT >= 19.0){ // check if the application runs on an android 4.4+ + Window window = getWindow(); + window.getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar + | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + } for(int i=0;i