From 49bd07d665a3bc7a671a55b2cc16e282da1782da Mon Sep 17 00:00:00 2001 From: George Mount Date: Thu, 1 Apr 2021 23:32:57 +0000 Subject: [PATCH] Fix NPE in RecyclerView Bug: 184256183 Prevents NullPointerException when there are no children in the RecyclerView while a fling occurs. Test: Ran share sheet Change-Id: I6aa5a4622c8afa792ca5e3f4c8fffb9ec92128d9 --- .../android/internal/widget/RecyclerView.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/core/java/com/android/internal/widget/RecyclerView.java b/core/java/com/android/internal/widget/RecyclerView.java index 17ce75e63b6fc..9ed5eb1d144e5 100644 --- a/core/java/com/android/internal/widget/RecyclerView.java +++ b/core/java/com/android/internal/widget/RecyclerView.java @@ -2049,17 +2049,19 @@ public class RecyclerView extends ViewGroup implements ScrollingView, NestedScro } if (!dispatchNestedPreFling(velocityX, velocityY)) { - final View firstChild = mLayout.getChildAt(0); - final View lastChild = mLayout.getChildAt(mLayout.getChildCount() - 1); boolean consumed = false; - if (velocityY < 0) { - consumed = getChildAdapterPosition(firstChild) > 0 - || firstChild.getTop() < getPaddingTop(); - } + if (mLayout.getChildCount() > 0) { + final View firstChild = mLayout.getChildAt(0); + final View lastChild = mLayout.getChildAt(mLayout.getChildCount() - 1); + if (velocityY < 0) { + consumed = getChildAdapterPosition(firstChild) > 0 + || firstChild.getTop() < getPaddingTop(); + } - if (velocityY > 0) { - consumed = getChildAdapterPosition(lastChild) < mAdapter.getItemCount() - 1 - || lastChild.getBottom() > getHeight() - getPaddingBottom(); + if (velocityY > 0) { + consumed = getChildAdapterPosition(lastChild) < mAdapter.getItemCount() - 1 + || lastChild.getBottom() > getHeight() - getPaddingBottom(); + } } dispatchNestedFling(velocityX, velocityY, consumed);