From dec40dab5f817b3577eee68280c249a20e7be07a Mon Sep 17 00:00:00 2001 From: Christopher Kaster Date: Tue, 4 Feb 2014 14:34:28 +0100 Subject: [PATCH] add support for android-19 immersive mode --- .../src/org/haxe/lime/GameActivity.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/templates/android/template/src/org/haxe/lime/GameActivity.java b/templates/android/template/src/org/haxe/lime/GameActivity.java index b06853e11..320e60b11 100644 --- a/templates/android/template/src/org/haxe/lime/GameActivity.java +++ b/templates/android/template/src/org/haxe/lime/GameActivity.java @@ -17,6 +17,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; +import android.os.Message; import android.os.Vibrator; import android.util.DisplayMetrics; import android.util.Log; @@ -160,6 +161,68 @@ public class GameActivity extends Activity implements SensorEventListener { } + ::if (ANDROID_TARGET_SDK_VERSION >= 19):: + + private final int HIDE_DELAY = 100; + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + this.delayedHide(HIDE_DELAY); + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + + // when the window lost focus cancel all pending hide actions + // when the window gains focus, hide the system ui. + if(hasFocus) { + this.delayedHide(HIDE_DELAY); + } else { + hideSystemUiHandler.removeMessages(0); + } + } + + // declare handler + protected Handler hideSystemUiHandler = new Handler() { + + @Override + public void handleMessage(Message message) { + hideSystemUi(); + } + }; + + // hide system ui after delay + private void delayedHide(int delayInMilliseconds) { + this.hideSystemUiHandler.removeMessages(0); + this.hideSystemUiHandler.sendEmptyMessageDelayed(0, delayInMilliseconds); + } + + private void hideSystemUi() { + View decorView = this.getWindow().getDecorView(); + + decorView.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 + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE); + } + + private void showSystemUi() { + View decorView = this.getWindow().getDecorView(); + + decorView.setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + } + + + ::end:: public static double CapabilitiesGetPixelAspectRatio () {