From bae68675ed347b934fbbfbcd8238a229d57ef14f Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Tue, 11 Jul 2017 17:59:54 -0700 Subject: Fixed ArrayIndexOutOfBoundsException in Contacts Fragment. If a user caused their activity to undergo several state changes rapidly, they could get the contacts fragment into a state where it wouldn't have any elements but still call onScrollChange. This would result in calls to getFirstCompletelyVisibleItemPosition returning NO_POSITION (-1) and throw an AIOOBE when attempting to get a row's header value. Bug: 63594129 Test: manual. PiperOrigin-RevId: 161610423 Change-Id: I0c53587a6499c42abe5e51b6ac2b4108c0971545 --- java/com/android/dialer/contactsfragment/ContactsFragment.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'java') diff --git a/java/com/android/dialer/contactsfragment/ContactsFragment.java b/java/com/android/dialer/contactsfragment/ContactsFragment.java index e62771837..41fa8f9c5 100644 --- a/java/com/android/dialer/contactsfragment/ContactsFragment.java +++ b/java/com/android/dialer/contactsfragment/ContactsFragment.java @@ -170,6 +170,10 @@ public class ContactsFragment extends Fragment fastScroller.updateContainerAndScrollBarPosition(recyclerView); int firstVisibleItem = manager.findFirstVisibleItemPosition(); int firstCompletelyVisible = manager.findFirstCompletelyVisibleItemPosition(); + if (firstCompletelyVisible == RecyclerView.NO_POSITION) { + // No items are visible, so there are no headers to update. + return; + } String anchoredHeaderString = adapter.getHeaderString(firstCompletelyVisible); // If the user swipes to the top of the list very quickly, there is some strange behavior -- cgit v1.2.3