Skip to content

Commit

Permalink
hotfix(fullscreen handling): Fix animations not refreshing
Browse files Browse the repository at this point in the history
  • Loading branch information
Mathias-Boulay committed Jan 18, 2025
1 parent a470792 commit 8b9e973
Showing 1 changed file with 20 additions and 30 deletions.
50 changes: 20 additions & 30 deletions app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
Original file line number Diff line number Diff line change
Expand Up @@ -654,37 +654,27 @@ public static DisplayMetrics getDisplayMetrics(Activity activity) {
}

public static void setFullscreen(Activity activity, boolean fullscreen) {
WindowInsetsControllerCompat windowInsetsController =
WindowCompat.getInsetsController(activity.getWindow(), activity.getWindow().getDecorView());
if (windowInsetsController == null) {
Log.w(APP_NAME, "WindowInsetsController is null, cannot set fullscreen");
return;
}

// Configure the behavior of the hidden system bars.
windowInsetsController.setSystemBarsBehavior(
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
);

ViewCompat.setOnApplyWindowInsetsListener(
activity.getWindow().getDecorView(),
(view, windowInsets) -> {
boolean fullscreenImpl = fullscreen;
if (SDK_INT >= Build.VERSION_CODES.N && activity.isInMultiWindowMode())
fullscreenImpl = false;

if (fullscreenImpl) {
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());
} else {
windowInsetsController.show(WindowInsetsCompat.Type.systemBars());
}

if(SDK_INT >= Build.VERSION_CODES.R)
activity.getWindow().setDecorFitsSystemWindows(!fullscreenImpl);

return ViewCompat.onApplyWindowInsets(view, windowInsets);
});
final View decorView = activity.getWindow().getDecorView();
View.OnSystemUiVisibilityChangeListener visibilityChangeListener = visibility -> {
boolean multiWindowMode = SDK_INT >= 24 && activity.isInMultiWindowMode();
// When in multi-window mode, asking for fullscreen makes no sense (cause the launcher runs in a window)
// So, ignore the fullscreen setting when activity is in multi window mode
if(fullscreen && !multiWindowMode){
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
}else{
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}

};
decorView.setOnSystemUiVisibilityChangeListener(visibilityChangeListener);
visibilityChangeListener.onSystemUiVisibilityChange(decorView.getSystemUiVisibility()); //call it once since the UI state may not change after the call, so the activity wont become fullscreen
}

public static DisplayMetrics currentDisplayMetrics;
Expand Down

0 comments on commit 8b9e973

Please sign in to comment.