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

Commit 1fda7cba authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Guarded against ArrayOutOfBounds

In some monkey tests, getAdapterPosition returns -1 (for example, if the
ViewHolder is not bound). In this case, we shouldn't proceed with the
moving operation.

Test: manual
Change-Id: I1eccc2c60136ddf5cc0175d88a3fddbe1d2a5a97
Fixes: 117769352
Fixes: 116871219
parent 9f364bd2
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -308,6 +308,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
                    @Override
                    public void onClick(View v) {
                        int position = holder.getAdapterPosition();
                        if (position == RecyclerView.NO_POSITION) return;
                        if (mAccessibilityAction != ACTION_NONE) {
                            selectPosition(position, v);
                        } else {
@@ -561,6 +562,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
            if (viewHolder == mCurrentDrag) return;
            if (mCurrentDrag != null) {
                int position = mCurrentDrag.getAdapterPosition();
                if (position == RecyclerView.NO_POSITION) return;
                TileInfo info = mTiles.get(position);
                mCurrentDrag.mTileView.setShowAppLabel(
                        position > mEditIndex && !info.isSystem);
@@ -582,13 +584,14 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
        @Override
        public boolean canDropOver(RecyclerView recyclerView, ViewHolder current,
                ViewHolder target) {
            if (target.getAdapterPosition() == 0){
            final int position = target.getAdapterPosition();
            if (position == 0 || position == RecyclerView.NO_POSITION){
                return false;
            }
            if (!canRemoveTiles() && current.getAdapterPosition() < mEditIndex) {
                return target.getAdapterPosition() < mEditIndex;
                return position < mEditIndex;
            }
            return target.getAdapterPosition() <= mEditIndex + 1;
            return position <= mEditIndex + 1;
        }

        @Override
@@ -610,6 +613,10 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
        public boolean onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target) {
            int from = viewHolder.getAdapterPosition();
            int to = target.getAdapterPosition();
            if (from == 0 || from == RecyclerView.NO_POSITION ||
                    to == 0 || to == RecyclerView.NO_POSITION) {
                return false;
            }
            return move(from, to, target.itemView);
        }