Added min sizes to android

Added min sizes
This commit is contained in:
arsenosov
2022-12-20 20:08:00 +03:00
parent cf42d8cb6a
commit eaafdfadac
2 changed files with 41 additions and 0 deletions
@@ -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