diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/ext/RecyclerViewAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabstray/ext/RecyclerViewAdapter.kt index 3034da27e8..4dbebdf5d4 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/ext/RecyclerViewAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/ext/RecyclerViewAdapter.kt @@ -12,8 +12,14 @@ import androidx.recyclerview.widget.RecyclerView fun RecyclerView.Adapter.observeFirstInsert(block: () -> Unit) { val observer = object : RecyclerView.AdapterDataObserver() { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { - block.invoke() - unregisterAdapterDataObserver(this) + // There's a bug where [onItemRangeInserted] is intermittently called with an [itemCount] of zero, causing + // the Tabs Tray to always open scrolled at the top. This check forces [onItemRangeInserted] to wait + // until [itemCount] is non-zero to execute [block] and remove the adapter observer. + // This is a temporary fix until the Compose rewrite is enabled by default, where this bug is not present. + if (itemCount > 0) { + block.invoke() + unregisterAdapterDataObserver(this) + } } } registerAdapterDataObserver(observer)