mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
Added min sizes to android
Added min sizes
This commit is contained in:
+23
@@ -69,6 +69,7 @@ import com.yandex.div2.DivShapeDrawable
|
||||
import com.yandex.div2.DivSize
|
||||
import com.yandex.div2.DivSizeUnit
|
||||
import com.yandex.div2.DivVisibilityAction
|
||||
import com.yandex.div2.DivWrapContentSize
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
internal fun View.applyPaddings(insets: DivEdgeInsets?, resolver: ExpressionResolver) {
|
||||
@@ -139,6 +140,14 @@ internal fun DivFixedSize.toPx(metrics: DisplayMetrics, resolver: ExpressionReso
|
||||
}
|
||||
}
|
||||
|
||||
internal fun DivWrapContentSize.ConstraintSize.toPx(metrics: DisplayMetrics, resolver: ExpressionResolver): Int {
|
||||
return when (unit.evaluate(resolver)) {
|
||||
DivSizeUnit.DP -> value.evaluate(resolver).dpToPx(metrics)
|
||||
DivSizeUnit.SP -> value.evaluate(resolver).spToPx(metrics)
|
||||
DivSizeUnit.PX -> value.evaluate(resolver)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun DivFixedSize.toPxF(
|
||||
metrics: DisplayMetrics,
|
||||
resolver: ExpressionResolver
|
||||
@@ -176,6 +185,13 @@ internal fun View.applyHeight(div: DivBase, resolver: ExpressionResolver) {
|
||||
applyTransform(div, resolver)
|
||||
}
|
||||
|
||||
internal fun View.applyMinHeight(minHeight: DivWrapContentSize.ConstraintSize?, resolver: ExpressionResolver) {
|
||||
val heightValue = minHeight?.toPx(resources.displayMetrics, resolver) ?: 0
|
||||
if (minimumHeight != heightValue) {
|
||||
minimumHeight = heightValue
|
||||
}
|
||||
}
|
||||
|
||||
internal fun View.applyWidth(div: DivBase, resolver: ExpressionResolver) {
|
||||
val width = div.width.toLayoutParamsSize(resources.displayMetrics, resolver)
|
||||
if (layoutParams.width != width) {
|
||||
@@ -185,6 +201,13 @@ internal fun View.applyWidth(div: DivBase, resolver: ExpressionResolver) {
|
||||
applyTransform(div, resolver)
|
||||
}
|
||||
|
||||
internal fun View.applyMinWidth(minWidth: DivWrapContentSize.ConstraintSize?, resolver: ExpressionResolver) {
|
||||
val widthValue = minWidth?.toPx(resources.displayMetrics, resolver) ?: 0
|
||||
if (minimumWidth != widthValue) {
|
||||
minimumWidth = widthValue
|
||||
}
|
||||
}
|
||||
|
||||
internal fun View.applyTransform(
|
||||
div: DivBase,
|
||||
resolver: ExpressionResolver,
|
||||
|
||||
@@ -183,6 +183,15 @@ internal class DivBaseBinder @Inject constructor(
|
||||
is DivSize.WrapContent -> {
|
||||
if (width.value.constrained?.evaluate(resolver) == true) {
|
||||
(layoutParams as? LinearContainerLayout.LayoutParams)?.weight = 1f
|
||||
} else {
|
||||
applyMinWidth(width.value.minSize, resolver)
|
||||
|
||||
subscriber.addSubscription(width.value.minSize?.value?.observe(resolver) {
|
||||
applyMinWidth(width.value.minSize, resolver)
|
||||
} ?: Disposable.NULL)
|
||||
subscriber.addSubscription(width.value.minSize?.unit?.observe(resolver) {
|
||||
applyMinWidth(width.value.minSize, resolver)
|
||||
} ?: Disposable.NULL)
|
||||
}
|
||||
}
|
||||
else -> Unit
|
||||
@@ -201,6 +210,15 @@ internal class DivBaseBinder @Inject constructor(
|
||||
is DivSize.WrapContent -> {
|
||||
if (height.value.constrained?.evaluate(resolver) == true) {
|
||||
(layoutParams as? LinearContainerLayout.LayoutParams)?.weight = 1f
|
||||
} else {
|
||||
applyMinHeight(height.value.minSize, resolver)
|
||||
|
||||
subscriber.addSubscription(height.value.minSize?.value?.observe(resolver) {
|
||||
applyMinHeight(height.value.minSize, resolver)
|
||||
} ?: Disposable.NULL)
|
||||
subscriber.addSubscription(height.value.minSize?.unit?.observe(resolver) {
|
||||
applyMinHeight(height.value.minSize, resolver)
|
||||
} ?: Disposable.NULL)
|
||||
}
|
||||
}
|
||||
else -> Unit
|
||||
|
||||
Reference in New Issue
Block a user