Refactor SplitType APIs
Bug: 267391190
Bug: 269199014
Test: presubmit
Relnote: "
- Remove RatioSplitType, ExpandContainersSplit and HingeSplitType
They are SplitType now.
- Replace #splitEqually(), #expandContainers() amd #splitByHinge to
constant SplitType SPLIT_TYPE_EQUAL,
SPLIT_TYPE_EXPAND and SPLIT_TYPE_HINGE
- Remove the functionality to set fallback type of hinge split type.
If the hinge split type cannot be applied due to the current device
or window state, it fallbacks to split the parent task container
equally. Use SplitController#setSplitAttributesCalculator to
customize the fallback split type.
"
Merged-In: Ifcc59d8ad1ea8fd7de04b65c597fff20f024bc13
Change-Id: Ifcc59d8ad1ea8fd7de04b65c597fff20f024bc13
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
index c5f46fd..95a6ea2 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
@@ -34,6 +34,8 @@
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.LEFT_TO_RIGHT
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.RIGHT_TO_LEFT
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.TOP_TO_BOTTOM
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
import androidx.window.embedding.SplitAttributesCalculatorParams
import androidx.window.embedding.SplitController
import androidx.window.embedding.SplitController.SplitSupportStatus.Companion.SPLIT_AVAILABLE
@@ -76,7 +78,7 @@
val config = params.parentConfiguration
// The SplitAttributes to occupy the whole task bounds
val expandContainersAttrs = SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.expandContainers())
+ .setSplitType(SplitAttributes.SplitType.SPLIT_TYPE_EXPAND)
.build()
val tag = params.splitRuleTag
val shouldReversed = tag?.contains(SUFFIX_REVERSED) ?: false
@@ -104,7 +106,7 @@
TAG_SHOW_FULLSCREEN_IN_PORTRAIT + SUFFIX_AND_HORIZONTAL_LAYOUT_IN_TABLETOP -> {
if (isTabletop) {
return SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(
if (shouldReversed) {
BOTTOM_TO_TOP
@@ -121,7 +123,7 @@
TAG_SHOW_HORIZONTAL_LAYOUT_IN_TABLETOP -> {
if (isTabletop) {
return SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(
if (shouldReversed) {
BOTTOM_TO_TOP
@@ -135,7 +137,7 @@
}
TAG_SHOW_DIFFERENT_LAYOUT_WITH_SIZE -> {
return SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(
if (shouldReversed) {
BOTTOM_TO_TOP
@@ -149,7 +151,7 @@
expandContainersAttrs
} else if (config.screenWidthDp <= 600) {
SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitEqually())
+ .setSplitType(SPLIT_TYPE_EQUAL)
.setLayoutDirection(
if (shouldReversed) {
BOTTOM_TO_TOP
@@ -161,7 +163,7 @@
.build()
} else {
SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitEqually())
+ .setSplitType(SPLIT_TYPE_EQUAL)
.setLayoutDirection(
if (shouldReversed) {
RIGHT_TO_LEFT
@@ -179,7 +181,7 @@
return SplitAttributes.Builder()
.setSplitType(
if (foldingState.isSeparating) {
- SplitAttributes.SplitType.splitByHinge()
+ SPLIT_TYPE_HINGE
} else {
SplitAttributes.SplitType.ratio(0.3f)
}
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
index d035865..680d8d2 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
@@ -36,6 +36,8 @@
import androidx.window.embedding.EmbeddingRule
import androidx.window.embedding.RuleController
import androidx.window.embedding.SplitAttributes
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
import androidx.window.embedding.SplitController
import androidx.window.embedding.SplitController.SplitSupportStatus.Companion.SPLIT_AVAILABLE
import androidx.window.embedding.SplitInfo
@@ -262,7 +264,7 @@
)
splitPairFilters.add(splitPairFilter)
val defaultSplitAttributes = SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitEqually())
+ .setSplitType(SPLIT_TYPE_EQUAL)
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
.setAnimationBackgroundColor(demoActivityEmbeddingController.animationBackgroundColor)
.build()
@@ -309,7 +311,7 @@
private suspend fun updateSplitAttributesText(newSplitInfos: List<SplitInfo>) {
var splitAttributes: SplitAttributes = SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.expandContainers())
+ .setSplitType(SPLIT_TYPE_EXPAND)
.build()
var suggestToFinishItself = false
val isCallbackSupported = splitController.isSplitAttributesCalculatorSupported()
@@ -318,8 +320,7 @@
if (info.contains(this@SplitDeviceStateActivityBase)) {
splitAttributes = info.splitAttributes
if (componentName == activityB &&
- splitAttributes.splitType
- is SplitAttributes.SplitType.ExpandContainersSplitType
+ splitAttributes.splitType == SPLIT_TYPE_EXPAND
) {
// We don't put any functionality on activity B. Suggest users to finish the
// activity if it fills the host task.
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitPipActivityBase.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitPipActivityBase.kt
index 370951f..4ab221f 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitPipActivityBase.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitPipActivityBase.kt
@@ -35,6 +35,7 @@
import androidx.window.embedding.EmbeddingRule
import androidx.window.embedding.RuleController
import androidx.window.embedding.SplitAttributes
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitController
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
@@ -109,8 +110,7 @@
var isInSplit = false
for (info in newSplitInfos) {
if (info.contains(this@SplitPipActivityBase) &&
- info.splitAttributes.splitType !is
- SplitAttributes.SplitType.ExpandContainersSplitType
+ info.splitAttributes.splitType == SPLIT_TYPE_EXPAND
) {
isInSplit = true
break
diff --git a/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingJavaTest.java b/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingJavaTest.java
index 37fc296..ade64a2 100644
--- a/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingJavaTest.java
+++ b/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingJavaTest.java
@@ -16,6 +16,8 @@
package androidx.window.testing.emedding;
+import static androidx.window.embedding.SplitAttributes.SplitType.SPLIT_TYPE_HINGE;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -52,8 +54,7 @@
private static final SplitAttributes DEFAULT_SPLIT_ATTRIBUTES =
new SplitAttributes.Builder().build();
private static final SplitAttributes TABLETOP_HINGE_ATTRIBUTES = new SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitByHinge(
- SplitAttributes.SplitType.splitEqually()))
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(SplitAttributes.LayoutDirection.TOP_TO_BOTTOM)
.build();
@@ -114,7 +115,7 @@
return params.getDefaultSplitAttributes();
} else {
return new SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.expandContainers())
+ .setSplitType(SplitAttributes.SplitType.SPLIT_TYPE_EXPAND)
.build();
}
}
diff --git a/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingTest.kt b/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingTest.kt
index 15f0193a..0eb2411 100644
--- a/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingTest.kt
+++ b/window/window-testing/src/androidTest/java/androidx/window/testing/emedding/SplitAttributesCalculatorParamsTestingTest.kt
@@ -21,6 +21,8 @@
import android.graphics.Rect
import androidx.window.core.ExperimentalWindowApi
import androidx.window.embedding.SplitAttributes
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitAttributesCalculatorParams
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowLayoutInfo
@@ -91,7 +93,7 @@
params.defaultSplitAttributes
} else {
SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.expandContainers())
+ .setSplitType(SPLIT_TYPE_EXPAND)
.build()
}
}
@@ -101,7 +103,7 @@
private val TEST_METRICS = WindowMetrics(TEST_BOUNDS)
private val DEFAULT_SPLIT_ATTRIBUTES = SplitAttributes.Builder().build()
private val TABLETOP_HINGE_ATTRIBUTES = SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(SplitAttributes.LayoutDirection.TOP_TO_BOTTOM)
.build()
}
diff --git a/window/window/api/current.txt b/window/window/api/current.txt
index f514e31..a7806dc 100644
--- a/window/window/api/current.txt
+++ b/window/window/api/current.txt
@@ -126,32 +126,16 @@
public static final class SplitAttributes.LayoutDirection.Companion {
}
- public static class SplitAttributes.SplitType {
- method public static final androidx.window.embedding.SplitAttributes.SplitType.ExpandContainersSplitType expandContainers();
- method public static final androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
- method public static final androidx.window.embedding.SplitAttributes.SplitType.HingeSplitType splitByHinge(optional androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType);
- method public static final androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType splitEqually();
+ public static final class SplitAttributes.SplitType {
+ method public static androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
field public static final androidx.window.embedding.SplitAttributes.SplitType.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EQUAL;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EXPAND;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_HINGE;
}
public static final class SplitAttributes.SplitType.Companion {
- method public androidx.window.embedding.SplitAttributes.SplitType.ExpandContainersSplitType expandContainers();
- method public androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
- method public androidx.window.embedding.SplitAttributes.SplitType.HingeSplitType splitByHinge(optional androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType);
- method public androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType splitEqually();
- }
-
- public static final class SplitAttributes.SplitType.ExpandContainersSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- }
-
- public static final class SplitAttributes.SplitType.HingeSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- method public androidx.window.embedding.SplitAttributes.SplitType getFallbackSplitType();
- property public final androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType;
- }
-
- public static final class SplitAttributes.SplitType.RatioSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- method public float getRatio();
- property public final float ratio;
+ method public androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
}
public final class SplitController {
diff --git a/window/window/api/public_plus_experimental_current.txt b/window/window/api/public_plus_experimental_current.txt
index 80d1b6b..01b7d59 100644
--- a/window/window/api/public_plus_experimental_current.txt
+++ b/window/window/api/public_plus_experimental_current.txt
@@ -167,32 +167,16 @@
public static final class SplitAttributes.LayoutDirection.Companion {
}
- public static class SplitAttributes.SplitType {
- method public static final androidx.window.embedding.SplitAttributes.SplitType.ExpandContainersSplitType expandContainers();
- method public static final androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
- method public static final androidx.window.embedding.SplitAttributes.SplitType.HingeSplitType splitByHinge(optional androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType);
- method public static final androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType splitEqually();
+ public static final class SplitAttributes.SplitType {
+ method public static androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
field public static final androidx.window.embedding.SplitAttributes.SplitType.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EQUAL;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EXPAND;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_HINGE;
}
public static final class SplitAttributes.SplitType.Companion {
- method public androidx.window.embedding.SplitAttributes.SplitType.ExpandContainersSplitType expandContainers();
- method public androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
- method public androidx.window.embedding.SplitAttributes.SplitType.HingeSplitType splitByHinge(optional androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType);
- method public androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType splitEqually();
- }
-
- public static final class SplitAttributes.SplitType.ExpandContainersSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- }
-
- public static final class SplitAttributes.SplitType.HingeSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- method public androidx.window.embedding.SplitAttributes.SplitType getFallbackSplitType();
- property public final androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType;
- }
-
- public static final class SplitAttributes.SplitType.RatioSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- method public float getRatio();
- property public final float ratio;
+ method public androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
}
@androidx.window.core.ExperimentalWindowApi public final class SplitAttributesCalculatorParams {
diff --git a/window/window/api/restricted_current.txt b/window/window/api/restricted_current.txt
index f514e31..a7806dc 100644
--- a/window/window/api/restricted_current.txt
+++ b/window/window/api/restricted_current.txt
@@ -126,32 +126,16 @@
public static final class SplitAttributes.LayoutDirection.Companion {
}
- public static class SplitAttributes.SplitType {
- method public static final androidx.window.embedding.SplitAttributes.SplitType.ExpandContainersSplitType expandContainers();
- method public static final androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
- method public static final androidx.window.embedding.SplitAttributes.SplitType.HingeSplitType splitByHinge(optional androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType);
- method public static final androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType splitEqually();
+ public static final class SplitAttributes.SplitType {
+ method public static androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
field public static final androidx.window.embedding.SplitAttributes.SplitType.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EQUAL;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EXPAND;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_HINGE;
}
public static final class SplitAttributes.SplitType.Companion {
- method public androidx.window.embedding.SplitAttributes.SplitType.ExpandContainersSplitType expandContainers();
- method public androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
- method public androidx.window.embedding.SplitAttributes.SplitType.HingeSplitType splitByHinge(optional androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType);
- method public androidx.window.embedding.SplitAttributes.SplitType.RatioSplitType splitEqually();
- }
-
- public static final class SplitAttributes.SplitType.ExpandContainersSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- }
-
- public static final class SplitAttributes.SplitType.HingeSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- method public androidx.window.embedding.SplitAttributes.SplitType getFallbackSplitType();
- property public final androidx.window.embedding.SplitAttributes.SplitType fallbackSplitType;
- }
-
- public static final class SplitAttributes.SplitType.RatioSplitType extends androidx.window.embedding.SplitAttributes.SplitType {
- method public float getRatio();
- property public final float ratio;
+ method public androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
}
public final class SplitController {
diff --git a/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt b/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
index 2cba736..9e69205 100644
--- a/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
+++ b/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
@@ -21,6 +21,9 @@
import androidx.annotation.Sampled
import androidx.window.core.ExperimentalWindowApi
import androidx.window.embedding.SplitAttributes
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
import androidx.window.embedding.SplitController
import androidx.window.layout.FoldingFeature
@@ -50,7 +53,7 @@
// Split the parent container that followed by the hinge if the hinge separates the
// parent window.
return@setSplitAttributesCalculator SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(
if (foldingState.orientation == FoldingFeature.Orientation.HORIZONTAL) {
SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
@@ -67,14 +70,14 @@
) {
// Split the parent container equally and vertically if the device is in landscape.
SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.splitEqually())
+ .setSplitType(SPLIT_TYPE_EQUAL)
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GRAY))
.build()
} else {
// Expand containers if the device is in portrait or the width is less than 600 dp.
SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.expandContainers())
+ .setSplitType(SPLIT_TYPE_EXPAND)
.build()
}
}
@@ -104,7 +107,7 @@
} else {
// Fallback to expand the secondary container
builder
- .setSplitType(SplitAttributes.SplitType.expandContainers())
+ .setSplitType(SPLIT_TYPE_EXPAND)
.build()
}
}
@@ -122,7 +125,7 @@
val areDefaultConstraintsSatisfied = params.areDefaultConstraintsSatisfied
val expandContainersAttrs = SplitAttributes.Builder()
- .setSplitType(SplitAttributes.SplitType.expandContainers())
+ .setSplitType(SPLIT_TYPE_EXPAND)
.build()
if (!areDefaultConstraintsSatisfied) {
return@setSplitAttributesCalculator expandContainersAttrs
@@ -130,7 +133,7 @@
// Always expand containers for the splitRule tagged as
// TAG_SPLIT_RULE_EXPAND_IN_PORTRAIT if the device is in portrait
// even if [areDefaultConstraintsSatisfied] reports true.
- if (bounds.height() > bounds.width() && TAG_SPLIT_RULE_EXPAND_IN_PORTRAIT.equals(tag)) {
+ if (bounds.height() > bounds.width() && TAG_SPLIT_RULE_EXPAND_IN_PORTRAIT == tag) {
return@setSplitAttributesCalculator expandContainersAttrs
}
// Otherwise, use the default splitAttributes.
@@ -138,6 +141,22 @@
}
}
+@OptIn(ExperimentalWindowApi::class)
+@Sampled
+fun fallbackToExpandContainersForSplitTypeHinge() {
+ SplitController.getInstance(context).setSplitAttributesCalculator { params ->
+ SplitAttributes.Builder()
+ .setSplitType(
+ if (params.parentWindowLayoutInfo.displayFeatures
+ .filterIsInstance<FoldingFeature>().isNotEmpty()) {
+ SPLIT_TYPE_HINGE
+ } else {
+ SPLIT_TYPE_EXPAND
+ }
+ ).build()
+ }
+}
+
/** Assume it's a valid [Application]... */
val context = Application()
const val TAG_SPLIT_RULE_MAIN = "main"
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
index 0ce0920..631dfc3 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
@@ -25,8 +25,10 @@
import androidx.window.core.ExtensionsUtil
import androidx.window.core.PredicateAdapter
import androidx.window.embedding.SplitAttributes.SplitType
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.extensions.WindowExtensions
import androidx.window.extensions.embedding.SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
+import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import org.junit.Assert.assertEquals
@@ -57,7 +59,7 @@
ActivityStack(ArrayList(), isEmpty = true),
ActivityStack(ArrayList(), isEmpty = true),
SplitAttributes.Builder()
- .setSplitType(SplitType.splitEqually())
+ .setSplitType(SplitType.SPLIT_TYPE_EQUAL)
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
@@ -80,7 +82,7 @@
ActivityStack(ArrayList(), isEmpty = true),
ActivityStack(ArrayList(), isEmpty = true),
SplitAttributes.Builder()
- .setSplitType(SplitType.expandContainers())
+ .setSplitType(SplitType.SPLIT_TYPE_EXPAND)
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
.build()
)
@@ -120,11 +122,8 @@
createTestOEMActivityStack(ArrayList(), true),
createTestOEMActivityStack(ArrayList(), true),
OEMSplitAttributes.Builder()
- .setSplitType(
- OEMSplitAttributes.SplitType.HingeSplitType(
- OEMSplitAttributes.SplitType.RatioSplitType(0.3f)
- )
- ).setLayoutDirection(TOP_TO_BOTTOM)
+ .setSplitType(OEMSplitAttributes.SplitType.HingeSplitType(RatioSplitType(0.5f)))
+ .setLayoutDirection(TOP_TO_BOTTOM)
.setAnimationBackgroundColor(Color.YELLOW)
.build(),
)
@@ -132,7 +131,7 @@
ActivityStack(ArrayList(), isEmpty = true),
ActivityStack(ArrayList(), isEmpty = true),
SplitAttributes.Builder()
- .setSplitType(SplitType.splitByHinge(SplitType.ratio(0.3f)))
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(SplitAttributes.LayoutDirection.TOP_TO_BOTTOM)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.YELLOW))
.build()
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/SplitAttributesTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/SplitAttributesTest.kt
index 69c507d..b896bb4 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/SplitAttributesTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/SplitAttributesTest.kt
@@ -24,6 +24,9 @@
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.RIGHT_TO_LEFT
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.TOP_TO_BOTTOM
import androidx.window.embedding.SplitAttributes.SplitType
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertThrows
@@ -34,27 +37,27 @@
@Test
fun testSplitAttributesEquals() {
val attrs1 = SplitAttributes.Builder()
- .setSplitType(SplitType.splitEqually())
+ .setSplitType(SPLIT_TYPE_EQUAL)
.setLayoutDirection(LOCALE)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
val attrs2 = SplitAttributes.Builder()
- .setSplitType(SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(LOCALE)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
val attrs3 = SplitAttributes.Builder()
- .setSplitType(SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(TOP_TO_BOTTOM)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
val attrs4 = SplitAttributes.Builder()
- .setSplitType(SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(TOP_TO_BOTTOM)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GREEN))
.build()
val attrs5 = SplitAttributes.Builder()
- .setSplitType(SplitType.splitByHinge())
+ .setSplitType(SPLIT_TYPE_HINGE)
.setLayoutDirection(TOP_TO_BOTTOM)
.setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GREEN))
.build()
@@ -78,20 +81,12 @@
@Test
fun testTypesEquals() {
val splitTypes = arrayOf(
- SplitType.splitEqually(),
- SplitType.expandContainers(),
- SplitType.splitByHinge(),
- SplitType.splitByHinge(SplitType.expandContainers())
+ SPLIT_TYPE_EQUAL,
+ SPLIT_TYPE_EXPAND,
+ SPLIT_TYPE_HINGE,
)
for ((i, type1) in splitTypes.withIndex()) {
- if (type1 is SplitType.RatioSplitType) {
- assertEquals(
- "Two SplitTypes must regarded as equal if their ratios are the same.",
- type1, SplitType.ratio(type1.value)
- )
- assertEquals(type1.hashCode(), SplitType.ratio(type1.value).hashCode())
- }
for ((j, type2) in splitTypes.withIndex()) {
if (i == j) {
assertEquals(type1, type2)
@@ -102,6 +97,12 @@
}
}
}
+
+ assertEquals(
+ "Two SplitTypes must regarded as equal if their ratios are the same.",
+ SPLIT_TYPE_EQUAL, SplitType.ratio(0.5f)
+ )
+ assertEquals(SPLIT_TYPE_EQUAL.hashCode(), SplitType.ratio(0.5f).hashCode())
}
@Test
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
index d97e70a..111a858 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
@@ -43,9 +43,14 @@
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.RIGHT_TO_LEFT
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.TOP_TO_BOTTOM
import androidx.window.embedding.SplitAttributes.SplitType
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.ratio
import androidx.window.extensions.WindowExtensions
import androidx.window.extensions.core.util.function.Function
import androidx.window.extensions.core.util.function.Predicate
+import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType
import androidx.window.extensions.embedding.SplitPairRule.FINISH_ADJACENT
import androidx.window.extensions.embedding.SplitPairRule.FINISH_ALWAYS
import androidx.window.extensions.embedding.SplitPairRule.FINISH_NEVER
@@ -91,8 +96,14 @@
internal fun translate(splitAttributes: OEMSplitAttributes): SplitAttributes =
SplitAttributes.Builder()
- .setSplitType(translate(splitAttributes.splitType))
- .setLayoutDirection(
+ .setSplitType(
+ when (val splitType = splitAttributes.splitType) {
+ is OEMSplitType.HingeSplitType -> SPLIT_TYPE_HINGE
+ is OEMSplitType.ExpandContainersSplitType -> SPLIT_TYPE_EXPAND
+ is OEMSplitType.RatioSplitType -> ratio(splitType.ratio)
+ else -> throw IllegalArgumentException("Unknown split type: $splitType")
+ }
+ ).setLayoutDirection(
when (val layoutDirection = splitAttributes.layoutDirection) {
OEMSplitAttributes.LayoutDirection.LEFT_TO_RIGHT -> LEFT_TO_RIGHT
OEMSplitAttributes.LayoutDirection.RIGHT_TO_LEFT -> RIGHT_TO_LEFT
@@ -109,26 +120,6 @@
)
.build()
- private fun translate(splitType: OEMSplitType): SplitType =
- when (splitType) {
- is OEMSplitType.RatioSplitType -> translate(splitType)
- is OEMSplitType.ExpandContainersSplitType -> SplitType.expandContainers()
- is OEMSplitType.HingeSplitType -> translate(splitType)
- else -> throw IllegalArgumentException("Unsupported split type: $splitType")
- }
-
- private fun translate(hinge: OEMSplitType.HingeSplitType): SplitType.HingeSplitType =
- SplitType.splitByHinge(
- when (val splitType = hinge.fallbackSplitType) {
- is OEMSplitType.ExpandContainersSplitType -> SplitType.expandContainers()
- is OEMSplitType.RatioSplitType -> translate(splitType)
- else -> throw IllegalArgumentException("Unsupported split type: $splitType")
- }
- )
-
- private fun translate(splitRatio: OEMSplitType.RatioSplitType): SplitType.RatioSplitType =
- SplitType.ratio(splitRatio.ratio)
-
@OptIn(ExperimentalWindowApi::class)
fun translateSplitAttributesCalculator(
calculator: (SplitAttributesCalculatorParams) -> SplitAttributes
@@ -205,7 +196,7 @@
}
}
- internal fun translateSplitAttributes(splitAttributes: SplitAttributes): OEMSplitAttributes {
+ fun translateSplitAttributes(splitAttributes: SplitAttributes): OEMSplitAttributes {
require(vendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2)
// To workaround the "unused" error in ktlint. It is necessary to translate SplitAttributes
// from WM Jetpack version to WM extension version.
@@ -230,25 +221,22 @@
private fun translateSplitType(splitType: SplitType): OEMSplitType {
require(vendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2)
return when (splitType) {
- is SplitType.HingeSplitType -> translateHinge(splitType)
- is SplitType.ExpandContainersSplitType -> OEMSplitType.ExpandContainersSplitType()
- is SplitType.RatioSplitType -> translateRatio(splitType)
- else -> throw IllegalArgumentException("Unsupported splitType: $splitType")
+ SPLIT_TYPE_HINGE -> OEMSplitType.HingeSplitType(
+ translateSplitType(SPLIT_TYPE_EQUAL)
+ )
+ SPLIT_TYPE_EXPAND -> OEMSplitType.ExpandContainersSplitType()
+ else -> {
+ val ratio = splitType.value
+ if (ratio > 0.0 && ratio < 1.0) {
+ RatioSplitType(ratio)
+ } else {
+ throw IllegalArgumentException("Unsupported SplitType: $splitType with value:" +
+ " ${splitType.value}")
+ }
+ }
}
}
- private fun translateHinge(hinge: SplitType.HingeSplitType): OEMSplitType.HingeSplitType =
- OEMSplitType.HingeSplitType(
- when (val splitType = hinge.fallbackSplitType) {
- is SplitType.ExpandContainersSplitType -> OEMSplitType.ExpandContainersSplitType()
- is SplitType.RatioSplitType -> translateRatio(splitType)
- else -> throw IllegalArgumentException("Unsupported splitType: $splitType")
- }
- )
-
- private fun translateRatio(splitRatio: SplitType.RatioSplitType): OEMSplitType.RatioSplitType =
- OEMSplitType.RatioSplitType(splitRatio.ratio)
-
private fun translateSplitPlaceholderRule(
context: Context,
rule: SplitPlaceholderRule,
@@ -490,7 +478,7 @@
* higher.
*/
private fun isSplitAttributesSupported(attrs: SplitAttributes) =
- attrs.splitType is SplitType.RatioSplitType &&
+ attrs.splitType.value in 0.0..1.0 && attrs.splitType.value != 1.0f &&
attrs.layoutDirection in arrayOf(LEFT_TO_RIGHT, RIGHT_TO_LEFT, LOCALE)
@SuppressLint("ClassVerificationFailure", "NewApi")
@@ -513,40 +501,16 @@
splitRule.checkParentMetrics(context, windowMetrics)
}
- // TODO(b/267391190): Remove the NoSuchMethodError in EmbeddingAdapter
- fun translateCompat(splitInfo: OEMSplitInfo): SplitInfo {
- val primaryActivityStack = splitInfo.primaryActivityStack
- val isPrimaryStackEmpty = try {
- primaryActivityStack.isEmpty
- } catch (e: NoSuchMethodError) {
- // Users may use older library which #isEmpty hasn't existed. Provide a fallback
- // value for this case to avoid crash.
- false
- }
- val primaryFragment = ActivityStack(
- primaryActivityStack.activities,
- isPrimaryStackEmpty
+ fun translateCompat(splitInfo: OEMSplitInfo): SplitInfo = SplitInfo(
+ ActivityStack(
+ splitInfo.primaryActivityStack.activities,
+ splitInfo.primaryActivityStack.isEmpty,
+ ),
+ ActivityStack(
+ splitInfo.secondaryActivityStack.activities,
+ splitInfo.secondaryActivityStack.isEmpty,
+ ),
+ getSplitAttributesCompat(splitInfo),
)
-
- val secondaryActivityStack = splitInfo.secondaryActivityStack
- val isSecondaryStackEmpty = try {
- secondaryActivityStack.isEmpty
- } catch (e: NoSuchMethodError) {
- // Users may use older library which #isEmpty hasn't existed. Provide a fallback
- // value for this case to avoid crash.
- false
- }
- val secondaryFragment = ActivityStack(
- secondaryActivityStack.activities,
- isSecondaryStackEmpty
- )
-
- val splitAttributes = getSplitAttributesCompat(splitInfo)
- return SplitInfo(
- primaryFragment,
- secondaryFragment,
- splitAttributes
- )
- }
}
}
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt b/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
index 64219d2..645a56d 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
@@ -25,7 +25,7 @@
import androidx.window.core.VerificationMode
import androidx.window.embedding.SplitAttributes.BackgroundColor
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.LOCALE
-import androidx.window.embedding.SplitAttributes.SplitType.Companion.splitEqually
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
/**
* Attributes that describe how the parent window (typically the activity task
@@ -65,7 +65,7 @@
* The split type attribute. Defaults to an equal split of the parent window
* for the primary and secondary containers.
*/
- val splitType: SplitType = splitEqually(),
+ val splitType: SplitType = SPLIT_TYPE_EQUAL,
/**
* The layout direction attribute for the parent window split. The default
@@ -90,7 +90,7 @@
* The type of parent window split, which defines the proportion of the
* parent window occupied by the primary and secondary activity containers.
*/
- open class SplitType internal constructor(
+ class SplitType internal constructor(
/**
* The description of this `SplitType`.
@@ -135,53 +135,9 @@
override fun hashCode(): Int = description.hashCode() + 31 * value.hashCode()
/**
- * A window split that's based on the ratio of the size of the primary
- * container to the size of the parent window.
- *
- * @see SplitAttributes.SplitType.ratio
- */
- class RatioSplitType internal constructor(
-
- /**
- * The proportion of the parent window occupied by the primary
- * container of the split.
- */
- @FloatRange(from = 0.0, to = 1.0, fromInclusive = false, toInclusive = false)
- val ratio: Float
-
- ) : SplitType("ratio:$ratio", ratio)
-
- /**
- * A window split in which the primary and secondary activity containers
- * each occupy the entire parent window.
- *
- * The secondary container overlays the primary container.
- *
- * @see SplitAttributes.SplitType.ExpandContainersSplitType
- */
- class ExpandContainersSplitType internal constructor() : SplitType("expandContainer", 0.0f)
-
- /**
- * A parent window split that conforms to a hinge or separating fold in
- * the device display.
- *
- * @see SplitAttributes.SplitType.splitByHinge
- */
- class HingeSplitType internal constructor(
-
- /**
- * The split type to use if a split based on the device hinge or
- * separating fold cannot be determined.
- */
- val fallbackSplitType: SplitType
-
- ) : SplitType("hinge, fallback=$fallbackSplitType", -1.0f)
-
- /**
* Methods that create various split types.
*/
companion object {
-
/**
* Creates a split type based on the proportion of the parent window
* occupied by the primary container of the split.
@@ -197,13 +153,13 @@
*
* @param ratio The proportion of the parent window occupied by the
* primary container of the split.
- * @return An instance of [RatioSplitType] with the specified ratio.
+ * @return An instance of `SplitType` with the specified ratio.
*/
@JvmStatic
fun ratio(
@FloatRange(from = 0.0, to = 1.0, fromInclusive = false, toInclusive = false)
ratio: Float
- ): RatioSplitType {
+ ): SplitType {
val checkedRatio = ratio.startSpecification(
TAG,
VerificationMode.STRICT
@@ -211,45 +167,37 @@
"Use SplitType.expandContainers() instead of 0 or 1.") {
ratio in 0.0..1.0 && ratio !in arrayOf(0.0f, 1.0f)
}.compute()!!
- return RatioSplitType(checkedRatio)
+ return SplitType("ratio:$checkedRatio", checkedRatio)
}
- private val EXPAND_CONTAINERS = ExpandContainersSplitType()
-
/**
- * Creates a split type in which the primary and secondary activity
- * containers each expand to fill the parent window; the secondary
- * container overlays the primary container.
+ * A split type in which the primary and secondary activity containers each expand to
+ * fill the parent window; the secondary container overlays the primary container.
*
- * Use this method with the function set in
+ * It is useful to use this `SplitType` with the function set in
* [SplitController.setSplitAttributesCalculator] to expand the activity containers in
- * some device states. The following sample shows how to always fill the parent bounds
- * if the device is in portrait orientation:
+ * some device or window states. The following sample shows how to always fill the
+ * parent bounds if the device is in portrait orientation:
*
* @sample androidx.window.samples.embedding.expandContainersInPortrait
- *
- * @return An instance of [ExpandContainersSplitType].
*/
- @JvmStatic
- fun expandContainers(): ExpandContainersSplitType = EXPAND_CONTAINERS
+ @JvmField
+ val SPLIT_TYPE_EXPAND = SplitType("expandContainers", 0.0f)
/**
- * Creates a split type in which the primary and secondary
- * containers occupy equal portions of the parent window.
+ * A split type in which the primary and secondary containers occupy equal portions of
+ * the parent window.
*
* Serves as the default [SplitType].
- *
- * @return A `RatioSplitType` in which the activity containers
- * occupy equal portions of the parent window.
*/
- @JvmStatic
- fun splitEqually(): RatioSplitType = ratio(0.5f)
+ @JvmField
+ val SPLIT_TYPE_EQUAL = ratio(0.5f)
/**
- * Creates a split type in which the split ratio conforms to the
+ * A split type in which the split ratio conforms to the
* position of a hinge or separating fold in the device display.
*
- * The split type is created only if:
+ * The split type works only if:
* <ul>
* <li>The host task is not in multi-window mode (e.g.,
* split-screen mode or picture-in-picture mode)</li>
@@ -268,40 +216,29 @@
* </li>
* </ul>
*
- * Otherwise, the method falls back to `fallbackSplitType`.
+ * Otherwise, this `SplitType` fallback to show the split with [SPLIT_TYPE_EQUAL].
*
- * @param fallbackSplitType The split type to use if a split based
- * on the device hinge or separating fold cannot be determined.
- * Can be a [RatioSplitType] or [ExpandContainersSplitType].
- * Defaults to [SplitType.splitEqually].
- * @return An instance of [HingeSplitType] with a fallback split
- * type.
+ * If the app wants to have another fallback `SplitType` if [SPLIT_TYPE_HINGE] cannot
+ * be applied. It is suggested to use [SplitController.setSplitAttributesCalculator] to
+ * customize the fallback `SplitType`.
+ *
+ * The following sample shows how to fallback to [SPLIT_TYPE_EXPAND]
+ * if there's no hinge area in the parent window container bounds.
+ *
+ * @sample androidx.window.samples.embedding.fallbackToExpandContainersForSplitTypeHinge
*/
- @JvmStatic
- fun splitByHinge(
- fallbackSplitType: SplitType = splitEqually()
- ): HingeSplitType {
- val checkedType = fallbackSplitType.startSpecification(
- TAG,
- VerificationMode.STRICT
- ).require(
- "FallbackSplitType must be a RatioSplitType or ExpandContainerSplitType"
- ) {
- fallbackSplitType is RatioSplitType ||
- fallbackSplitType is ExpandContainersSplitType
- }.compute()!!
- return HingeSplitType(checkedType)
- }
+ @JvmField
+ val SPLIT_TYPE_HINGE = SplitType("hinge", -1.0f)
+ // TODO(b/241044092): add XML support to SPLIT_TYPE_HINGE
/**
* Returns a `SplitType` with the given `value`.
*/
@SuppressLint("Range") // value = 0.0 is covered.
- @JvmStatic
internal fun buildSplitTypeFromValue(
@FloatRange(from = 0.0, to = 1.0, toInclusive = false) value: Float
- ) = if (value == EXPAND_CONTAINERS.value) {
- expandContainers()
+ ) = if (value == SPLIT_TYPE_EXPAND.value) {
+ SPLIT_TYPE_EXPAND
} else {
ratio(value)
}
@@ -558,7 +495,7 @@
* window background color.
*/
class Builder {
- private var splitType: SplitType = splitEqually()
+ private var splitType = SPLIT_TYPE_EQUAL
private var layoutDirection = LOCALE
private var animationBackgroundColor = BackgroundColor.DEFAULT