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

Commit 081cf628 authored by Tony Huang's avatar Tony Huang
Browse files

Fix extra padding of recyclerview after renamed the file

When rename and ime is shown, it will trigger OnApplyWindowInsets,
so it will change the bottom inset and update the padding by our
implementation. However, it will not recover after ime dismiss due
to timing issue.

Use PreDrawListener in DirectoryFragment to update correct padding
after OnApplyWindowInsets.

Fix: 134960714
Test: manual
Change-Id: I6fb4fc8ddb9cd613d7866837b41cebee24d4cbd7
parent e618daed
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -52,7 +52,6 @@ import androidx.fragment.app.Fragment;
import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.Injector.Injected;
import com.android.documentsui.NavigationViewManager.Breadcrumb;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.RootInfo;
@@ -388,6 +387,11 @@ public abstract class BaseActivity
            View rootsContainer = findViewById(R.id.container_roots);
            rootsContainer.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());

            DirectoryFragment fragment = getDirectoryFragment();
            if (fragment != null) {
                fragment.setPreDrawListenerEnabled(true);
            }

            return insets.consumeSystemWindowInsets();
        });

+13 −8
Original line number Diff line number Diff line
@@ -171,6 +171,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
    private float mLiveScale = 1.0f;
    private @ViewMode int mMode;
    private int mAppBarHeight;
    private int mSaveLayoutHeight;

    private View mProgressBar;

@@ -193,8 +194,9 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
    private final Runnable mOnDisplayStateChanged = this::onDisplayStateChanged;

    private final ViewTreeObserver.OnPreDrawListener mToolbarPreDrawListener = () -> {
        setPreDrawListener(false);
        if (mAppBarHeight != getAppBarLayoutHeight()) {
        setPreDrawListenerEnabled(false);
        if (mAppBarHeight != getAppBarLayoutHeight()
                || mSaveLayoutHeight != getSaveLayoutHeight()) {
            updateLayout(mState.derivedMode);
        }
        return true;
@@ -269,7 +271,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On

        mModel.removeUpdateListener(mModelUpdateListener);
        mModel.removeUpdateListener(mAdapter.getModelUpdateListener());
        setPreDrawListener(false);
        setPreDrawListenerEnabled(false);

        super.onDestroyView();
    }
@@ -536,7 +538,8 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On

        int pad = getDirectoryPadding(mode);
        mAppBarHeight = getAppBarLayoutHeight();
        mRecView.setPadding(pad, mAppBarHeight, pad, getSaveLayoutHeight());
        mSaveLayoutHeight = getSaveLayoutHeight();
        mRecView.setPadding(pad, mAppBarHeight, pad, mSaveLayoutHeight);
        mRecView.requestLayout();
        mIconHelper.setViewMode(mode);

@@ -1028,17 +1031,19 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
        return null;
    }

    private void setPreDrawListener(boolean enable) {
    /**
    * Add or remove mToolbarPreDrawListener implement on DirectoryFragment to ViewTreeObserver.
    */
    public void setPreDrawListenerEnabled(boolean enable) {
        if (mActivity == null) {
            return;
        }

        final View bar = mActivity.findViewById(R.id.collapsing_toolbar);
        if (bar != null) {
            bar.getViewTreeObserver().removeOnPreDrawListener(mToolbarPreDrawListener);
            if (enable) {
                bar.getViewTreeObserver().addOnPreDrawListener(mToolbarPreDrawListener);
            } else {
                bar.getViewTreeObserver().removeOnPreDrawListener(mToolbarPreDrawListener);
            }
        }
    }
@@ -1201,7 +1206,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On

                mActivity.updateHeaderTitle();

                setPreDrawListener(true);
                setPreDrawListenerEnabled(true);
            }
        }
    }