From 8f0db1862478d1e483e0b34b8d25bf1c23d44b66 Mon Sep 17 00:00:00 2001 From: PixelyIon Date: Mon, 10 Jan 2022 21:28:57 +0530 Subject: [PATCH] Fix `ControllerActivity` Controller Type Change Crash If the controller type was changed from a type with a larger amount of buttons/axes to one with a fewer amount, a crash would occur due to the transition animation retaining those elements as children yet returning `NO_POSITION` from `getChildAdapterPosition` in `DividerItemDecoration` which was an unhandled case and led to an OOB array access. --- app/src/main/java/emu/skyline/input/ControllerActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/emu/skyline/input/ControllerActivity.kt b/app/src/main/java/emu/skyline/input/ControllerActivity.kt index fb6159da..339d4aec 100644 --- a/app/src/main/java/emu/skyline/input/ControllerActivity.kt +++ b/app/src/main/java/emu/skyline/input/ControllerActivity.kt @@ -195,7 +195,8 @@ class ControllerActivity : AppCompatActivity() { val divider = drawable!! for (i in 0 until parent.childCount) { val view = parent.getChildAt(i) - if (parent.adapter!!.getItemViewType(parent.getChildAdapterPosition(view)) == adapter.getFactoryViewType(ControllerHeaderBindingFactory)) { + val position = parent.getChildAdapterPosition(view) + if (position != RecyclerView.NO_POSITION && parent.adapter!!.getItemViewType(position) == adapter.getFactoryViewType(ControllerHeaderBindingFactory)) { val bottom = view.top - view.marginTop val top = bottom - divider.intrinsicHeight divider.setBounds(0, top, parent.width, bottom)