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 Original line Diff line number Diff line
@@ -52,7 +52,6 @@ import androidx.fragment.app.Fragment;
import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.Injector.Injected;
import com.android.documentsui.Injector.Injected;
import com.android.documentsui.NavigationViewManager.Breadcrumb;
import com.android.documentsui.NavigationViewManager.Breadcrumb;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.RootInfo;
@@ -388,6 +387,11 @@ public abstract class BaseActivity
            View rootsContainer = findViewById(R.id.container_roots);
            View rootsContainer = findViewById(R.id.container_roots);
            rootsContainer.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
            rootsContainer.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());


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

            return insets.consumeSystemWindowInsets();
            return insets.consumeSystemWindowInsets();
        });
        });


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


    private View mProgressBar;
    private View mProgressBar;


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


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


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


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


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


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


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


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


                mActivity.updateHeaderTitle();
                mActivity.updateHeaderTitle();


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