mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
use local resolver when tracking items visibility inside gallery
commit_hash:c5bc972fd7ecf062b11e529d0b0387c36c46ee26
This commit is contained in:
+7
-2
@@ -13,6 +13,7 @@ import com.yandex.div.core.util.SynchronizedWeakHashMap
|
||||
import com.yandex.div.core.util.allAppearActions
|
||||
import com.yandex.div.core.util.allDisappearActions
|
||||
import com.yandex.div.core.util.doOnHierarchyLayout
|
||||
import com.yandex.div.core.view2.divs.bindingContext
|
||||
import com.yandex.div.core.view2.divs.duration
|
||||
import com.yandex.div.internal.Assert
|
||||
import com.yandex.div.internal.KAssert
|
||||
@@ -156,7 +157,8 @@ internal class DivVisibilityActionTracker @Inject constructor(
|
||||
} else {
|
||||
previousVisibilityIsFull[currentView] = isViewFullyVisible
|
||||
currentDiv?.let {
|
||||
trackVisibilityActionsOf(context.divView, context.expressionResolver, currentView, it)
|
||||
val ctx = currentView.bindingContext ?: context
|
||||
trackVisibilityActionsOf(context.divView, ctx.expressionResolver, currentView, it)
|
||||
}
|
||||
true
|
||||
}
|
||||
@@ -166,7 +168,10 @@ internal class DivVisibilityActionTracker @Inject constructor(
|
||||
fun cancelTrackingViewsHierarchy(context: BindingContext, root: View, div: Div?) {
|
||||
trackViewsHierarchy(context, root, div) { currentView, currentDiv ->
|
||||
previousVisibilityIsFull.remove(currentView)
|
||||
currentDiv?.let { trackVisibilityActionsOf(context.divView, context.expressionResolver, null, it) }
|
||||
currentDiv?.let {
|
||||
val ctx = currentView.bindingContext ?: context
|
||||
trackVisibilityActionsOf(context.divView, ctx.expressionResolver, null, it)
|
||||
}
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
+18
-1
@@ -36,6 +36,7 @@ import com.yandex.div.core.view2.divs.widgets.DivHolderView
|
||||
import com.yandex.div.core.view2.divs.widgets.DivStateLayout
|
||||
import com.yandex.div.core.view2.reuse.InputFocusTracker
|
||||
import com.yandex.div.core.widget.AspectView
|
||||
import com.yandex.div.core.widget.DivViewWrapper
|
||||
import com.yandex.div.internal.Log
|
||||
import com.yandex.div.internal.core.DivItemBuilderResult
|
||||
import com.yandex.div.internal.core.ExpressionSubscriber
|
||||
@@ -375,7 +376,23 @@ internal fun View.clearFocusOnClick(focusTracker: InputFocusTracker) {
|
||||
focusTracker.removeFocusFromFocusedInput()
|
||||
}
|
||||
|
||||
internal val View.bindingContext get() = (this as? DivHolderView<*>)?.bindingContext
|
||||
internal val View.bindingContext: BindingContext? get() {
|
||||
(this as? DivHolderView<*>)?.bindingContext?.let { return it }
|
||||
|
||||
val divViewWrapper = this as? DivViewWrapper
|
||||
?: return null
|
||||
|
||||
val itemChild: View = divViewWrapper.child
|
||||
?: return null
|
||||
|
||||
val divHolderView = itemChild as? DivHolderView<*>
|
||||
?: return null
|
||||
|
||||
val context = divHolderView.bindingContext
|
||||
?: return null
|
||||
|
||||
return context
|
||||
}
|
||||
|
||||
internal fun bindItemBuilder(builder: DivCollectionItemBuilder, resolver: ExpressionResolver, callback: (Any) -> Unit) {
|
||||
builder.data.observe(resolver, callback)
|
||||
|
||||
+10
-1
@@ -1,10 +1,14 @@
|
||||
package com.yandex.div.core.view2.divs.gallery
|
||||
|
||||
import android.view.View
|
||||
import androidx.core.view.children
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.yandex.div.core.ScrollDirection
|
||||
import com.yandex.div.core.view2.BindingContext
|
||||
import com.yandex.div.core.view2.divs.bindingContext
|
||||
import com.yandex.div.core.view2.divs.widgets.DivHolderView
|
||||
import com.yandex.div.core.view2.divs.widgets.DivRecyclerView
|
||||
import com.yandex.div.core.widget.DivViewWrapper
|
||||
import com.yandex.div2.DivGallery
|
||||
import kotlin.math.abs
|
||||
|
||||
@@ -67,7 +71,12 @@ internal class DivGalleryScrollListener(
|
||||
if (position == RecyclerView.NO_POSITION) return@forEach
|
||||
|
||||
val div = (recycler.adapter as DivGalleryAdapter).visibleItems[position].div
|
||||
visibilityActionTracker.startTrackingViewsHierarchy(bindingContext, child, div)
|
||||
|
||||
visibilityActionTracker.startTrackingViewsHierarchy(
|
||||
context = child.bindingContext ?: bindingContext,
|
||||
root = child,
|
||||
rootDiv = div,
|
||||
)
|
||||
}
|
||||
|
||||
// Find and track recycled views containing DisappearActions that are waiting for disappear
|
||||
|
||||
Reference in New Issue
Block a user