From d35d54afa49a5759f1fb769373167f23d712e0e2 Mon Sep 17 00:00:00 2001 From: mittorn Date: Tue, 9 Aug 2016 10:50:52 +0000 Subject: [PATCH] Fix keyboard/resize in immersive mode --- src/in/celest/xash3d/XashActivity.java | 47 ++++++++++++++------------ 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/src/in/celest/xash3d/XashActivity.java b/src/in/celest/xash3d/XashActivity.java index 40640efc..1dcb106c 100644 --- a/src/in/celest/xash3d/XashActivity.java +++ b/src/in/celest/xash3d/XashActivity.java @@ -39,7 +39,8 @@ public class XashActivity extends Activity { public static int mPixelFormat; protected static ViewGroup mLayout; public static JoystickHandler handler; - ImmersiveMode mImmersiveMode; + public static ImmersiveMode mImmersiveMode; + public static boolean keyboardVisible = false; // Joystick constants public final static byte JOY_HAT_CENTERED = 0; // bitmasks for hat current status @@ -183,17 +184,6 @@ public class XashActivity extends Activity { { super.onWindowFocusChanged(hasFocus); - /*if( mEnableImmersive && hasFocus ) - { - mDecorView.setSystemUiVisibility( - 0x00000100 // View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | 0x00000200 // View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | 0x00000400 // View.SYSTEM_UI_FLAG_LAYOUT_FULSCREEN - | 0x00000002 // View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar - | 0x00000004 // View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar - | 0x00001000 // View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - ); - }*/ if( mImmersiveMode != null ) mImmersiveMode.apply(); } @@ -466,11 +456,17 @@ public class XashActivity extends Activity { mTextEdit.requestFocus(); imm.showSoftInput(mTextEdit, 0); + keyboardVisible = true; + if( XashActivity.mImmersiveMode != null ) + XashActivity.mImmersiveMode.apply(); } else { mTextEdit.setVisibility(View.GONE); imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); + keyboardVisible = false; + if( XashActivity.mImmersiveMode != null ) + XashActivity.mImmersiveMode.apply(); } } } @@ -506,7 +502,7 @@ class EngineSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnKeyListener { // This is what Xash3D runs in. It invokes main(), eventually - private Thread mEngThread; + private static Thread mEngThread = null; // EGL private objects private EGLContext mEGLContext; @@ -902,10 +898,14 @@ class AndroidBug5497Workaround { if (heightDifference > (usableHeightSansKeyboard/4)) { // keyboard probably just became visible frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; + XashActivity.keyboardVisible = true; } else { // keyboard probably just became hidden frameLayoutParams.height = usableHeightSansKeyboard; + XashActivity.keyboardVisible = false; } + if( XashActivity.mImmersiveMode != null ) + XashActivity.mImmersiveMode.apply(); mChildOfContent.requestLayout(); usableHeightPrevious = usableHeightNow; } @@ -1038,14 +1038,17 @@ class ImmersiveMode_v19 extends ImmersiveMode @Override void apply() { - XashActivity.mDecorView.setSystemUiVisibility( - 0x00000100 // View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | 0x00000200 // View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | 0x00000400 // View.SYSTEM_UI_FLAG_LAYOUT_FULSCREEN - | 0x00000002 // View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar - | 0x00000004 // View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar - | 0x00001000 // View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - ); + if( !XashActivity.keyboardVisible ) + XashActivity.mDecorView.setSystemUiVisibility( + 0x00000100 // View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | 0x00000200 // View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | 0x00000400 // View.SYSTEM_UI_FLAG_LAYOUT_FULSCREEN + | 0x00000002 // View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar + | 0x00000004 // View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar + | 0x00001000 // View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + ); + else + XashActivity.mDecorView.setSystemUiVisibility( 0 ); } -} \ No newline at end of file +}