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

Commit 57cdddb7 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Fix Sharesheet nest scrolling issue introduced by using RecyclerView"...

Merge "Fix Sharesheet nest scrolling issue introduced by using RecyclerView" into rvc-dev am: 973ec117

Change-Id: I67c93dd19bc80884a109b0a011e83188e1669e20
parents f1b80039 973ec117
Loading
Loading
Loading
Loading
+29 −12
Original line number Original line Diff line number Diff line
@@ -121,7 +121,8 @@ public class ResolverDrawerLayout extends ViewGroup {


    private final Rect mTempRect = new Rect();
    private final Rect mTempRect = new Rect();


    private AbsListView mNestedScrollingChild;
    private AbsListView mNestedListChild;
    private RecyclerView mNestedRecyclerChild;


    private final ViewTreeObserver.OnTouchModeChangeListener mTouchModeChangeListener =
    private final ViewTreeObserver.OnTouchModeChangeListener mTouchModeChangeListener =
            new ViewTreeObserver.OnTouchModeChangeListener() {
            new ViewTreeObserver.OnTouchModeChangeListener() {
@@ -347,11 +348,20 @@ public class ResolverDrawerLayout extends ViewGroup {
        return mIsDragging || mOpenOnClick;
        return mIsDragging || mOpenOnClick;
    }
    }


    private boolean isNestedChildScrolled() {
    private boolean isNestedListChildScrolled() {
        return mNestedScrollingChild != null
        return  mNestedListChild != null
                && mNestedScrollingChild.getChildCount() > 0
                && mNestedListChild.getChildCount() > 0
                && (mNestedScrollingChild.getFirstVisiblePosition() > 0
                && (mNestedListChild.getFirstVisiblePosition() > 0
                        || mNestedScrollingChild.getChildAt(0).getTop() < 0);
                        || mNestedListChild.getChildAt(0).getTop() < 0);
    }

    private boolean isNestedRecyclerChildScrolled() {
        if (mNestedRecyclerChild != null && mNestedRecyclerChild.getChildCount() > 0) {
            final RecyclerView.ViewHolder vh =
                    mNestedRecyclerChild.findViewHolderForAdapterPosition(0);
            return vh == null || vh.itemView.getTop() < 0;
        }
        return false;
    }
    }


    @Override
    @Override
@@ -396,8 +406,10 @@ public class ResolverDrawerLayout extends ViewGroup {
                }
                }
                if (mIsDragging) {
                if (mIsDragging) {
                    final float dy = y - mLastTouchY;
                    final float dy = y - mLastTouchY;
                    if (dy > 0 && isNestedChildScrolled()) {
                    if (dy > 0 && isNestedListChildScrolled()) {
                        mNestedScrollingChild.smoothScrollBy((int) -dy, 0);
                        mNestedListChild.smoothScrollBy((int) -dy, 0);
                    } else if (dy > 0 && isNestedRecyclerChildScrolled()) {
                        mNestedRecyclerChild.scrollBy(0, (int) -dy);
                    } else {
                    } else {
                        performDrag(dy);
                        performDrag(dy);
                    }
                    }
@@ -452,8 +464,10 @@ public class ResolverDrawerLayout extends ViewGroup {
                            smoothScrollTo(mCollapsibleHeight + mUncollapsibleHeight, yvel);
                            smoothScrollTo(mCollapsibleHeight + mUncollapsibleHeight, yvel);
                            mDismissOnScrollerFinished = true;
                            mDismissOnScrollerFinished = true;
                        } else {
                        } else {
                            if (isNestedChildScrolled()) {
                            if (isNestedListChildScrolled()) {
                                mNestedScrollingChild.smoothScrollToPosition(0);
                                mNestedListChild.smoothScrollToPosition(0);
                            } else if (isNestedRecyclerChildScrolled()) {
                                mNestedRecyclerChild.smoothScrollToPosition(0);
                            }
                            }
                            smoothScrollTo(yvel < 0 ? 0 : mCollapsibleHeight, yvel);
                            smoothScrollTo(yvel < 0 ? 0 : mCollapsibleHeight, yvel);
                        }
                        }
@@ -729,8 +743,11 @@ public class ResolverDrawerLayout extends ViewGroup {
    @Override
    @Override
    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
        if ((nestedScrollAxes & View.SCROLL_AXIS_VERTICAL) != 0) {
        if ((nestedScrollAxes & View.SCROLL_AXIS_VERTICAL) != 0) {
            if (child instanceof AbsListView) {
            if (target instanceof AbsListView) {
                mNestedScrollingChild = (AbsListView) child;
                mNestedListChild = (AbsListView) target;
            }
            if (target instanceof RecyclerView) {
                mNestedRecyclerChild = (RecyclerView) target;
            }
            }
            return true;
            return true;
        }
        }