Skip to content

Commit

Permalink
Correct Android Screen Size (resizeOnFullScreen true - not in full sc…
Browse files Browse the repository at this point in the history
…reen)

If you set the preference for resizeOnFullScreen and you do not have your app running in either fullscreen mode (via StatusBar) or Immersive fullscreen mode (via cordova-plugin-fullscreen) the height is calculated wrong and some content between 8 and 40 pixels dependant on device will be off the bottom of the screen. This update looks for isFullScreen

Based on and fixes ionic-team#156, ionic-team#117, ionic-team#132, ionic-team#134
  • Loading branch information
itbeyond committed Sep 21, 2021
1 parent 0408e72 commit 4d23674
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions src/android/CDVIonicKeyboard.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;

// import additionally required classes for calculating screen height
Expand Down Expand Up @@ -125,13 +126,7 @@ else if ( pixelHeightDiff != previousHeightDiff && ( previousHeightDiff - pixelH
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard/4)) {
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
} else {
frameLayoutParams.height = usableHeightSansKeyboard;
}
frameLayoutParams.height = usableHeightNow;
mChildOfContent.requestLayout();
usableHeightPrevious = usableHeightNow;
}
Expand All @@ -140,7 +135,14 @@ private void possiblyResizeChildOfContent() {
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
return (r.bottom - r.top);
return isFullScreen() ? r.bottom - r.top : r.height();
}

private boolean isFullScreen() {
final Window window = cordova.getActivity().getWindow();
// Flag set by status bar plugin to make content full screen
int fullScreenFlag = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
return (window.getDecorView().getSystemUiVisibility() & fullScreenFlag) == fullScreenFlag;
}
};

Expand Down

0 comments on commit 4d23674

Please sign in to comment.