From ff1a70f8adbb26f6ad7f6a80ec4675d7ddc18bfa Mon Sep 17 00:00:00 2001 From: Iordan Iordanov Date: Fri, 12 Aug 2016 19:53:25 -0400 Subject: [PATCH] Added immersive mode support for devices running Android KitKat (API 19) and newer. --- eclipse_projects/Opaque/AndroidManifest.xml | 4 +-- .../src/com/undatech/opaque/Constants.java | 3 +++ .../undatech/opaque/RemoteCanvasActivity.java | 27 +++++++++++++++++-- eclipse_projects/bVNC/AndroidManifest.xml | 2 +- .../src/com/iiordanov/bVNC/Constants.java | 2 ++ .../iiordanov/bVNC/RemoteCanvasActivity.java | 24 +++++++++++++++++ .../bVNC/dialogs/AutoXCustomizeDialog.java | 14 ++++++++-- 7 files changed, 69 insertions(+), 7 deletions(-) diff --git a/eclipse_projects/Opaque/AndroidManifest.xml b/eclipse_projects/Opaque/AndroidManifest.xml index 25457be01..91562dd9c 100644 --- a/eclipse_projects/Opaque/AndroidManifest.xml +++ b/eclipse_projects/Opaque/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="1339" + android:versionName="1.3.9" > = android.os.Build.VERSION_CODES.KITKAT) { + canvas.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_STICKY); + } + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) { + enableImmersive(); + } + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -254,6 +277,7 @@ public void onGlobalLayout() { } setKeyStowDrawableAndVisibility(); prevBottomOffset = offset; + enableImmersive(); } }); @@ -1096,5 +1120,4 @@ public void onTextObtained(String obtainedString) { canvas.spicecomm.notify(); } } - } diff --git a/eclipse_projects/bVNC/AndroidManifest.xml b/eclipse_projects/bVNC/AndroidManifest.xml index 041b8b3be..1b7617ad4 100644 --- a/eclipse_projects/bVNC/AndroidManifest.xml +++ b/eclipse_projects/bVNC/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="3830" android:versionName="v3.8.3"> diff --git a/eclipse_projects/bVNC/src/com/iiordanov/bVNC/Constants.java b/eclipse_projects/bVNC/src/com/iiordanov/bVNC/Constants.java index ab479f18d..6cdeec40b 100644 --- a/eclipse_projects/bVNC/src/com/iiordanov/bVNC/Constants.java +++ b/eclipse_projects/bVNC/src/com/iiordanov/bVNC/Constants.java @@ -25,6 +25,8 @@ */ public class Constants { public static final String CONNECTION = "com.iiordanov.bVNC.CONNECTION"; + + public static final int SDK_INT = android.os.Build.VERSION.SDK_INT; public static final int CONN_TYPE_PLAIN = 0; public static final int CONN_TYPE_SSH = 1; diff --git a/eclipse_projects/bVNC/src/com/iiordanov/bVNC/RemoteCanvasActivity.java b/eclipse_projects/bVNC/src/com/iiordanov/bVNC/RemoteCanvasActivity.java index 7bb70dafc..9ed131aa1 100644 --- a/eclipse_projects/bVNC/src/com/iiordanov/bVNC/RemoteCanvasActivity.java +++ b/eclipse_projects/bVNC/src/com/iiordanov/bVNC/RemoteCanvasActivity.java @@ -136,6 +136,29 @@ public class RemoteCanvasActivity extends FragmentActivity implements OnKeyListe boolean extraKeysHidden = false; int prevBottomOffset = 0; + /** + * Enables sticky immersive mode if supported. + */ + private void enableImmersive() { + if (Constants.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + canvas.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_STICKY); + } + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) { + enableImmersive(); + } + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -305,6 +328,7 @@ public void onGlobalLayout() { } setKeyStowDrawableAndVisibility(); prevBottomOffset = offset; + enableImmersive(); } }); diff --git a/eclipse_projects/bVNC/src/com/iiordanov/bVNC/dialogs/AutoXCustomizeDialog.java b/eclipse_projects/bVNC/src/com/iiordanov/bVNC/dialogs/AutoXCustomizeDialog.java index 0535bccca..d6d11df72 100644 --- a/eclipse_projects/bVNC/src/com/iiordanov/bVNC/dialogs/AutoXCustomizeDialog.java +++ b/eclipse_projects/bVNC/src/com/iiordanov/bVNC/dialogs/AutoXCustomizeDialog.java @@ -29,6 +29,7 @@ import android.app.AlertDialog; import android.content.Context; import android.content.Intent; +import android.graphics.Point; import android.net.Uri; import android.os.Bundle; import android.view.View; @@ -164,8 +165,17 @@ private void setCommandIndexAndCommand (int itemIndex) { */ private void setRemoteWidthAndHeight () { - nativeWidth = Math.max(mainConfigDialog.getWidth(), mainConfigDialog.getHeight()); - nativeHeight = Math.min(mainConfigDialog.getWidth(), mainConfigDialog.getHeight()); + // Android devices with SDK newer than KITKAT use immersive mode and therefore + // we get the resolution of the whole display. + if (Constants.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { + nativeWidth = Math.max(mainConfigDialog.getWidth(), mainConfigDialog.getHeight()); + nativeHeight = Math.min(mainConfigDialog.getWidth(), mainConfigDialog.getHeight()); + } else { + Point dS = new Point(); + mainConfigDialog.getWindowManager().getDefaultDisplay().getRealSize(dS); + nativeWidth = Math.max(dS.x, dS.y); + nativeHeight = Math.min(dS.x, dS.y); + } spinnerAutoXGeometry.setSelection(selected.getAutoXResType()); if (selected.getAutoXResType() == Constants.AUTOX_GEOM_SELECT_NATIVE) {