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

Commit ae0fedea authored by Tony Huang's avatar Tony Huang
Browse files

Improve stability on pre draw detector

Due to there are some logs report activity is null when remove
predraw listener, it should check activity is null or not and
we should remove predraw listener when fragment view destroy
too.

Bug: 129250021
Test: atest DocumentsUIGoogleTests
Change-Id: I1ab123a8165d5fef419b9bf0fe828fd8a0b9afa0
parent 600b8eb3
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -193,7 +193,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
    private final Runnable mOnDisplayStateChanged = this::onDisplayStateChanged;

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

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

        super.onDestroyView();
    }
@@ -1002,10 +1003,18 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
        return null;
    }

    private void removePreDrawListener() {
        final View collapsingBar = getActivity().findViewById(R.id.collapsing_toolbar);
        if (collapsingBar != null) {
            collapsingBar.getViewTreeObserver().removeOnPreDrawListener(mToolbarPreDrawListener);
    private void setPreDrawListener(boolean enable) {
        if (mActivity == null) {
            return;
        }

        final View bar = mActivity.findViewById(R.id.collapsing_toolbar);
        if (bar != null) {
            if (enable) {
                bar.getViewTreeObserver().addOnPreDrawListener(mToolbarPreDrawListener);
            } else {
                bar.getViewTreeObserver().removeOnPreDrawListener(mToolbarPreDrawListener);
            }
        }
    }

@@ -1134,10 +1143,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
                // Always back to top avoid app bar layout overlay on container.
                mRecView.scrollToPosition(0);

                final View collapsingBar = getActivity().findViewById(R.id.collapsing_toolbar);
                if (collapsingBar != null) {
                    collapsingBar.getViewTreeObserver().addOnPreDrawListener(mToolbarPreDrawListener);
                }
                setPreDrawListener(true);
            }
        }
    }