Skip to content

Commit

Permalink
Deal with situations where the system UI is shown when the keyboard p…
Browse files Browse the repository at this point in the history
…ops up (thanks Rachel!)
  • Loading branch information
slouken committed Jun 18, 2018
1 parent 74ec7ca commit 8b574dc
Showing 1 changed file with 34 additions and 4 deletions.
38 changes: 34 additions & 4 deletions android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
Expand Up @@ -33,7 +33,7 @@
/**
SDL Activity
*/
public class SDLActivity extends Activity {
public class SDLActivity extends Activity implements View.OnSystemUiVisibilityChangeListener {
private static final String TAG = "SDL";

public static boolean mIsResumedCalled, mIsSurfaceReady, mHasFocus;
Expand Down Expand Up @@ -251,6 +251,8 @@ public void onClick(DialogInterface dialog,int id) {

setWindowStyle(false);

getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this);

// Get filename from "Open with" of another application
Intent intent = getIntent();
if (intent != null && intent.getData() != null) {
Expand Down Expand Up @@ -489,12 +491,14 @@ public void handleMessage(Message msg) {
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;
window.getDecorView().setSystemUiVisibility(flags);
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
} else {
int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
window.getDecorView().setSystemUiVisibility(flags);
int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE;
window.getDecorView().setSystemUiVisibility(flags);
window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
Expand Down Expand Up @@ -1110,6 +1114,32 @@ public boolean onKey(DialogInterface d, int keyCode, KeyEvent event) {
return dialog;
}

private final Runnable rehideSystemUi = new Runnable() {
@Override
public void run() {
int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;

SDLActivity.this.getWindow().getDecorView().setSystemUiVisibility(flags);
}
};

public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0 || (visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {

Handler handler = getWindow().getDecorView().getHandler();
if (handler != null) {
handler.removeCallbacks(rehideSystemUi); // Prevent a hide loop.
handler.postDelayed(rehideSystemUi, 2000);
}

}
}

/**
* This method is called by SDL using JNI.
*/
Expand Down

0 comments on commit 8b574dc

Please sign in to comment.