Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8faa129 authored by Ben Reich's avatar Ben Reich
Browse files

Add WindowInsets back on non-freeform window devices

For Material3 the bottom window insets were removed. Unfortunately this
means the navigation gesture swipe at the base of the window overlaps
the picker / saver bottom bar. This is particularly bad in the saver
where the bottom bar is a text box and the gesture navigation interferes
with moving the cursor in the text box.

This also has the benefit of adding the behaviour where the textbox
appears above the soft keyboard. Prior to this if you pressed the
textbox (with material 3 enabled) it would not appear above the soft
keyboard and remain hidden.

Bug: 400337159
Test: Deploy to Pixel 6 and observe bottom bar is above gesture bar
Flag: com.android.documentsui.flags.use_material3
Change-Id: I846ff9718455183bc136fb6ff90adb7c9b590e6d
parent 022d276a
Loading
Loading
Loading
Loading
+25 −16
Original line number Diff line number Diff line
@@ -569,19 +569,28 @@ public abstract class BaseActivity
        View root = findViewById(R.id.coordinator_layout);
        root.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        root.setOnApplyWindowInsetsListener((v, insets) -> {
            root.setPadding(insets.getSystemWindowInsetLeft(),
                    insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), 0);

            // When use_material3 flag is ON, no additional bottom gap in full screen mode.
            if (!isUseMaterial3FlagEnabled()) {
        root.setOnApplyWindowInsetsListener(
                (v, insets) -> {
                    root.setPadding(
                            insets.getSystemWindowInsetLeft(),
                            insets.getSystemWindowInsetTop(),
                            insets.getSystemWindowInsetRight(),
                            0);

                    // When use_material3 flag is ON and FEATURE_FREEFORM_WINDOW_MANAGEMENT is
                    // enabled, then there should not be any additional bottom gap in full screen
                    // mode. Otherwise need to take into account the system window insets such as
                    // the bottom swipe up navigation gesture.
                    if (!isUseMaterial3FlagEnabled()
                            || !getApplicationContext()
                            .getPackageManager()
                            .hasSystemFeature(
                                    PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT)) {
                        View saveContainer = findViewById(R.id.container_save);
                saveContainer.setPadding(
                        0, 0, 0, insets.getSystemWindowInsetBottom());
                        saveContainer.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());

                        View rootsContainer = findViewById(R.id.container_roots);
                rootsContainer.setPadding(
                        0, 0, 0, insets.getSystemWindowInsetBottom());
                        rootsContainer.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
                    }

                    return insets.consumeSystemWindowInsets();