Merge "Cleanup lint baseline in ConstraintLayout" into androidx-master-dev
diff --git a/activity/activity/src/androidTest/AndroidManifest.xml b/activity/activity/src/androidTest/AndroidManifest.xml
index 993f729..12d6eee 100644
--- a/activity/activity/src/androidTest/AndroidManifest.xml
+++ b/activity/activity/src/androidTest/AndroidManifest.xml
@@ -24,6 +24,7 @@
<activity android:name="androidx.activity.ViewModelActivity"/>
<activity android:name="androidx.activity.SavedStateActivity"/>
<activity android:name="androidx.activity.ContentViewActivity"/>
+ <activity android:name="androidx.activity.EmptyContentActivity" />
<activity android:name="androidx.activity.AutoRestarterActivity"/>
</application>
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt
index ce319d6..b0f8bb0 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt
@@ -16,13 +16,18 @@
package androidx.activity
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.TextView
import androidx.activity.test.R
+import androidx.lifecycle.ViewTreeLifecycleOwner
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.testutils.withActivity
import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
import org.junit.Test
import org.junit.runner.RunWith
@@ -38,6 +43,56 @@
.isNotNull()
}
}
+
+ @Test
+ fun testViewTreeLifecycleOwnerInflation() {
+ with(ActivityScenario.launch(ContentViewActivity::class.java)) {
+ val inflatedTextView: TextView = withActivity { findViewById(R.id.inflated_text_view) }
+
+ withActivity {
+ assertWithMessage("inflated view has correct ViewTreeLifecycleOwner")
+ .that(ViewTreeLifecycleOwner.get(inflatedTextView))
+ .isSameInstanceAs(this@withActivity)
+ }
+ }
+ }
+
+ @Test
+ fun testViewTreeLifecycleAttachment() {
+ runAttachTest("setContentView view only") { setContentView(it) }
+ runAttachTest("setContentView with LayoutParams") {
+ setContentView(it, ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT))
+ }
+ runAttachTest("addContentView") {
+ addContentView(it, ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT))
+ }
+ }
+
+ private fun runAttachTest(
+ message: String,
+ attach: ComponentActivity.(View) -> Unit
+ ) {
+ with(ActivityScenario.launch(EmptyContentActivity::class.java)) {
+ withActivity {
+ val view = View(this)
+
+ var attachedResult: Any? = "did not attach"
+ view.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
+ override fun onViewDetachedFromWindow(v: View?) {
+ // Do nothing
+ }
+
+ override fun onViewAttachedToWindow(v: View?) {
+ attachedResult = ViewTreeLifecycleOwner.get(view)
+ }
+ })
+ attach(view)
+ assertWithMessage("$message: ViewTreeLifecycleOwner was set correctly")
+ .that(attachedResult).isSameInstanceAs(this)
+ }
+ }
+ }
}
class ContentViewActivity : ComponentActivity(R.layout.activity_inflates_res)
+class EmptyContentActivity : ComponentActivity()
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index 56a1cc3..ffa253a 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -18,9 +18,11 @@
import static android.os.Build.VERSION.SDK_INT;
+import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
+import android.view.ViewGroup;
import android.view.Window;
import androidx.annotation.CallSuper;
@@ -39,6 +41,7 @@
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStoreOwner;
+import androidx.lifecycle.ViewTreeLifecycleOwner;
import androidx.savedstate.SavedStateRegistry;
import androidx.savedstate.SavedStateRegistryController;
import androidx.savedstate.SavedStateRegistryOwner;
@@ -229,6 +232,42 @@
return nc != null ? nc.custom : null;
}
+ @Override
+ public void setContentView(@LayoutRes int layoutResID) {
+ // Set the VTLO before setting the content view so that the inflation process
+ // and attach listeners will see it already present
+ ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+ super.setContentView(layoutResID);
+ }
+
+ @Override
+ public void setContentView(@SuppressLint({"UnknownNullness", "MissingNullability"}) View view) {
+ // Set the VTLO before setting the content view so that attach listeners
+ // will see it already present
+ ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+ super.setContentView(view);
+ }
+
+ @Override
+ public void setContentView(@SuppressLint({"UnknownNullness", "MissingNullability"}) View view,
+ @SuppressLint({"UnknownNullness", "MissingNullability"})
+ ViewGroup.LayoutParams params) {
+ // Set the VTLO before setting the content view so that attach listeners
+ // will see it already present
+ ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+ super.setContentView(view, params);
+ }
+
+ @Override
+ public void addContentView(@SuppressLint({"UnknownNullness", "MissingNullability"}) View view,
+ @SuppressLint({"UnknownNullness", "MissingNullability"})
+ ViewGroup.LayoutParams params) {
+ // Set the VTLO before setting the content view so that attach listeners
+ // will see it already present.
+ ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+ super.addContentView(view, params);
+ }
+
/**
* {@inheritDoc}
* <p>
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 81f02c1..1a08e10 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -30,11 +30,6 @@
apply from: "out.gradle"
init.chooseOutDir()
-def runningInBuildServer = System.env.DIST_DIR != null
-if (runningInBuildServer) {
- System.setProperty("kotlin.compiler.execution.strategy", "in-process")
-}
-
ext.supportRootFolder = project.projectDir.getParentFile()
apply from: 'repos.gradle'
apply from: "build_dependencies.gradle"
diff --git a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
index 823a59b..43b298a 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -138,16 +138,6 @@
textReport = false
lintBaseline.delete()
System.setProperty(LINT_BASELINE_CONTINUE, "true")
- } else {
- // Number of currently ignored UnknownNullness errors
- val count = lintBaseline.readText().split("UnknownNullness").size - 1
- if (count > 0) {
- lintDebugTask.configure {
- it.doLast {
- logger.warn(getIgnoreNullnessError(count))
- }
- }
- }
}
baseline(lintBaseline)
}
@@ -156,16 +146,3 @@
}
val Project.lintBaseline get() = File(projectDir, "/lint-baseline.xml")
-
-private fun Project.getIgnoreNullnessError(count: Int): String = (
- "\n${pluralizeMessage(count)} currently whitelisted in " +
- "$projectDir/lint-baseline.xml - these warnings should ideally be fixed before " +
- "this library moves to a stable release. Run " +
- "'./gradlew $name:lintDebug -PcheckUnknownNullness' to fail lint on these warnings."
- )
-
-private fun pluralizeMessage(count: Int) = if (count > 1) {
- "$count UnknownNullness issues are"
-} else {
- " UnknownNullness issue is"
-}
diff --git a/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt b/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
index f4052b7..303f0ff 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
@@ -27,8 +27,10 @@
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
+import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.getPlugin
import org.gradle.kotlin.dsl.named
+import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
/**
* Sets up a source jar task for an Android library project.
@@ -41,6 +43,26 @@
}
registerSourcesVariant(sourceJar)
}
+ project.afterEvaluate {
+ // we can only tell if a project is multiplatform after it is configured
+ if (it.multiplatformExtension != null && it.extra.has("publish")) {
+ extension.defaultPublishVariant { variant ->
+ val kotlinExt = project.extensions.getByName("kotlin") as KotlinProjectExtension
+ val sourceJar =
+ project.tasks.named("sourceJar${variant.name.capitalize()}", Jar::class.java)
+ // multiplatform projects use different source sets, so we need to modify the task
+ sourceJar.configure { sourceJarTask ->
+ // use a whitelist of source sets, because that is the preferred policy
+ sourceJarTask.from(kotlinExt.sourceSets.getByName("commonMain").kotlin.srcDirs)
+ sourceJarTask.from(kotlinExt.sourceSets.getByName("androidMain").kotlin.srcDirs)
+ }
+ }
+ // Disable the builtin maven-publish for kotlin multiplatform, as it doesn't work
+ // and can't be feasibly modified. It may not be present in MPP samples.
+ project.tasks.findByName("publishKotlinMultiplatformPublicationToMavenRepository")
+ ?.enabled = false
+ }
+ }
}
/**
@@ -92,4 +114,4 @@
if (javaComponent is AdhocComponentWithVariants) {
javaComponent.addVariantsFromConfiguration(gradleVariant) { }
}
-}
\ No newline at end of file
+}
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
index 15f20b3..f4a4a55 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
@@ -87,7 +87,7 @@
const val XPP3 = "xpp3:xpp3:1.1.4c"
const val XMLPULL = "xmlpull:xmlpull:1.1.3.1"
-const val ROBOLECTRIC = "org.robolectric:robolectric:4.1"
+const val ROBOLECTRIC = "org.robolectric:robolectric:4.3"
const val PROTOBUF = "com.google.protobuf:protobuf-java:3.4.0"
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
index b73d45f..7a41ed0 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
@@ -70,10 +70,9 @@
"trace to resolve ktx call",
functionCall
)
- if (call != null) return ComposableAnnotationChecker.get(
- diagnostic.psiElement.project
- ).shouldInvokeAsTag(temporaryTrace, call)
- return false
+ if (call != null) {
+ return ComposableAnnotationChecker().shouldInvokeAsTag(temporaryTrace, call)
+ }
}
}
return false
diff --git a/compose/compose-runtime/build.gradle b/compose/compose-runtime/build.gradle
index fa9d11f..2f0088f 100644
--- a/compose/compose-runtime/build.gradle
+++ b/compose/compose-runtime/build.gradle
@@ -65,24 +65,3 @@
inceptionYear = "2019"
description = "Contains support code for tree composition"
}
-
-//TODO: figure out the trigger for this logic being needed and move it to AndroidX(UI)Plugin
-// or else decide we *should* be making jars and get other people to not break. b/142408067
-afterEvaluate {
- configurations.archives.artifacts.each {
- if (it.file.name.endsWith('jar') && !it.file.name.endsWith('sources.jar')) {
- configurations.archives.artifacts.remove(it)
- }
- }
-}
-
-//TODO: decide whether and how to move this to AndroidX(UI)Plugin
-task sourcesJar(type: Jar) {
- classifier = 'sources'
- from kotlin.sourceSets.commonMain.kotlin
- from kotlin.sourceSets.androidMain.kotlin
-}
-
-artifacts {
- archives sourcesJar
-}
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
index a9787c1..10b5555 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
@@ -22,7 +22,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith
@@ -60,7 +60,7 @@
val list = DatabaseList(count, random)
measureRecompose {
compose {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
for (db in list.databases) {
DatabaseRow(db = db)
}
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
index 8f8b11e..4ee000c 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
@@ -20,8 +20,8 @@
import androidx.compose.Model
import androidx.ui.core.Text
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.Row
import kotlin.random.Random
@@ -73,7 +73,7 @@
@Composable
fun QueryColumn(query: Query) {
// TODO: we could do some conditional styling here which would make the test better
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
Text(text = "${query.elapsed}")
Text(text = query.query)
}
@@ -84,9 +84,9 @@
println(db)
val columns = 5
val topQueries = db.topQueries(columns)
- Row(ExpandedWidth) {
- Column(ExpandedHeight) { Text(text = db.name) }
- Column(ExpandedHeight) { Text(text = "${db.queries.size}") }
+ Row(LayoutExpandedWidth) {
+ Column(LayoutExpandedHeight) { Text(text = db.name) }
+ Column(LayoutExpandedHeight) { Text(text = "${db.queries.size}") }
topQueries.forEach { query ->
QueryColumn(query = query)
}
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
index 77fadad..857d678 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
@@ -21,8 +21,8 @@
import androidx.ui.foundation.ColoredRect
import androidx.ui.graphics.Color
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.FlexScope
import androidx.ui.layout.Row
@@ -39,9 +39,9 @@
@Composable
fun Stack(vertical: Boolean, children: @Composable() FlexScope.() -> Unit) {
if (vertical) {
- Column(ExpandedHeight, children = children)
+ Column(LayoutExpandedHeight, children = children)
} else {
- Row(ExpandedWidth, children = children)
+ Row(LayoutExpandedWidth, children = children)
}
}
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
index b333cb0..17bf161 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
@@ -24,8 +24,8 @@
import androidx.ui.foundation.ColoredRect
import androidx.ui.graphics.Color
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.Row
import androidx.ui.text.TextStyle
import kotlin.random.Random
@@ -37,7 +37,7 @@
1 -> Color.Black
else -> Color.Magenta
}
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
ColoredRect(color = color, width = 16.dp, height = 16.dp)
Text(text = "${item.id}", style = TextStyle(color = color))
}
@@ -53,7 +53,7 @@
1 -> Color.Black
else -> Color.Magenta
}
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
ColoredRect(color = color, width = 16.dp, height = 16.dp)
Text(text = "${item.id}", style = TextStyle(color = color))
}
@@ -102,7 +102,7 @@
@Composable
fun SiblingManagement(identity: IdentityType, items: List<Item>) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
when (identity) {
IdentityType.Pivotal -> {
for (item in items) {
diff --git a/core/core/api/1.3.0-alpha01.txt b/core/core/api/1.3.0-alpha01.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/1.3.0-alpha01.txt
+++ b/core/core/api/1.3.0-alpha01.txt
@@ -828,6 +828,10 @@
package androidx.core.content {
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
public final class ContentResolverCompat {
method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
}
@@ -1674,6 +1678,17 @@
method public void onActionProviderVisibilityChanged(boolean);
}
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
public final class DisplayCutoutCompat {
ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -828,6 +828,10 @@
package androidx.core.content {
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
public final class ContentResolverCompat {
method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
}
@@ -1674,6 +1678,17 @@
method public void onActionProviderVisibilityChanged(boolean);
}
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
public final class DisplayCutoutCompat {
ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/public_plus_experimental_1.3.0-alpha01.txt b/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
+++ b/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
@@ -828,6 +828,10 @@
package androidx.core.content {
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
public final class ContentResolverCompat {
method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
}
@@ -1674,6 +1678,17 @@
method public void onActionProviderVisibilityChanged(boolean);
}
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
public final class DisplayCutoutCompat {
ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -828,6 +828,10 @@
package androidx.core.content {
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
public final class ContentResolverCompat {
method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
}
@@ -1674,6 +1678,17 @@
method public void onActionProviderVisibilityChanged(boolean);
}
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
public final class DisplayCutoutCompat {
ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/restricted_1.3.0-alpha01.txt b/core/core/api/restricted_1.3.0-alpha01.txt
index ccd38ce..3413875 100644
--- a/core/core/api/restricted_1.3.0-alpha01.txt
+++ b/core/core/api/restricted_1.3.0-alpha01.txt
@@ -923,6 +923,10 @@
package androidx.core.content {
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
public final class ContentResolverCompat {
method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
}
@@ -2050,6 +2054,17 @@
method public void onActionProviderVisibilityChanged(boolean);
}
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
public final class DisplayCutoutCompat {
ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index ccd38ce..3413875 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -923,6 +923,10 @@
package androidx.core.content {
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
public final class ContentResolverCompat {
method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
}
@@ -2050,6 +2054,17 @@
method public void onActionProviderVisibilityChanged(boolean);
}
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
public final class DisplayCutoutCompat {
ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/build.gradle b/core/core/build.gradle
index 51e31d9..bbf46bc 100644
--- a/core/core/build.gradle
+++ b/core/core/build.gradle
@@ -31,9 +31,16 @@
exclude group: 'androidx.core', module: 'core'
}
annotationProcessor(project(":versionedparcelable-annotation"))
+
+
+ testImplementation(ANDROIDX_TEST_CORE)
+ testImplementation(ANDROIDX_TEST_RUNNER)
+ testImplementation(TRUTH)
+ testImplementation(ROBOLECTRIC)
}
android {
+ testOptions.unitTests.includeAndroidResources = true
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
diff --git a/core/core/src/main/java/androidx/core/content/ContentProviderCompat.java b/core/core/src/main/java/androidx/core/content/ContentProviderCompat.java
new file mode 100644
index 0000000..0d4f8b4
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/content/ContentProviderCompat.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.content;
+
+import android.content.ContentProvider;
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Helper for accessing features in {@link android.content.ContentProvider} in a backwards
+ * compatible fashion.
+ */
+public final class ContentProviderCompat {
+ private ContentProviderCompat() {
+ /* Hide constructor */
+ }
+
+ /**
+ * Returns NonNull context associated with given {@link android.content.ContentProvider}.
+ *
+ * A provider must be declared in the manifest and created automatically by the system, and
+ * context is only available after {@link android.content.ContentProvider#onCreate}
+ * is called.
+ *
+ * @param provider The {@link android.content.ContentProvider}.
+ * @return The {@link android.content.Context} object associated with the
+ * {@link android.content.ContentProvider}.
+ */
+ public static @NonNull Context requireContext(@NonNull final ContentProvider provider) {
+ final Context ctx = provider.getContext();
+ if (ctx == null) {
+ throw new IllegalStateException("Cannot find context from the provider.");
+ }
+ return ctx;
+ }
+}
diff --git a/core/core/src/main/java/androidx/core/view/DisplayCompat.java b/core/core/src/main/java/androidx/core/view/DisplayCompat.java
new file mode 100644
index 0000000..9057caf
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/view/DisplayCompat.java
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.view;
+
+import static android.content.Context.UI_MODE_SERVICE;
+
+import android.annotation.SuppressLint;
+import android.app.UiModeManager;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.Point;
+import android.os.Build;
+import android.text.TextUtils;
+import android.view.Display;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.util.Preconditions;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+/**
+ * A class for retrieving the physical display size from a device. This is necessary because
+ * Display.Mode.getPhysicalDisplaySize might not report the real physical display size
+ * because most ATV devices don't report all available modes correctly. In this case there is no
+ * way to find out whether a device is capable to display 4k content. This class offers a
+ * workaround for this problem.
+ */
+public final class DisplayCompat {
+ private static final int DISPLAY_SIZE_4K_WIDTH = 3840;
+ private static final int DISPLAY_SIZE_4K_HEIGHT = 2160;
+
+ private DisplayCompat() {
+ // This class is non-instantiable.
+ }
+
+ /**
+ * Gets the supported modes of the given display where at least one of the modes is flagged
+ * as isNative(). Note that a native mode might not wrap any Display.Mode object in case
+ * the display returns no mode with the physical display size.
+ *
+ * @return an array of supported modes where at least one of the modes is native which
+ * contains the physical display size
+ */
+ @NonNull
+ @SuppressLint("ArrayReturn")
+ public static ModeCompat[] getSupportedModes(@NonNull Context context,
+ @NonNull Display display) {
+ Point physicalDisplaySize = getPhysicalDisplaySize(context, display);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ // Display.Mode class and display.getSupportedModes() exist
+ Display.Mode[] supportedModes = display.getSupportedModes();
+ ArrayList<ModeCompat> supportedModesCompat = new ArrayList<>(supportedModes.length);
+ boolean nativeModeExists = false;
+ for (int i = 0; i < supportedModes.length; i++) {
+ if (physicalSizeEquals(supportedModes[i], physicalDisplaySize)) {
+ // Current mode has native resolution, flag it accordingly
+ supportedModesCompat.add(i,
+ new ModeCompat(supportedModes[i], true));
+ nativeModeExists = true;
+ } else {
+ supportedModesCompat.add(i,
+ new ModeCompat(supportedModes[i], false));
+ }
+ }
+ if (!nativeModeExists) {
+ // If no mode with physicalDisplaySize dimension exists, add the mode with the
+ // native display resolution
+ supportedModesCompat.add(new ModeCompat(physicalDisplaySize));
+ }
+ return supportedModesCompat.toArray(new ModeCompat[0]);
+ } else {
+ // previous to Android M Display.Mode and Display.getSupportedModes() did not exist,
+ // hence the only supported mode is the native display resolution
+ return new ModeCompat[] { new ModeCompat(physicalDisplaySize) };
+ }
+ }
+
+ /**
+ * Parses a string which represents the display-size which contains 'x' as a delimiter
+ * between two integers representing the display's width and height and returns the
+ * display size as a Point object.
+ *
+ * @param displaySize a string
+ * @return a Point object containing the size in x and y direction in pixels
+ * @throws NumberFormatException in case the integers cannot be parsed
+ */
+ private static Point parseDisplaySize(@NonNull String displaySize)
+ throws NumberFormatException {
+ String[] displaySizeParts = displaySize.trim().split("x", -1);
+ if (displaySizeParts.length == 2) {
+ int width = Integer.parseInt(displaySizeParts[0]);
+ int height = Integer.parseInt(displaySizeParts[1]);
+ if (width > 0 && height > 0) {
+ return new Point(width, height);
+ }
+ }
+ throw new NumberFormatException();
+ }
+
+ /**
+ * Reads a system property and returns its string value.
+ *
+ * @param name the name of the system property
+ * @return the result string or null if an exception occurred
+ */
+ @Nullable
+ private static String getSystemProperty(String name) {
+ try {
+ @SuppressLint("PrivateApi")
+ Class<?> systemProperties = Class.forName("android.os.SystemProperties");
+ Method getMethod = systemProperties.getMethod("get", String.class);
+ return (String) getMethod.invoke(systemProperties, name);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
+ * Returns true if mode.getPhysicalWidth and mode.getPhysicalHeight are equal to the given size
+ *
+ * @param mode a Display.Mode object
+ * @param size a Point object representing the size in horizontal and vertical direction
+ */
+ @RequiresApi(Build.VERSION_CODES.M)
+ private static boolean physicalSizeEquals(Display.Mode mode, Point size) {
+ return (mode.getPhysicalWidth() == size.x && mode.getPhysicalHeight() == size.y)
+ || (mode.getPhysicalWidth() == size.y && mode.getPhysicalHeight() == size.x);
+ }
+
+ /**
+ * Returns whether the app is running on a TV device
+ *
+ * @return true iff the app is running on a TV device
+ */
+ private static boolean isTv(@NonNull Context context) {
+ // See https://developer.android.com/training/tv/start/hardware.html#runtime-check.
+ UiModeManager uiModeManager = (UiModeManager) context.getSystemService(UI_MODE_SERVICE);
+ return uiModeManager != null
+ && uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
+ }
+
+ /**
+ * Helper function to determine the physical display size from the system properties only. On
+ * Android TVs it is common for the UI to be configured for a lower resolution than SurfaceViews
+ * can output. Before API 26 the Display object does not provide a way to identify this case,
+ * and up to and including API 28 many devices still do not correctly set their hardware
+ * composer output size.
+ *
+ * @return the physical display size, in pixels or null if the information is not available
+ */
+ @Nullable
+ private static Point parsePhysicalDisplaySizeFromSystemProperties(@NonNull String property,
+ @NonNull Display display) {
+ if (display.getDisplayId() == Display.DEFAULT_DISPLAY) {
+ // Check the system property for display size. From API 28 treble may prevent the
+ // system from writing sys.display-size so we check vendor.display-size instead.
+ String displaySize = getSystemProperty(property);
+ // If we managed to read the display size, attempt to parse it.
+ if (!TextUtils.isEmpty(displaySize)) {
+ try {
+ return parseDisplaySize(displaySize);
+ } catch (NumberFormatException e) {
+ // Do nothing for now, null is returned in the end
+ }
+ }
+ }
+ // Unable to determine display size from system properties
+ return null;
+ }
+
+ /**
+ * Gets the physical size of the given display in pixels. The size is collected in the
+ * following order:
+ * 1) sys.display-size if API < 28 (P) and the system-property is set
+ * 2) vendor.display-size if API >= 28 (P) and the system-property is set
+ * 3) physical width and height from display.getMode() for API >= 23
+ * 4) display.getRealSize() for API >= 17
+ * 5) display.getSize()
+ *
+ * @return the physical display size, in pixels
+ */
+ private static Point getPhysicalDisplaySize(@NonNull Context context,
+ @NonNull Display display) {
+ Point displaySize = Build.VERSION.SDK_INT < Build.VERSION_CODES.P
+ ? parsePhysicalDisplaySizeFromSystemProperties("sys.display-size", display)
+ : parsePhysicalDisplaySizeFromSystemProperties("vendor.display-size", display);
+ if (displaySize != null) {
+ return displaySize;
+ } else if (isSonyBravia4kTv(context)) {
+ // Sony Android TVs advertise support for 4k output via a system feature.
+ return new Point(DISPLAY_SIZE_4K_WIDTH, DISPLAY_SIZE_4K_HEIGHT);
+ } else {
+ // Unable to retrieve the physical display size from system properties, get display
+ // size from the framework API. Note that this might not be the actual physical
+ // display size but the, possibly down-scaled, UI size.
+ displaySize = new Point();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ Display.Mode mode = display.getMode();
+ displaySize.x = mode.getPhysicalWidth();
+ displaySize.y = mode.getPhysicalHeight();
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ display.getRealSize(displaySize);
+ } else {
+ display.getSize(displaySize);
+ }
+ }
+ return displaySize;
+ }
+
+ /**
+ * Determines whether the connected display is a 4k capable Sony TV.
+ *
+ * @return true if the display is a Sony BRAVIA TV that supports 4k
+ */
+ private static boolean isSonyBravia4kTv(@NonNull Context context) {
+ return isTv(context)
+ && "Sony".equals(Build.MANUFACTURER)
+ && Build.MODEL.startsWith("BRAVIA")
+ && context.getPackageManager().hasSystemFeature(
+ "com.sony.dtv.hardware.panel.qfhd");
+ }
+
+ /**
+ * Compat class which provides an additional isNative() field. This field indicates whether a
+ * mode is native, which is important when searching for the highest possible native
+ * resolution of a display.
+ */
+ public static final class ModeCompat {
+
+ private final Display.Mode mMode;
+ private final Point mPhysicalDisplaySize;
+ private final boolean mIsNative;
+
+ /**
+ * Package private constructor which creates a native ModeCompat object that does not
+ * wrap any Display.Mode object but only contains the given display size
+ *
+ * @param physicalDisplaySize a Point object representing the display size in pixels
+ * (Point.x horizontal and Point.y vertical size)
+ */
+ ModeCompat(@NonNull Point physicalDisplaySize) {
+ Preconditions.checkNotNull(physicalDisplaySize, "physicalDisplaySize == null");
+ mIsNative = true;
+ mPhysicalDisplaySize = physicalDisplaySize;
+ mMode = null;
+ }
+
+ /**
+ * Package private constructor which creates a non-native ModeCompat and wraps the given
+ * Mode object
+ *
+ * @param mode a Display.Mode object
+ */
+ @RequiresApi(Build.VERSION_CODES.M)
+ ModeCompat(@NonNull Display.Mode mode, boolean isNative) {
+ Preconditions.checkNotNull(mode, "Display.Mode == null, can't wrap a null reference");
+ mIsNative = isNative;
+ // This simplifies the getPhysicalWidth() / getPhysicalHeight functions below
+ mPhysicalDisplaySize = new Point(mode.getPhysicalWidth(), mode.getPhysicalHeight());
+ mMode = mode;
+ }
+
+ /**
+ * Returns the physical width of the given display when configured in this mode
+ *
+ * @return the physical screen width in pixels
+ */
+ public int getPhysicalWidth() {
+ return mPhysicalDisplaySize.x;
+ }
+
+ /**
+ * Returns the physical height of the given display when configured in this mode
+ *
+ * @return the physical screen height in pixels
+ */
+ public int getPhysicalHeight() {
+ return mPhysicalDisplaySize.y;
+ }
+
+ /**
+ * Function to get the wrapped object
+ *
+ * @return the wrapped Display.Mode object or null if there was no matching mode for the
+ * native resolution.
+ */
+ @RequiresApi(Build.VERSION_CODES.M)
+ @Nullable
+ public Display.Mode toMode() {
+ return mMode;
+ }
+
+ /**
+ * This field indicates whether a mode is native, which is important when searching for
+ * the highest possible native resolution of a display.
+ *
+ * @return true if this is a native mode of the wrapped display
+ */
+ public boolean isNative() {
+ return mIsNative;
+ }
+ }
+}
diff --git a/core/core/src/test/java/androidx/core/view/DisplayCompatTest.java b/core/core/src/test/java/androidx/core/view/DisplayCompatTest.java
new file mode 100644
index 0000000..dc9d969
--- /dev/null
+++ b/core/core/src/test/java/androidx/core/view/DisplayCompatTest.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.view;
+
+import static android.content.Context.DISPLAY_SERVICE;
+import static android.content.Context.UI_MODE_SERVICE;
+import static android.content.Context.WINDOW_SERVICE;
+import static android.content.res.Configuration.UI_MODE_TYPE_NORMAL;
+import static android.content.res.Configuration.UI_MODE_TYPE_TELEVISION;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.robolectric.Shadows.shadowOf;
+
+import android.app.UiModeManager;
+import android.content.ContextWrapper;
+import android.hardware.display.DisplayManager;
+import android.os.Build;
+import android.view.Display;
+import android.view.WindowManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.internal.DoNotInstrument;
+import org.robolectric.shadows.ShadowDisplayManager;
+import org.robolectric.shadows.ShadowPackageManager;
+import org.robolectric.shadows.ShadowSystemProperties;
+import org.robolectric.shadows.ShadowUIModeManager;
+import org.robolectric.util.ReflectionHelpers;
+
+import java.util.Optional;
+
+@RunWith(RobolectricTestRunner.class)
+@DoNotInstrument
+@Config(
+ sdk = {Build.VERSION_CODES.LOLLIPOP, Build.VERSION_CODES.P},
+ // sets the display size for the tests (http://robolectric.org/device-configuration/)
+ qualifiers = "w2048dp-h4096dp"
+)
+public final class DisplayCompatTest {
+ private static final int DISPLAY_WIDTH = 2048;
+ private static final int DISPLAY_HEIGHT = 4096;
+ // Set SystemProperties to a different value s.t. the result can be distinguished
+ private static final int DISPLAY_WIDTH_VENDOR = DISPLAY_WIDTH + 1;
+ private static final int DISPLAY_HEIGHT_VENDOR = DISPLAY_HEIGHT + 1;
+ private static final int DISPLAY_WIDTH_VENDOR_P = DISPLAY_WIDTH + 2;
+ private static final int DISPLAY_HEIGHT_VENDOR_P = DISPLAY_HEIGHT + 2;
+ private final ContextWrapper mContext = ApplicationProvider.getApplicationContext();
+ private ShadowUIModeManager mUiModeManagerShadow;
+ private DisplayManager mDisplayManager;
+ private WindowManager mWindowManager;
+ private Display mDefaultDisplay;
+
+ private Optional<DisplayCompat.ModeCompat> findNativeMode(DisplayCompat.ModeCompat[] modes) {
+ for (DisplayCompat.ModeCompat modeCompat : modes) {
+ if (modeCompat.isNative()) {
+ return Optional.of(modeCompat);
+ }
+ }
+ return Optional.empty();
+ }
+
+ @Before
+ public void setup() {
+ mUiModeManagerShadow = shadowOf((UiModeManager) mContext.getSystemService(UI_MODE_SERVICE));
+ mUiModeManagerShadow.currentModeType = UI_MODE_TYPE_NORMAL;
+ mDisplayManager = (DisplayManager) mContext.getSystemService(DISPLAY_SERVICE);
+ mWindowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
+ mDefaultDisplay = mWindowManager.getDefaultDisplay();
+ ShadowSystemProperties.reset();
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
+ // before treble
+ ShadowSystemProperties.override(
+ "sys.display-size",
+ String.format("%dx%d", DISPLAY_WIDTH_VENDOR, DISPLAY_HEIGHT_VENDOR));
+ } else {
+ ShadowSystemProperties.override(
+ "vendor.display-size",
+ String.format("%dx%d", DISPLAY_WIDTH_VENDOR_P, DISPLAY_HEIGHT_VENDOR_P));
+ }
+ }
+
+ @Test
+ public void defaultDisplay_sizeFromSystemProperty() {
+ Optional<DisplayCompat.ModeCompat> nativeMode =
+ findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay));
+ assertThat(nativeMode.isPresent());
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
+ assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(DISPLAY_WIDTH_VENDOR);
+ assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(DISPLAY_HEIGHT_VENDOR);
+ } else {
+ assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(DISPLAY_WIDTH_VENDOR_P);
+ assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(DISPLAY_HEIGHT_VENDOR_P);
+ }
+ }
+
+ @Test
+ public void secondDisplay_sizeFromAccessorFunction() {
+ int displayWidth = 100;
+ int displayHeight = 200;
+ String displayQualifierString = String.format("w%ddp-h%ddp", displayWidth, displayHeight);
+ int secondDisplayId = ShadowDisplayManager.addDisplay(displayQualifierString);
+ Display secondDisplay = mDisplayManager.getDisplay(secondDisplayId);
+ Optional<DisplayCompat.ModeCompat> nativeMode =
+ findNativeMode(DisplayCompat.getSupportedModes(mContext, secondDisplay));
+ assertThat(nativeMode.isPresent());
+ assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(displayWidth);
+ assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(displayHeight);
+ }
+
+ @Test
+ public void emptySystemProperties_sizeFromAccessorFunction() {
+ ShadowSystemProperties.override("sys.display-size", "");
+ ShadowSystemProperties.override("vendor.display-size", "");
+ Optional<DisplayCompat.ModeCompat> nativeMode =
+ findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay));
+ assertThat(nativeMode.isPresent());
+ assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(DISPLAY_WIDTH);
+ assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(DISPLAY_HEIGHT);
+ }
+
+ @Test
+ public void tvModeSonyBraviaSpecialCase_hardcodedSize() {
+ mUiModeManagerShadow.currentModeType = UI_MODE_TYPE_TELEVISION;
+ ReflectionHelpers.setStaticField(android.os.Build.class, "MANUFACTURER", "Sony");
+ ReflectionHelpers.setStaticField(android.os.Build.class, "MODEL", "BRAVIA-EX550");
+ ShadowPackageManager packageManagerShadow = new ShadowPackageManager();
+ packageManagerShadow.setSystemFeature("com.sony.dtv.hardware.panel.qfhd", true);
+ ShadowSystemProperties.override("sys.display-size", "");
+ ShadowSystemProperties.override("vendor.display-size", "");
+ Optional<DisplayCompat.ModeCompat> nativeMode =
+ findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay));
+ assertThat(nativeMode.isPresent());
+ // assert that the returned displaySize is equal to the 4k display size
+ assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(3840);
+ assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(2160);
+ }
+}
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt
index ac4315d..e17ea7a 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt
@@ -44,6 +44,14 @@
}
@Test
+ fun testAddRetainedFragmentWhileStateIsSaved() {
+ val fragment = mock(Fragment::class.java)
+ viewModel.setIsStateSaved(true)
+ viewModel.addRetainedFragment(fragment)
+ assertThat(viewModel.retainedFragments).isEmpty()
+ }
+
+ @Test
fun testRemoveRetainedFragment() {
val fragment = mock(Fragment::class.java)
viewModel.addRetainedFragment(fragment)
@@ -54,6 +62,17 @@
}
@Test
+ fun testRemoveRetainedFragmentWhileStateIsSaved() {
+ val fragment = mock(Fragment::class.java)
+ viewModel.addRetainedFragment(fragment)
+ assertThat(viewModel.retainedFragments).containsExactly(fragment)
+
+ viewModel.setIsStateSaved(true)
+ viewModel.removeRetainedFragment(fragment)
+ assertThat(viewModel.retainedFragments).containsExactly(fragment)
+ }
+
+ @Test
fun testGetChildNonConfig() {
val fragment = Fragment()
val childNonConfig = viewModel.getChildNonConfig(fragment)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt
index 9616410..9f84e27 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt
@@ -60,6 +60,21 @@
.isEqualTo(1)
}
+ @Suppress("DEPRECATION")
+ @Test
+ fun testMakeActiveRetained() {
+ val nonConfig = FragmentManagerViewModel(true)
+ fragmentStore.setNonConfig(nonConfig)
+ emptyFragment.retainInstance = true
+ fragmentStore.makeActive(emptyStateManager)
+ assertThat(fragmentStore.activeFragments)
+ .containsExactly(emptyFragment)
+ assertThat(fragmentStore.activeFragmentCount)
+ .isEqualTo(1)
+ assertThat(nonConfig.retainedFragments)
+ .containsExactly(emptyFragment)
+ }
+
@Test
fun testContainsActiveFragment() {
fragmentStore.makeActive(emptyStateManager)
@@ -90,6 +105,33 @@
fragmentStore.makeInactive(emptyStateManager)
assertThat(fragmentStore.activeFragments)
.containsExactly(null)
+ assertThat(fragmentStore.containsActiveFragment(emptyFragment.mWho))
+ .isFalse()
+
+ fragmentStore.burpActive()
+ assertThat(fragmentStore.activeFragments)
+ .isEmpty()
+ }
+
+ @Suppress("DEPRECATION")
+ @Test
+ fun testMakeInactiveBurpRetained() {
+ val nonConfig = FragmentManagerViewModel(true)
+ fragmentStore.setNonConfig(nonConfig)
+ emptyFragment.retainInstance = true
+ fragmentStore.makeActive(emptyStateManager)
+ assertThat(fragmentStore.activeFragments)
+ .containsExactly(emptyFragment)
+ assertThat(nonConfig.retainedFragments)
+ .containsExactly(emptyFragment)
+
+ fragmentStore.makeInactive(emptyStateManager)
+ assertThat(fragmentStore.activeFragments)
+ .containsExactly(null)
+ assertThat(fragmentStore.containsActiveFragment(emptyFragment.mWho))
+ .isFalse()
+ assertThat(nonConfig.retainedFragments)
+ .isEmpty()
fragmentStore.burpActive()
assertThat(fragmentStore.activeFragments)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt
index be3612c..9d2a203 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt
@@ -20,6 +20,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.FrameLayout
import androidx.fragment.app.test.FragmentTestActivity
import androidx.fragment.test.R
import androidx.lifecycle.Lifecycle
@@ -27,6 +28,7 @@
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewTreeLifecycleOwner
import androidx.test.annotation.UiThreadTest
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -241,6 +243,71 @@
.that(fragment.liveData.hasActiveObservers()).isTrue()
}
+ /**
+ * Test that the ViewTreeLifecycleOwner for a fragment's view is the fragment's own
+ * viewLifecycleOwner.
+ */
+ @Test
+ fun testFragmentViewTreeLifecycleOwner() {
+ val activity = activityRule.activity
+ val fm = activity.supportFragmentManager
+
+ val fragment = ViewTreeLifecycleOwnerCheckFragment()
+
+ var observedLifecycleOwner: Any? = "not set"
+ var observedTreeLifecycleOwner: Any? = "not set"
+
+ val latch = CountDownLatch(1)
+ activity.runOnUiThread {
+ fragment.viewLifecycleOwnerLiveData.observeForever { owner ->
+ // Don't check when we're destroying the fragment.
+ // We should never get more than one.
+ if (owner == null) return@observeForever
+
+ observedLifecycleOwner = owner
+ observedTreeLifecycleOwner = fragment.view?.let { ViewTreeLifecycleOwner.get(it) }
+ }
+
+ fm.beginTransaction().add(R.id.content, fragment).commitNow()
+ latch.countDown()
+ }
+
+ assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue()
+
+ assertWithMessage("ViewTreeLifecycleOwner should match viewLifecycleOwner after commitNow")
+ .that(ViewTreeLifecycleOwner.get(fragment.view ?: error("no fragment view created")))
+ .isSameInstanceAs(fragment.viewLifecycleOwner)
+
+ assertWithMessage("ViewTreeLifecycleOwner should match viewLifecycleOwner in " +
+ "viewLifecycleOwnerLiveData observer")
+ .that(observedTreeLifecycleOwner)
+ .isSameInstanceAs(fragment.viewLifecycleOwner)
+
+ assertWithMessage("ViewTreeLifecycleOwner should match observed LifecycleOwner in " +
+ "viewLifecycleOwnerLiveData observer")
+ .that(observedTreeLifecycleOwner)
+ .isSameInstanceAs(observedLifecycleOwner)
+
+ assertWithMessage("ViewTreeLifecycleOwner should match viewLifecycleOwner in " +
+ "onViewCreated")
+ .that(fragment.onViewCreatedLifecycleOwner)
+ .isSameInstanceAs(fragment.viewLifecycleOwner)
+ }
+
+ class ViewTreeLifecycleOwnerCheckFragment : Fragment() {
+ var onViewCreatedLifecycleOwner: Any? = "not set"
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? = FrameLayout(inflater.context)
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ onViewCreatedLifecycleOwner = ViewTreeLifecycleOwner.get(view)
+ }
+ }
+
class ObserveInOnCreateViewFragment : Fragment() {
private val liveData = MutableLiveData<Boolean>()
private val onCreateViewObserver = Observer<Boolean> { }
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
index 6c6f54e..1cdddab 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -69,6 +69,7 @@
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStoreOwner;
+import androidx.lifecycle.ViewTreeLifecycleOwner;
import androidx.loader.app.LoaderManager;
import androidx.savedstate.SavedStateRegistry;
import androidx.savedstate.SavedStateRegistryController;
@@ -2732,6 +2733,10 @@
if (mView != null) {
// Initialize the view lifecycle
mViewLifecycleOwner.initialize();
+ // Tell the fragment's new view about it before we tell anyone listening
+ // to mViewLifecycleOwnerLiveData and before onViewCreated, so that calls to
+ // ViewTreeLifecycleOwner.get() return something meaningful
+ ViewTreeLifecycleOwner.set(mView, mViewLifecycleOwner);
// Then inform any Observers of the new LifecycleOwner
mViewLifecycleOwnerLiveData.setValue(mViewLifecycleOwner);
} else {
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
index 2b09e4e..4c2c493 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
@@ -894,29 +894,11 @@
}
void addRetainedFragment(@NonNull Fragment f) {
- if (isStateSaved()) {
- if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
- Log.v(TAG, "Ignoring addRetainedFragment as the state is already saved");
- }
- return;
- }
- boolean added = mNonConfig.addRetainedFragment(f);
- if (added && FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
- Log.v(TAG, "Updating retained Fragments: Added " + f);
- }
+ mNonConfig.addRetainedFragment(f);
}
void removeRetainedFragment(@NonNull Fragment f) {
- if (isStateSaved()) {
- if (isLoggingEnabled(Log.VERBOSE)) {
- Log.v(TAG, "Ignoring removeRetainedFragment as the state is already saved");
- }
- return;
- }
- boolean removed = mNonConfig.removeRetainedFragment(f);
- if (removed && isLoggingEnabled(Log.VERBOSE)) {
- Log.v(TAG, "Updating retained Fragments: Removed " + f);
- }
+ mNonConfig.removeRetainedFragment(f);
}
/**
@@ -1258,7 +1240,7 @@
if (newState < Fragment.CREATED) {
boolean beingRemoved = f.mRemoving && !f.isInBackStack();
if (beingRemoved || mNonConfig.shouldDestroy(f)) {
- makeInactive(fragmentStateManager);
+ mFragmentStore.makeInactive(fragmentStateManager);
} else {
if (f.mTargetWho != null) {
Fragment target = findActiveFragment(f.mTargetWho);
@@ -1508,46 +1490,33 @@
}
}
- void makeActive(@NonNull Fragment f) {
- if (mFragmentStore.containsActiveFragment(f.mWho)) {
- return;
+ /**
+ * For a given Fragment, get any existing FragmentStateManager found in the
+ * {@link FragmentStore} or create a brand new FragmentStateManager if one does
+ * not exist.
+ *
+ * @param f The Fragment to create a FragmentStateManager for
+ * @return A valid FragmentStateManager
+ */
+ @NonNull
+ FragmentStateManager createOrGetFragmentStateManager(@NonNull Fragment f) {
+ FragmentStateManager existing = mFragmentStore.getFragmentStateManager(f.mWho);
+ if (existing != null) {
+ return existing;
}
-
FragmentStateManager fragmentStateManager = new FragmentStateManager(
mLifecycleCallbacksDispatcher, mNonConfig, f);
// Restore state any state set via setInitialSavedState()
fragmentStateManager.restoreState(mHost.getContext().getClassLoader());
- mFragmentStore.makeActive(fragmentStateManager);
- if (f.mRetainInstanceChangedWhileDetached) {
- if (f.mRetainInstance) {
- addRetainedFragment(f);
- } else {
- removeRetainedFragment(f);
- }
- f.mRetainInstanceChangedWhileDetached = false;
- }
// Catch the FragmentStateManager up to our current state
fragmentStateManager.setFragmentManagerState(mCurState);
- if (isLoggingEnabled(Log.VERBOSE)) Log.v(TAG, "Added fragment to active set " + f);
- }
-
- private void makeInactive(@NonNull FragmentStateManager fragmentStateManager) {
- Fragment f = fragmentStateManager.getFragment();
- if (!mFragmentStore.containsActiveFragment(f.mWho)) {
- return;
- }
-
- if (isLoggingEnabled(Log.VERBOSE)) {
- Log.v(TAG, "Removed fragment from active set " + f);
- }
-
- mFragmentStore.makeInactive(fragmentStateManager);
- removeRetainedFragment(f);
+ return fragmentStateManager;
}
void addFragment(@NonNull Fragment fragment) {
if (isLoggingEnabled(Log.VERBOSE)) Log.v(TAG, "add: " + fragment);
- makeActive(fragment);
+ FragmentStateManager fragmentStateManager = createOrGetFragmentStateManager(fragment);
+ mFragmentStore.makeActive(fragmentStateManager);
if (!fragment.mDetached) {
mFragmentStore.addFragment(fragment);
fragment.mRemoving = false;
@@ -2373,6 +2342,7 @@
execPendingActions(true);
mStateSaved = true;
+ mNonConfig.setIsStateSaved(true);
// First collect all active fragments.
ArrayList<FragmentState> active = mFragmentStore.saveActiveFragments();
@@ -2523,6 +2493,11 @@
return mContainer;
}
+ @NonNull
+ FragmentStore getFragmentStore() {
+ return mFragmentStore;
+ }
+
void attachController(@NonNull FragmentHostCallback<?> host,
@NonNull FragmentContainer container, @Nullable final Fragment parent) {
if (mHost != null) throw new IllegalStateException("Already attached");
@@ -2552,11 +2527,15 @@
} else {
mNonConfig = new FragmentManagerViewModel(false);
}
+ // Ensure that the state is in sync with FragmentManager
+ mNonConfig.setIsStateSaved(isStateSaved());
+ mFragmentStore.setNonConfig(mNonConfig);
}
void noteStateNotSaved() {
mStateSaved = false;
mStopped = false;
+ mNonConfig.setIsStateSaved(false);
for (Fragment fragment : mFragmentStore.getFragments()) {
if (fragment != null) {
fragment.noteStateNotSaved();
@@ -2567,24 +2546,28 @@
void dispatchCreate() {
mStateSaved = false;
mStopped = false;
+ mNonConfig.setIsStateSaved(false);
dispatchStateChange(Fragment.CREATED);
}
void dispatchActivityCreated() {
mStateSaved = false;
mStopped = false;
+ mNonConfig.setIsStateSaved(false);
dispatchStateChange(Fragment.ACTIVITY_CREATED);
}
void dispatchStart() {
mStateSaved = false;
mStopped = false;
+ mNonConfig.setIsStateSaved(false);
dispatchStateChange(Fragment.STARTED);
}
void dispatchResume() {
mStateSaved = false;
mStopped = false;
+ mNonConfig.setIsStateSaved(false);
dispatchStateChange(Fragment.RESUMED);
}
@@ -2594,6 +2577,7 @@
void dispatchStop() {
mStopped = true;
+ mNonConfig.setIsStateSaved(true);
dispatchStateChange(Fragment.ACTIVITY_CREATED);
}
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
index dc7de27..2f24e8b 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
@@ -64,6 +64,10 @@
// Only used when mStateAutomaticallySaved is false
private boolean mHasSavedSnapshot = false;
+ // Flag set by the FragmentManager to indicate when we should allow
+ // changes to the set of retained fragments
+ private boolean mIsStateSaved = false;
+
/**
* FragmentManagerViewModel simultaneously supports two modes:
* <ol>
@@ -83,6 +87,15 @@
mStateAutomaticallySaved = stateAutomaticallySaved;
}
+ /**
+ * Set whether the FragmentManager has saved its state
+ *
+ * @param isStateSaved Whether the FragmentManager has saved its state
+ */
+ void setIsStateSaved(boolean isStateSaved) {
+ mIsStateSaved = isStateSaved;
+ }
+
@Override
protected void onCleared() {
if (FragmentManager.isLoggingEnabled(Log.DEBUG)) {
@@ -95,12 +108,20 @@
return mHasBeenCleared;
}
- boolean addRetainedFragment(@NonNull Fragment fragment) {
+ void addRetainedFragment(@NonNull Fragment fragment) {
+ if (mIsStateSaved) {
+ if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+ Log.v(TAG, "Ignoring addRetainedFragment as the state is already saved");
+ }
+ return;
+ }
if (mRetainedFragments.containsKey(fragment.mWho)) {
- return false;
+ return;
}
mRetainedFragments.put(fragment.mWho, fragment);
- return true;
+ if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+ Log.v(TAG, "Updating retained Fragments: Added " + fragment);
+ }
}
@Nullable
@@ -129,8 +150,17 @@
}
}
- boolean removeRetainedFragment(@NonNull Fragment fragment) {
- return mRetainedFragments.remove(fragment.mWho) != null;
+ void removeRetainedFragment(@NonNull Fragment fragment) {
+ if (mIsStateSaved) {
+ if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+ Log.v(TAG, "Ignoring removeRetainedFragment as the state is already saved");
+ }
+ return;
+ }
+ boolean removed = mRetainedFragments.remove(fragment.mWho) != null;
+ if (removed && FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+ Log.v(TAG, "Updating retained Fragments: Removed " + fragment);
+ }
}
@NonNull
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java
index 13a8e60..8699091 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java
@@ -38,6 +38,12 @@
private final ArrayList<Fragment> mAdded = new ArrayList<>();
private final HashMap<String, FragmentStateManager> mActive = new HashMap<>();
+ private FragmentManagerViewModel mNonConfig;
+
+ void setNonConfig(@NonNull FragmentManagerViewModel nonConfig) {
+ mNonConfig = nonConfig;
+ }
+
void resetActiveFragments() {
mActive.clear();
}
@@ -59,7 +65,22 @@
}
void makeActive(@NonNull FragmentStateManager newlyActive) {
- mActive.put(newlyActive.getFragment().mWho, newlyActive);
+ Fragment f = newlyActive.getFragment();
+ if (containsActiveFragment(f.mWho)) {
+ return;
+ }
+ mActive.put(f.mWho, newlyActive);
+ if (f.mRetainInstanceChangedWhileDetached) {
+ if (f.mRetainInstance) {
+ mNonConfig.addRetainedFragment(f);
+ } else {
+ mNonConfig.removeRetainedFragment(f);
+ }
+ f.mRetainInstanceChangedWhileDetached = false;
+ }
+ if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+ Log.v(TAG, "Added fragment to active set " + f);
+ }
}
void addFragment(@NonNull Fragment fragment) {
@@ -99,6 +120,19 @@
void makeInactive(@NonNull FragmentStateManager newlyInactive) {
Fragment f = newlyInactive.getFragment();
+
+ // Don't remove yet. That happens in burpActive(). This prevents
+ // concurrent modification while iterating over mActive
+ FragmentStateManager removedStateManager = mActive.put(f.mWho, null);
+ if (removedStateManager == null) {
+ // It was already removed, so there's nothing more to do
+ return;
+ }
+
+ if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+ Log.v(TAG, "Removed fragment from active set " + f);
+ }
+
// Ensure that any Fragment that had this Fragment as its
// target Fragment retains a reference to the Fragment
for (FragmentStateManager fragmentStateManager : mActive.values()) {
@@ -110,15 +144,15 @@
}
}
}
- // Don't remove yet. That happens in burpActive(). This prevents
- // concurrent modification while iterating over mActive
- mActive.put(f.mWho, null);
-
if (f.mTargetWho != null) {
// Restore the target Fragment so that it can be accessed
// even after the Fragment is removed.
f.mTarget = findActiveFragment(f.mTargetWho);
}
+
+ if (f.mRetainInstance) {
+ mNonConfig.removeRetainedFragment(f);
+ }
}
/**
@@ -243,7 +277,7 @@
}
boolean containsActiveFragment(@NonNull String who) {
- return mActive.containsKey(who);
+ return mActive.get(who) != null;
}
@Nullable
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
index a0a07d4..a8ed9d5 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
@@ -1242,7 +1242,9 @@
FragmentManager manager = transaction.mManager;
if (fragment.mState < Fragment.CREATED && manager.mCurState >= Fragment.CREATED
&& !transaction.mReorderingAllowed) {
- manager.makeActive(fragment);
+ FragmentStateManager fragmentStateManager =
+ manager.createOrGetFragmentStateManager(fragment);
+ manager.getFragmentStore().makeActive(fragmentStateManager);
manager.moveToState(fragment, Fragment.CREATED);
}
}
diff --git a/fragment/fragment/src/main/res/anim/fragment_close_enter.xml b/fragment/fragment/src/main/res/anim/fragment_close_enter.xml
index 3b799e1..506fd30 100644
--- a/fragment/fragment/src/main/res/anim/fragment_close_enter.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_close_enter.xml
@@ -14,10 +14,17 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_close_enter.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
+ <alpha
+ android:fromAlpha="0"
+ android:toAlpha="1.0"
+ android:fillEnabled="true"
+ android:fillBefore="true"
+ android:fillAfter="true"
+ android:interpolator="@android:anim/linear_interpolator"
+ android:startOffset="66"
+ android:duration="50"/>
<scale
android:fromXScale="1.1"
android:toXScale="1"
@@ -29,5 +36,5 @@
android:fillBefore="true"
android:fillAfter="true"
android:interpolator="@anim/fragment_fast_out_extra_slow_in"
- android:duration="400"/>
+ android:duration="300"/>
</set>
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_close_exit.xml b/fragment/fragment/src/main/res/anim/fragment_close_exit.xml
index c540f93..be1dd7e69 100644
--- a/fragment/fragment/src/main/res/anim/fragment_close_exit.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_close_exit.xml
@@ -14,8 +14,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_close_exit.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top">
@@ -26,7 +24,7 @@
android:fillBefore="true"
android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator"
- android:startOffset="33"
+ android:startOffset="66"
android:duration="50"/>
<scale
android:fromXScale="1"
@@ -39,5 +37,5 @@
android:fillBefore="true"
android:fillAfter="true"
android:interpolator="@anim/fragment_fast_out_extra_slow_in"
- android:duration="400"/>
+ android:duration="300"/>
</set>
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml b/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml
index 8838794..939f446 100644
--- a/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml
@@ -14,9 +14,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/fade_in.xml-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/decelerate_interpolator"
+ android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
- android:duration="@android:integer/config_longAnimTime" />
\ No newline at end of file
+ android:duration="150" />
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml b/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml
index d6c6f2b..3b4d7ae 100644
--- a/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml
@@ -14,11 +14,9 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/fade_out.xml-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/accelerate_interpolator"
+ android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="1.0"
android:toAlpha="0.0"
- android:duration="@android:integer/config_mediumAnimTime"
+ android:duration="150"
/>
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_open_enter.xml b/fragment/fragment/src/main/res/anim/fragment_open_enter.xml
index e74d0e2..41dfbea 100644
--- a/fragment/fragment/src/main/res/anim/fragment_open_enter.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_open_enter.xml
@@ -14,8 +14,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_close_enter.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:shareInterpolator="false">
@@ -26,7 +24,7 @@
android:fillBefore="true"
android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator"
- android:startOffset="50"
+ android:startOffset="35"
android:duration="50"/>
<scale
android:fromXScale="0.85"
@@ -38,7 +36,7 @@
android:fillEnabled="true"
android:fillBefore="true"
android:fillAfter="true"
- android:pathData="@anim/fragment_fast_out_extra_slow_in"
- android:duration="400"
+ android:interpolator="@anim/fragment_fast_out_extra_slow_in"
+ android:duration="300"
tools:targetApi="lollipop" />
</set>
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_open_exit.xml b/fragment/fragment/src/main/res/anim/fragment_open_exit.xml
index ac1a760..9b97832 100644
--- a/fragment/fragment/src/main/res/anim/fragment_open_exit.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_open_exit.xml
@@ -14,30 +14,28 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_open_exit.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<!-- Fade out, over a black surface, which simulates a black scrim -->
<alpha
android:fromAlpha="1"
- android:toAlpha="0.4"
+ android:toAlpha="0.0"
android:fillEnabled="true"
android:fillBefore="true"
android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator"
- android:startOffset="83"
- android:duration="167"/>
+ android:startOffset="35"
+ android:duration="50"/>
<scale
android:fromXScale="1"
- android:toXScale="1.05"
+ android:toXScale="1.15"
android:fromYScale="1"
- android:toYScale="1.05"
+ android:toYScale="1.15"
android:pivotX="50%"
android:pivotY="50%"
android:fillEnabled="true"
android:fillBefore="true"
android:fillAfter="true"
android:interpolator="@anim/fragment_fast_out_extra_slow_in"
- android:duration="400"/>
+ android:duration="300"/>
</set>
\ No newline at end of file
diff --git a/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt b/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt
@@ -28,5 +28,10 @@
method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+ }
+
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/current.txt b/lifecycle/lifecycle-runtime-ktx/api/current.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/current.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/current.txt
@@ -28,5 +28,10 @@
method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+ }
+
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt
@@ -28,5 +28,10 @@
method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+ }
+
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt
@@ -28,5 +28,10 @@
method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+ }
+
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt
@@ -28,5 +28,10 @@
method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+ }
+
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt b/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt
@@ -28,5 +28,10 @@
method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+ }
+
}
diff --git a/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/ViewTreeLifecycleOwnerTest.kt b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/ViewTreeLifecycleOwnerTest.kt
new file mode 100644
index 0000000..afa6e75
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/ViewTreeLifecycleOwnerTest.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.lifecycle
+
+import android.view.View
+import android.widget.FrameLayout
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class ViewTreeLifecycleOwnerTest {
+ /**
+ * Tests that a direct set/get on a single view survives a round trip
+ */
+ @Test
+ fun setGetSameView() {
+ val v = View(InstrumentationRegistry.getInstrumentation().context)
+ val dummyOwner = DummyLifecycleOwner()
+
+ assertNull("initial LifecycleOwner expects null", v.findViewTreeLifecycleOwner())
+
+ ViewTreeLifecycleOwner.set(v, dummyOwner)
+
+ assertEquals("get the LifecycleOwner set directly",
+ dummyOwner, v.findViewTreeLifecycleOwner())
+ }
+
+ /**
+ * Tests that the owner set on a root of a subhierarchy is seen by both direct children
+ * and other descendants
+ */
+ @Test
+ fun getAncestorOwner() {
+ val context = InstrumentationRegistry.getInstrumentation().context
+ val root = FrameLayout(context)
+ val parent = FrameLayout(context)
+ val child = View(context)
+ root.addView(parent)
+ parent.addView(child)
+
+ assertNull("initial LifecycleOwner expects null", child.findViewTreeLifecycleOwner())
+
+ val dummyOwner = DummyLifecycleOwner()
+ ViewTreeLifecycleOwner.set(root, dummyOwner)
+
+ assertEquals("root sees owner", dummyOwner, root.findViewTreeLifecycleOwner())
+ assertEquals("direct child sees owner", dummyOwner, parent.findViewTreeLifecycleOwner())
+ assertEquals("grandchild sees owner", dummyOwner, child.findViewTreeLifecycleOwner())
+ }
+
+ /**
+ * Tests that a new owner set between a root and a descendant is seen by the descendant
+ * instead of the root value
+ */
+ @Test
+ fun shadowedOwner() {
+ val context = InstrumentationRegistry.getInstrumentation().context
+ val root = FrameLayout(context)
+ val parent = FrameLayout(context)
+ val child = View(context)
+ root.addView(parent)
+ parent.addView(child)
+
+ assertNull("initial LifecycleOwner expects null", child.findViewTreeLifecycleOwner())
+
+ val rootDummyOwner = DummyLifecycleOwner()
+ ViewTreeLifecycleOwner.set(root, rootDummyOwner)
+
+ val parentDummyOwner = DummyLifecycleOwner()
+ ViewTreeLifecycleOwner.set(parent, parentDummyOwner)
+
+ assertEquals("root sees owner", rootDummyOwner, root.findViewTreeLifecycleOwner())
+ assertEquals("direct child sees owner",
+ parentDummyOwner, parent.findViewTreeLifecycleOwner())
+ assertEquals("grandchild sees owner", parentDummyOwner, child.findViewTreeLifecycleOwner())
+ }
+
+ private class DummyLifecycleOwner : LifecycleOwner {
+ override fun getLifecycle(): Lifecycle {
+ throw UnsupportedOperationException("not a real LifecycleOwner")
+ }
+ }
+}
diff --git a/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/View.kt b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/View.kt
new file mode 100644
index 0000000..ffaea67
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/View.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.lifecycle
+
+import android.view.View
+
+/**
+ * Locates the [LifecycleOwner] responsible for managing this [View], if present.
+ * This may be used to scope work or heavyweight resources associated with the view
+ * that may span cycles of the view becoming detached and reattached from a window.
+ */
+fun View.findViewTreeLifecycleOwner(): LifecycleOwner? = ViewTreeLifecycleOwner.get(this)
\ No newline at end of file
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java
index d1d7209..ec09a80 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java
@@ -69,6 +69,7 @@
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.AudioManager;
+import android.media.session.MediaSession;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@@ -665,6 +666,37 @@
@Test
@SmallTest
+ @SdkSuppress(minSdkVersion = 21)
+ public void testOnSessionReadyCalled_fwkMediaSession() throws Exception {
+ mController = null;
+ final MediaSession session = new MediaSession(getInstrumentation().getTargetContext(),
+ "TestFwkSession");
+ final SessionReadyCallback callback = new SessionReadyCallback();
+ synchronized (callback.mWaitLock) {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ // No extra binder exists in API 19. (i.e. session is always ready.)
+ // onSessionReady() should be posted by registerCallback().
+ MediaSession.Token fwkToken = session.getSessionToken();
+ mController = new MediaControllerCompat(
+ getInstrumentation().getTargetContext(),
+ MediaSessionCompat.Token.fromToken(fwkToken));
+ mController.registerCallback(callback, new Handler());
+ } catch (Exception e) {
+ fail();
+ }
+ }
+ });
+ callback.mWaitLock.wait(TIME_OUT_MS);
+ assertFalse(mController.isSessionReady());
+ assertFalse(callback.mOnSessionReadyCalled);
+ }
+ }
+
+ @Test
+ @SmallTest
public void testReceivingParcelables() throws Exception {
Bundle arguments = new Bundle();
arguments.putString("event", TEST_SESSION_EVENT);
diff --git a/media2/session/src/androidTest/java/androidx/media2/session/MediaController_FrameworkMediaSessionTest.java b/media2/session/src/androidTest/java/androidx/media2/session/MediaController_FrameworkMediaSessionTest.java
new file mode 100644
index 0000000..7ce0069
--- /dev/null
+++ b/media2/session/src/androidTest/java/androidx/media2/session/MediaController_FrameworkMediaSessionTest.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2.session;
+
+import static org.junit.Assert.assertTrue;
+
+import android.media.session.PlaybackState;
+import android.os.Build;
+import android.support.v4.media.session.MediaSessionCompat;
+
+import androidx.annotation.NonNull;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.LargeTest;
+import androidx.test.filters.SdkSuppress;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests {@link MediaController} with framework MediaSession.
+ */
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class MediaController_FrameworkMediaSessionTest extends MediaSessionTestBase {
+ private static final String TAG = "MediaController_FrameworkMediaSessionTest";
+
+ private android.media.session.MediaSession mFwkSession;
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ mFwkSession = new android.media.session.MediaSession(mContext, TAG);
+ mFwkSession.setActive(true);
+ mFwkSession.setFlags(android.media.session.MediaSession.FLAG_HANDLES_MEDIA_BUTTONS
+ | android.media.session.MediaSession.FLAG_HANDLES_MEDIA_BUTTONS);
+ mFwkSession.setCallback(new android.media.session.MediaSession.Callback() {});
+ }
+
+ @After
+ @Override
+ public void cleanUp() throws Exception {
+ super.cleanUp();
+ mFwkSession.release();
+ }
+
+ @Test
+ public void testConnect() throws Exception {
+ CountDownLatch connectedLatch = new CountDownLatch(1);
+ MediaController.ControllerCallback callback = new MediaController.ControllerCallback() {
+ @Override
+ public void onConnected(@NonNull MediaController controller,
+ @NonNull SessionCommandGroup allowedCommands) {
+ connectedLatch.countDown();
+ }
+ };
+ try (MediaController controller = new MediaController.Builder(mContext)
+ .setSessionCompatToken(
+ MediaSessionCompat.Token.fromToken(mFwkSession.getSessionToken()))
+ .setControllerCallback(sHandlerExecutor, callback)
+ .build()) {
+ assertTrue(connectedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+ }
+ }
+
+ @Test
+ public void testPlayerStateChanged() throws Exception {
+ CountDownLatch connectedLatch = new CountDownLatch(1);
+ CountDownLatch playerStateChangedLatch = new CountDownLatch(1);
+ MediaController.ControllerCallback callback = new MediaController.ControllerCallback() {
+ @Override
+ public void onConnected(@NonNull MediaController controller,
+ @NonNull SessionCommandGroup allowedCommands) {
+ connectedLatch.countDown();
+ }
+
+ @Override
+ public void onPlayerStateChanged(@NonNull MediaController controller, int state) {
+ playerStateChangedLatch.countDown();
+ }
+ };
+ try (MediaController controller = new MediaController.Builder(mContext)
+ .setSessionCompatToken(
+ MediaSessionCompat.Token.fromToken(mFwkSession.getSessionToken()))
+ .setControllerCallback(sHandlerExecutor, callback)
+ .build()) {
+ assertTrue(connectedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+ mFwkSession.setPlaybackState(new PlaybackState.Builder()
+ .setState(PlaybackState.STATE_PLAYING, 0, 1.0f)
+ .build());
+ assertTrue(playerStateChangedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+ }
+ }
+}
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
index 365267c..ad3e9d1 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
@@ -106,7 +106,7 @@
MediaBrowserCompat mBrowserCompat;
@GuardedBy("mLock")
@SuppressWarnings("WeakerAccess") /* synthetic access */
- boolean mIsReleased;
+ boolean mClosed;
@GuardedBy("mLock")
@SuppressWarnings("WeakerAccess") /* synthetic access */
List<MediaItem> mPlaylist;
@@ -153,7 +153,8 @@
@SuppressWarnings("WeakerAccess") /* synthetic access */
MediaControllerCompat mControllerCompat;
@GuardedBy("mLock")
- private ControllerCompatCallback mControllerCompatCallback;
+ @SuppressWarnings("WeakerAccess") /* synthetic access */
+ ControllerCompatCallback mControllerCompatCallback;
@GuardedBy("mLock")
@SuppressWarnings("WeakerAccess") /* synthetic access */
PlaybackStateCompat mPlaybackStateCompat;
@@ -161,10 +162,9 @@
@SuppressWarnings("WeakerAccess") /* synthetic access */
MediaMetadataCompat mMediaMetadataCompat;
- // Assignment should be used with the lock hold, but should be used without a lock to prevent
- // potential deadlock.
@GuardedBy("mLock")
- private volatile boolean mConnected;
+ @SuppressWarnings("WeakerAccess") /* synthetic access */
+ boolean mConnected;
MediaControllerImplLegacy(@NonNull Context context, @NonNull MediaController instance,
@NonNull SessionToken token) {
@@ -188,10 +188,10 @@
@Override
public void close() {
if (DEBUG) {
- Log.d(TAG, "release from " + mToken);
+ Log.d(TAG, "close from " + mToken);
}
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed) {
// Prevent re-enterance from the ControllerCallback.onDisconnected()
return;
}
@@ -203,7 +203,7 @@
mHandlerThread.quit();
}
- mIsReleased = true;
+ mClosed = true;
if (mBrowserCompat != null) {
mBrowserCompat.disconnect();
@@ -870,7 +870,7 @@
final List<CommandButton> customLayout;
synchronized (mLock) {
- if (mIsReleased || mConnected) {
+ if (mClosed || mConnected) {
return;
}
mPlaybackStateCompat = mControllerCompat.getPlaybackState();
@@ -930,6 +930,8 @@
mControllerCompatCallback = new ControllerCompatCallback();
mControllerCompat.registerCallback(mControllerCompatCallback, mHandler);
}
+ // MediaControllerCompat is available to use immediately after it's created.
+ onConnectedNotLocked();
}
private void connectToService() {
@@ -1038,7 +1040,26 @@
@Override
public void onSessionReady() {
- onConnectedNotLocked();
+ boolean connected;
+ synchronized (mLock) {
+ connected = mConnected;
+ }
+ if (connected) {
+ PlaybackStateCompat state;
+ int shuffleMode;
+ int repeatMode;
+ boolean isCaptioningEnabled;
+ synchronized (mLock) {
+ state = mControllerCompat.getPlaybackState();
+ shuffleMode = mControllerCompat.getShuffleMode();
+ repeatMode = mControllerCompat.getRepeatMode();
+ isCaptioningEnabled = mControllerCompat.isCaptioningEnabled();
+ }
+ onPlaybackStateChanged(state);
+ onShuffleModeChanged(shuffleMode);
+ onRepeatModeChanged(repeatMode);
+ onCaptioningEnabledChanged(isCaptioningEnabled);
+ }
}
@Override
@@ -1049,7 +1070,7 @@
@Override
public void onSessionEvent(final String event, final Bundle extras) {
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
}
@@ -1072,7 +1093,7 @@
final SessionCommandGroup prevAllowedCommands;
final SessionCommandGroup currentAllowedCommands;
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
prevItem = mCurrentMediaItem;
@@ -1208,7 +1229,7 @@
final MediaItem prevItem;
final MediaItem currentItem;
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
prevItem = mCurrentMediaItem;
@@ -1230,7 +1251,7 @@
final List<MediaItem> playlist;
final MediaMetadata playlistMetadata;
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
mQueue = MediaUtils.removeNullElements(queue);
@@ -1258,7 +1279,7 @@
public void onQueueTitleChanged(CharSequence title) {
final MediaMetadata playlistMetadata;
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
mPlaylistMetadata = MediaUtils.convertToMediaMetadata(title);
@@ -1275,7 +1296,7 @@
@Override
public void onExtrasChanged(final Bundle extras) {
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
}
@@ -1291,7 +1312,7 @@
@Override
public void onAudioInfoChanged(final MediaControllerCompat.PlaybackInfo info) {
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
}
@@ -1306,7 +1327,7 @@
@Override
public void onCaptioningEnabledChanged(final boolean enabled) {
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
}
@@ -1324,7 +1345,7 @@
@Override
public void onRepeatModeChanged(@PlaybackStateCompat.RepeatMode final int repeatMode) {
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
mRepeatMode = repeatMode;
@@ -1340,7 +1361,7 @@
@Override
public void onShuffleModeChanged(@PlaybackStateCompat.ShuffleMode final int shuffleMode) {
synchronized (mLock) {
- if (mIsReleased) {
+ if (mClosed || !mConnected) {
return;
}
mShuffleMode = shuffleMode;
diff --git a/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt b/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt
index 3118532..ae90941 100644
--- a/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt
+++ b/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt
@@ -59,9 +59,7 @@
)
}
- override fun createDestination(): Destination {
- return Destination(this)
- }
+ override fun createDestination() = Destination(this)
/**
* Destination for [DynamicActivityNavigator].
diff --git a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt
index 2f01dc9..efa4d9b 100644
--- a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt
+++ b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt
@@ -89,9 +89,7 @@
}
}
- override fun popBackStack(): Boolean {
- return true
- }
+ override fun popBackStack() = true
/**
* The graph for dynamic-include.
diff --git a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt
index 9aff5b5..e912d75 100644
--- a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt
+++ b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt
@@ -53,7 +53,7 @@
*
* @return `true` if installation is required, `false` otherwise.
*/
- var isInstallRequired: Boolean = false
+ var isInstallRequired = false
internal set(installRequired) {
field = installRequired
if (installRequired) {
@@ -64,7 +64,7 @@
/**
* The session id from Play Core for this installation session.
*/
- var sessionId: Int = 0
+ var sessionId = 0
internal set
/**
@@ -78,7 +78,7 @@
* @hide
*/
@get:RestrictTo(RestrictTo.Scope.LIBRARY)
- internal var isUsed: Boolean = false
+ internal var isUsed = false
private set
/**
diff --git a/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt b/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt
index c88efd8..49c09c3 100644
--- a/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt
+++ b/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt
@@ -64,7 +64,7 @@
assertNotNull(progressDestination)
progressDestination?.let {
DynamicNavGraph.getOrThrow(progressDestination)
- // Assert not having thrown an exception
+ // Assume not having thrown an exception
}
}
diff --git a/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt b/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt
@@ -3,6 +3,7 @@
@androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/current.txt b/navigation/navigation-dynamic-features-fragment/api/current.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/current.txt
@@ -3,6 +3,7 @@
@androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt
@@ -3,6 +3,7 @@
@androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
@@ -3,6 +3,7 @@
@androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt
@@ -3,6 +3,7 @@
@androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
@@ -3,6 +3,7 @@
@androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt
index 3da53c5..504c437 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt
@@ -30,7 +30,7 @@
import androidx.navigation.fragment.FragmentNavigator
/**
- * Dynamic feature navigator for Fragment destinations.
+ * The [Navigator] that enables navigating to destinations within dynamic feature modules.
*/
@Navigator.Name("fragment")
class DynamicFragmentNavigator(
@@ -40,9 +40,7 @@
private val installManager: DynamicInstallManager
) : FragmentNavigator(context, manager, containerId) {
- override fun createDestination(): FragmentNavigator.Destination {
- return Destination(this)
- }
+ override fun createDestination() = Destination(this)
override fun navigate(
destination: FragmentNavigator.Destination,
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt
index 632fa30..0f82016 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt
@@ -63,7 +63,6 @@
/**
* Create a new [SplitInstallManager].
*/
- protected open fun createSplitInstallManager(): SplitInstallManager {
- return SplitInstallManagerFactory.create(requireContext())
- }
+ protected open fun createSplitInstallManager(): SplitInstallManager =
+ SplitInstallManagerFactory.create(requireContext())
}
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt
index 3eae15f..d7be2e2 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt
@@ -34,13 +34,13 @@
import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus
/**
- * The base class for fragments that handle dynamic feature installation.
+ * The base class for [Fragment]s that handle dynamic feature installation.
*
- * When extending from this class, you are responsible for updating the UI in
- * [onCancelled], [onFailed], [onProgress].
+ * When extending from this class, you are responsible for forwarding installation state changes
+ * to your UI via the provided hooks in [onCancelled], [onFailed], [onProgress].
*
- * The installation process is handled automatically and navigation will happen
- * once the install is completed.
+ * The installation process itself is handled within the [AbstractProgressFragment] itself.
+ * Navigation to the target destination will occur once the installation is completed.
*/
abstract class AbstractProgressFragment : Fragment {
@@ -117,7 +117,6 @@
private inner class StateObserver constructor(private val monitor: DynamicInstallMonitor) :
Observer<SplitInstallSessionState> {
- @Suppress("DEPRECATION")
override fun onChanged(sessionState: SplitInstallSessionState?) {
if (sessionState != null) {
if (sessionState.hasTerminalStatus()) {
@@ -129,6 +128,8 @@
navigate()
}
SplitInstallSessionStatus.REQUIRES_USER_CONFIRMATION -> try {
+ @Suppress("DEPRECATION")
+ // TODO replace once PlayCore ships with code landed in b/145276704.
startIntentSenderForResult(
sessionState.resolutionIntent().intentSender,
INSTALL_REQUEST_CODE, null, 0, 0, 0, null
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt
index d51252f..9e74639 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt
@@ -27,7 +27,12 @@
import com.google.android.play.core.splitinstall.model.SplitInstallErrorCode
/**
- * The default fragment to display during installation progress.
+ * The default [androidx.fragment.app.Fragment] to display during installation progress.
+ *
+ * This `Fragment` provides a default UI and handles split install state changes so you don't
+ * have to deal with this.
+ *
+ * To create a custom progress fragment, extend [AbstractProgressFragment].
*/
class DefaultProgressFragment :
AbstractProgressFragment(R.layout.dynamic_feature_install_fragment) {
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml
index 63a9894..028f445 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml
@@ -17,7 +17,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
- android:interpolator="@android:anim/decelerate_interpolator"
+ android:interpolator="@android:anim/linear_interpolator"
android:duration="@integer/config_navAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml
index 0031439..9d73716 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml
@@ -17,7 +17,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
- android:interpolator="@android:anim/accelerate_interpolator"
+ android:interpolator="@android:anim/linear_interpolator"
android:duration="@integer/config_navAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml
index 63a9894..028f445 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml
@@ -17,7 +17,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
- android:interpolator="@android:anim/decelerate_interpolator"
+ android:interpolator="@android:anim/linear_interpolator"
android:duration="@integer/config_navAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml
index 0031439..9d73716 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml
@@ -17,7 +17,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
- android:interpolator="@android:anim/accelerate_interpolator"
+ android:interpolator="@android:anim/linear_interpolator"
android:duration="@integer/config_navAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
diff --git a/navigation/navigation-ui/src/main/res/values/integers.xml b/navigation/navigation-ui/src/main/res/values/integers.xml
index bf6b9c8..5fcd113 100644
--- a/navigation/navigation-ui/src/main/res/values/integers.xml
+++ b/navigation/navigation-ui/src/main/res/values/integers.xml
@@ -16,5 +16,5 @@
-->
<resources>
- <integer name="config_navAnimTime">500</integer>
+ <integer name="config_navAnimTime">150</integer>
</resources>
diff --git a/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt b/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt
index b882d98..74ae229 100644
--- a/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt
@@ -16,23 +16,27 @@
package androidx.paging
+import androidx.paging.LoadType.END
+import androidx.paging.LoadType.REFRESH
+import androidx.paging.LoadType.START
+
/**
* Events in the stream from paging fetch logic to UI.
*
* Every event sent to the UI is a PageEvent, and will be processed atomically.
*/
internal sealed class PageEvent<T : Any> {
- data class Insert<T : Any>(
+ data class Insert<T : Any> private constructor(
val loadType: LoadType,
val pages: List<TransformablePage<T>>,
val placeholdersStart: Int,
val placeholdersEnd: Int
) : PageEvent<T>() {
init {
- require(placeholdersStart >= 0) {
+ require(loadType == END || placeholdersStart >= 0) {
"Invalid placeholdersBefore $placeholdersStart"
}
- require(placeholdersEnd >= 0) {
+ require(loadType == START || placeholdersEnd >= 0) {
"Invalid placeholdersAfter $placeholdersEnd"
}
}
@@ -89,6 +93,24 @@
originalIndices = originalIndices
)
}
+
+ companion object {
+ fun <T : Any> Refresh(
+ pages: List<TransformablePage<T>>,
+ placeholdersStart: Int,
+ placeholdersEnd: Int
+ ) = Insert(REFRESH, pages, placeholdersStart, placeholdersEnd)
+
+ fun <T : Any> Start(
+ pages: List<TransformablePage<T>>,
+ placeholdersStart: Int
+ ) = Insert(START, pages, placeholdersStart, -1)
+
+ fun <T : Any> End(
+ pages: List<TransformablePage<T>>,
+ placeholdersEnd: Int
+ ) = Insert(END, pages, -1, placeholdersEnd)
+ }
}
data class Drop<T : Any>(
@@ -97,7 +119,7 @@
val placeholdersRemaining: Int
) : PageEvent<T>() {
init {
- require(loadType != LoadType.REFRESH) { "Drop must be START or END" }
+ require(loadType != REFRESH) { "Drop must be START or END" }
require(count >= 0) { "Invalid count $count" }
require(placeholdersRemaining >= 0) {
"Invalid placeholdersRemaining $placeholdersRemaining"
diff --git a/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt b/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt
index cda5d22..c4938a0 100644
--- a/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt
+++ b/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt
@@ -16,7 +16,6 @@
package androidx.paging
-import androidx.paging.LoadType.END
import androidx.paging.LoadType.REFRESH
import androidx.paging.LoadType.START
import org.junit.Test
@@ -37,16 +36,14 @@
@Test
fun placeholdersException() {
assertFailsWith<IllegalArgumentException> {
- PageEvent.Insert<Char>(
- loadType = REFRESH,
+ PageEvent.Insert.Refresh<Char>(
pages = listOf(),
placeholdersStart = 1,
placeholdersEnd = -1
)
}
assertFailsWith<IllegalArgumentException> {
- PageEvent.Insert<Char>(
- loadType = REFRESH,
+ PageEvent.Insert.Refresh<Char>(
pages = listOf(),
placeholdersStart = -1,
placeholdersEnd = 1
@@ -114,17 +111,13 @@
@Test
fun insertMap() {
- val insert = PageEvent.Insert(
- loadType = END,
+ val insert = PageEvent.Insert.End(
pages = listOf(TransformablePage(listOf('a', 'b'))),
- placeholdersStart = 2,
placeholdersEnd = 4
)
assertEquals(
- PageEvent.Insert(
- loadType = END,
+ PageEvent.Insert.End(
pages = listOf(TransformablePage(listOf("a", "b"))),
- placeholdersStart = 2,
placeholdersEnd = 4
),
insert.map { it.toString() }
@@ -139,26 +132,22 @@
@Test
fun insertMapTransformed() {
assertEquals(
- PageEvent.Insert(
- loadType = END,
+ PageEvent.Insert.End(
pages = listOf(TransformablePage(
originalPageOffset = 0,
data = listOf("a", "b"),
sourcePageSize = 4,
originalIndices = listOf(0, 2)
)),
- placeholdersStart = 2,
placeholdersEnd = 4
),
- PageEvent.Insert(
- loadType = END,
+ PageEvent.Insert.End(
pages = listOf(TransformablePage(
originalPageOffset = 0,
data = listOf('a', 'b'),
sourcePageSize = 4,
originalIndices = listOf(0, 2)
)),
- placeholdersStart = 2,
placeholdersEnd = 4
).map { it.toString() }
)
@@ -166,18 +155,15 @@
@Test
fun insertFilter() {
- val insert = PageEvent.Insert(
- loadType = END,
+ val insert = PageEvent.Insert.End(
pages = listOf(TransformablePage(listOf('a', 'b', 'c', 'd'))),
- placeholdersStart = 2,
placeholdersEnd = 4
)
// filter out C
val insertNoC = insert.filter { it != 'c' }
assertEquals(
- PageEvent.Insert(
- loadType = END,
+ PageEvent.Insert.End(
pages = listOf(
TransformablePage(
originalPageOffset = 0,
@@ -186,7 +172,6 @@
originalIndices = listOf(0, 1, 3)
)
),
- placeholdersStart = 2,
placeholdersEnd = 4
),
insertNoC
@@ -194,8 +179,7 @@
// now filter out A, to validate filtration when lookup present
assertEquals(
- PageEvent.Insert(
- loadType = END,
+ PageEvent.Insert.End(
pages = listOf(
TransformablePage(
originalPageOffset = 0,
@@ -204,7 +188,6 @@
originalIndices = listOf(1, 3)
)
),
- placeholdersStart = 2,
placeholdersEnd = 4
),
insertNoC.filter { it != 'a' }
@@ -213,10 +196,8 @@
@Test
fun insertFlatMap() {
- val insert = PageEvent.Insert(
- loadType = END,
+ val insert = PageEvent.Insert.End(
pages = listOf(TransformablePage(listOf('a', 'b'))),
- placeholdersStart = 2,
placeholdersEnd = 4
)
@@ -225,8 +206,7 @@
}
assertEquals(
- PageEvent.Insert(
- loadType = END,
+ PageEvent.Insert.End(
pages = listOf(
TransformablePage(
originalPageOffset = 0,
@@ -235,7 +215,6 @@
originalIndices = listOf(0, 0, 1, 1)
)
),
- placeholdersStart = 2,
placeholdersEnd = 4
),
flatMapped
@@ -246,8 +225,7 @@
}
assertEquals(
- PageEvent.Insert(
- loadType = END,
+ PageEvent.Insert.End(
pages = listOf(
TransformablePage(
originalPageOffset = 0,
@@ -256,7 +234,6 @@
originalIndices = listOf(0, 0, 0, 0, 1, 1, 1, 1)
)
),
- placeholdersStart = 2,
placeholdersEnd = 4
),
flatMappedAgain
diff --git a/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt b/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt
index 75ec03f..63b01c1e 100644
--- a/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt
+++ b/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt
@@ -29,8 +29,7 @@
placeholdersEnd: Int = 0,
indexOfInitialPage: Int = 0
) = processEvent(
- PageEvent.Insert(
- loadType = LoadType.REFRESH,
+ PageEvent.Insert.Refresh(
pages = listOfTransformablePages(pages, indexOfInitialPage),
placeholdersStart = placeholdersStart,
placeholdersEnd = placeholdersEnd
@@ -42,19 +41,31 @@
page: List<T>,
originalPageOffset: Int,
placeholdersRemaining: Int
-) = processEvent(
- PageEvent.Insert(
- loadType = if (isPrepend) LoadType.START else LoadType.END,
- pages = listOf(
- TransformablePage(
- originalPageOffset = originalPageOffset,
- data = page
- )
- ),
- placeholdersStart = if (isPrepend) placeholdersRemaining else 0,
- placeholdersEnd = if (isPrepend) 0 else placeholdersRemaining
+) = when (isPrepend) {
+ true -> processEvent(
+ PageEvent.Insert.Start(
+ pages = listOf(
+ TransformablePage(
+ originalPageOffset = originalPageOffset,
+ data = page
+ )
+ ),
+ placeholdersStart = placeholdersRemaining
+ )
)
-)
+ false -> processEvent(
+ PageEvent.Insert.End(
+ pages = listOf(
+ TransformablePage(
+ originalPageOffset = originalPageOffset,
+ data = page
+ )
+ ),
+ placeholdersEnd = placeholdersRemaining
+ )
+ )
+}
+
internal fun <T : Any> PagingState.Producer<T>.dropPages(
isPrepend: Boolean,
count: Int,
diff --git a/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt b/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt
index f87776a..989ad0a 100644
--- a/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt
+++ b/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt
@@ -26,8 +26,14 @@
crossinline block: A.() -> T
): T {
lateinit var value: T
+ var err: Throwable? = null
onActivity { activity ->
- value = block(activity)
+ try {
+ value = block(activity)
+ } catch (t: Throwable) {
+ err = t
+ }
}
+ err?.let { throw it }
return value
}
diff --git a/ui/gradle.properties b/ui/gradle.properties
index 39f2467..9b15dee 100644
--- a/ui/gradle.properties
+++ b/ui/gradle.properties
@@ -1,4 +1,4 @@
-org.gradle.jvmargs=-Xmx8g -Dkotlin.compiler.execution.strategy="in-process"
+org.gradle.jvmargs=-Xmx8g
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
@@ -6,9 +6,6 @@
android.builder.sdkDownload=false
android.useAndroidX=true
android.enableAdditionalTestOutput=true
-// Disable incremental compilation explicitly because of https://youtrack.jetbrains.com/issue/KT-30492.
-// Anyhow, it is supported only in daemon mode.
-kotlin.incremental=false
// Run multiple kotlin compilations in parallel within the same project.
// See also https://github.com/JetBrains/kotlin/blob/1978db9d0e68a2ec29aded30a07e9c3c740c29f6/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt#L100 and https://blog.jetbrains.com/kotlin/2019/01/kotlin-1-3-20-released/
kotlin.parallel.tasks.in.project=true
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
index adaaecc..3381cfd 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
@@ -35,8 +35,8 @@
import androidx.ui.core.Dp
import androidx.ui.core.dp
import androidx.ui.layout.Container
+import androidx.ui.layout.LayoutPadding
import androidx.ui.layout.Padding
-import androidx.ui.layout.Spacing
import androidx.ui.test.ComposeTestCase
import androidx.ui.test.ToggleableTestCase
import org.junit.Rule
@@ -191,7 +191,7 @@
@Composable
override fun emitPaddedContainer(padding: Dp, child: @Composable() () -> Unit) {
- Container(expanded = true, modifier = Spacing(padding), children = child)
+ Container(expanded = true, modifier = LayoutPadding(padding), children = child)
}
}
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
index c84a1c9..30f87d6 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
@@ -26,7 +26,7 @@
import androidx.ui.benchmark.toggleStateBenchmarkMeasureLayout
import androidx.ui.core.Placeable.PlacementScope.place
import androidx.ui.layout.Container
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
import androidx.ui.layout.Spacer
import androidx.ui.test.ComposeTestCase
import androidx.ui.test.ToggleableTestCase
@@ -67,7 +67,7 @@
val size = +state { 200.dp }
this.state = size
Container(width = 300.dp, height = 300.dp) {
- Spacer(Size(width = size.value, height = size.value))
+ Spacer(LayoutSize(width = size.value, height = size.value))
}
}
@@ -86,7 +86,7 @@
this.state = size
WithConstraints {
Container(width = 300.dp, height = 300.dp) {
- Spacer(Size(width = size.value, height = size.value))
+ Spacer(LayoutSize(width = size.value, height = size.value))
}
}
}
diff --git a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt
index cd8e9029..4f0aa48 100644
--- a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt
+++ b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt
@@ -30,8 +30,8 @@
import androidx.ui.layout.Row
import androidx.ui.foundation.ScrollerPosition
import androidx.ui.foundation.VerticalScroller
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
import androidx.ui.material.MaterialTheme
import androidx.ui.material.surface.Surface
import androidx.ui.test.ComposeTestCase
@@ -68,7 +68,7 @@
fun SquareRow(useScrollerPosition: Boolean) {
val playStoreColor = Color(red = 0x00, green = 0x00, blue = 0x80)
val content = @Composable {
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
repeat(6) {
WithDensity {
FlexColumn {
@@ -88,17 +88,17 @@
text = "Some title",
style = TextStyle(Color.Black, 60.px.toSp())
)
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
Text(
"3.5 ★",
style = TextStyle(fontSize = 40.px.toSp()),
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
ColoredRect(
width = 40.px.toDp(),
height = 40.px.toDp(),
color = playStoreColor,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
}
}
diff --git a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
index de1288b..a7215b8 100644
--- a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
+++ b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
@@ -30,7 +30,7 @@
import androidx.ui.foundation.VerticalScroller
import androidx.ui.graphics.Paint
import androidx.ui.graphics.PaintingStyle
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
import androidx.ui.test.ComposeTestCase
import androidx.ui.test.ToggleableTestCase
@@ -45,7 +45,7 @@
VerticalScroller(
scrollerPosition = scrollerPosition
) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
for (green in 0..0xFF) {
ColorStripe(0xFF, green, 0)
}
diff --git a/ui/ui-android-text/src/androidTest/assets/sample_font.ttf b/ui/ui-android-text/src/androidTest/assets/sample_font.ttf
index 711c207..da7301a 100644
--- a/ui/ui-android-text/src/androidTest/assets/sample_font.ttf
+++ b/ui/ui-android-text/src/androidTest/assets/sample_font.ttf
Binary files differ
diff --git a/ui/ui-android-text/src/androidTest/assets/sample_font.ttx b/ui/ui-android-text/src/androidTest/assets/sample_font.ttx
index f97a6af0..95d0619 100644
--- a/ui/ui-android-text/src/androidTest/assets/sample_font.ttx
+++ b/ui/ui-android-text/src/androidTest/assets/sample_font.ttx
@@ -21,6 +21,7 @@
<GlyphID id="2" name="1em_rtl"/>
<GlyphID id="3" name="space"/>
<GlyphID id="4" name="hyphen"/>
+ <GlyphID id="5" name="linefeed"/>
</GlyphOrder>
<head>
@@ -132,12 +133,14 @@
<mtx name="1em_rtl" width="1000" lsb="0"/>
<mtx name="space" width="1000" lsb="0"/>
<mtx name="hyphen" width="1000" lsb="0"/>
+ <mtx name="linefeed" width="500" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="3" platEncID="10" language="0">
<map code="0x0009" name="1em" /> <!-- TAB -->
+ <map code="0x000A" name="linefeed" /> <!-- LINEFEED -->
<map code="0x0020" name="space" /> <!-- SPACE -->
<map code="0x002C" name="1em" /> <!-- , -->
<map code="0x002D" name="hyphen" /> <!-- - -->
@@ -267,6 +270,7 @@
</contour>
<instructions />
</TTGlyph>
+ <TTGlyph name="linefeed" xMin="0" yMin="-200" xMax="0" yMax="800" />
</glyf>
<name>
@@ -311,4 +315,4 @@
<maxMemType1 value="0"/>
</post>
-</ttFont>
\ No newline at end of file
+</ttFont>
diff --git a/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt b/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt
index 58edc3a..8c767e2 100644
--- a/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt
+++ b/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt
@@ -88,7 +88,6 @@
@JustificationMode
justificationMode: Int = LayoutCompat.DEFAULT_JUSTIFICATION_MODE,
includePadding: Boolean = LayoutCompat.DEFAULT_INCLUDE_PADDING,
- @Suppress("UNUSED_PARAMETER")
fallbackLineSpacing: Boolean = LayoutCompat.DEFAULT_FALLBACK_LINE_SPACING,
@BreakStrategy
breakStrategy: Int = LayoutCompat.DEFAULT_BREAK_STRATEGY,
@@ -118,7 +117,7 @@
}
setIncludePad(includePadding)
if (Build.VERSION.SDK_INT >= 28) {
-// setUseLineSpacingFromFallbacks(fallbackLineSpacing)
+ setUseLineSpacingFromFallbacks(fallbackLineSpacing)
}
setBreakStrategy(breakStrategy)
setHyphenationFrequency(hyphenationFrequency)
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
index 588b5a5..63ca6e3 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
@@ -44,7 +44,7 @@
import androidx.ui.layout.Padding
import androidx.ui.graphics.Canvas
import androidx.ui.graphics.Paint
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
import androidx.ui.text.TextStyle
import kotlin.math.roundToInt
@@ -59,7 +59,7 @@
@Composable
fun SpringBackExample() {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
Padding(40.dp) {
Text("<== Scroll horizontally ==>", style = TextStyle(fontSize = 20.sp))
}
diff --git a/ui/ui-core/api/0.1.0-dev04.txt b/ui/ui-core/api/0.1.0-dev04.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/0.1.0-dev04.txt
+++ b/ui/ui-core/api/0.1.0-dev04.txt
@@ -201,7 +201,7 @@
public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
ctor public Dp(float value);
- method public inline operator int compareTo(androidx.ui.core.Dp other);
+ method public operator int compareTo(androidx.ui.core.Dp other);
method public float component1();
method public androidx.ui.core.Dp copy(float value);
method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
ctor public DpCubed();
- method public inline operator int compareTo-zqpl1kg(float p);
- method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+ method public operator int compareTo-zqpl1kg(float p);
+ method public static operator int compareTo-zqpl1kg(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
ctor public DpInverse();
- method public inline operator int compareTo-ASDJgtI(float p);
- method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+ method public operator int compareTo-ASDJgtI(float p);
+ method public static operator int compareTo-ASDJgtI(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
ctor public DpSquared();
- method public inline operator int compareTo-KkBJKWw(float p);
- method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+ method public operator int compareTo-KkBJKWw(float p);
+ method public static operator int compareTo-KkBJKWw(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
ctor public IntPx(int value);
- method public inline operator int compareTo(androidx.ui.core.IntPx other);
+ method public operator int compareTo(androidx.ui.core.IntPx other);
method public inline operator int compareTo(androidx.ui.core.Px other);
method public int component1();
method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
public interface Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+ method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+ method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
}
public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
public static final class Modifier.None implements androidx.ui.core.Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
field public static final androidx.ui.core.Modifier.None! INSTANCE;
}
@@ -674,7 +674,7 @@
public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
ctor public Px(float value);
- method public inline operator int compareTo(androidx.ui.core.Px other);
+ method public operator int compareTo(androidx.ui.core.Px other);
method public inline operator int compareTo(androidx.ui.core.IntPx other);
method public float component1();
method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
ctor public PxCubed();
- method public inline operator int compareTo-syUR1PY(float p);
- method public static inline operator int compareTo-syUR1PY(float $this, float other);
+ method public operator int compareTo-syUR1PY(float p);
+ method public static operator int compareTo-syUR1PY(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
ctor public PxInverse();
- method public inline operator int compareTo-MXEAIGs(float p);
- method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+ method public operator int compareTo-MXEAIGs(float p);
+ method public static operator int compareTo-MXEAIGs(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
ctor public PxSquared();
- method public inline operator int compareTo-kVJEwbQ(float p);
- method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+ method public operator int compareTo-kVJEwbQ(float p);
+ method public static operator int compareTo-kVJEwbQ(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -201,7 +201,7 @@
public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
ctor public Dp(float value);
- method public inline operator int compareTo(androidx.ui.core.Dp other);
+ method public operator int compareTo(androidx.ui.core.Dp other);
method public float component1();
method public androidx.ui.core.Dp copy(float value);
method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
ctor public DpCubed();
- method public inline operator int compareTo-zqpl1kg(float p);
- method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+ method public operator int compareTo-zqpl1kg(float p);
+ method public static operator int compareTo-zqpl1kg(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
ctor public DpInverse();
- method public inline operator int compareTo-ASDJgtI(float p);
- method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+ method public operator int compareTo-ASDJgtI(float p);
+ method public static operator int compareTo-ASDJgtI(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
ctor public DpSquared();
- method public inline operator int compareTo-KkBJKWw(float p);
- method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+ method public operator int compareTo-KkBJKWw(float p);
+ method public static operator int compareTo-KkBJKWw(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
ctor public IntPx(int value);
- method public inline operator int compareTo(androidx.ui.core.IntPx other);
+ method public operator int compareTo(androidx.ui.core.IntPx other);
method public inline operator int compareTo(androidx.ui.core.Px other);
method public int component1();
method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
public interface Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+ method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+ method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
}
public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
public static final class Modifier.None implements androidx.ui.core.Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
field public static final androidx.ui.core.Modifier.None! INSTANCE;
}
@@ -674,7 +674,7 @@
public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
ctor public Px(float value);
- method public inline operator int compareTo(androidx.ui.core.Px other);
+ method public operator int compareTo(androidx.ui.core.Px other);
method public inline operator int compareTo(androidx.ui.core.IntPx other);
method public float component1();
method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
ctor public PxCubed();
- method public inline operator int compareTo-syUR1PY(float p);
- method public static inline operator int compareTo-syUR1PY(float $this, float other);
+ method public operator int compareTo-syUR1PY(float p);
+ method public static operator int compareTo-syUR1PY(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
ctor public PxInverse();
- method public inline operator int compareTo-MXEAIGs(float p);
- method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+ method public operator int compareTo-MXEAIGs(float p);
+ method public static operator int compareTo-MXEAIGs(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
ctor public PxSquared();
- method public inline operator int compareTo-kVJEwbQ(float p);
- method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+ method public operator int compareTo-kVJEwbQ(float p);
+ method public static operator int compareTo-kVJEwbQ(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
@@ -201,7 +201,7 @@
public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
ctor public Dp(float value);
- method public inline operator int compareTo(androidx.ui.core.Dp other);
+ method public operator int compareTo(androidx.ui.core.Dp other);
method public float component1();
method public androidx.ui.core.Dp copy(float value);
method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
ctor public DpCubed();
- method public inline operator int compareTo-zqpl1kg(float p);
- method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+ method public operator int compareTo-zqpl1kg(float p);
+ method public static operator int compareTo-zqpl1kg(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
ctor public DpInverse();
- method public inline operator int compareTo-ASDJgtI(float p);
- method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+ method public operator int compareTo-ASDJgtI(float p);
+ method public static operator int compareTo-ASDJgtI(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
ctor public DpSquared();
- method public inline operator int compareTo-KkBJKWw(float p);
- method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+ method public operator int compareTo-KkBJKWw(float p);
+ method public static operator int compareTo-KkBJKWw(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
ctor public IntPx(int value);
- method public inline operator int compareTo(androidx.ui.core.IntPx other);
+ method public operator int compareTo(androidx.ui.core.IntPx other);
method public inline operator int compareTo(androidx.ui.core.Px other);
method public int component1();
method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
public interface Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+ method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+ method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
}
public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
public static final class Modifier.None implements androidx.ui.core.Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
field public static final androidx.ui.core.Modifier.None! INSTANCE;
}
@@ -674,7 +674,7 @@
public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
ctor public Px(float value);
- method public inline operator int compareTo(androidx.ui.core.Px other);
+ method public operator int compareTo(androidx.ui.core.Px other);
method public inline operator int compareTo(androidx.ui.core.IntPx other);
method public float component1();
method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
ctor public PxCubed();
- method public inline operator int compareTo-syUR1PY(float p);
- method public static inline operator int compareTo-syUR1PY(float $this, float other);
+ method public operator int compareTo-syUR1PY(float p);
+ method public static operator int compareTo-syUR1PY(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
ctor public PxInverse();
- method public inline operator int compareTo-MXEAIGs(float p);
- method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+ method public operator int compareTo-MXEAIGs(float p);
+ method public static operator int compareTo-MXEAIGs(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
ctor public PxSquared();
- method public inline operator int compareTo-kVJEwbQ(float p);
- method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+ method public operator int compareTo-kVJEwbQ(float p);
+ method public static operator int compareTo-kVJEwbQ(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -201,7 +201,7 @@
public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
ctor public Dp(float value);
- method public inline operator int compareTo(androidx.ui.core.Dp other);
+ method public operator int compareTo(androidx.ui.core.Dp other);
method public float component1();
method public androidx.ui.core.Dp copy(float value);
method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
ctor public DpCubed();
- method public inline operator int compareTo-zqpl1kg(float p);
- method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+ method public operator int compareTo-zqpl1kg(float p);
+ method public static operator int compareTo-zqpl1kg(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
ctor public DpInverse();
- method public inline operator int compareTo-ASDJgtI(float p);
- method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+ method public operator int compareTo-ASDJgtI(float p);
+ method public static operator int compareTo-ASDJgtI(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
ctor public DpSquared();
- method public inline operator int compareTo-KkBJKWw(float p);
- method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+ method public operator int compareTo-KkBJKWw(float p);
+ method public static operator int compareTo-KkBJKWw(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
ctor public IntPx(int value);
- method public inline operator int compareTo(androidx.ui.core.IntPx other);
+ method public operator int compareTo(androidx.ui.core.IntPx other);
method public inline operator int compareTo(androidx.ui.core.Px other);
method public int component1();
method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
public interface Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+ method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+ method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
}
public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
public static final class Modifier.None implements androidx.ui.core.Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
field public static final androidx.ui.core.Modifier.None! INSTANCE;
}
@@ -674,7 +674,7 @@
public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
ctor public Px(float value);
- method public inline operator int compareTo(androidx.ui.core.Px other);
+ method public operator int compareTo(androidx.ui.core.Px other);
method public inline operator int compareTo(androidx.ui.core.IntPx other);
method public float component1();
method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
ctor public PxCubed();
- method public inline operator int compareTo-syUR1PY(float p);
- method public static inline operator int compareTo-syUR1PY(float $this, float other);
+ method public operator int compareTo-syUR1PY(float p);
+ method public static operator int compareTo-syUR1PY(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
ctor public PxInverse();
- method public inline operator int compareTo-MXEAIGs(float p);
- method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+ method public operator int compareTo-MXEAIGs(float p);
+ method public static operator int compareTo-MXEAIGs(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
ctor public PxSquared();
- method public inline operator int compareTo-kVJEwbQ(float p);
- method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+ method public operator int compareTo-kVJEwbQ(float p);
+ method public static operator int compareTo-kVJEwbQ(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/restricted_0.1.0-dev04.txt b/ui/ui-core/api/restricted_0.1.0-dev04.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev04.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev04.txt
@@ -201,7 +201,7 @@
public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
ctor public Dp(float value);
- method public inline operator int compareTo(androidx.ui.core.Dp other);
+ method public operator int compareTo(androidx.ui.core.Dp other);
method public float component1();
method public androidx.ui.core.Dp copy(float value);
method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
ctor public DpCubed();
- method public inline operator int compareTo-zqpl1kg(float p);
- method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+ method public operator int compareTo-zqpl1kg(float p);
+ method public static operator int compareTo-zqpl1kg(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
ctor public DpInverse();
- method public inline operator int compareTo-ASDJgtI(float p);
- method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+ method public operator int compareTo-ASDJgtI(float p);
+ method public static operator int compareTo-ASDJgtI(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
ctor public DpSquared();
- method public inline operator int compareTo-KkBJKWw(float p);
- method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+ method public operator int compareTo-KkBJKWw(float p);
+ method public static operator int compareTo-KkBJKWw(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
ctor public IntPx(int value);
- method public inline operator int compareTo(androidx.ui.core.IntPx other);
+ method public operator int compareTo(androidx.ui.core.IntPx other);
method public inline operator int compareTo(androidx.ui.core.Px other);
method public int component1();
method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
public interface Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+ method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+ method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
}
public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
public static final class Modifier.None implements androidx.ui.core.Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
field public static final androidx.ui.core.Modifier.None! INSTANCE;
}
@@ -674,7 +674,7 @@
public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
ctor public Px(float value);
- method public inline operator int compareTo(androidx.ui.core.Px other);
+ method public operator int compareTo(androidx.ui.core.Px other);
method public inline operator int compareTo(androidx.ui.core.IntPx other);
method public float component1();
method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
ctor public PxCubed();
- method public inline operator int compareTo-syUR1PY(float p);
- method public static inline operator int compareTo-syUR1PY(float $this, float other);
+ method public operator int compareTo-syUR1PY(float p);
+ method public static operator int compareTo-syUR1PY(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
ctor public PxInverse();
- method public inline operator int compareTo-MXEAIGs(float p);
- method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+ method public operator int compareTo-MXEAIGs(float p);
+ method public static operator int compareTo-MXEAIGs(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
ctor public PxSquared();
- method public inline operator int compareTo-kVJEwbQ(float p);
- method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+ method public operator int compareTo-kVJEwbQ(float p);
+ method public static operator int compareTo-kVJEwbQ(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -201,7 +201,7 @@
public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
ctor public Dp(float value);
- method public inline operator int compareTo(androidx.ui.core.Dp other);
+ method public operator int compareTo(androidx.ui.core.Dp other);
method public float component1();
method public androidx.ui.core.Dp copy(float value);
method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
ctor public DpCubed();
- method public inline operator int compareTo-zqpl1kg(float p);
- method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+ method public operator int compareTo-zqpl1kg(float p);
+ method public static operator int compareTo-zqpl1kg(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
ctor public DpInverse();
- method public inline operator int compareTo-ASDJgtI(float p);
- method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+ method public operator int compareTo-ASDJgtI(float p);
+ method public static operator int compareTo-ASDJgtI(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
ctor public DpSquared();
- method public inline operator int compareTo-KkBJKWw(float p);
- method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+ method public operator int compareTo-KkBJKWw(float p);
+ method public static operator int compareTo-KkBJKWw(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-KkBJKWw(float $this, float other);
method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
ctor public IntPx(int value);
- method public inline operator int compareTo(androidx.ui.core.IntPx other);
+ method public operator int compareTo(androidx.ui.core.IntPx other);
method public inline operator int compareTo(androidx.ui.core.Px other);
method public int component1();
method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
public interface Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+ method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+ method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
}
public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
public static final class Modifier.None implements androidx.ui.core.Modifier {
method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
- method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
field public static final androidx.ui.core.Modifier.None! INSTANCE;
}
@@ -674,7 +674,7 @@
public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
ctor public Px(float value);
- method public inline operator int compareTo(androidx.ui.core.Px other);
+ method public operator int compareTo(androidx.ui.core.Px other);
method public inline operator int compareTo(androidx.ui.core.IntPx other);
method public float component1();
method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
ctor public PxCubed();
- method public inline operator int compareTo-syUR1PY(float p);
- method public static inline operator int compareTo-syUR1PY(float $this, float other);
+ method public operator int compareTo-syUR1PY(float p);
+ method public static operator int compareTo-syUR1PY(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
ctor public PxInverse();
- method public inline operator int compareTo-MXEAIGs(float p);
- method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+ method public operator int compareTo-MXEAIGs(float p);
+ method public static operator int compareTo-MXEAIGs(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
ctor public PxSquared();
- method public inline operator int compareTo-kVJEwbQ(float p);
- method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+ method public operator int compareTo-kVJEwbQ(float p);
+ method public static operator int compareTo-kVJEwbQ(float $this, float other);
method public static float constructor-impl(float value);
method public static inline operator float div-impl(float $this, float other);
method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt b/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
index e8917eb..225e696 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
@@ -101,8 +101,7 @@
/**
* Support comparing Dimensions with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: Dp) = value.compareTo(other.value)
+ override /* TODO: inline */ operator fun compareTo(other: Dp) = value.compareTo(other.value)
override fun toString() = "$value.dp"
@@ -278,8 +277,7 @@
/**
* Support comparing DpSquared with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: DpSquared) =
+ override /* TODO: inline */ operator fun compareTo(other: DpSquared) =
value.compareTo(other.value)
override fun toString(): String = "$value.dp^2"
@@ -342,8 +340,8 @@
/**
* Support comparing DpCubed with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: DpCubed) = value.compareTo(other.value)
+ override /* TODO: inline */ operator fun compareTo(other: DpCubed) =
+ value.compareTo(other.value)
override fun toString(): String = "$value.dp^3"
}
@@ -403,8 +401,7 @@
/**
* Support comparing DpInverse with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: DpInverse) =
+ override /* TODO: inline */ operator fun compareTo(other: DpInverse) =
value.compareTo(other.value)
override fun toString(): String = "$value.dp^-1"
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt b/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
index 5b12588..3214b21 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
@@ -100,8 +100,7 @@
/**
* Support comparing Dimensions with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: IntPx) = value.compareTo(other.value)
+ override /* TODO: inline */ operator fun compareTo(other: IntPx) = value.compareTo(other.value)
/**
* Compares this [IntPx] to another [Px]
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt b/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt
index 6be2126..2de6704 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt
@@ -24,8 +24,8 @@
* `object`s, `data class`es or otherwise implement [equals][Any.equals]. A correct implementation
* of an [Element] must meet this requirement.
*
- * Modifier elements may be combined using [wraps]. Order is significant; modifier elements wrap
- * the modifiers to their right
+ * Modifier elements may be combined using `+` Order is significant; modifier elements to the left
+ * are applied before modifier elements to the right.
*
* Composables that accept a [Modifier] as a parameter to be applied to the whole component
* represented by the composable function should name the parameter `modifier` and
@@ -37,7 +37,7 @@
* default parameter value. For example:
*
* @Composable fun Foo(modifier: Modifier = Modifier.None) {
- * Column(modifier wraps defaultFooModifier) {
+ * Column(modifier + defaultFooModifier) {
* // ...
* }
* }
@@ -69,7 +69,7 @@
* and each element from outside in.
*
* Elements wrap one another in a chain from left to right; an [Element] that appears to the
- * left of another in a [wraps] expression or in [operation]'s parameter order affects all
+ * left of another in a `+` expression or in [operation]'s parameter order affects all
* of the elements that appear after it. [foldIn] may be used to accumulate a value starting
* from the parent or head of the modifier chain to the final wrapped child.
*/
@@ -80,7 +80,7 @@
* and each element from inside out.
*
* Elements wrap one another in a chain from left to right; an [Element] that appears to the
- * left of another in a [wraps] expression or in [operation]'s parameter order affects all
+ * left of another in a `+` expression or in [operation]'s parameter order affects all
* of the elements that appear after it. [foldOut] may be used to accumulate a value starting
* from the child or tail of the modifier chain up to the parent or head of the chain.
*/
@@ -89,7 +89,18 @@
/**
* Wraps another [Modifier] with this one, returning the new chain.
*/
- infix fun wraps(other: Modifier): Modifier =
+ @Deprecated(
+ "use + instead",
+ replaceWith = ReplaceWith("this + other")
+ )
+ infix fun wraps(other: Modifier): Modifier = this + other
+
+ /**
+ * Concatenates this modifier with another.
+ *
+ * Returns a [Modifier] representing this modifier followed by [other] in sequence.
+ */
+ operator fun plus(other: Modifier): Modifier =
if (other === None) this else foldOut(other, ::CombinedModifier)
/**
@@ -99,7 +110,7 @@
object None : Modifier {
override fun <R> foldIn(initial: R, operation: (R, Element) -> R): R = initial
override fun <R> foldOut(initial: R, operation: (Element, R) -> R): R = initial
- override fun wraps(other: Modifier): Modifier = other
+ override operator fun plus(other: Modifier): Modifier = other
override fun toString() = "Modifier.None"
}
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Px.kt b/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
index df43cc0..75d5c0a 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
@@ -100,8 +100,7 @@
/**
* Compare [Px] with another [Px].
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: Px) = value.compareTo(other.value)
+ override /* TODO: inline */ operator fun compareTo(other: Px) = value.compareTo(other.value)
/**
* Compares this [Px] to another [IntPx]
@@ -288,8 +287,7 @@
/**
* Support comparing PxSquared with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: PxSquared) =
+ override /* TODO: inline */ operator fun compareTo(other: PxSquared) =
value.compareTo(other.value)
override fun toString(): String = "$value.px^2"
@@ -351,8 +349,8 @@
/**
* Support comparing PxCubed with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: PxCubed) = value.compareTo(other.value)
+ override /* TODO: inline */ operator fun compareTo(other: PxCubed) =
+ value.compareTo(other.value)
override fun toString(): String = "$value.px^3"
}
@@ -413,8 +411,7 @@
/**
* Support comparing PxInverse with comparison operators.
*/
- @Suppress("OVERRIDE_BY_INLINE")
- override inline operator fun compareTo(other: PxInverse) =
+ override /* TODO: inline */ operator fun compareTo(other: PxInverse) =
value.compareTo(other.value)
override fun toString(): String = "$value.px^-1"
diff --git a/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt
index d6e5232..6303e1f 100644
--- a/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt
+++ b/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt
@@ -21,12 +21,12 @@
class ModifierTest {
/**
- * Verifies that the [Modifier.wraps] operation results in [Modifier] instances that
+ * Verifies that the [Modifier.plus] operation results in [Modifier] instances that
* [Modifier.foldIn] and [Modifier.foldOut] in the expected order.
*/
@Test
fun wrapElementChain() {
- val chain = SampleModifier(1) wraps SampleModifier(2) wraps SampleModifier(3)
+ val chain = SampleModifier(1) + SampleModifier(2) + SampleModifier(3)
val forwards = chain.foldIn(emptyList<Int>()) { acc, e ->
acc + (e as SampleModifier).value
}
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt
index f93b3c8..c21d839 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt
@@ -23,7 +23,7 @@
import androidx.ui.foundation.samples.AnchoredDraggableSample
import androidx.ui.foundation.samples.DraggableSample
import androidx.ui.layout.Column
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
import androidx.ui.layout.Wrap
@@ -35,7 +35,7 @@
Wrap {
Column {
DraggableSample()
- Spacer(Height(100.dp))
+ Spacer(LayoutHeight(100.dp))
AnchoredDraggableSample()
}
}
diff --git a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
index 670f1ed..333c091 100644
--- a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
+++ b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
@@ -36,9 +36,9 @@
import androidx.ui.graphics.Color
import androidx.ui.layout.Column
import androidx.ui.layout.Container
+import androidx.ui.layout.LayoutPadding
import androidx.ui.layout.Padding
import androidx.ui.layout.Row
-import androidx.ui.layout.Spacing
import androidx.ui.layout.Table
import androidx.ui.text.TextStyle
@@ -89,7 +89,7 @@
val style = TextStyle(fontSize = 30.sp)
// Scroller will be clipped to this padding
VerticalScroller {
- Column(modifier = Spacing(20.dp)) {
+ Column(modifier = LayoutPadding(20.dp)) {
phrases.forEach { phrase ->
Text(text = phrase, style = style)
}
diff --git a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt
index b3ec690..f17c97a 100644
--- a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt
+++ b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt
@@ -23,7 +23,7 @@
import androidx.ui.foundation.drawBorders
import androidx.ui.foundation.shape.border.Border
import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Padding
import androidx.ui.layout.Table
@@ -47,7 +47,7 @@
tableRow {
repeat(8) {
Padding(2.dp) {
- ColoredRect(color = Color.Magenta, modifier = AspectRatio(1f))
+ ColoredRect(color = Color.Magenta, modifier = LayoutAspectRatio(1f))
}
}
}
diff --git a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt
index 62b9cde..499f880 100644
--- a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt
+++ b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt
@@ -31,7 +31,7 @@
import androidx.ui.graphics.SolidColor
import androidx.ui.layout.Align
import androidx.ui.layout.Container
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutPadding
import androidx.ui.semantics.Semantics
import androidx.ui.test.assertShape
import androidx.ui.test.captureToBitmap
@@ -63,7 +63,7 @@
Container(
width = 20.px.toDp(),
height = 20.px.toDp(),
- modifier = Spacing(10.px.toDp()) wraps background(Color.White)
+ modifier = LayoutPadding(10.px.toDp()) + background(Color.White)
) {}
}
}
@@ -89,7 +89,7 @@
Container(
width = 20.px.toDp(),
height = 20.px.toDp(),
- modifier = Spacing(10.px.toDp()) wraps background(
+ modifier = LayoutPadding(10.px.toDp()) + background(
SolidColor(
Color.White
)
@@ -114,7 +114,7 @@
Container(
width = 40.px.toDp(),
height = 40.px.toDp(),
- modifier = background(Color.Magenta) wraps
+ modifier = background(Color.Magenta) +
background(shape = CircleShape, color = Color.White)
) {}
}
@@ -133,11 +133,10 @@
Container(
width = 40.px.toDp(),
height = 40.px.toDp(),
- modifier = background(Color.Magenta) wraps
- background(
- shape = CircleShape,
- brush = SolidColor(Color.White)
- )
+ modifier = background(Color.Magenta) + background(
+ shape = CircleShape,
+ brush = SolidColor(Color.White)
+ )
) {}
}
}
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
index 9f752c7..a14e611 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
@@ -49,7 +49,7 @@
) {
val background = +memo(brush) { background(brush) }
Container(
- modifier = modifier wraps background, width = width, height = height, expanded = true
+ modifier = modifier + background, width = width, height = height, expanded = true
) {}
}
@@ -71,6 +71,6 @@
) {
val background = +memo(color) { background(color) }
Container(
- modifier = modifier wraps background, width = width, height = height, expanded = true
+ modifier = modifier + background, width = width, height = height, expanded = true
) {}
}
diff --git a/ui/ui-framework/OWNERS b/ui/ui-framework/OWNERS
index 78f2531..fd8f9ec 100644
--- a/ui/ui-framework/OWNERS
+++ b/ui/ui-framework/OWNERS
@@ -1,5 +1,6 @@
[email protected]
[email protected]
[email protected]
# Semantics
[email protected]
diff --git a/ui/ui-framework/api/0.1.0-dev04.txt b/ui/ui-framework/api/0.1.0-dev04.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/0.1.0-dev04.txt
+++ b/ui/ui-framework/api/0.1.0-dev04.txt
@@ -166,8 +166,8 @@
method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
method public androidx.ui.core.TextSpanComposer getComposer();
- method public inline Object joinKey(Object left, Object? right);
- method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+ method public Object joinKey(Object left, Object? right);
+ method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
}
public final class TextSpanScope {
diff --git a/ui/ui-framework/api/current.txt b/ui/ui-framework/api/current.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/current.txt
+++ b/ui/ui-framework/api/current.txt
@@ -166,8 +166,8 @@
method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
method public androidx.ui.core.TextSpanComposer getComposer();
- method public inline Object joinKey(Object left, Object? right);
- method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+ method public Object joinKey(Object left, Object? right);
+ method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
}
public final class TextSpanScope {
diff --git a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt
+++ b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt
@@ -166,8 +166,8 @@
method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
method public androidx.ui.core.TextSpanComposer getComposer();
- method public inline Object joinKey(Object left, Object? right);
- method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+ method public Object joinKey(Object left, Object? right);
+ method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
}
public final class TextSpanScope {
diff --git a/ui/ui-framework/api/public_plus_experimental_current.txt b/ui/ui-framework/api/public_plus_experimental_current.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/public_plus_experimental_current.txt
+++ b/ui/ui-framework/api/public_plus_experimental_current.txt
@@ -166,8 +166,8 @@
method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
method public androidx.ui.core.TextSpanComposer getComposer();
- method public inline Object joinKey(Object left, Object? right);
- method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+ method public Object joinKey(Object left, Object? right);
+ method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
}
public final class TextSpanScope {
diff --git a/ui/ui-framework/api/restricted_0.1.0-dev04.txt b/ui/ui-framework/api/restricted_0.1.0-dev04.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/restricted_0.1.0-dev04.txt
+++ b/ui/ui-framework/api/restricted_0.1.0-dev04.txt
@@ -166,8 +166,8 @@
method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
method public androidx.ui.core.TextSpanComposer getComposer();
- method public inline Object joinKey(Object left, Object? right);
- method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+ method public Object joinKey(Object left, Object? right);
+ method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
}
public final class TextSpanScope {
diff --git a/ui/ui-framework/api/restricted_current.txt b/ui/ui-framework/api/restricted_current.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/restricted_current.txt
+++ b/ui/ui-framework/api/restricted_current.txt
@@ -166,8 +166,8 @@
method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
method public androidx.ui.core.TextSpanComposer getComposer();
- method public inline Object joinKey(Object left, Object? right);
- method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+ method public Object joinKey(Object left, Object? right);
+ method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
}
public final class TextSpanScope {
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt
index bb61ba5..3116e4e 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt
@@ -41,22 +41,22 @@
import androidx.ui.foundation.shape.RectangleShape
import androidx.ui.foundation.shape.corner.CircleShape
import androidx.ui.graphics.Color
+import androidx.ui.graphics.Paint
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.layout.Column
+import androidx.ui.layout.ColumnScope
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
import androidx.ui.layout.EdgeInsets
import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Height
-import androidx.ui.layout.Spacer
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.MainAxisAlignment
+import androidx.ui.layout.Spacer
import androidx.ui.layout.Wrap
-import androidx.ui.graphics.Paint
-import androidx.ui.layout.ColumnScope
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
import androidx.ui.text.TextStyle
import androidx.ui.text.style.TextAlign
@@ -70,7 +70,7 @@
Column {
FlexRow(
- ExpandedWidth wraps Gravity.Center,
+ LayoutExpandedWidth + LayoutGravity.Center,
mainAxisAlignment = MainAxisAlignment.SpaceBetween
) {
inflexible {
@@ -161,7 +161,7 @@
val showPopup = +state { true }
val containerSize = 100.dp
- Column(Gravity.Center) {
+ Column(LayoutGravity.Center) {
Container(width = containerSize, height = containerSize) {
if (showPopup.value) {
Popup(alignment = Alignment.Center) {
@@ -190,7 +190,7 @@
@Composable
fun ColumnScope.PopupWithChangingContent() {
- Column(Gravity.Center) {
+ Column(LayoutGravity.Center) {
val heightSize = 120.dp
val widthSize = 160.dp
val popupContentState = +state { 0 }
@@ -221,7 +221,7 @@
}
}
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
ClickableTextWithBackground(
text = "Change content",
color = Color.Cyan,
@@ -241,7 +241,7 @@
val parentHeight = +state { 60.dp }
val parentSizeChanged = +state { false }
- Column(Gravity.Center) {
+ Column(LayoutGravity.Center) {
Container(
height = containerHeight,
width = containerWidth,
@@ -259,7 +259,7 @@
}
}
}
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
ClickableTextWithBackground(
text = "Change parent's position",
color = Color.Cyan,
@@ -271,7 +271,7 @@
Alignment.TopLeft
}
)
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
ClickableTextWithBackground(
text = "Change parent's size",
color = Color.Cyan,
@@ -291,7 +291,7 @@
@Composable
fun ColumnScope.PopupDropdownAlignment() {
- Column(Gravity.Center) {
+ Column(LayoutGravity.Center) {
val heightSize = 120.dp
val widthSize = 160.dp
val dropDownAlignment = +state { DropDownAlignment.Left }
@@ -308,7 +308,7 @@
}
)
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
ColoredContainer(
height = heightSize,
@@ -330,7 +330,7 @@
@Composable
fun ColumnScope.PopupAlignmentDemo() {
- Container(Gravity.Center) {
+ Container(LayoutGravity.Center) {
val heightSize = 200.dp
val widthSize = 400.dp
val counter = +state { 0 }
@@ -365,8 +365,8 @@
}
}
- Spacer(Height(10.dp))
- ColoredContainer(color = Color.White, modifier = Gravity.Center) {
+ Spacer(LayoutHeight(10.dp))
+ ColoredContainer(color = Color.White, modifier = LayoutGravity.Center) {
Text("Alignment: " + popupAlignment.value.toString())
}
}
@@ -375,7 +375,7 @@
@Composable
fun ColumnScope.PopupWithEditText() {
- Column(Gravity.Center) {
+ Column(LayoutGravity.Center) {
val widthSize = 190.dp
val heightSize = 120.dp
val editLineSize = 150.dp
@@ -391,7 +391,7 @@
height = heightSize,
width = widthSize,
color = Color.Red,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
) {
if (showPopup.value) {
Popup(
@@ -421,13 +421,13 @@
@Composable
fun ColumnScope.PopupWithChangingSize() {
- Column(Gravity.Center) {
+ Column(LayoutGravity.Center) {
val showPopup = +state { true }
val heightSize = 120.dp
val widthSize = 160.dp
val rectangleState = +state { 0 }
- Spacer(Height(15.dp))
+ Spacer(LayoutHeight(15.dp))
ColoredContainer(
height = heightSize,
width = widthSize,
@@ -460,7 +460,7 @@
}
}
}
- Spacer(Height(25.dp))
+ Spacer(LayoutHeight(25.dp))
ClickableTextWithBackground(
text = "Change size",
color = Color.Cyan,
@@ -475,9 +475,9 @@
fun ColumnScope.PopupInsideScroller() {
val heightSize = 400.dp
val widthSize = 200.dp
- Container(width = widthSize, height = heightSize, modifier = Gravity.Center) {
+ Container(width = widthSize, height = heightSize, modifier = LayoutGravity.Center) {
VerticalScroller {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
ColoredContainer(width = 80.dp,
height = 160.dp,
color = Color(0xFF00FF00)
@@ -488,7 +488,7 @@
}
for (i in 0..30) {
- Text(text = "Scroll #$i", modifier = Gravity.Center)
+ Text(text = "Scroll #$i", modifier = LayoutGravity.Center)
}
}
}
@@ -501,13 +501,13 @@
val widthSize = 190.dp
val heightSize = 120.dp
- Spacer(Height(350.dp))
+ Spacer(LayoutHeight(350.dp))
Text("Start typing in the EditText below the parent(Red rectangle)")
ColoredContainer(
height = heightSize,
width = widthSize,
color = Color.Red,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
) {
Popup(Alignment.Center) {
ColoredContainer(color = Color.Green) {
@@ -518,7 +518,7 @@
EditLine(initialText = "Continue typing...", color = Color.Gray)
- Spacer(Height(24.dp))
+ Spacer(LayoutHeight(24.dp))
}
}
@@ -529,7 +529,7 @@
onClick: (() -> Unit)? = null,
padding: EdgeInsets = EdgeInsets(0.dp)
) {
- Container(Gravity.Center) {
+ Container(LayoutGravity.Center) {
DrawShape(RectangleShape, color)
Clickable(onClick = onClick) {
Container(padding = padding) {
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
index 89ab354..4f6baea 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
@@ -30,9 +30,9 @@
import androidx.compose.state
import androidx.compose.unaryPlus
import androidx.ui.layout.Arrangement
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
/** A [SemanticProperty] is used to store semantic information about a component.
*
@@ -165,7 +165,7 @@
actions: Set<SemanticAction<out Any?>> = setOf(),
children: @Composable() () -> Unit
) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
MaterialTheme {
Collapsable {
InvokeActionsByType(actions)
@@ -174,11 +174,11 @@
InvokeActionsByParameters(actions)
}
}
- Row(ExpandedWidth, arrangement = Arrangement.Center) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
Container(
height = 300.dp,
width = 500.dp,
- modifier = Gravity.Center,
+ modifier = LayoutGravity.Center,
children = children
)
}
@@ -194,7 +194,7 @@
val secondary =
actions.firstOrNull { it.types.contains(AccessibilityAction.Secondary) }
Text(text = "Accessibility Actions By Type", style = (+MaterialTheme.typography()).h6)
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
Button(
text = "Primary",
onClick = { primary?.invoke(ActionCaller.Accessibility) })
@@ -212,7 +212,7 @@
Text(
text = "Accessibility Actions By Phrase",
style = (+MaterialTheme.typography()).h6)
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
actions.forEach {
Button(
text = it.phrase,
@@ -229,7 +229,7 @@
val positive = actions.firstOrNull { it.types.contains(PolarityAction.Positive) }
val negative = actions.firstOrNull { it.types.contains(PolarityAction.Negative) }
Text(text = "Assistant Actions", style = (+MaterialTheme.typography()).h6)
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
Button(
text = "Negative",
onClick = { negative?.invoke(ActionCaller.Assistant) })
@@ -253,7 +253,7 @@
val unitAction =
actions.firstOrNull { it.defaultParam is Unit } as SemanticAction<Unit>?
Text(text = "Actions using Parameters", style = (+MaterialTheme.typography()).h6)
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
Button(
text = "IntAction",
onClick = { pxPositionAction?.invoke(param = PxPosition(1.px, 1.px)) })
@@ -277,7 +277,7 @@
val collapsedState = +state { CollapseMode.Collapsed }
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
Button(text = "Show/Hide Actions", onClick = {
collapsedState.value = when (collapsedState.value) {
CollapseMode.Collapsed -> CollapseMode.Visible
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
index ddbaf52..24deccd 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
@@ -37,7 +37,7 @@
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.layout.Column
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
import androidx.ui.material.MaterialTheme
@@ -71,7 +71,7 @@
)
}
- Spacer(Height(40.dp))
+ Spacer(LayoutHeight(40.dp))
Text("Email", style = labelStyle)
Autofill(
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt
index 8f217ae..bf5cc05 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt
@@ -29,7 +29,7 @@
import androidx.ui.graphics.Color
import androidx.ui.layout.Arrangement
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.Row
import androidx.ui.layout.RowScope
import androidx.ui.material.MaterialTheme
@@ -81,5 +81,5 @@
@Composable
private fun CenteredRow(children: @Composable() RowScope.() -> Unit) {
- Row(modifier = ExpandedWidth, arrangement = Arrangement.Center, children = children)
+ Row(modifier = LayoutExpandedWidth, arrangement = Arrangement.Center, children = children)
}
\ No newline at end of file
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
index 64ffd31..d8c0a12 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
@@ -1743,7 +1743,7 @@
Draw { canvas, parentSize ->
canvas.drawRect(parentSize.toRect(), Paint().apply { color = outerColor })
}
- FixedSize(10.ipx, PaddingModifier(10.ipx) wraps background(
+ FixedSize(10.ipx, PaddingModifier(10.ipx) + background(
innerColor
)
) {
@@ -1790,7 +1790,7 @@
val countDownModifier = draw { _, _ ->
drawLatch.countDown()
}
- FixedSize(30.ipx, countDownModifier wraps background(
+ FixedSize(30.ipx, countDownModifier + background(
color = outerColor
)
) {
@@ -1817,7 +1817,7 @@
) {
FixedSize(
size = 10.ipx,
- modifier = PaddingModifier(10.ipx) wraps background(
+ modifier = PaddingModifier(10.ipx) + background(
color = innerColor
)
) {
@@ -1871,11 +1871,10 @@
FixedSize(30.ipx, background(outerColor)) {
FixedSize(
size = 10.ipx,
- modifier = PaddingModifier(10.ipx) wraps
- background(
- shape = CircleShape,
- color = innerColor
- )
+ modifier = PaddingModifier(10.ipx) + background(
+ shape = CircleShape,
+ color = innerColor
+ )
) {
Draw { _, _ ->
drawLatch.countDown()
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
index 64c2402..1d93205 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
@@ -86,8 +86,8 @@
internal val invocation = Object()
class TextSpanComposition(val composer: TextSpanComposer) {
- @Suppress("NOTHING_TO_INLINE")
- inline operator fun <V> Effect<V>.unaryPlus(): V = resolve([email protected])
+ /* TODO: inline */ operator fun <V> Effect<V>.unaryPlus(): V =
+ resolve([email protected])
inline fun emit(
key: Any,
@@ -117,8 +117,7 @@
endNode()
}
- @Suppress("NOTHING_TO_INLINE")
- inline fun joinKey(left: Any, right: Any?): Any = composer.joinKey(left, right)
+ /* TODO: inline */ fun joinKey(left: Any, right: Any?): Any = composer.joinKey(left, right)
@Suppress("PLUGIN_WARNING")
inline fun <T> expr(
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
index 95bccc2..fafc275 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
@@ -40,6 +40,7 @@
import androidx.compose.unaryPlus
import androidx.ui.autofill.Autofill
import androidx.ui.autofill.AutofillTree
+import androidx.ui.core.selection.SelectionContainer
import androidx.ui.text.font.Font
import kotlinx.coroutines.Dispatchers
import kotlin.coroutines.CoroutineContext
@@ -114,11 +115,22 @@
// kotlinx.coroutines.Dispatchers' not instance of 'Precise Reference: androidx.compose.Ambient'.
val coroutineContext = Dispatchers.Main
return Compose.composeInto(composeView.root, this) {
- WrapWithAmbients(composeView, this, coroutineContext, content)
+ WrapWithAmbients(composeView, this, coroutineContext) {
+ WrapWithSelectionContainer(content)
+ }
}
}
/**
+ * We want text/image selection to be enabled by default and disabled per widget. Therefore a root
+ * level [SelectionContainer] is installed at the root.
+ */
+@Composable
+private fun WrapWithSelectionContainer(content: @Composable() () -> Unit) {
+ SelectionContainer(children = content)
+}
+
+/**
* Composes the given composable into the given view.
*
* @param content Composable that will be the content of the view.
@@ -134,7 +146,9 @@
// kotlinx.coroutines.Dispatchers' not instance of 'Precise Reference: androidx.compose.Ambient'.
val coroutineContext = Dispatchers.Main
return Compose.composeInto(composeView.root, context) {
- WrapWithAmbients(composeView, context, coroutineContext, content)
+ WrapWithAmbients(composeView, context, coroutineContext) {
+ WrapWithSelectionContainer(content)
+ }
}
}
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
index 3a50822..333125a8 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
@@ -75,7 +75,8 @@
* @return [Selection] object which is constructed by combining all Composables that are
* selected.
*/
- private fun mergeSelections(
+ // This function is internal for testing purposes.
+ internal fun mergeSelections(
startPosition: PxPosition,
endPosition: PxPosition,
longPress: Boolean = false,
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerDragTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerDragTest.kt
new file mode 100644
index 0000000..5b4ff27
--- /dev/null
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerDragTest.kt
@@ -0,0 +1,209 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.selection
+
+import androidx.test.filters.SmallTest
+import androidx.ui.core.LayoutCoordinates
+import androidx.ui.core.PxPosition
+import androidx.ui.core.px
+import androidx.ui.text.style.TextDirection
+import com.google.common.truth.Truth.assertThat
+import com.nhaarman.mockitokotlin2.any
+import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.spy
+import com.nhaarman.mockitokotlin2.times
+import com.nhaarman.mockitokotlin2.verify
+import com.nhaarman.mockitokotlin2.whenever
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SelectionManagerDragTest {
+ private val selectionRegistrar = SelectionRegistrarImpl()
+ private val selectable = mock<Selectable>()
+ private val selectionManager = SelectionManager(selectionRegistrar)
+
+ private val containerLayoutCoordinates = mock<LayoutCoordinates>()
+ private val childToLocal_result = PxPosition(300.px, 400.px)
+
+ private val startLayoutCoordinates = mock<LayoutCoordinates>()
+ private val endLayoutCoordinates = mock<LayoutCoordinates>()
+ private val startCoordinates = PxPosition(3.px, 30.px)
+ private val endCoordinates = PxPosition(3.px, 600.px)
+ private val fakeInitialSelection: Selection = Selection(
+ start = Selection.AnchorInfo(
+ coordinates = startCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 0,
+ layoutCoordinates = startLayoutCoordinates
+ ),
+ end = Selection.AnchorInfo(
+ coordinates = endCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 5,
+ layoutCoordinates = endLayoutCoordinates
+ )
+ )
+ private val fakeResultSelection: Selection = Selection(
+ start = Selection.AnchorInfo(
+ coordinates = endCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 5,
+ layoutCoordinates = endLayoutCoordinates
+ ),
+ end = Selection.AnchorInfo(
+ coordinates = startCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 0,
+ layoutCoordinates = startLayoutCoordinates
+ )
+ )
+ private var selection: Selection? = fakeInitialSelection
+ private val lambda: (Selection?) -> Unit = { selection = it }
+ private val spyLambda = spy(lambda)
+
+ @Before
+ fun setup() {
+ selectionRegistrar.subscribe(selectable)
+
+ whenever(
+ containerLayoutCoordinates.childToLocal(
+ child = any(),
+ childLocal = any()
+ )
+ ).thenReturn(childToLocal_result)
+
+ whenever(
+ selectable.getSelection(
+ startPosition = any(),
+ endPosition = any(),
+ containerLayoutCoordinates = any(),
+ longPress = any()
+ )
+ ).thenReturn(fakeResultSelection)
+
+ selectionManager.containerLayoutCoordinates = containerLayoutCoordinates
+ selectionManager.onSelectionChange = spyLambda
+ selectionManager.selection = selection
+ }
+
+ @Test
+ fun handleDragObserver_onStart_startHandle_enable_draggingHandle_get_startHandle_info() {
+ selectionManager.handleDragObserver(isStartHandle = true).onStart(PxPosition.Origin)
+
+ verify(containerLayoutCoordinates, times(1))
+ .childToLocal(
+ child = startLayoutCoordinates,
+ childLocal = getAdjustedCoordinates(startCoordinates)
+ )
+ verify_draggingHandle(expectedDraggingHandleValue = true)
+ verify(spyLambda, times(0)).invoke(fakeResultSelection)
+ }
+
+ @Test
+ fun handleDragObserver_onStart_endHandle_enable_draggingHandle_get_endHandle_info() {
+ selectionManager.handleDragObserver(isStartHandle = false).onStart(PxPosition.Origin)
+
+ verify(containerLayoutCoordinates, times(1))
+ .childToLocal(
+ child = endLayoutCoordinates,
+ childLocal = getAdjustedCoordinates(endCoordinates)
+ )
+ verify_draggingHandle(expectedDraggingHandleValue = true)
+ verify(spyLambda, times(0)).invoke(fakeResultSelection)
+ }
+
+ @Test
+ fun handleDragObserver_onDrag_startHandle_reuse_endHandle_calls_getSelection_change_selection
+ () {
+ val dragDistance = PxPosition(100.px, 100.px)
+ selectionManager.handleDragObserver(isStartHandle = true).onStart(PxPosition.Origin)
+
+ val result = selectionManager.handleDragObserver(isStartHandle = true).onDrag(dragDistance)
+
+ verify(containerLayoutCoordinates, times(1))
+ .childToLocal(
+ child = endLayoutCoordinates,
+ childLocal = getAdjustedCoordinates(endCoordinates)
+ )
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = childToLocal_result + dragDistance,
+ endPosition = childToLocal_result,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = false
+ )
+ assertThat(selection).isEqualTo(fakeResultSelection)
+ verify(spyLambda, times(1)).invoke(fakeResultSelection)
+ assertThat(result).isEqualTo(dragDistance)
+ }
+
+ @Test
+ fun handleDragObserver_onDrag_endHandle_resue_startHandle_calls_getSelection_change_selection
+ () {
+ val dragDistance = PxPosition(100.px, 100.px)
+ selectionManager.handleDragObserver(isStartHandle = false).onStart(PxPosition.Origin)
+
+ val result = selectionManager.handleDragObserver(isStartHandle = false).onDrag(dragDistance)
+
+ verify(containerLayoutCoordinates, times(1))
+ .childToLocal(
+ child = startLayoutCoordinates,
+ childLocal = getAdjustedCoordinates(startCoordinates)
+ )
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = childToLocal_result,
+ endPosition = childToLocal_result + dragDistance,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = false
+ )
+ assertThat(selection).isEqualTo(fakeResultSelection)
+ verify(spyLambda, times(1)).invoke(fakeResultSelection)
+ assertThat(result).isEqualTo(dragDistance)
+ }
+
+ @Test
+ fun handleDragObserver_onStop_disable_draggingHandle() {
+ selectionManager.handleDragObserver(false).onStart(PxPosition.Origin)
+ selectionManager.handleDragObserver(false).onDrag(PxPosition.Origin)
+
+ selectionManager.handleDragObserver(false).onStop(PxPosition.Origin)
+
+ verify_draggingHandle(expectedDraggingHandleValue = false)
+ }
+
+ private fun getAdjustedCoordinates(position: PxPosition): PxPosition {
+ return PxPosition(position.x, position.y - 1.px)
+ }
+
+ private fun verify_draggingHandle(expectedDraggingHandleValue: Boolean) {
+ // Verify draggingHandle is true, by verifying LongPress does nothing. Vice Versa.
+ val position = PxPosition(100.px, 100.px)
+ selectionManager.longPressDragObserver.onLongPress(position)
+ verify(selectable, times(if (expectedDraggingHandleValue) 0 else 1))
+ .getSelection(
+ startPosition = position,
+ endPosition = position,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = true
+ )
+ }
+}
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt
new file mode 100644
index 0000000..dd309f8
--- /dev/null
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.selection
+
+import androidx.test.filters.SmallTest
+import androidx.ui.core.LayoutCoordinates
+import androidx.ui.core.PxPosition
+import androidx.ui.core.px
+import androidx.ui.text.style.TextDirection
+import com.google.common.truth.Truth.assertThat
+import com.nhaarman.mockitokotlin2.any
+import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.spy
+import com.nhaarman.mockitokotlin2.times
+import com.nhaarman.mockitokotlin2.verify
+import com.nhaarman.mockitokotlin2.whenever
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SelectionManagerLongPressDragTest {
+ private val selectionRegistrar = SelectionRegistrarImpl()
+ private val selectable = mock<Selectable>()
+ private val selectionManager = SelectionManager(selectionRegistrar)
+
+ private val startLayoutCoordinates = mock<LayoutCoordinates>()
+ private val endLayoutCoordinates = mock<LayoutCoordinates>()
+ private val startCoordinates = PxPosition(3.px, 30.px)
+ private val endCoordinates = PxPosition(3.px, 600.px)
+ private val fakeInitialSelection: Selection = Selection(
+ start = Selection.AnchorInfo(
+ coordinates = startCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 0,
+ layoutCoordinates = startLayoutCoordinates
+ ),
+ end = Selection.AnchorInfo(
+ coordinates = endCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 5,
+ layoutCoordinates = endLayoutCoordinates
+ )
+ )
+
+ private val fakeResultSelection: Selection = Selection(
+ start = Selection.AnchorInfo(
+ coordinates = endCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 5,
+ layoutCoordinates = endLayoutCoordinates
+ ),
+ end = Selection.AnchorInfo(
+ coordinates = startCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 0,
+ layoutCoordinates = startLayoutCoordinates
+ )
+ )
+
+ private var selection: Selection? = null
+ private val lambda: (Selection?) -> Unit = { selection = it }
+ private val spyLambda = spy(lambda)
+
+ @Before
+ fun setup() {
+ val containerLayoutCoordinates = mock<LayoutCoordinates>()
+ selectionRegistrar.subscribe(selectable)
+
+ whenever(
+ selectable.getSelection(
+ startPosition = any(),
+ endPosition = any(),
+ containerLayoutCoordinates = any(),
+ longPress = any()
+ )
+ ).thenReturn(fakeResultSelection)
+
+ selectionManager.containerLayoutCoordinates = containerLayoutCoordinates
+ selectionManager.onSelectionChange = spyLambda
+ selectionManager.selection = selection
+ }
+
+ @Test
+ fun longPressDragObserver_onLongPress_calls_getSelection_change_selection() {
+ val position = PxPosition(100.px, 100.px)
+
+ selectionManager.longPressDragObserver.onLongPress(position)
+
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = position,
+ endPosition = position,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = true
+ )
+ assertThat(selection).isEqualTo(fakeResultSelection)
+ verify(spyLambda, times(1)).invoke(fakeResultSelection)
+ }
+
+ @Test
+ fun longPressDragObserver_onDragStart_reset_dragTotalDistance() {
+ // Setup. Make sure selectionManager.dragTotalDistance is not 0.
+ val dragDistance1 = PxPosition(15.px, 10.px)
+ val beginPosition1 = PxPosition(30.px, 20.px)
+ val dragDistance2 = PxPosition(100.px, 300.px)
+ val beginPosition2 = PxPosition(300.px, 200.px)
+ selectionManager.longPressDragObserver.onLongPress(beginPosition1)
+ selectionManager.longPressDragObserver.onDragStart()
+ selectionManager.longPressDragObserver.onDrag(dragDistance1)
+ // Setup. Cancel selection and reselect.
+ selectionManager.onRelease()
+ // Start the new selection
+ selectionManager.longPressDragObserver.onLongPress(beginPosition2)
+ selectionManager.selection = fakeInitialSelection
+ selection = fakeInitialSelection
+
+ // Act. Reset selectionManager.dragTotalDistance to zero.
+ selectionManager.longPressDragObserver.onDragStart()
+ selectionManager.longPressDragObserver.onDrag(dragDistance2)
+
+ // Verify.
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = beginPosition2,
+ endPosition = beginPosition2 + dragDistance2,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = true
+ )
+ assertThat(selection).isEqualTo(fakeResultSelection)
+ verify(spyLambda, times(3)).invoke(fakeResultSelection)
+ }
+
+ @Test
+ fun longPressDragObserver_onDrag_calls_getSelection_change_selection() {
+ val dragDistance = PxPosition(15.px, 10.px)
+ val beginPosition = PxPosition(30.px, 20.px)
+ selectionManager.longPressDragObserver.onLongPress(beginPosition)
+ selectionManager.selection = fakeInitialSelection
+ selection = fakeInitialSelection
+ selectionManager.longPressDragObserver.onDragStart()
+
+ val result = selectionManager.longPressDragObserver.onDrag(dragDistance)
+
+ assertThat(result).isEqualTo(dragDistance)
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = beginPosition,
+ endPosition = beginPosition + dragDistance,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = true
+ )
+ assertThat(selection).isEqualTo(fakeResultSelection)
+ verify(spyLambda, times(2)).invoke(fakeResultSelection)
+ }
+
+ @Test
+ fun longPressDragObserver_onDrag_directly_not_call_getSelection_not_change_selection() {
+ val dragDistance = PxPosition(15.px, 10.px)
+ val beginPosition = PxPosition(30.px, 20.px)
+
+ selection = fakeInitialSelection
+ val result = selectionManager.longPressDragObserver.onDrag(dragDistance)
+
+ assertThat(result).isEqualTo(PxPosition.Origin)
+ verify(selectable, times(0))
+ .getSelection(
+ startPosition = beginPosition,
+ endPosition = beginPosition + dragDistance,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = true
+ )
+ assertThat(selection).isEqualTo(fakeInitialSelection)
+ verify(spyLambda, times(0)).invoke(fakeResultSelection)
+ }
+}
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerTest.kt
new file mode 100644
index 0000000..dbd4c94
--- /dev/null
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerTest.kt
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.selection
+
+import androidx.test.filters.SmallTest
+import androidx.ui.core.LayoutCoordinates
+import androidx.ui.core.PxPosition
+import androidx.ui.core.px
+import androidx.ui.text.style.TextDirection
+import com.google.common.truth.Truth.assertThat
+import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.spy
+import com.nhaarman.mockitokotlin2.times
+import com.nhaarman.mockitokotlin2.verify
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SelectionManagerTest {
+ private val selectionRegistrar = SelectionRegistrarImpl()
+ private val selectable = mock<Selectable>()
+ private val selectionManager = SelectionManager(selectionRegistrar)
+
+ private val startLayoutCoordinates = mock<LayoutCoordinates>()
+ private val endLayoutCoordinates = mock<LayoutCoordinates>()
+ private val startCoordinates = PxPosition(3.px, 30.px)
+ private val endCoordinates = PxPosition(3.px, 600.px)
+
+ @Before
+ fun setup() {
+ val containerLayoutCoordinates = mock<LayoutCoordinates>()
+ selectionRegistrar.subscribe(selectable)
+ selectionManager.containerLayoutCoordinates = containerLayoutCoordinates
+ }
+
+ @Test
+ fun mergeSelections_single_selectable_calls_getSelection_once() {
+ selectionManager.mergeSelections(
+ startPosition = startCoordinates,
+ endPosition = endCoordinates
+ )
+
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = startCoordinates,
+ endPosition = endCoordinates,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = false
+ )
+ }
+
+ @Test
+ fun mergeSelections_multiple_selectables_calls_getSelection_multiple_times() {
+ val selectable_another = mock<Selectable>()
+ selectionRegistrar.subscribe(selectable_another)
+
+ selectionManager.mergeSelections(
+ startPosition = startCoordinates,
+ endPosition = endCoordinates
+ )
+
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = startCoordinates,
+ endPosition = endCoordinates,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = false
+ )
+ verify(selectable_another, times(1))
+ .getSelection(
+ startPosition = startCoordinates,
+ endPosition = endCoordinates,
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = false
+ )
+ }
+
+ @Test
+ fun cancel_selection_calls_getSelection_selection_becomes_null() {
+ val fakeSelection =
+ Selection(
+ start = Selection.AnchorInfo(
+ coordinates = startCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 0,
+ layoutCoordinates = startLayoutCoordinates
+ ),
+ end = Selection.AnchorInfo(
+ coordinates = endCoordinates,
+ direction = TextDirection.Ltr,
+ offset = 5,
+ layoutCoordinates = endLayoutCoordinates
+ )
+ )
+ var selection: Selection? = fakeSelection
+ val lambda: (Selection?) -> Unit = { selection = it }
+ val spyLambda = spy(lambda)
+ selectionManager.onSelectionChange = spyLambda
+ selectionManager.selection = fakeSelection
+
+ selectionManager.onRelease()
+
+ verify(selectable, times(1))
+ .getSelection(
+ startPosition = PxPosition((-1).px, (-1).px),
+ endPosition = PxPosition((-1).px, (-1).px),
+ containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+ longPress = false
+ )
+ assertThat(selection).isNull()
+ verify(spyLambda, times(1)).invoke(null)
+ }
+}
diff --git a/ui/ui-layout/api/0.1.0-dev04.txt b/ui/ui-layout/api/0.1.0-dev04.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/0.1.0-dev04.txt
+++ b/ui/ui-layout/api/0.1.0-dev04.txt
@@ -7,40 +7,6 @@
method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Aligned {
- method public androidx.ui.core.LayoutModifier getBottom();
- method public androidx.ui.core.LayoutModifier getBottomCenter();
- method public androidx.ui.core.LayoutModifier getBottomLeft();
- method public androidx.ui.core.LayoutModifier getBottomRight();
- method public androidx.ui.core.LayoutModifier getCenter();
- method public androidx.ui.core.LayoutModifier getCenterHorizontally();
- method public androidx.ui.core.LayoutModifier getCenterLeft();
- method public androidx.ui.core.LayoutModifier getCenterRight();
- method public androidx.ui.core.LayoutModifier getCenterVertically();
- method public androidx.ui.core.LayoutModifier getEnd();
- method public androidx.ui.core.LayoutModifier getStart();
- method public androidx.ui.core.LayoutModifier getTop();
- method public androidx.ui.core.LayoutModifier getTopCenter();
- method public androidx.ui.core.LayoutModifier getTopLeft();
- method public androidx.ui.core.LayoutModifier getTopRight();
- property public final androidx.ui.core.LayoutModifier Bottom;
- property public final androidx.ui.core.LayoutModifier BottomCenter;
- property public final androidx.ui.core.LayoutModifier BottomLeft;
- property public final androidx.ui.core.LayoutModifier BottomRight;
- property public final androidx.ui.core.LayoutModifier Center;
- property public final androidx.ui.core.LayoutModifier CenterHorizontally;
- property public final androidx.ui.core.LayoutModifier CenterLeft;
- property public final androidx.ui.core.LayoutModifier CenterRight;
- property public final androidx.ui.core.LayoutModifier CenterVertically;
- property public final androidx.ui.core.LayoutModifier End;
- property public final androidx.ui.core.LayoutModifier Start;
- property public final androidx.ui.core.LayoutModifier Top;
- property public final androidx.ui.core.LayoutModifier TopCenter;
- property public final androidx.ui.core.LayoutModifier TopLeft;
- property public final androidx.ui.core.LayoutModifier TopRight;
- field public static final androidx.ui.layout.Aligned! INSTANCE;
- }
-
public final class AlignmentLineKt {
ctor public AlignmentLineKt();
method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
public final class AspectRatioKt {
ctor public AspectRatioKt();
- method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class ColumnScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier End;
property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
public final class ExpandedModifierKt {
ctor public ExpandedModifierKt();
- method public static androidx.ui.core.LayoutModifier getExpanded();
- method public static androidx.ui.core.LayoutModifier getExpandedHeight();
- method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
}
public final class FlexChildren {
@@ -187,10 +152,10 @@
}
@androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
- method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
- method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
- method public final androidx.ui.core.LayoutModifier getInflexible();
- property public final androidx.ui.core.LayoutModifier Inflexible;
+ method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+ method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+ property public final androidx.ui.core.LayoutModifier LayoutInflexible;
}
public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Gravity {
- field public static final androidx.ui.layout.Gravity! INSTANCE;
- }
-
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class LayoutAlign {
+ method public androidx.ui.core.LayoutModifier getBottom();
+ method public androidx.ui.core.LayoutModifier getBottomCenter();
+ method public androidx.ui.core.LayoutModifier getBottomLeft();
+ method public androidx.ui.core.LayoutModifier getBottomRight();
+ method public androidx.ui.core.LayoutModifier getCenter();
+ method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+ method public androidx.ui.core.LayoutModifier getCenterLeft();
+ method public androidx.ui.core.LayoutModifier getCenterRight();
+ method public androidx.ui.core.LayoutModifier getCenterVertically();
+ method public androidx.ui.core.LayoutModifier getEnd();
+ method public androidx.ui.core.LayoutModifier getStart();
+ method public androidx.ui.core.LayoutModifier getTop();
+ method public androidx.ui.core.LayoutModifier getTopCenter();
+ method public androidx.ui.core.LayoutModifier getTopLeft();
+ method public androidx.ui.core.LayoutModifier getTopRight();
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier BottomCenter;
+ property public final androidx.ui.core.LayoutModifier BottomLeft;
+ property public final androidx.ui.core.LayoutModifier BottomRight;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+ property public final androidx.ui.core.LayoutModifier CenterLeft;
+ property public final androidx.ui.core.LayoutModifier CenterRight;
+ property public final androidx.ui.core.LayoutModifier CenterVertically;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ property public final androidx.ui.core.LayoutModifier Top;
+ property public final androidx.ui.core.LayoutModifier TopCenter;
+ property public final androidx.ui.core.LayoutModifier TopLeft;
+ property public final androidx.ui.core.LayoutModifier TopRight;
+ field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+ }
+
+ public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+ method public float component1();
+ method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+ method public float getAspectRatio();
+ method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ }
+
+ public final class LayoutGravity {
+ field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+ }
+
+ public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ ctor public LayoutPadding();
+ method public androidx.ui.core.Dp component1();
+ method public androidx.ui.core.Dp component2();
+ method public androidx.ui.core.Dp component3();
+ method public androidx.ui.core.Dp component4();
+ method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ method public androidx.ui.core.Dp getBottom();
+ method public androidx.ui.core.Dp getLeft();
+ method public androidx.ui.core.Dp getRight();
+ method public androidx.ui.core.Dp getTop();
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+ method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+ }
+
@kotlin.DslMarker public @interface LayoutScopeMarker {
}
@@ -234,11 +262,21 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class PaddingKt {
+ ctor public PaddingKt();
+ method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+ method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+ }
+
public final class RowScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Bottom;
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
public final class SizeModifiersKt {
ctor public SizeModifiersKt();
- method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
- method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
- method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
- method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+ method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
}
public final class SpacerKt {
@@ -262,15 +300,6 @@
method public static void Spacer(androidx.ui.core.Modifier modifier);
}
- public final class SpacingKt {
- ctor public SpacingKt();
- method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
- }
-
public final class StackKt {
ctor public StackKt();
method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
@androidx.ui.layout.LayoutScopeMarker public final class StackScope {
ctor public StackScope();
- method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier BottomCenter;
property public final androidx.ui.core.LayoutModifier BottomLeft;
property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
public final class WrapKt {
ctor public WrapKt();
method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier getWrapped();
+ method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
}
}
diff --git a/ui/ui-layout/api/current.txt b/ui/ui-layout/api/current.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/current.txt
+++ b/ui/ui-layout/api/current.txt
@@ -7,40 +7,6 @@
method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Aligned {
- method public androidx.ui.core.LayoutModifier getBottom();
- method public androidx.ui.core.LayoutModifier getBottomCenter();
- method public androidx.ui.core.LayoutModifier getBottomLeft();
- method public androidx.ui.core.LayoutModifier getBottomRight();
- method public androidx.ui.core.LayoutModifier getCenter();
- method public androidx.ui.core.LayoutModifier getCenterHorizontally();
- method public androidx.ui.core.LayoutModifier getCenterLeft();
- method public androidx.ui.core.LayoutModifier getCenterRight();
- method public androidx.ui.core.LayoutModifier getCenterVertically();
- method public androidx.ui.core.LayoutModifier getEnd();
- method public androidx.ui.core.LayoutModifier getStart();
- method public androidx.ui.core.LayoutModifier getTop();
- method public androidx.ui.core.LayoutModifier getTopCenter();
- method public androidx.ui.core.LayoutModifier getTopLeft();
- method public androidx.ui.core.LayoutModifier getTopRight();
- property public final androidx.ui.core.LayoutModifier Bottom;
- property public final androidx.ui.core.LayoutModifier BottomCenter;
- property public final androidx.ui.core.LayoutModifier BottomLeft;
- property public final androidx.ui.core.LayoutModifier BottomRight;
- property public final androidx.ui.core.LayoutModifier Center;
- property public final androidx.ui.core.LayoutModifier CenterHorizontally;
- property public final androidx.ui.core.LayoutModifier CenterLeft;
- property public final androidx.ui.core.LayoutModifier CenterRight;
- property public final androidx.ui.core.LayoutModifier CenterVertically;
- property public final androidx.ui.core.LayoutModifier End;
- property public final androidx.ui.core.LayoutModifier Start;
- property public final androidx.ui.core.LayoutModifier Top;
- property public final androidx.ui.core.LayoutModifier TopCenter;
- property public final androidx.ui.core.LayoutModifier TopLeft;
- property public final androidx.ui.core.LayoutModifier TopRight;
- field public static final androidx.ui.layout.Aligned! INSTANCE;
- }
-
public final class AlignmentLineKt {
ctor public AlignmentLineKt();
method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
public final class AspectRatioKt {
ctor public AspectRatioKt();
- method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class ColumnScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier End;
property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
public final class ExpandedModifierKt {
ctor public ExpandedModifierKt();
- method public static androidx.ui.core.LayoutModifier getExpanded();
- method public static androidx.ui.core.LayoutModifier getExpandedHeight();
- method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
}
public final class FlexChildren {
@@ -187,10 +152,10 @@
}
@androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
- method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
- method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
- method public final androidx.ui.core.LayoutModifier getInflexible();
- property public final androidx.ui.core.LayoutModifier Inflexible;
+ method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+ method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+ property public final androidx.ui.core.LayoutModifier LayoutInflexible;
}
public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Gravity {
- field public static final androidx.ui.layout.Gravity! INSTANCE;
- }
-
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class LayoutAlign {
+ method public androidx.ui.core.LayoutModifier getBottom();
+ method public androidx.ui.core.LayoutModifier getBottomCenter();
+ method public androidx.ui.core.LayoutModifier getBottomLeft();
+ method public androidx.ui.core.LayoutModifier getBottomRight();
+ method public androidx.ui.core.LayoutModifier getCenter();
+ method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+ method public androidx.ui.core.LayoutModifier getCenterLeft();
+ method public androidx.ui.core.LayoutModifier getCenterRight();
+ method public androidx.ui.core.LayoutModifier getCenterVertically();
+ method public androidx.ui.core.LayoutModifier getEnd();
+ method public androidx.ui.core.LayoutModifier getStart();
+ method public androidx.ui.core.LayoutModifier getTop();
+ method public androidx.ui.core.LayoutModifier getTopCenter();
+ method public androidx.ui.core.LayoutModifier getTopLeft();
+ method public androidx.ui.core.LayoutModifier getTopRight();
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier BottomCenter;
+ property public final androidx.ui.core.LayoutModifier BottomLeft;
+ property public final androidx.ui.core.LayoutModifier BottomRight;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+ property public final androidx.ui.core.LayoutModifier CenterLeft;
+ property public final androidx.ui.core.LayoutModifier CenterRight;
+ property public final androidx.ui.core.LayoutModifier CenterVertically;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ property public final androidx.ui.core.LayoutModifier Top;
+ property public final androidx.ui.core.LayoutModifier TopCenter;
+ property public final androidx.ui.core.LayoutModifier TopLeft;
+ property public final androidx.ui.core.LayoutModifier TopRight;
+ field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+ }
+
+ public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+ method public float component1();
+ method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+ method public float getAspectRatio();
+ method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ }
+
+ public final class LayoutGravity {
+ field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+ }
+
+ public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ ctor public LayoutPadding();
+ method public androidx.ui.core.Dp component1();
+ method public androidx.ui.core.Dp component2();
+ method public androidx.ui.core.Dp component3();
+ method public androidx.ui.core.Dp component4();
+ method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ method public androidx.ui.core.Dp getBottom();
+ method public androidx.ui.core.Dp getLeft();
+ method public androidx.ui.core.Dp getRight();
+ method public androidx.ui.core.Dp getTop();
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+ method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+ }
+
@kotlin.DslMarker public @interface LayoutScopeMarker {
}
@@ -234,11 +262,21 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class PaddingKt {
+ ctor public PaddingKt();
+ method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+ method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+ }
+
public final class RowScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Bottom;
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
public final class SizeModifiersKt {
ctor public SizeModifiersKt();
- method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
- method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
- method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
- method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+ method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
}
public final class SpacerKt {
@@ -262,15 +300,6 @@
method public static void Spacer(androidx.ui.core.Modifier modifier);
}
- public final class SpacingKt {
- ctor public SpacingKt();
- method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
- }
-
public final class StackKt {
ctor public StackKt();
method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
@androidx.ui.layout.LayoutScopeMarker public final class StackScope {
ctor public StackScope();
- method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier BottomCenter;
property public final androidx.ui.core.LayoutModifier BottomLeft;
property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
public final class WrapKt {
ctor public WrapKt();
method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier getWrapped();
+ method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
}
}
diff --git a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt
+++ b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt
@@ -7,40 +7,6 @@
method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Aligned {
- method public androidx.ui.core.LayoutModifier getBottom();
- method public androidx.ui.core.LayoutModifier getBottomCenter();
- method public androidx.ui.core.LayoutModifier getBottomLeft();
- method public androidx.ui.core.LayoutModifier getBottomRight();
- method public androidx.ui.core.LayoutModifier getCenter();
- method public androidx.ui.core.LayoutModifier getCenterHorizontally();
- method public androidx.ui.core.LayoutModifier getCenterLeft();
- method public androidx.ui.core.LayoutModifier getCenterRight();
- method public androidx.ui.core.LayoutModifier getCenterVertically();
- method public androidx.ui.core.LayoutModifier getEnd();
- method public androidx.ui.core.LayoutModifier getStart();
- method public androidx.ui.core.LayoutModifier getTop();
- method public androidx.ui.core.LayoutModifier getTopCenter();
- method public androidx.ui.core.LayoutModifier getTopLeft();
- method public androidx.ui.core.LayoutModifier getTopRight();
- property public final androidx.ui.core.LayoutModifier Bottom;
- property public final androidx.ui.core.LayoutModifier BottomCenter;
- property public final androidx.ui.core.LayoutModifier BottomLeft;
- property public final androidx.ui.core.LayoutModifier BottomRight;
- property public final androidx.ui.core.LayoutModifier Center;
- property public final androidx.ui.core.LayoutModifier CenterHorizontally;
- property public final androidx.ui.core.LayoutModifier CenterLeft;
- property public final androidx.ui.core.LayoutModifier CenterRight;
- property public final androidx.ui.core.LayoutModifier CenterVertically;
- property public final androidx.ui.core.LayoutModifier End;
- property public final androidx.ui.core.LayoutModifier Start;
- property public final androidx.ui.core.LayoutModifier Top;
- property public final androidx.ui.core.LayoutModifier TopCenter;
- property public final androidx.ui.core.LayoutModifier TopLeft;
- property public final androidx.ui.core.LayoutModifier TopRight;
- field public static final androidx.ui.layout.Aligned! INSTANCE;
- }
-
public final class AlignmentLineKt {
ctor public AlignmentLineKt();
method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
public final class AspectRatioKt {
ctor public AspectRatioKt();
- method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class ColumnScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier End;
property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
public final class ExpandedModifierKt {
ctor public ExpandedModifierKt();
- method public static androidx.ui.core.LayoutModifier getExpanded();
- method public static androidx.ui.core.LayoutModifier getExpandedHeight();
- method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
}
public final class FlexChildren {
@@ -187,10 +152,10 @@
}
@androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
- method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
- method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
- method public final androidx.ui.core.LayoutModifier getInflexible();
- property public final androidx.ui.core.LayoutModifier Inflexible;
+ method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+ method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+ property public final androidx.ui.core.LayoutModifier LayoutInflexible;
}
public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Gravity {
- field public static final androidx.ui.layout.Gravity! INSTANCE;
- }
-
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class LayoutAlign {
+ method public androidx.ui.core.LayoutModifier getBottom();
+ method public androidx.ui.core.LayoutModifier getBottomCenter();
+ method public androidx.ui.core.LayoutModifier getBottomLeft();
+ method public androidx.ui.core.LayoutModifier getBottomRight();
+ method public androidx.ui.core.LayoutModifier getCenter();
+ method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+ method public androidx.ui.core.LayoutModifier getCenterLeft();
+ method public androidx.ui.core.LayoutModifier getCenterRight();
+ method public androidx.ui.core.LayoutModifier getCenterVertically();
+ method public androidx.ui.core.LayoutModifier getEnd();
+ method public androidx.ui.core.LayoutModifier getStart();
+ method public androidx.ui.core.LayoutModifier getTop();
+ method public androidx.ui.core.LayoutModifier getTopCenter();
+ method public androidx.ui.core.LayoutModifier getTopLeft();
+ method public androidx.ui.core.LayoutModifier getTopRight();
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier BottomCenter;
+ property public final androidx.ui.core.LayoutModifier BottomLeft;
+ property public final androidx.ui.core.LayoutModifier BottomRight;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+ property public final androidx.ui.core.LayoutModifier CenterLeft;
+ property public final androidx.ui.core.LayoutModifier CenterRight;
+ property public final androidx.ui.core.LayoutModifier CenterVertically;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ property public final androidx.ui.core.LayoutModifier Top;
+ property public final androidx.ui.core.LayoutModifier TopCenter;
+ property public final androidx.ui.core.LayoutModifier TopLeft;
+ property public final androidx.ui.core.LayoutModifier TopRight;
+ field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+ }
+
+ public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+ method public float component1();
+ method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+ method public float getAspectRatio();
+ method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ }
+
+ public final class LayoutGravity {
+ field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+ }
+
+ public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ ctor public LayoutPadding();
+ method public androidx.ui.core.Dp component1();
+ method public androidx.ui.core.Dp component2();
+ method public androidx.ui.core.Dp component3();
+ method public androidx.ui.core.Dp component4();
+ method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ method public androidx.ui.core.Dp getBottom();
+ method public androidx.ui.core.Dp getLeft();
+ method public androidx.ui.core.Dp getRight();
+ method public androidx.ui.core.Dp getTop();
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+ method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+ }
+
@kotlin.DslMarker public @interface LayoutScopeMarker {
}
@@ -234,11 +262,21 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class PaddingKt {
+ ctor public PaddingKt();
+ method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+ method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+ }
+
public final class RowScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Bottom;
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
public final class SizeModifiersKt {
ctor public SizeModifiersKt();
- method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
- method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
- method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
- method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+ method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
}
public final class SpacerKt {
@@ -262,15 +300,6 @@
method public static void Spacer(androidx.ui.core.Modifier modifier);
}
- public final class SpacingKt {
- ctor public SpacingKt();
- method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
- }
-
public final class StackKt {
ctor public StackKt();
method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
@androidx.ui.layout.LayoutScopeMarker public final class StackScope {
ctor public StackScope();
- method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier BottomCenter;
property public final androidx.ui.core.LayoutModifier BottomLeft;
property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
public final class WrapKt {
ctor public WrapKt();
method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier getWrapped();
+ method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
}
}
diff --git a/ui/ui-layout/api/public_plus_experimental_current.txt b/ui/ui-layout/api/public_plus_experimental_current.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/public_plus_experimental_current.txt
+++ b/ui/ui-layout/api/public_plus_experimental_current.txt
@@ -7,40 +7,6 @@
method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Aligned {
- method public androidx.ui.core.LayoutModifier getBottom();
- method public androidx.ui.core.LayoutModifier getBottomCenter();
- method public androidx.ui.core.LayoutModifier getBottomLeft();
- method public androidx.ui.core.LayoutModifier getBottomRight();
- method public androidx.ui.core.LayoutModifier getCenter();
- method public androidx.ui.core.LayoutModifier getCenterHorizontally();
- method public androidx.ui.core.LayoutModifier getCenterLeft();
- method public androidx.ui.core.LayoutModifier getCenterRight();
- method public androidx.ui.core.LayoutModifier getCenterVertically();
- method public androidx.ui.core.LayoutModifier getEnd();
- method public androidx.ui.core.LayoutModifier getStart();
- method public androidx.ui.core.LayoutModifier getTop();
- method public androidx.ui.core.LayoutModifier getTopCenter();
- method public androidx.ui.core.LayoutModifier getTopLeft();
- method public androidx.ui.core.LayoutModifier getTopRight();
- property public final androidx.ui.core.LayoutModifier Bottom;
- property public final androidx.ui.core.LayoutModifier BottomCenter;
- property public final androidx.ui.core.LayoutModifier BottomLeft;
- property public final androidx.ui.core.LayoutModifier BottomRight;
- property public final androidx.ui.core.LayoutModifier Center;
- property public final androidx.ui.core.LayoutModifier CenterHorizontally;
- property public final androidx.ui.core.LayoutModifier CenterLeft;
- property public final androidx.ui.core.LayoutModifier CenterRight;
- property public final androidx.ui.core.LayoutModifier CenterVertically;
- property public final androidx.ui.core.LayoutModifier End;
- property public final androidx.ui.core.LayoutModifier Start;
- property public final androidx.ui.core.LayoutModifier Top;
- property public final androidx.ui.core.LayoutModifier TopCenter;
- property public final androidx.ui.core.LayoutModifier TopLeft;
- property public final androidx.ui.core.LayoutModifier TopRight;
- field public static final androidx.ui.layout.Aligned! INSTANCE;
- }
-
public final class AlignmentLineKt {
ctor public AlignmentLineKt();
method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
public final class AspectRatioKt {
ctor public AspectRatioKt();
- method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class ColumnScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier End;
property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
public final class ExpandedModifierKt {
ctor public ExpandedModifierKt();
- method public static androidx.ui.core.LayoutModifier getExpanded();
- method public static androidx.ui.core.LayoutModifier getExpandedHeight();
- method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
}
public final class FlexChildren {
@@ -187,10 +152,10 @@
}
@androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
- method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
- method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
- method public final androidx.ui.core.LayoutModifier getInflexible();
- property public final androidx.ui.core.LayoutModifier Inflexible;
+ method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+ method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+ property public final androidx.ui.core.LayoutModifier LayoutInflexible;
}
public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Gravity {
- field public static final androidx.ui.layout.Gravity! INSTANCE;
- }
-
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class LayoutAlign {
+ method public androidx.ui.core.LayoutModifier getBottom();
+ method public androidx.ui.core.LayoutModifier getBottomCenter();
+ method public androidx.ui.core.LayoutModifier getBottomLeft();
+ method public androidx.ui.core.LayoutModifier getBottomRight();
+ method public androidx.ui.core.LayoutModifier getCenter();
+ method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+ method public androidx.ui.core.LayoutModifier getCenterLeft();
+ method public androidx.ui.core.LayoutModifier getCenterRight();
+ method public androidx.ui.core.LayoutModifier getCenterVertically();
+ method public androidx.ui.core.LayoutModifier getEnd();
+ method public androidx.ui.core.LayoutModifier getStart();
+ method public androidx.ui.core.LayoutModifier getTop();
+ method public androidx.ui.core.LayoutModifier getTopCenter();
+ method public androidx.ui.core.LayoutModifier getTopLeft();
+ method public androidx.ui.core.LayoutModifier getTopRight();
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier BottomCenter;
+ property public final androidx.ui.core.LayoutModifier BottomLeft;
+ property public final androidx.ui.core.LayoutModifier BottomRight;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+ property public final androidx.ui.core.LayoutModifier CenterLeft;
+ property public final androidx.ui.core.LayoutModifier CenterRight;
+ property public final androidx.ui.core.LayoutModifier CenterVertically;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ property public final androidx.ui.core.LayoutModifier Top;
+ property public final androidx.ui.core.LayoutModifier TopCenter;
+ property public final androidx.ui.core.LayoutModifier TopLeft;
+ property public final androidx.ui.core.LayoutModifier TopRight;
+ field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+ }
+
+ public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+ method public float component1();
+ method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+ method public float getAspectRatio();
+ method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ }
+
+ public final class LayoutGravity {
+ field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+ }
+
+ public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ ctor public LayoutPadding();
+ method public androidx.ui.core.Dp component1();
+ method public androidx.ui.core.Dp component2();
+ method public androidx.ui.core.Dp component3();
+ method public androidx.ui.core.Dp component4();
+ method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ method public androidx.ui.core.Dp getBottom();
+ method public androidx.ui.core.Dp getLeft();
+ method public androidx.ui.core.Dp getRight();
+ method public androidx.ui.core.Dp getTop();
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+ method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+ }
+
@kotlin.DslMarker public @interface LayoutScopeMarker {
}
@@ -234,11 +262,21 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class PaddingKt {
+ ctor public PaddingKt();
+ method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+ method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+ }
+
public final class RowScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Bottom;
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
public final class SizeModifiersKt {
ctor public SizeModifiersKt();
- method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
- method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
- method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
- method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+ method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
}
public final class SpacerKt {
@@ -262,15 +300,6 @@
method public static void Spacer(androidx.ui.core.Modifier modifier);
}
- public final class SpacingKt {
- ctor public SpacingKt();
- method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
- }
-
public final class StackKt {
ctor public StackKt();
method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
@androidx.ui.layout.LayoutScopeMarker public final class StackScope {
ctor public StackScope();
- method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier BottomCenter;
property public final androidx.ui.core.LayoutModifier BottomLeft;
property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
public final class WrapKt {
ctor public WrapKt();
method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier getWrapped();
+ method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
}
}
diff --git a/ui/ui-layout/api/restricted_0.1.0-dev04.txt b/ui/ui-layout/api/restricted_0.1.0-dev04.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/restricted_0.1.0-dev04.txt
+++ b/ui/ui-layout/api/restricted_0.1.0-dev04.txt
@@ -7,40 +7,6 @@
method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Aligned {
- method public androidx.ui.core.LayoutModifier getBottom();
- method public androidx.ui.core.LayoutModifier getBottomCenter();
- method public androidx.ui.core.LayoutModifier getBottomLeft();
- method public androidx.ui.core.LayoutModifier getBottomRight();
- method public androidx.ui.core.LayoutModifier getCenter();
- method public androidx.ui.core.LayoutModifier getCenterHorizontally();
- method public androidx.ui.core.LayoutModifier getCenterLeft();
- method public androidx.ui.core.LayoutModifier getCenterRight();
- method public androidx.ui.core.LayoutModifier getCenterVertically();
- method public androidx.ui.core.LayoutModifier getEnd();
- method public androidx.ui.core.LayoutModifier getStart();
- method public androidx.ui.core.LayoutModifier getTop();
- method public androidx.ui.core.LayoutModifier getTopCenter();
- method public androidx.ui.core.LayoutModifier getTopLeft();
- method public androidx.ui.core.LayoutModifier getTopRight();
- property public final androidx.ui.core.LayoutModifier Bottom;
- property public final androidx.ui.core.LayoutModifier BottomCenter;
- property public final androidx.ui.core.LayoutModifier BottomLeft;
- property public final androidx.ui.core.LayoutModifier BottomRight;
- property public final androidx.ui.core.LayoutModifier Center;
- property public final androidx.ui.core.LayoutModifier CenterHorizontally;
- property public final androidx.ui.core.LayoutModifier CenterLeft;
- property public final androidx.ui.core.LayoutModifier CenterRight;
- property public final androidx.ui.core.LayoutModifier CenterVertically;
- property public final androidx.ui.core.LayoutModifier End;
- property public final androidx.ui.core.LayoutModifier Start;
- property public final androidx.ui.core.LayoutModifier Top;
- property public final androidx.ui.core.LayoutModifier TopCenter;
- property public final androidx.ui.core.LayoutModifier TopLeft;
- property public final androidx.ui.core.LayoutModifier TopRight;
- field public static final androidx.ui.layout.Aligned! INSTANCE;
- }
-
public final class AlignmentLineKt {
ctor public AlignmentLineKt();
method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
public final class AspectRatioKt {
ctor public AspectRatioKt();
- method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class ColumnScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier End;
property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
public final class ExpandedModifierKt {
ctor public ExpandedModifierKt();
- method public static androidx.ui.core.LayoutModifier getExpanded();
- method public static androidx.ui.core.LayoutModifier getExpandedHeight();
- method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
}
public final class FlexChildren {
@@ -187,10 +152,10 @@
}
@androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
- method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
- method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
- method public final androidx.ui.core.LayoutModifier getInflexible();
- property public final androidx.ui.core.LayoutModifier Inflexible;
+ method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+ method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+ property public final androidx.ui.core.LayoutModifier LayoutInflexible;
}
public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Gravity {
- field public static final androidx.ui.layout.Gravity! INSTANCE;
- }
-
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class LayoutAlign {
+ method public androidx.ui.core.LayoutModifier getBottom();
+ method public androidx.ui.core.LayoutModifier getBottomCenter();
+ method public androidx.ui.core.LayoutModifier getBottomLeft();
+ method public androidx.ui.core.LayoutModifier getBottomRight();
+ method public androidx.ui.core.LayoutModifier getCenter();
+ method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+ method public androidx.ui.core.LayoutModifier getCenterLeft();
+ method public androidx.ui.core.LayoutModifier getCenterRight();
+ method public androidx.ui.core.LayoutModifier getCenterVertically();
+ method public androidx.ui.core.LayoutModifier getEnd();
+ method public androidx.ui.core.LayoutModifier getStart();
+ method public androidx.ui.core.LayoutModifier getTop();
+ method public androidx.ui.core.LayoutModifier getTopCenter();
+ method public androidx.ui.core.LayoutModifier getTopLeft();
+ method public androidx.ui.core.LayoutModifier getTopRight();
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier BottomCenter;
+ property public final androidx.ui.core.LayoutModifier BottomLeft;
+ property public final androidx.ui.core.LayoutModifier BottomRight;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+ property public final androidx.ui.core.LayoutModifier CenterLeft;
+ property public final androidx.ui.core.LayoutModifier CenterRight;
+ property public final androidx.ui.core.LayoutModifier CenterVertically;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ property public final androidx.ui.core.LayoutModifier Top;
+ property public final androidx.ui.core.LayoutModifier TopCenter;
+ property public final androidx.ui.core.LayoutModifier TopLeft;
+ property public final androidx.ui.core.LayoutModifier TopRight;
+ field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+ }
+
+ public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+ method public float component1();
+ method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+ method public float getAspectRatio();
+ method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ }
+
+ public final class LayoutGravity {
+ field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+ }
+
+ public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ ctor public LayoutPadding();
+ method public androidx.ui.core.Dp component1();
+ method public androidx.ui.core.Dp component2();
+ method public androidx.ui.core.Dp component3();
+ method public androidx.ui.core.Dp component4();
+ method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ method public androidx.ui.core.Dp getBottom();
+ method public androidx.ui.core.Dp getLeft();
+ method public androidx.ui.core.Dp getRight();
+ method public androidx.ui.core.Dp getTop();
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+ method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+ }
+
@kotlin.DslMarker public @interface LayoutScopeMarker {
}
@@ -234,11 +262,21 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class PaddingKt {
+ ctor public PaddingKt();
+ method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+ method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+ }
+
public final class RowScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Bottom;
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
public final class SizeModifiersKt {
ctor public SizeModifiersKt();
- method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
- method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
- method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
- method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+ method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
}
public final class SpacerKt {
@@ -262,15 +300,6 @@
method public static void Spacer(androidx.ui.core.Modifier modifier);
}
- public final class SpacingKt {
- ctor public SpacingKt();
- method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
- }
-
public final class StackKt {
ctor public StackKt();
method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
@androidx.ui.layout.LayoutScopeMarker public final class StackScope {
ctor public StackScope();
- method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier BottomCenter;
property public final androidx.ui.core.LayoutModifier BottomLeft;
property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
public final class WrapKt {
ctor public WrapKt();
method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier getWrapped();
+ method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
}
}
diff --git a/ui/ui-layout/api/restricted_current.txt b/ui/ui-layout/api/restricted_current.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/restricted_current.txt
+++ b/ui/ui-layout/api/restricted_current.txt
@@ -7,40 +7,6 @@
method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Aligned {
- method public androidx.ui.core.LayoutModifier getBottom();
- method public androidx.ui.core.LayoutModifier getBottomCenter();
- method public androidx.ui.core.LayoutModifier getBottomLeft();
- method public androidx.ui.core.LayoutModifier getBottomRight();
- method public androidx.ui.core.LayoutModifier getCenter();
- method public androidx.ui.core.LayoutModifier getCenterHorizontally();
- method public androidx.ui.core.LayoutModifier getCenterLeft();
- method public androidx.ui.core.LayoutModifier getCenterRight();
- method public androidx.ui.core.LayoutModifier getCenterVertically();
- method public androidx.ui.core.LayoutModifier getEnd();
- method public androidx.ui.core.LayoutModifier getStart();
- method public androidx.ui.core.LayoutModifier getTop();
- method public androidx.ui.core.LayoutModifier getTopCenter();
- method public androidx.ui.core.LayoutModifier getTopLeft();
- method public androidx.ui.core.LayoutModifier getTopRight();
- property public final androidx.ui.core.LayoutModifier Bottom;
- property public final androidx.ui.core.LayoutModifier BottomCenter;
- property public final androidx.ui.core.LayoutModifier BottomLeft;
- property public final androidx.ui.core.LayoutModifier BottomRight;
- property public final androidx.ui.core.LayoutModifier Center;
- property public final androidx.ui.core.LayoutModifier CenterHorizontally;
- property public final androidx.ui.core.LayoutModifier CenterLeft;
- property public final androidx.ui.core.LayoutModifier CenterRight;
- property public final androidx.ui.core.LayoutModifier CenterVertically;
- property public final androidx.ui.core.LayoutModifier End;
- property public final androidx.ui.core.LayoutModifier Start;
- property public final androidx.ui.core.LayoutModifier Top;
- property public final androidx.ui.core.LayoutModifier TopCenter;
- property public final androidx.ui.core.LayoutModifier TopLeft;
- property public final androidx.ui.core.LayoutModifier TopRight;
- field public static final androidx.ui.layout.Aligned! INSTANCE;
- }
-
public final class AlignmentLineKt {
ctor public AlignmentLineKt();
method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
public final class AspectRatioKt {
ctor public AspectRatioKt();
- method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class ColumnScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier End;
property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
public final class ExpandedModifierKt {
ctor public ExpandedModifierKt();
- method public static androidx.ui.core.LayoutModifier getExpanded();
- method public static androidx.ui.core.LayoutModifier getExpandedHeight();
- method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+ method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
}
public final class FlexChildren {
@@ -187,10 +152,10 @@
}
@androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
- method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
- method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
- method public final androidx.ui.core.LayoutModifier getInflexible();
- property public final androidx.ui.core.LayoutModifier Inflexible;
+ method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+ method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+ property public final androidx.ui.core.LayoutModifier LayoutInflexible;
}
public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
- public final class Gravity {
- field public static final androidx.ui.layout.Gravity! INSTANCE;
- }
-
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class LayoutAlign {
+ method public androidx.ui.core.LayoutModifier getBottom();
+ method public androidx.ui.core.LayoutModifier getBottomCenter();
+ method public androidx.ui.core.LayoutModifier getBottomLeft();
+ method public androidx.ui.core.LayoutModifier getBottomRight();
+ method public androidx.ui.core.LayoutModifier getCenter();
+ method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+ method public androidx.ui.core.LayoutModifier getCenterLeft();
+ method public androidx.ui.core.LayoutModifier getCenterRight();
+ method public androidx.ui.core.LayoutModifier getCenterVertically();
+ method public androidx.ui.core.LayoutModifier getEnd();
+ method public androidx.ui.core.LayoutModifier getStart();
+ method public androidx.ui.core.LayoutModifier getTop();
+ method public androidx.ui.core.LayoutModifier getTopCenter();
+ method public androidx.ui.core.LayoutModifier getTopLeft();
+ method public androidx.ui.core.LayoutModifier getTopRight();
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier BottomCenter;
+ property public final androidx.ui.core.LayoutModifier BottomLeft;
+ property public final androidx.ui.core.LayoutModifier BottomRight;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+ property public final androidx.ui.core.LayoutModifier CenterLeft;
+ property public final androidx.ui.core.LayoutModifier CenterRight;
+ property public final androidx.ui.core.LayoutModifier CenterVertically;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ property public final androidx.ui.core.LayoutModifier Top;
+ property public final androidx.ui.core.LayoutModifier TopCenter;
+ property public final androidx.ui.core.LayoutModifier TopLeft;
+ property public final androidx.ui.core.LayoutModifier TopRight;
+ field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+ }
+
+ public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+ method public float component1();
+ method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+ method public float getAspectRatio();
+ method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+ method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ }
+
+ public final class LayoutGravity {
+ field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+ }
+
+ public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+ ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ ctor public LayoutPadding();
+ method public androidx.ui.core.Dp component1();
+ method public androidx.ui.core.Dp component2();
+ method public androidx.ui.core.Dp component3();
+ method public androidx.ui.core.Dp component4();
+ method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+ method public androidx.ui.core.Dp getBottom();
+ method public androidx.ui.core.Dp getLeft();
+ method public androidx.ui.core.Dp getRight();
+ method public androidx.ui.core.Dp getTop();
+ method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+ method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+ method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+ }
+
@kotlin.DslMarker public @interface LayoutScopeMarker {
}
@@ -234,11 +262,21 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class PaddingKt {
+ ctor public PaddingKt();
+ method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+ method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+ method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+ }
+
public final class RowScope extends androidx.ui.layout.FlexScope {
- method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
- method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier Bottom;
property public final androidx.ui.core.LayoutModifier Center;
property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
public final class SizeModifiersKt {
ctor public SizeModifiersKt();
- method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
- method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
- method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
- method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
- method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+ method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+ method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+ method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
}
public final class SpacerKt {
@@ -262,15 +300,6 @@
method public static void Spacer(androidx.ui.core.Modifier modifier);
}
- public final class SpacingKt {
- ctor public SpacingKt();
- method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
- method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
- }
-
public final class StackKt {
ctor public StackKt();
method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
@androidx.ui.layout.LayoutScopeMarker public final class StackScope {
ctor public StackScope();
- method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
- method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+ method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
property public final androidx.ui.core.LayoutModifier BottomCenter;
property public final androidx.ui.core.LayoutModifier BottomLeft;
property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
public final class WrapKt {
ctor public WrapKt();
method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.core.LayoutModifier getWrapped();
+ method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
}
}
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
index 03ea3fc..11ec997 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
@@ -17,43 +17,43 @@
package androidx.ui.layout.demos
import android.os.Handler
-import androidx.ui.core.Constraints
-import androidx.ui.core.Draw
-import androidx.ui.core.IntPx
-import androidx.ui.core.IntPxSize
-import androidx.ui.core.Layout
-import androidx.ui.core.WithConstraints
-import androidx.ui.core.constrain
-import androidx.ui.core.dp
-import androidx.ui.core.ipx
-import androidx.ui.core.max
-import androidx.ui.core.toRect
-import androidx.ui.layout.Align
-import androidx.ui.layout.Center
-import androidx.ui.layout.Column
-import androidx.ui.layout.ConstrainedBox
-import androidx.ui.layout.DpConstraints
-import androidx.ui.layout.FlexColumn
-import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Padding
-import androidx.ui.layout.Row
-import androidx.ui.layout.Stack
-import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
import androidx.compose.Composable
import androidx.compose.Model
import androidx.compose.effectOf
import androidx.compose.memo
import androidx.compose.onCommit
import androidx.ui.core.Alignment
+import androidx.ui.core.Constraints
+import androidx.ui.core.Draw
import androidx.ui.core.FirstBaseline
import androidx.ui.core.HorizontalAlignmentLine
+import androidx.ui.core.IntPx
+import androidx.ui.core.IntPxSize
+import androidx.ui.core.Layout
import androidx.ui.core.Text
import androidx.ui.core.VerticalAlignmentLine
+import androidx.ui.core.WithConstraints
+import androidx.ui.core.constrain
+import androidx.ui.core.dp
+import androidx.ui.core.ipx
+import androidx.ui.core.max
import androidx.ui.core.sp
+import androidx.ui.core.toRect
+import androidx.ui.graphics.Color
+import androidx.ui.graphics.Paint
+import androidx.ui.layout.Align
import androidx.ui.layout.AlignmentLineOffset
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.Center
+import androidx.ui.layout.Column
+import androidx.ui.layout.ConstrainedBox
+import androidx.ui.layout.DpConstraints
+import androidx.ui.layout.FlexColumn
+import androidx.ui.layout.FlexRow
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.Padding
+import androidx.ui.layout.Row
+import androidx.ui.layout.Stack
import androidx.ui.layout.Wrap
import androidx.ui.layout.samples.DrawRectangle
import androidx.ui.layout.samples.SizedRectangle
@@ -177,17 +177,17 @@
@Composable
fun StackUsage() {
Stack {
- SizedRectangle(Gravity.Stretch, color = Color(0xFFA52A2A))
- SizedRectangle(Gravity.Stretch wraps Spacing(40.dp), color = Color(0xFFFFA500))
+ SizedRectangle(LayoutGravity.Stretch, color = Color(0xFFA52A2A))
+ SizedRectangle(LayoutGravity.Stretch + LayoutPadding(40.dp), color = Color(0xFFFFA500))
SizedRectangle(
- modifier = Gravity.Center,
+ modifier = LayoutGravity.Center,
color = Color(0xFF0000FF),
width = 300.dp,
height = 300.dp
)
SizedRectangle(color = Color(0xFF00FF00), width = 150.dp, height = 150.dp)
SizedRectangle(
- modifier = Gravity.BottomRight,
+ modifier = LayoutGravity.BottomRight,
color = Color(0xFFFF0000),
width = 150.dp,
height = 150.dp
@@ -376,8 +376,8 @@
@Composable
fun RowBaselineAlignment() {
Row {
- Text("First text", modifier = Gravity.RelativeToSiblings(FirstBaseline))
- Column(modifier = Gravity.RelativeToSiblings(FirstBaseline)) {
+ Text("First text", modifier = LayoutGravity.RelativeToSiblings(FirstBaseline))
+ Column(modifier = LayoutGravity.RelativeToSiblings(FirstBaseline)) {
SizedRectangle(color = Color.Blue, width = 10.dp, height = 50.dp)
Padding(30.dp) {
Text("Second text", style = TextStyle(fontSize = 45.sp))
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
index 72a62e2..56e6259 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
@@ -23,10 +23,10 @@
import androidx.ui.core.dp
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
import androidx.ui.layout.Row
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
import androidx.ui.layout.Wrap
import androidx.ui.graphics.Color
import androidx.ui.text.TextStyle
@@ -35,9 +35,9 @@
import androidx.ui.core.setContent
import androidx.ui.core.sp
import androidx.ui.layout.Arrangement
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
import androidx.ui.layout.samples.DrawRectangle
class LayoutActivity : Activity() {
@@ -69,74 +69,74 @@
Column {
Text(text = "Row", style = TextStyle(fontSize = 48.sp))
ContainerWithBackground(width = ExampleSize, color = lightGrey) {
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Height(24.dp))
+ Spacer(LayoutHeight(24.dp))
ContainerWithBackground(width = ExampleSize, color = lightGrey) {
- Row(ExpandedWidth, arrangement = Arrangement.Center) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Height(24.dp))
+ Spacer(LayoutHeight(24.dp))
ContainerWithBackground(width = ExampleSize, color = lightGrey) {
- Row(ExpandedWidth, arrangement = Arrangement.End) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.End) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Height(24.dp))
+ Spacer(LayoutHeight(24.dp))
ContainerWithBackground(width = ExampleSize, color = lightGrey) {
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Height(24.dp))
+ Spacer(LayoutHeight(24.dp))
ContainerWithBackground(width = ExampleSize, color = lightGrey) {
- Row(ExpandedWidth) {
- PurpleSquare(Gravity.Bottom)
- CyanSquare(Gravity.Bottom)
+ Row(LayoutExpandedWidth) {
+ PurpleSquare(LayoutGravity.Bottom)
+ CyanSquare(LayoutGravity.Bottom)
}
}
- Spacer(Height(24.dp))
+ Spacer(LayoutHeight(24.dp))
Text(text = "Column", style = TextStyle(fontSize = 48.sp))
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
ContainerWithBackground(height = ExampleSize, color = lightGrey) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Width(24.dp))
+ Spacer(LayoutWidth(24.dp))
ContainerWithBackground(height = ExampleSize, color = lightGrey) {
- Column(ExpandedHeight, arrangement = Arrangement.Center) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.Center) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Width(24.dp))
+ Spacer(LayoutWidth(24.dp))
ContainerWithBackground(height = ExampleSize, color = lightGrey) {
- Column(ExpandedHeight, arrangement = Arrangement.End) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.End) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Width(24.dp))
+ Spacer(LayoutWidth(24.dp))
ContainerWithBackground(height = ExampleSize, color = lightGrey) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
PurpleSquare()
CyanSquare()
}
}
- Spacer(Width(24.dp))
+ Spacer(LayoutWidth(24.dp))
ContainerWithBackground(height = ExampleSize, color = lightGrey) {
- Column(ExpandedHeight) {
- PurpleSquare(Gravity.End)
- CyanSquare(Gravity.End)
+ Column(LayoutExpandedHeight) {
+ PurpleSquare(LayoutGravity.End)
+ CyanSquare(LayoutGravity.End)
}
}
}
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
index 69af541..c435d16 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
@@ -22,12 +22,12 @@
import androidx.ui.core.dp
import androidx.ui.graphics.Color
import androidx.ui.layout.Align
-import androidx.ui.layout.Aligned
+import androidx.ui.layout.LayoutAlign
import androidx.ui.layout.Center
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
import androidx.ui.layout.Row
@Sampled
@@ -49,49 +49,49 @@
@Sampled
@Composable
fun SimpleAlignedModifier() {
- SizedRectangle(modifier = Aligned.TopCenter, color = Color.Blue, width = 20.dp, height = 20.dp)
+ SizedRectangle(LayoutAlign.TopCenter, color = Color.Blue, width = 20.dp, height = 20.dp)
}
@Sampled
@Composable
fun SimpleVerticallyAlignedModifier() {
- SizedRectangle(modifier = Aligned.CenterVertically, color = Color.Blue, height = 50.dp)
+ SizedRectangle(LayoutAlign.CenterVertically, color = Color.Blue, height = 50.dp)
}
@Sampled
@Composable
fun SimpleGravityInRow() {
- Row(ExpandedHeight) {
+ Row(LayoutExpandedHeight) {
// The child with no gravity modifier is positioned by default so that its top edge is
// aligned to the top of the vertical axis.
SizedRectangle(color = Color.Magenta, width = 80.dp, height = 40.dp)
// Gravity.Top, the child will be positioned so that its top edge is aligned to the top
// of the vertical axis.
- SizedRectangle(Gravity.Top, color = Color.Red, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutGravity.Top, color = Color.Red, width = 80.dp, height = 40.dp)
// Gravity.Center, the child will be positioned so that its center is in the middle of
// the vertical axis.
- SizedRectangle(Gravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutGravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
// Gravity.Bottom, the child will be positioned so that its bottom edge is aligned to the
// bottom of the vertical axis.
- SizedRectangle(Gravity.Bottom, color = Color.Green, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutGravity.Bottom, color = Color.Green, width = 80.dp, height = 40.dp)
}
}
@Sampled
@Composable
fun SimpleGravityInColumn() {
- Column(ExpandedWidth) {
+ Column(LayoutExpandedWidth) {
// The child with no gravity modifier is positioned by default so that its start edge
// aligned with the start edge of the horizontal axis.
SizedRectangle(color = Color.Magenta, width = 80.dp, height = 40.dp)
// Gravity.Start, the child will be positioned so that its start edge is aligned with
// the start edge of the horizontal axis.
- SizedRectangle(Gravity.Start, color = Color.Red, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutGravity.Start, color = Color.Red, width = 80.dp, height = 40.dp)
// Gravity.Center, the child will be positioned so that its center is in the middle of
// the horizontal axis.
- SizedRectangle(Gravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutGravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
// Gravity.End, the child will be positioned so that its end edge aligned to the end of
// the horizontal axis.
- SizedRectangle(Gravity.End, color = Color.Green, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutGravity.End, color = Color.Green, width = 80.dp, height = 40.dp)
}
}
\ No newline at end of file
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt
index 930e0a0..55151bc 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt
@@ -21,7 +21,7 @@
import androidx.ui.core.dp
import androidx.ui.foundation.ColoredRect
import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
@@ -29,6 +29,6 @@
@Composable
fun SimpleAspectRatio() {
Container(constraints = DpConstraints.tightConstraintsForWidth(100.dp)) {
- ColoredRect(color = Color.Gray, modifier = AspectRatio(2f))
+ ColoredRect(color = Color.Gray, modifier = LayoutAspectRatio(2f))
}
}
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt
index f35731c..5417fdc 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt
@@ -26,14 +26,14 @@
import androidx.ui.graphics.Color
import androidx.ui.layout.Align
import androidx.ui.layout.Container
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
@Sampled
@Composable
fun SimpleExpandedWidthModifier() {
- Container(modifier = ExpandedWidth) {
+ Container(modifier = LayoutExpandedWidth) {
DrawShape(RectangleShape, Color.Red)
ColoredRect(color = Color.Magenta, width = 100.dp, height = 100.dp)
}
@@ -43,7 +43,7 @@
@Composable
fun SimpleExpandedHeightModifier() {
Align(alignment = Alignment.TopLeft) {
- Container(modifier = ExpandedHeight) {
+ Container(modifier = LayoutExpandedHeight) {
DrawShape(RectangleShape, Color.Red)
ColoredRect(color = Color.Magenta, width = 100.dp, height = 100.dp)
}
@@ -54,7 +54,7 @@
@Composable
fun SimpleExpandedModifier() {
Align(alignment = Alignment.TopLeft) {
- Container(modifier = Expanded) {
+ Container(modifier = LayoutExpanded) {
DrawShape(RectangleShape, Color.Red)
ColoredRect(color = Color.Magenta, width = 100.dp, height = 100.dp)
}
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt
index bc02f20..232448f 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt
@@ -26,10 +26,10 @@
import androidx.ui.layout.Center
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
import androidx.ui.layout.FlexColumn
import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutGravity
import androidx.ui.layout.Row
import androidx.ui.text.TextStyle
@@ -77,11 +77,11 @@
// size.
SizedRectangle(color = Color.Magenta, width = 40.dp, height = 80.dp)
// Inflexible, the child will have the specified size.
- SizedRectangle(Inflexible, color = Color.Red, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutInflexible, color = Color.Red, width = 80.dp, height = 40.dp)
// Flexible, the child will occupy have of the remaining width.
- SizedRectangle(Flexible(1f), color = Color.Yellow, height = 40.dp)
+ SizedRectangle(LayoutFlexible(1f), color = Color.Yellow, height = 40.dp)
// Flexible not tight, the child will occupy at most half of the remaining width.
- SizedRectangle(Flexible(1f, tight = false), color = Color.Green, height = 80.dp)
+ SizedRectangle(LayoutFlexible(1f, tight = false), color = Color.Green, height = 80.dp)
}
}
@@ -93,11 +93,11 @@
// size.
SizedRectangle(color = Color.Magenta, width = 40.dp, height = 80.dp)
// Inflexible, the child will have the specified size.
- SizedRectangle(Inflexible, color = Color.Red, width = 80.dp, height = 40.dp)
+ SizedRectangle(LayoutInflexible, color = Color.Red, width = 80.dp, height = 40.dp)
// Flexible, the child will occupy have of the remaining height.
- SizedRectangle(Flexible(1f), color = Color.Yellow, width = 40.dp)
+ SizedRectangle(LayoutFlexible(1f), color = Color.Yellow, width = 40.dp)
// Flexible not tight, the child will occupy at most half of the remaining height.
- SizedRectangle(Flexible(1f, tight = false), color = Color.Green, width = 80.dp)
+ SizedRectangle(LayoutFlexible(1f, tight = false), color = Color.Green, width = 80.dp)
}
}
@@ -108,19 +108,19 @@
// Center of the first rectangle is aligned to the right edge of the second rectangle and
// left edge of the third one.
SizedRectangle(
- Gravity.RelativeToSiblings { it.width * 0.5 },
+ LayoutGravity.RelativeToSiblings { it.width * 0.5 },
color = Color.Blue,
width = 80.dp,
height = 40.dp
)
SizedRectangle(
- Gravity.RelativeToSiblings { it.width },
+ LayoutGravity.RelativeToSiblings { it.width },
color = Color.Magenta,
width = 80.dp,
height = 40.dp
)
SizedRectangle(
- Gravity.RelativeToSiblings { 0.ipx },
+ LayoutGravity.RelativeToSiblings { 0.ipx },
color = Color.Red,
width = 80.dp,
height = 40.dp
@@ -131,15 +131,15 @@
@Sampled
@Composable
fun SimpleRelativeToSiblingsInRow() {
- Row(ExpandedHeight) {
+ Row(LayoutExpandedHeight) {
// Center of the colored rectangle is aligned to first baseline of the text.
SizedRectangle(
color = Color.Red,
width = 80.dp,
height = 40.dp,
- modifier = Gravity.RelativeToSiblings { it.height * 0.5 }
+ modifier = LayoutGravity.RelativeToSiblings { it.height * 0.5 }
)
- Container(width = 80.dp, modifier = Gravity.RelativeToSiblings(FirstBaseline)) {
+ Container(width = 80.dp, modifier = LayoutGravity.RelativeToSiblings(FirstBaseline)) {
Text(text = "Text.", style = TextStyle(background = Color.Cyan))
}
}
@@ -152,19 +152,19 @@
// Center of the first rectangle is aligned to the right edge of the second rectangle and
// left edge of the third one.
SizedRectangle(
- Gravity.RelativeToSiblings { it.width * 0.5 },
+ LayoutGravity.RelativeToSiblings { it.width * 0.5 },
color = Color.Blue,
width = 80.dp,
height = 40.dp
)
SizedRectangleWithLines(
- Gravity.RelativeToSiblings(End),
+ LayoutGravity.RelativeToSiblings(End),
color = Color.Magenta,
width = 80.dp,
height = 40.dp
)
SizedRectangleWithLines(
- Gravity.RelativeToSiblings(Start),
+ LayoutGravity.RelativeToSiblings(Start),
color = Color.Red,
width = 80.dp,
height = 40.dp
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt
index 14f1f30..f4413f4 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt
@@ -23,14 +23,14 @@
import androidx.ui.foundation.shape.DrawShape
import androidx.ui.foundation.shape.RectangleShape
import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Column
import androidx.ui.layout.ConstrainedBox
import androidx.ui.layout.Container
import androidx.ui.layout.CrossAxisAlignment
import androidx.ui.layout.DpConstraints
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.FlexRow
import androidx.ui.layout.MaxIntrinsicHeight
import androidx.ui.layout.MaxIntrinsicWidth
@@ -44,7 +44,7 @@
* Here [MinIntrinsicWidth] is adding a speculative width measurement pass for the [Column],
* whose minimum intrinsic width will correspond to the preferred width of the largest
* [ConstrainedBox]. Then [MinIntrinsicWidth] will measure the [Column] with tight width, the same
- * as the premeasured minimum intrinsic width, which due to [ExpandedWidth] will force
+ * as the premeasured minimum intrinsic width, which due to [LayoutExpandedWidth] will force
* the [ConstrainedBox]s to use the same width.
*/
@Sampled
@@ -52,22 +52,22 @@
fun SameWidthBoxes() {
Wrap {
MinIntrinsicWidth {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
ConstrainedBox(
constraints = DpConstraints.tightConstraints(width = 20.dp, height = 10.dp),
- modifier = ExpandedWidth
+ modifier = LayoutExpandedWidth
) {
DrawShape(RectangleShape, Color.Gray)
}
ConstrainedBox(
constraints = DpConstraints.tightConstraints(width = 30.dp, height = 10.dp),
- modifier = ExpandedWidth
+ modifier = LayoutExpandedWidth
) {
DrawShape(RectangleShape, Color.Blue)
}
ConstrainedBox(
constraints = DpConstraints.tightConstraints(width = 10.dp, height = 10.dp),
- modifier = ExpandedWidth
+ modifier = LayoutExpandedWidth
) {
DrawShape(RectangleShape, Color.Magenta)
}
@@ -113,7 +113,7 @@
* Here [MaxIntrinsicWidth] is adding a speculative width measurement pass for the [Column],
* whose maximum intrinsic width will correspond to the preferred width of the largest
* [ConstrainedBox]. Then [MaxIntrinsicWidth] will measure the [Column] with tight width, the same
- * as the premeasured maximum intrinsic width, which due to [ExpandedWidth] modifiers will force
+ * as the premeasured maximum intrinsic width, which due to [LayoutExpandedWidth] modifiers will force
* the [ConstrainedBox]s to use the same width.
*/
@Sampled
@@ -121,16 +121,16 @@
fun SameWidthTextBoxes() {
Wrap {
MaxIntrinsicWidth {
- Column(ExpandedHeight) {
- Container(ExpandedWidth) {
+ Column(LayoutExpandedHeight) {
+ Container(LayoutExpandedWidth) {
DrawShape(RectangleShape, Color.Gray)
Text("Short text")
}
- Container(ExpandedWidth) {
+ Container(LayoutExpandedWidth) {
DrawShape(RectangleShape, Color.Blue)
Text("Extremely long text giving the width of its siblings")
}
- Container(ExpandedWidth) {
+ Container(LayoutExpandedWidth) {
DrawShape(RectangleShape, Color.Magenta)
Text("Medium length text")
}
@@ -156,13 +156,13 @@
MaxIntrinsicHeight {
FlexRow(crossAxisAlignment = CrossAxisAlignment.Stretch) {
expanded(flex = 1f) {
- Container(AspectRatio(2f)) { DrawShape(RectangleShape, Color.Gray) }
+ Container(LayoutAspectRatio(2f)) { DrawShape(RectangleShape, Color.Gray) }
}
inflexible {
Container(width = 1.dp) { DrawShape(RectangleShape, Color.Black) }
}
expanded(flex = 1f) {
- Container(AspectRatio(1f)) { DrawShape(RectangleShape, Color.Blue) }
+ Container(LayoutAspectRatio(1f)) { DrawShape(RectangleShape, Color.Blue) }
}
}
}
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacingSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutPaddingSample.kt
similarity index 92%
rename from ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacingSample.kt
rename to ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutPaddingSample.kt
index 4dc05d3..37210ce5 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacingSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutPaddingSample.kt
@@ -24,17 +24,17 @@
import androidx.ui.layout.Align
import androidx.ui.layout.Container
import androidx.ui.layout.EdgeInsets
+import androidx.ui.layout.LayoutPadding
import androidx.ui.layout.Padding
-import androidx.ui.layout.Spacing
@Sampled
@Composable
-fun SpacingModifier() {
+fun LayoutPaddingModifier() {
Align(Alignment.TopLeft) {
Container {
DrawRectangle(Color.Gray)
SizedRectangle(
- modifier = Spacing(
+ modifier = LayoutPadding(
left = 20.dp, top = 30.dp, right = 20.dp, bottom = 30.dp
),
color = Color.Blue,
@@ -47,12 +47,12 @@
@Sampled
@Composable
-fun SpacingAllModifier() {
+fun LayoutPaddingAllModifier() {
Align(Alignment.TopLeft) {
Container {
DrawRectangle(Color.Gray)
SizedRectangle(
- modifier = Spacing(all = 20.dp),
+ modifier = LayoutPadding(all = 20.dp),
color = Color.Blue,
width = 50.dp,
height = 50.dp
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt
index b6b6172..0fe118c 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt
@@ -22,18 +22,18 @@
import androidx.ui.foundation.shape.DrawShape
import androidx.ui.foundation.shape.RectangleShape
import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Center
import androidx.ui.layout.Container
-import androidx.ui.layout.Height
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
@Sampled
@Composable
fun SimpleSizeModifier() {
Center {
- Container(modifier = Size(width = 100.dp, height = 100.dp)) {
+ Container(modifier = LayoutSize(width = 100.dp, height = 100.dp)) {
DrawShape(shape = RectangleShape, color = Color.Red)
}
}
@@ -43,7 +43,7 @@
@Composable
fun SimpleWidthModifier() {
Center {
- Container(modifier = Width(100.dp) wraps AspectRatio(1f)) {
+ Container(modifier = LayoutWidth(100.dp) + LayoutAspectRatio(1f)) {
DrawShape(shape = RectangleShape, color = Color.Magenta)
}
}
@@ -53,7 +53,7 @@
@Composable
fun SimpleHeightModifier() {
Center {
- Container(modifier = Height(100.dp) wraps AspectRatio(1f)) {
+ Container(modifier = LayoutHeight(100.dp) + LayoutAspectRatio(1f)) {
DrawShape(shape = RectangleShape, color = Color.Blue)
}
}
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt
index bf8e38c..6a8ca70 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt
@@ -22,16 +22,16 @@
import androidx.ui.graphics.Color
import androidx.ui.layout.Row
import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
@Sampled
@Composable
fun SpacerExample() {
Row {
SizedRectangle(color = Color.Red, width = 100.dp, height = 100.dp)
- Spacer(modifier = Width(20.dp))
+ Spacer(modifier = LayoutWidth(20.dp))
SizedRectangle(color = Color.Magenta, width = 100.dp, height = 100.dp)
- Spacer(modifier = Flexible(1f))
+ Spacer(modifier = LayoutFlexible(1f))
SizedRectangle(color = Color.Black, width = 100.dp, height = 100.dp)
}
}
\ No newline at end of file
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt
index 6f3f0d5..39b97bc 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt
@@ -20,26 +20,26 @@
import androidx.compose.Composable
import androidx.ui.core.dp
import androidx.ui.graphics.Color
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Size
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.LayoutSize
import androidx.ui.layout.Stack
@Sampled
@Composable
fun SimpleStack() {
Stack {
- SizedRectangle(modifier = Expanded, color = Color.Cyan)
+ SizedRectangle(LayoutExpanded, color = Color.Cyan)
SizedRectangle(
- modifier = Gravity.Stretch wraps Spacing(top = 20.dp, bottom = 20.dp),
+ LayoutGravity.Stretch + LayoutPadding(top = 20.dp, bottom = 20.dp),
color = Color.Yellow
)
- SizedRectangle(modifier = Gravity.Stretch wraps Spacing(40.dp), color = Color.Magenta)
- SizedRectangle(modifier = Gravity.Center wraps Size(300.dp, 300.dp), color = Color.Green)
- SizedRectangle(modifier = Gravity.TopLeft wraps Size(150.dp, 150.dp), color = Color.Red)
+ SizedRectangle(LayoutGravity.Stretch + LayoutPadding(40.dp), color = Color.Magenta)
+ SizedRectangle(LayoutGravity.Center + LayoutSize(300.dp, 300.dp), color = Color.Green)
+ SizedRectangle(LayoutGravity.TopLeft + LayoutSize(150.dp, 150.dp), color = Color.Red)
SizedRectangle(
- modifier = Gravity.BottomRight wraps Size(150.dp, 150.dp),
+ LayoutGravity.BottomRight + LayoutSize(150.dp, 150.dp),
color = Color.Blue
)
}
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt
index d9fb082..8ecdd34 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt
@@ -23,7 +23,7 @@
import androidx.ui.foundation.shape.DrawShape
import androidx.ui.foundation.shape.corner.CircleShape
import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Padding
import androidx.ui.layout.Table
import androidx.ui.layout.TableColumnWidth
@@ -104,5 +104,5 @@
@Composable
private fun SizedSquare(color: Color, size: Dp? = null) {
- SizedRectangle(AspectRatio(1f), color = color, width = size)
+ SizedRectangle(LayoutAspectRatio(1f), color = color, width = size)
}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
index 2de62fa..7c7aec6 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
@@ -32,12 +32,12 @@
import androidx.ui.core.px
import androidx.ui.core.withDensity
import androidx.ui.layout.Align
-import androidx.ui.layout.Aligned
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAlign
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
@@ -105,7 +105,7 @@
position = alignPosition,
positionedLatch = positionedLatch
)
- Container(modifier = Aligned.BottomRight wraps Size(sizeDp, sizeDp)) {
+ Container(modifier = LayoutAlign.BottomRight + LayoutSize(sizeDp, sizeDp)) {
SaveLayoutInfo(
size = childSize,
position = childPosition,
@@ -145,7 +145,7 @@
position = alignPosition,
positionedLatch = positionedLatch
)
- Container(modifier = Aligned.End wraps ExpandedHeight wraps Width(sizeDp)) {
+ Container(LayoutAlign.End + LayoutExpandedHeight + LayoutWidth(sizeDp)) {
SaveLayoutInfo(
size = childSize,
position = childPosition,
@@ -233,7 +233,7 @@
position = alignPosition,
positionedLatch = positionedLatch
)
- Container(modifier = Aligned.BottomRight wraps Size(sizeDp, sizeDp)) {
+ Container(LayoutAlign.BottomRight + LayoutSize(sizeDp, sizeDp)) {
SaveLayoutInfo(
size = childSize,
position = childPosition,
@@ -295,7 +295,7 @@
fun testAlign_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
Align(alignment = Alignment.TopLeft) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -316,7 +316,7 @@
@Test
fun test2DAlignedModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(Aligned.TopLeft wraps AspectRatio(2f)) { }
+ Container(LayoutAlign.TopLeft + LayoutAspectRatio(2f)) { }
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
assertEquals(0.ipx, minIntrinsicWidth(0.ipx))
@@ -343,7 +343,7 @@
@Test
fun test1DAlignedModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(Aligned.CenterVertically wraps AspectRatio(2f)) { }
+ Container(LayoutAlign.CenterVertically + LayoutAspectRatio(2f)) { }
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -463,13 +463,13 @@
show {
Layout(
children = {
- Container(Size(parentSize, parentSize)) {
+ Container(LayoutSize(parentSize, parentSize)) {
SaveLayoutInfo(
size = alignSize,
position = alignPosition,
positionedLatch = positionedLatch
)
- Container(Aligned.BottomRight wraps Size(childSizeDp, childSizeDp)) {
+ Container(LayoutAlign.BottomRight + LayoutSize(childSizeDp, childSizeDp)) {
SaveLayoutInfo(
size = childSize,
position = childPosition,
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt
index e1a5d43..ef08953 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt
@@ -29,7 +29,7 @@
import androidx.ui.core.px
import androidx.ui.core.withDensity
import androidx.ui.layout.Container
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -43,7 +43,7 @@
@Test
fun testAspectRatioModifier_intrinsicDimensions() = withDensity(density) {
testIntrinsics(@Composable {
- Container(modifier = AspectRatio(2f), width = 30.dp, height = 40.dp) { }
+ Container(modifier = LayoutAspectRatio(2f), width = 30.dp, height = 40.dp) { }
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
assertEquals(40.ipx, minIntrinsicWidth(20.ipx))
assertEquals(40.ipx, maxIntrinsicWidth(20.ipx))
@@ -60,14 +60,14 @@
@Test(expected = IllegalArgumentException::class)
fun testAspectRatioModifier_zeroRatio() {
show {
- Container(AspectRatio(0f)) { }
+ Container(LayoutAspectRatio(0f)) { }
}
}
@Test(expected = IllegalArgumentException::class)
fun testAspectRatioModifier_negativeRatio() {
show {
- Container(AspectRatio(-2f)) { }
+ Container(LayoutAspectRatio(-2f)) { }
}
}
@@ -99,7 +99,7 @@
val position = Ref<PxPosition>()
show {
Layout(@Composable {
- Container(AspectRatio(aspectRatio)) {
+ Container(LayoutAspectRatio(aspectRatio)) {
SaveLayoutInfo(size, position, positionedLatch)
}
}) { measurables, incomingConstraints ->
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
index b2ab6ed..4c9e899 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
@@ -28,7 +28,7 @@
import androidx.ui.core.px
import androidx.ui.core.withDensity
import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.ConstrainedBox
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
@@ -141,7 +141,7 @@
fun testConstrainedBox_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
ConstrainedBox(constraints = DpConstraints(10.dp, 20.dp, 30.dp, 40.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
index 7d233a9..c980823f 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
@@ -36,7 +36,7 @@
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
import androidx.ui.layout.Spacer
import androidx.ui.layout.Row
import androidx.ui.layout.Wrap
@@ -311,7 +311,7 @@
show {
Wrap {
Container(padding = edgeInsets) {
- Spacer(Size(width = childSizeDp, height = childSizeDp))
+ Spacer(LayoutSize(width = childSizeDp, height = childSizeDp))
OnPositioned(onPositioned = { coordinates ->
containerSize = coordinates.size
latch.countDown()
@@ -340,7 +340,7 @@
childCoordinates = coordinates
latch.countDown()
}) {
- Spacer(Size(width = childSize, height = childSize))
+ Spacer(LayoutSize(width = childSize, height = childSize))
}
}
}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt
index e0edb23..5074feb 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt
@@ -33,11 +33,11 @@
import androidx.ui.core.withDensity
import androidx.ui.engine.geometry.Rect
import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Container
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
@@ -63,23 +63,23 @@
)
Assert.assertEquals(
Rect(0f, 0f, screenWidth, Height.toIntPx().value.toFloat()),
- getSize(ExpandedWidth).toRect()
+ getSize(LayoutExpandedWidth).toRect()
)
Assert.assertEquals(
Rect(0f, 0f, Width.toIntPx().value.toFloat(), screenHeight),
- getSize(ExpandedHeight).toRect()
+ getSize(LayoutExpandedHeight).toRect()
)
Assert.assertEquals(
Rect(0f, 0f, screenWidth, screenHeight),
- getSize(Expanded).toRect()
+ getSize(LayoutExpanded).toRect()
)
}
@Test
fun testExpandedModifier_noChangeIntrinsicMeasurements() = withDensity(density) {
- verifyIntrinsicMeasurements(ExpandedWidth)
- verifyIntrinsicMeasurements(ExpandedHeight)
- verifyIntrinsicMeasurements(Expanded)
+ verifyIntrinsicMeasurements(LayoutExpandedWidth)
+ verifyIntrinsicMeasurements(LayoutExpandedHeight)
+ verifyIntrinsicMeasurements(LayoutExpanded)
}
private fun getSize(modifier: Modifier = Modifier.None): PxSize {
@@ -112,7 +112,9 @@
private fun verifyIntrinsicMeasurements(expandedModifier: Modifier) = withDensity(density) {
// intrinsic measurements do not change with the ExpandedModifier
testIntrinsics(@Composable {
- Container(expandedModifier wraps AspectRatio(2f), width = 30.dp, height = 40.dp) { }
+ Container(
+ expandedModifier + LayoutAspectRatio(2f),
+ width = 30.dp, height = 40.dp) { }
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Width
assertEquals(40.ipx, minIntrinsicWidth(20.ipx))
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
index ac79d36..2a566e7 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
@@ -49,17 +49,17 @@
import androidx.ui.core.min
import androidx.ui.layout.Align
import androidx.ui.layout.Arrangement
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Center
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.FlexColumn
import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutGravity
import androidx.ui.layout.Row
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
import androidx.ui.layout.Spacer
import androidx.ui.layout.Wrap
import org.junit.Assert
@@ -131,7 +131,7 @@
show {
Container(alignment = Alignment.TopLeft) {
Row {
- Container(Flexible(1f), width = width, height = height) {
+ Container(LayoutFlexible(1f), width = width, height = height) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -139,7 +139,7 @@
})
}
- Container(Flexible(2f), width = width, height = height) {
+ Container(LayoutFlexible(2f), width = width, height = height) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
childPosition[1] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -181,7 +181,7 @@
Container(alignment = Alignment.TopLeft) {
Row {
Container(
- Flexible(1f, tight = false),
+ LayoutFlexible(1f, tight = false),
width = width,
height = height
) {
@@ -193,7 +193,7 @@
}
Container(
- Flexible(2f, tight = false),
+ LayoutFlexible(2f, tight = false),
width = width,
height = height * 2
) {
@@ -374,7 +374,7 @@
show {
Container(alignment = Alignment.TopLeft) {
Column {
- Container(Flexible(1f), width = width, height = height) {
+ Container(LayoutFlexible(1f), width = width, height = height) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -382,7 +382,7 @@
})
}
- Container(Flexible(2f), width = width, height = height) {
+ Container(LayoutFlexible(2f), width = width, height = height) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
childPosition[1] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -421,14 +421,14 @@
show {
Container(alignment = Alignment.TopLeft) {
Column {
- Container(Flexible(1f, tight = false), width = width, height = height) {
+ Container(LayoutFlexible(1f, tight = false), width = width, height = height) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
drawLatch.countDown()
})
}
- Container(Flexible(2f, tight = false), width = width, height = height) {
+ Container(LayoutFlexible(2f, tight = false), width = width, height = height) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
childPosition[1] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -565,7 +565,7 @@
show {
Align(Alignment.CenterLeft) {
Row {
- Container(width = sizeDp, height = sizeDp, modifier = ExpandedHeight) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutExpandedHeight) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -576,7 +576,7 @@
Container(
width = (sizeDp * 2),
height = (sizeDp * 2),
- modifier = ExpandedHeight
+ modifier = LayoutExpandedHeight
) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
@@ -611,22 +611,22 @@
val childPosition = arrayOfNulls<PxPosition>(3)
show {
Align(Alignment.TopLeft) {
- Row(ExpandedHeight) {
- Container(width = sizeDp, height = sizeDp, modifier = Gravity.Top) {
+ Row(LayoutExpandedHeight) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Top) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
childPosition[0] = coordinates.globalPosition
drawLatch.countDown()
})
}
- Container(width = sizeDp, height = sizeDp, modifier = Gravity.Center) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Center) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
childPosition[1] = coordinates.globalPosition
drawLatch.countDown()
})
}
- Container(width = sizeDp, height = sizeDp, modifier = Gravity.Bottom) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Bottom) {
OnPositioned(onPositioned = { coordinates ->
childSize[2] = coordinates.size
childPosition[2] = coordinates.globalPosition
@@ -669,12 +669,12 @@
val childPosition = arrayOfNulls<PxPosition>(4)
show {
Align(Alignment.TopLeft) {
- Row(ExpandedHeight) {
+ Row(LayoutExpandedHeight) {
BaselineTestLayout(
baseline = baseline1Dp,
width = sizeDp,
height = sizeDp,
- modifier = Gravity.RelativeToSiblings(TestHorizontalLine)
+ modifier = LayoutGravity.RelativeToSiblings(TestHorizontalLine)
) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
@@ -685,7 +685,7 @@
Container(
width = sizeDp,
height = sizeDp,
- modifier = Gravity.RelativeToSiblings { it.height * 0.5 }
+ modifier = LayoutGravity.RelativeToSiblings { it.height * 0.5 }
) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
@@ -697,7 +697,7 @@
baseline = baseline2Dp,
width = sizeDp,
height = sizeDp,
- modifier = Gravity.RelativeToSiblings(TestHorizontalLine)
+ modifier = LayoutGravity.RelativeToSiblings(TestHorizontalLine)
) {
OnPositioned(onPositioned = { coordinates ->
childSize[2] = coordinates.size
@@ -708,7 +708,7 @@
Container(
width = sizeDp,
height = sizeDp,
- modifier = Gravity.RelativeToSiblings { it.height * 0.75 }
+ modifier = LayoutGravity.RelativeToSiblings { it.height * 0.75 }
) {
OnPositioned(onPositioned = { coordinates ->
childSize[3] = coordinates.size
@@ -756,7 +756,7 @@
show {
Align(Alignment.TopCenter) {
Column {
- Container(width = sizeDp, height = sizeDp, modifier = ExpandedWidth) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutExpandedWidth) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -765,7 +765,7 @@
}
Container(
- width = (sizeDp * 2), height = (sizeDp * 2), modifier = ExpandedWidth
+ width = (sizeDp * 2), height = (sizeDp * 2), modifier = LayoutExpandedWidth
) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
@@ -800,22 +800,22 @@
val childPosition = arrayOfNulls<PxPosition>(3)
show {
Align(Alignment.TopCenter) {
- Column(ExpandedWidth) {
- Container(width = sizeDp, height = sizeDp, modifier = Gravity.Start) {
+ Column(LayoutExpandedWidth) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Start) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
childPosition[0] = coordinates.globalPosition
drawLatch.countDown()
})
}
- Container(width = sizeDp, height = sizeDp, modifier = Gravity.Center) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Center) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
childPosition[1] = coordinates.globalPosition
drawLatch.countDown()
})
}
- Container(width = sizeDp, height = sizeDp, modifier = Gravity.End) {
+ Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.End) {
OnPositioned(onPositioned = { coordinates ->
childSize[2] = coordinates.size
childPosition[2] = coordinates.globalPosition
@@ -856,11 +856,11 @@
val childPosition = arrayOfNulls<PxPosition>(4)
show {
Align(Alignment.TopLeft) {
- Column(ExpandedWidth) {
+ Column(LayoutExpandedWidth) {
Container(
width = sizeDp,
height = sizeDp,
- modifier = Gravity.RelativeToSiblings { it.width }
+ modifier = LayoutGravity.RelativeToSiblings { it.width }
) {
OnPositioned(onPositioned = { coordinates ->
childSize[0] = coordinates.size
@@ -871,7 +871,7 @@
Container(
width = sizeDp,
height = sizeDp,
- modifier = Gravity.RelativeToSiblings { 0.ipx }
+ modifier = LayoutGravity.RelativeToSiblings { 0.ipx }
) {
OnPositioned(onPositioned = { coordinates ->
childSize[1] = coordinates.size
@@ -883,7 +883,7 @@
width = sizeDp,
height = sizeDp,
baseline = firstBaseline1Dp,
- modifier = Gravity.RelativeToSiblings(TestVerticalLine)
+ modifier = LayoutGravity.RelativeToSiblings(TestVerticalLine)
) {
OnPositioned(onPositioned = { coordinates ->
childSize[2] = coordinates.size
@@ -895,7 +895,7 @@
width = sizeDp,
height = sizeDp,
baseline = firstBaseline2Dp,
- modifier = Gravity.RelativeToSiblings(TestVerticalLine)
+ modifier = LayoutGravity.RelativeToSiblings(TestVerticalLine)
) {
OnPositioned(onPositioned = { coordinates ->
childSize[3] = coordinates.size
@@ -937,9 +937,9 @@
lateinit var rowSize: PxSize
show {
Center {
- Row(ExpandedWidth) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Row(LayoutExpandedWidth) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -968,8 +968,8 @@
show {
Center {
Row {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -998,7 +998,7 @@
show {
Center {
Row {
- Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+ Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
Container(width = (sizeDp * 2), height = (sizeDp * 2)) {}
OnPositioned(onPositioned = { coordinates ->
@@ -1027,9 +1027,9 @@
lateinit var rowSize: PxSize
show {
Center {
- Row(ExpandedHeight) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Row(LayoutExpandedHeight) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -1058,8 +1058,8 @@
show {
Center {
Row {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -1089,9 +1089,9 @@
show {
Center {
ConstrainedBox(constraints = DpConstraints(maxWidth = rowWidthDp)) {
- Row(ExpandedWidth) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Row(LayoutExpandedWidth) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -1123,7 +1123,7 @@
Center {
ConstrainedBox(constraints = DpConstraints(maxWidth = rowWidthDp)) {
Row {
- Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+ Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
Container(width = sizeDp * 2, height = sizeDp * 2) {}
OnPositioned(onPositioned = { coordinates ->
@@ -1156,8 +1156,8 @@
Center {
ConstrainedBox(constraints = DpConstraints(minWidth = rowWidthDp)) {
Row {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -1188,9 +1188,9 @@
show {
Center {
ConstrainedBox(constraints = DpConstraints(maxHeight = rowHeightDp)) {
- Row(ExpandedHeight) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Row(LayoutExpandedHeight) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -1222,8 +1222,8 @@
Center {
ConstrainedBox(constraints = DpConstraints(minHeight = rowHeightDp)) {
Row {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
rowSize = coordinates.size
@@ -1310,7 +1310,7 @@
Assert.assertEquals(Constraints(), constraints)
FixedSizeLayout(inflexibleChildWidth.toIntPx(), 0.ipx, mapOf())
}
- Layout({}, Flexible(1f)) { _, constraints ->
+ Layout({}, LayoutFlexible(1f)) { _, constraints ->
Assert.assertEquals(
rowMinWidth.toIntPx() - inflexibleChildWidth.toIntPx() * 2,
constraints.minWidth
@@ -1385,9 +1385,9 @@
lateinit var columnSize: PxSize
show {
Center {
- Column(ExpandedHeight) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Column(LayoutExpandedHeight) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1416,8 +1416,8 @@
show {
Center {
Column {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1446,7 +1446,7 @@
show {
Center {
Column {
- Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+ Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
Container(width = (sizeDp * 2), height = (sizeDp * 2)) {}
OnPositioned(onPositioned = { coordinates ->
@@ -1475,9 +1475,9 @@
lateinit var columnSize: PxSize
show {
Center {
- Column(ExpandedWidth) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Column(LayoutExpandedWidth) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1506,8 +1506,8 @@
show {
Center {
Column {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1537,9 +1537,9 @@
show {
Center {
ConstrainedBox(constraints = DpConstraints(maxHeight = columnHeightDp)) {
- Column(ExpandedHeight) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Column(LayoutExpandedHeight) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1571,7 +1571,7 @@
Center {
ConstrainedBox(constraints = DpConstraints(maxHeight = columnHeightDp)) {
Column {
- Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+ Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
Container(width = sizeDp * 2, height = sizeDp * 2) {}
OnPositioned(onPositioned = { coordinates ->
@@ -1604,8 +1604,8 @@
Center {
ConstrainedBox(constraints = DpConstraints(minHeight = columnHeightDp)) {
Column {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1636,9 +1636,9 @@
show {
Center {
ConstrainedBox(constraints = DpConstraints(maxWidth = columnWidthDp)) {
- Column(ExpandedWidth) {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Column(LayoutExpandedWidth) {
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1670,8 +1670,8 @@
Center {
ConstrainedBox(constraints = DpConstraints(minWidth = columnWidthDp)) {
Column {
- Spacer(Size(width = sizeDp, height = sizeDp))
- Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+ Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+ Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
OnPositioned(onPositioned = { coordinates ->
columnSize = coordinates.size
@@ -1759,7 +1759,7 @@
Assert.assertEquals(Constraints(), constraints)
FixedSizeLayout(0.ipx, inflexibleChildHeight.toIntPx(), mapOf())
}
- Layout({}, Flexible(1f)) { _, constraints ->
+ Layout({}, LayoutFlexible(1f)) { _, constraints ->
assertEquals(
columnMinHeight.toIntPx() - inflexibleChildHeight.toIntPx() * 2,
constraints.minHeight
@@ -1837,7 +1837,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -1878,7 +1878,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Row(ExpandedWidth, arrangement = Arrangement.End) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.End) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -1919,7 +1919,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Row(ExpandedWidth, arrangement = Arrangement.Center) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -1961,7 +1961,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2003,7 +2003,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Row(ExpandedWidth, arrangement = Arrangement.SpaceBetween) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceBetween) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2045,7 +2045,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Row(ExpandedWidth, arrangement = Arrangement.SpaceAround) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceAround) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2087,7 +2087,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Row(ExpandedWidth, arrangement = Arrangement(customArrangement)) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement(customArrangement)) {
for (i in childPosition.indices) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2134,7 +2134,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2175,7 +2175,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Column(ExpandedHeight, arrangement = Arrangement.End) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.End) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2216,7 +2216,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Column(ExpandedHeight, arrangement = Arrangement.Center) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.Center) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2258,7 +2258,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2300,7 +2300,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceBetween) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceBetween) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2342,7 +2342,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceAround) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceAround) {
for (i in 0 until childPosition.size) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2390,7 +2390,7 @@
val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
show {
Center {
- Column(ExpandedHeight, arrangement = Arrangement(customArrangement)) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement(customArrangement)) {
for (i in childPosition.indices) {
Container(width = sizeDp, height = sizeDp) {
OnPositioned(onPositioned = { coordinates ->
@@ -2441,7 +2441,7 @@
containerSize.value = coordinates.size
layoutLatch.countDown()
}) {
- Spacer(Size(width = childSizeDp, height = childSizeDp))
+ Spacer(LayoutSize(width = childSizeDp, height = childSizeDp))
}
}
}
@@ -2470,7 +2470,7 @@
containerSize.value = coordinates.size
layoutLatch.countDown()
}) {
- Spacer(Size(width = childSizeDp, height = childSizeDp))
+ Spacer(LayoutSize(width = childSizeDp, height = childSizeDp))
}
}
}
@@ -2487,57 +2487,61 @@
fun testRow_withInflexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
Row {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
- Row(ExpandedWidth) {
- Container(AspectRatio(2f)) { }
+ Row(LayoutExpandedWidth) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
Row {
- Container(AspectRatio(2f) wraps Gravity.Top) { }
- ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.Center) { }
+ Container(LayoutAspectRatio(2f) + LayoutGravity.Top) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+ LayoutGravity.Center) { }
}
}, @Composable {
Row {
Container(
- AspectRatio(2f) wraps Gravity.RelativeToSiblings(FirstBaseline)
+ LayoutAspectRatio(2f) + LayoutGravity.RelativeToSiblings(FirstBaseline)
) { }
ConstrainedBox(
DpConstraints.tightConstraints(50.dp, 40.dp),
- Gravity.RelativeToSiblings { it.width }
+ LayoutGravity.RelativeToSiblings { it.width }
) { }
}
}, @Composable {
- Row(ExpandedWidth, arrangement = Arrangement.Begin) {
- Container(AspectRatio(2f)) { }
+ Row(LayoutExpandedWidth, arrangement = Arrangement.Begin) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
- Row(ExpandedWidth, arrangement = Arrangement.Center) {
- Container(Gravity.Center wraps AspectRatio(2f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.Center) { }
+ Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
+ Container(LayoutGravity.Center + LayoutAspectRatio(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+ LayoutGravity.Center) { }
}
}, @Composable {
- Row(ExpandedWidth, arrangement = Arrangement.End) {
- Container(Gravity.Bottom wraps AspectRatio(2f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.Bottom) { }
+ Row(LayoutExpandedWidth, arrangement = Arrangement.End) {
+ Container(LayoutGravity.Bottom + LayoutAspectRatio(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+ LayoutGravity.Bottom) { }
}
}, @Composable {
- Row(ExpandedWidth, arrangement = Arrangement.SpaceAround) {
- Container(ExpandedHeight wraps AspectRatio(2f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), ExpandedHeight) { }
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceAround) {
+ Container(LayoutExpandedHeight + LayoutAspectRatio(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+ LayoutExpandedHeight) { }
}
}, @Composable {
- Row(ExpandedWidth, arrangement = Arrangement.SpaceBetween) {
- Container(AspectRatio(2f)) { }
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceBetween) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
- Container(AspectRatio(2f)) { }
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2564,97 +2568,98 @@
fun testRow_withFlexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
Row {
- ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
- Container(AspectRatio(2f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
}
}, @Composable {
Row {
ConstrainedBox(
DpConstraints.tightConstraints(20.dp, 30.dp),
- Flexible(3f) wraps Gravity.Top
+ LayoutFlexible(3f) + LayoutGravity.Top
) { }
ConstrainedBox(
DpConstraints.tightConstraints(30.dp, 40.dp),
- Flexible(2f) wraps Gravity.Center
+ LayoutFlexible(2f) + LayoutGravity.Center
) { }
- Container(AspectRatio(2f) wraps Flexible(2f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Gravity.Bottom) { }
+ Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp),
+ LayoutGravity.Bottom) { }
}
}, @Composable {
Row(arrangement = Arrangement.Begin) {
- ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
- Container(AspectRatio(2f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
}
}, @Composable {
Row(arrangement = Arrangement.Center) {
ConstrainedBox(
constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
- modifier = Flexible(3f) wraps Gravity.Center
+ modifier = LayoutFlexible(3f) + LayoutGravity.Center
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 40.dp),
- modifier = Flexible(2f) wraps Gravity.Center
+ modifier = LayoutFlexible(2f) + LayoutGravity.Center
) { }
Container(
- AspectRatio(2f) wraps Flexible(2f) wraps Gravity.Center
+ LayoutAspectRatio(2f) + LayoutFlexible(2f) + LayoutGravity.Center
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
) { }
}
}, @Composable {
Row(arrangement = Arrangement.End) {
ConstrainedBox(
constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
- modifier = Flexible(3f) wraps Gravity.Bottom
+ modifier = LayoutFlexible(3f) + LayoutGravity.Bottom
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 40.dp),
- modifier = Flexible(2f) wraps Gravity.Bottom
+ modifier = LayoutFlexible(2f) + LayoutGravity.Bottom
) { }
Container(
- AspectRatio(2f) wraps Flexible(2f) wraps Gravity.Bottom
+ LayoutAspectRatio(2f) + LayoutFlexible(2f) + LayoutGravity.Bottom
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
- modifier = Gravity.Bottom
+ modifier = LayoutGravity.Bottom
) { }
}
}, @Composable {
Row(arrangement = Arrangement.SpaceAround) {
ConstrainedBox(
constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
- modifier = Flexible(3f) wraps ExpandedHeight
+ modifier = LayoutFlexible(3f) + LayoutExpandedHeight
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 40.dp),
- modifier = Flexible(2f) wraps ExpandedHeight
+ modifier = LayoutFlexible(2f) + LayoutExpandedHeight
) { }
Container(
- AspectRatio(2f) wraps Flexible(2f) wraps ExpandedHeight
+ LayoutAspectRatio(2f) + LayoutFlexible(2f) + LayoutExpandedHeight
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
- modifier = ExpandedHeight
+ modifier = LayoutExpandedHeight
) { }
}
}, @Composable {
Row(arrangement = Arrangement.SpaceBetween) {
- ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
- Container(AspectRatio(2f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
}
}, @Composable {
Row(arrangement = Arrangement.SpaceEvenly) {
- ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
- Container(AspectRatio(2f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2709,55 +2714,56 @@
fun testColumn_withInflexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
Column {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
Column {
- Container(AspectRatio(2f) wraps Gravity.Start) { }
- ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.End) { }
+ Container(LayoutAspectRatio(2f) + LayoutGravity.Start) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), LayoutGravity.End) { }
}
}, @Composable {
Column {
- Container(AspectRatio(2f) wraps Gravity.RelativeToSiblings { 0.ipx }) { }
+ Container(LayoutAspectRatio(2f) + LayoutGravity.RelativeToSiblings { 0.ipx }) { }
ConstrainedBox(
DpConstraints.tightConstraints(50.dp, 40.dp),
- Gravity.RelativeToSiblings(TestVerticalLine)
+ LayoutGravity.RelativeToSiblings(TestVerticalLine)
) { }
}
}, @Composable {
- Column(ExpandedHeight) {
- Container(AspectRatio(2f)) { }
+ Column(LayoutExpandedHeight) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
- Column(ExpandedHeight, arrangement = Arrangement.Begin) {
- Container(AspectRatio(2f)) { }
+ Column(LayoutExpandedHeight, arrangement = Arrangement.Begin) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
- Column(ExpandedHeight, arrangement = Arrangement.Center) {
- Container(Gravity.Center wraps AspectRatio(2f)) { }
+ Column(LayoutExpandedHeight, arrangement = Arrangement.Center) {
+ Container(LayoutGravity.Center + LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
- Column(ExpandedHeight, arrangement = Arrangement.End) {
- Container(Gravity.End wraps AspectRatio(2f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.End) { }
+ Column(LayoutExpandedHeight, arrangement = Arrangement.End) {
+ Container(LayoutGravity.End + LayoutAspectRatio(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), LayoutGravity.End) { }
}
}, @Composable {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceAround) {
- Container(ExpandedWidth wraps AspectRatio(2f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), ExpandedWidth) { }
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceAround) {
+ Container(LayoutExpandedWidth + LayoutAspectRatio(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+ LayoutExpandedWidth) { }
}
}, @Composable {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceBetween) {
- Container(AspectRatio(2f)) { }
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceBetween) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
- Container(AspectRatio(2f)) { }
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+ Container(LayoutAspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2784,97 +2790,97 @@
fun testColumn_withFlexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
Column {
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
- Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
}
}, @Composable {
Column {
ConstrainedBox(
DpConstraints.tightConstraints(30.dp, 20.dp),
- Flexible(3f) wraps Gravity.Start
+ LayoutFlexible(3f) + LayoutGravity.Start
) { }
ConstrainedBox(
DpConstraints.tightConstraints(40.dp, 30.dp),
- Flexible(2f) wraps Gravity.Center
+ LayoutFlexible(2f) + LayoutGravity.Center
) { }
- Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Gravity.End) { }
+ Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutGravity.End) { }
}
}, @Composable {
Column(arrangement = Arrangement.Begin) {
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
- Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
}
}, @Composable {
Column(arrangement = Arrangement.Center) {
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
- modifier = Flexible(3f) wraps Gravity.Center
+ modifier = LayoutFlexible(3f) + LayoutGravity.Center
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(40.dp, 30.dp),
- modifier = Flexible(2f) wraps Gravity.Center
+ modifier = LayoutFlexible(2f) + LayoutGravity.Center
) { }
Container(
- AspectRatio(0.5f) wraps Flexible(2f) wraps Gravity.Center
+ LayoutAspectRatio(0.5f) + LayoutFlexible(2f) + LayoutGravity.Center
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
) { }
}
}, @Composable {
Column(arrangement = Arrangement.End) {
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
- modifier = Flexible(3f) wraps Gravity.End
+ modifier = LayoutFlexible(3f) + LayoutGravity.End
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(40.dp, 30.dp),
- modifier = Flexible(2f) wraps Gravity.End
+ modifier = LayoutFlexible(2f) + LayoutGravity.End
) { }
Container(
- AspectRatio(0.5f) wraps Flexible(2f) wraps Gravity.End
+ LayoutAspectRatio(0.5f) + LayoutFlexible(2f) + LayoutGravity.End
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
- modifier = Gravity.End
+ modifier = LayoutGravity.End
) { }
}
}, @Composable {
Column(arrangement = Arrangement.SpaceAround) {
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
- modifier = Flexible(3f) wraps ExpandedWidth
+ modifier = LayoutFlexible(3f) + LayoutExpandedWidth
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(40.dp, 30.dp),
- modifier = Flexible(2f) wraps ExpandedWidth
+ modifier = LayoutFlexible(2f) + LayoutExpandedWidth
) { }
Container(
- AspectRatio(0.5f) wraps Flexible(2f) wraps ExpandedWidth
+ LayoutAspectRatio(0.5f) + LayoutFlexible(2f) + LayoutExpandedWidth
) { }
ConstrainedBox(
constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
- modifier = ExpandedWidth
+ modifier = LayoutExpandedWidth
) { }
}
}, @Composable {
Column(arrangement = Arrangement.SpaceBetween) {
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
- Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
}
}, @Composable {
Column(arrangement = Arrangement.SpaceEvenly) {
- ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
- ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
- Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+ Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2936,7 +2942,7 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -2951,7 +2957,7 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -2969,7 +2975,7 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -2987,7 +2993,7 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3005,7 +3011,7 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3020,7 +3026,7 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3035,7 +3041,7 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3100,7 +3106,7 @@
ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(0.5f)) { }
+ Container(LayoutAspectRatio(0.5f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3115,7 +3121,7 @@
ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(0.5f)) { }
+ Container(LayoutAspectRatio(0.5f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3133,7 +3139,7 @@
ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(0.5f)) { }
+ Container(LayoutAspectRatio(0.5f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3151,7 +3157,7 @@
ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(0.5f)) { }
+ Container(LayoutAspectRatio(0.5f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3169,7 +3175,7 @@
ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(0.5f)) { }
+ Container(LayoutAspectRatio(0.5f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3184,7 +3190,7 @@
ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(0.5f)) { }
+ Container(LayoutAspectRatio(0.5f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3199,7 +3205,7 @@
ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
}
expanded(flex = 2f) {
- Container(AspectRatio(0.5f)) { }
+ Container(LayoutAspectRatio(0.5f)) { }
}
inflexible {
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3348,13 +3354,15 @@
show {
Align(Alignment.TopLeft) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
OnChildPositioned(onPositioned = { coordinates ->
containerSize.value = coordinates.size
containerPosition.value = coordinates.localToGlobal(PxPosition(0.px, 0.px))
positionedLatch.countDown()
}) {
- Container(Inflexible wraps Flexible(1f), width = 40.dp, height = 40.dp) {}
+ Container(
+ LayoutInflexible + LayoutFlexible(1f),
+ width = 40.dp, height = 40.dp) {}
}
}
}
@@ -3376,7 +3384,7 @@
show {
Row {
Container(
- modifier = Gravity.RelativeToSiblings { it.height },
+ modifier = LayoutGravity.RelativeToSiblings { it.height },
width = size,
height = size
) {}
@@ -3386,8 +3394,8 @@
positionedLatch.countDown()
}) {
Container(
- modifier = Gravity.RelativeToSiblings { 0.ipx }
- wraps Gravity.RelativeToSiblings { it.height * 0.5 },
+ modifier = LayoutGravity.RelativeToSiblings { 0.ipx } +
+ LayoutGravity.RelativeToSiblings { it.height * 0.5 },
width = size,
height = size
) {}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacingModifierTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutPaddingTest.kt
similarity index 69%
rename from ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacingModifierTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutPaddingTest.kt
index cd84d9c..91dc6a5 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacingModifierTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutPaddingTest.kt
@@ -35,8 +35,8 @@
import androidx.ui.core.Layout
import androidx.ui.core.Modifier
import androidx.ui.core.min
-import androidx.ui.layout.AspectRatio
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutAspectRatio
+import androidx.ui.layout.LayoutPadding
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
@@ -46,85 +46,86 @@
@SmallTest
@RunWith(JUnit4::class)
-class SpacingModifierTest : LayoutTest() {
+class LayoutPaddingTest : LayoutTest() {
/**
- * Tests that the [Spacing]-all and [Spacing] factories return equivalent modifiers.
+ * Tests that the [LayoutPadding]-all and [LayoutPadding] factories return equivalent modifiers.
*/
@Test
fun allEqualToAbsoluteWithExplicitSides() {
Assert.assertEquals(
- Spacing(10.dp, 10.dp, 10.dp, 10.dp),
- Spacing(10.dp)
+ LayoutPadding(10.dp, 10.dp, 10.dp, 10.dp),
+ LayoutPadding(10.dp)
)
}
/**
- * Tests the top-level [Spacing] modifier factory with a single "all sides" argument,
- * checking that a uniform spacing of all sides is applied to a child when plenty of space is
- * available for both content and spacing.
+ * Tests the top-level [LayoutPadding] modifier factory with a single "all sides" argument,
+ * checking that a uniform padding of all sides is applied to a child when plenty of space is
+ * available for both content and padding.
*/
@Test
- fun spacingAllAppliedToChild() = withDensity(density) {
- val spacing = 10.dp
- testSpacingIsAppliedImplementation(spacing) { child: @Composable() () -> Unit ->
- TestBox(modifier = Spacing(spacing), body = child)
+ fun paddingAllAppliedToChild() = withDensity(density) {
+ val padding = 10.dp
+ testPaddingIsAppliedImplementation(padding) { child: @Composable() () -> Unit ->
+ TestBox(modifier = LayoutPadding(padding), body = child)
}
}
/**
- * Tests the top-level [Spacing] modifier factory with different values for left, top,
- * right and bottom spacings, checking that this spacing is applied as expected when plenty of
- * space is available for both the content and spacing.
+ * Tests the top-level [LayoutPadding] modifier factory with different values for left, top,
+ * right and bottom paddings, checking that this padding is applied as expected when plenty of
+ * space is available for both the content and padding.
*/
@Test
- fun absoluteSpacingAppliedToChild() {
- val spacingLeft = 10.dp
- val spacingTop = 15.dp
- val spacingRight = 20.dp
- val spacingBottom = 30.dp
- val spacing = Spacing(spacingLeft, spacingTop, spacingRight, spacingBottom)
- testSpacingWithDifferentInsetsImplementation(
- spacingLeft,
- spacingTop,
- spacingRight,
- spacingBottom
+ fun absolutePaddingAppliedToChild() {
+ val paddingLeft = 10.dp
+ val paddingTop = 15.dp
+ val paddingRight = 20.dp
+ val paddingBottom = 30.dp
+ val padding = LayoutPadding(paddingLeft, paddingTop, paddingRight, paddingBottom)
+ testPaddingWithDifferentInsetsImplementation(
+ paddingLeft,
+ paddingTop,
+ paddingRight,
+ paddingBottom
) { child: @Composable() () -> Unit ->
- TestBox(modifier = spacing, body = child)
+ TestBox(modifier = padding, body = child)
}
}
/**
- * Tests the result of the [Spacing] modifier factory when not enough space is available to
- * accommodate both the spacing and the content. In this case, the spacing should still be
- * applied, modifying the final position of the content by its left and top spacings even if it
- * would result in constraints that the child content is unable or unwilling to satisfy.
+ * Tests the result of the [LayoutPadding] modifier factory when not enough space is
+ * available to accommodate both the padding and the content. In this case, the padding
+ * should still be applied, modifying the final position of the content by its left and top
+ * paddings even if it would result in constraints that the child content is unable or
+ * unwilling to satisfy.
*/
@Test
fun insufficientSpaceAvailable() = withDensity(density) {
- val spacing = 30.dp
- testSpacingWithInsufficientSpaceImplementation(spacing) { child: @Composable() () -> Unit ->
- TestBox(modifier = Spacing(spacing), body = child)
+ val padding = 30.dp
+ testPaddingWithInsufficientSpaceImplementation(padding) { child: @Composable() () -> Unit ->
+ TestBox(modifier = LayoutPadding(padding), body = child)
}
}
@Test
fun intrinsicMeasurements() = withDensity(density) {
- val spacing = 100.ipx.toDp()
+ val padding = 100.ipx.toDp()
val latch = CountDownLatch(1)
var error: Throwable? = null
testIntrinsics(@Composable {
- TestBox(modifier = Spacing(spacing)) {
- Container(AspectRatio(2f)) { }
+ TestBox(modifier = LayoutPadding(padding)) {
+ Container(LayoutAspectRatio(2f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Spacing is applied on both sides of an axis
- val totalAxisSpacing = (spacing * 2).toIntPx()
+ val totalAxisSpacing = (padding * 2).toIntPx()
- // When the width/height is measured as 3 x the spacing
- val testDimension = (spacing * 3).toIntPx()
- // The actual dimension for the AspectRatio will be: test dimension - total spacing
+ // When the width/height is measured as 3 x the padding
+ val testDimension = (padding * 3).toIntPx()
+ // The actual dimension for the AspectRatio will be: test dimension - total padding
val actualAspectRatioDimension = testDimension - totalAxisSpacing
// When we measure the width first, the height will be half
@@ -132,9 +133,9 @@
// When we measure the height first, the width will be double
val expectedAspectRatioWidth = actualAspectRatioDimension * 2
- // Add back the spacing on both sides to get the total expected height
+ // Add back the padding on both sides to get the total expected height
val expectedTotalHeight = expectedAspectRatioHeight + totalAxisSpacing
- // Add back the spacing on both sides to get the total expected height
+ // Add back the padding on both sides to get the total expected height
val expectedTotalWidth = expectedAspectRatioWidth + totalAxisSpacing
try {
@@ -167,13 +168,13 @@
Unit
}
- private fun testSpacingIsAppliedImplementation(
- spacing: Dp,
- spacingContainer: @Composable() (@Composable() () -> Unit) -> Unit
+ private fun testPaddingIsAppliedImplementation(
+ padding: Dp,
+ paddingContainer: @Composable() (@Composable() () -> Unit) -> Unit
) = withDensity(density) {
val sizeDp = 50.dp
val size = sizeDp.toIntPx()
- val spacingPx = spacing.toIntPx()
+ val paddingPx = padding.toIntPx()
val drawLatch = CountDownLatch(1)
var childSize = PxSize(-1.px, -1.px)
@@ -191,7 +192,7 @@
})
}
}
- spacingContainer(children)
+ paddingContainer(children)
}
}
}
@@ -200,22 +201,22 @@
val root = findAndroidComposeView()
waitForDraw(root)
- val innerSize = (size - spacingPx * 2)
+ val innerSize = (size - paddingPx * 2)
assertEquals(PxSize(innerSize, innerSize), childSize)
- val left = ((root.width.ipx - size) / 2) + spacingPx
- val top = ((root.height.ipx - size) / 2) + spacingPx
+ val left = ((root.width.ipx - size) / 2) + paddingPx
+ val top = ((root.height.ipx - size) / 2) + paddingPx
assertEquals(
PxPosition(left.toPx(), top.toPx()),
childPosition
)
}
- private fun testSpacingWithDifferentInsetsImplementation(
+ private fun testPaddingWithDifferentInsetsImplementation(
left: Dp,
top: Dp,
right: Dp,
bottom: Dp,
- spacingContainer: @Composable() ((@Composable() () -> Unit) -> Unit)
+ paddingContainer: @Composable() ((@Composable() () -> Unit) -> Unit)
) = withDensity(density) {
val sizeDp = 50.dp
val size = sizeDp.toIntPx()
@@ -236,7 +237,7 @@
})
}
}
- spacingContainer(children)
+ paddingContainer(children)
}
}
}
@@ -245,32 +246,32 @@
val root = findAndroidComposeView()
waitForDraw(root)
- val spacingLeft = left.toIntPx()
- val spacingRight = right.toIntPx()
- val spacingTop = top.toIntPx()
- val spacingBottom = bottom.toIntPx()
+ val paddingLeft = left.toIntPx()
+ val paddingRight = right.toIntPx()
+ val paddingTop = top.toIntPx()
+ val paddingBottom = bottom.toIntPx()
assertEquals(
PxSize(
- size - spacingLeft - spacingRight,
- size - spacingTop - spacingBottom
+ size - paddingLeft - paddingRight,
+ size - paddingTop - paddingBottom
),
childSize
)
- val viewLeft = ((root.width.ipx - size) / 2) + spacingLeft
- val viewTop = ((root.height.ipx - size) / 2) + spacingTop
+ val viewLeft = ((root.width.ipx - size) / 2) + paddingLeft
+ val viewTop = ((root.height.ipx - size) / 2) + paddingTop
assertEquals(
PxPosition(viewLeft.toPx(), viewTop.toPx()),
childPosition
)
}
- private fun testSpacingWithInsufficientSpaceImplementation(
- spacing: Dp,
- spacingContainer: @Composable() (@Composable() () -> Unit) -> Unit
+ private fun testPaddingWithInsufficientSpaceImplementation(
+ padding: Dp,
+ paddingContainer: @Composable() (@Composable() () -> Unit) -> Unit
) = withDensity(density) {
val sizeDp = 50.dp
val size = sizeDp.toIntPx()
- val spacingPx = spacing.toIntPx()
+ val paddingPx = padding.toIntPx()
val drawLatch = CountDownLatch(1)
var childSize = PxSize(-1.px, -1.px)
@@ -278,7 +279,7 @@
show {
Center {
ConstrainedBox(constraints = DpConstraints.tightConstraints(sizeDp, sizeDp)) {
- spacingContainer {
+ paddingContainer {
Container {
OnPositioned(onPositioned = { coordinates ->
childSize = coordinates.size
@@ -296,8 +297,8 @@
waitForDraw(root)
assertEquals(PxSize(0.px, 0.px), childSize)
- val left = ((root.width.ipx - size) / 2) + spacingPx
- val top = ((root.height.ipx - size) / 2) + spacingPx
+ val left = ((root.width.ipx - size) / 2) + paddingPx
+ val top = ((root.height.ipx - size) / 2) + paddingPx
assertEquals(PxPosition(left.toPx(), top.toPx()), childPosition)
}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
index d1dd28a..0bcac82 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
@@ -34,7 +34,7 @@
import androidx.ui.layout.EdgeInsets
import androidx.ui.layout.Padding
import androidx.compose.Composable
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -267,7 +267,7 @@
testIntrinsics(@Composable {
Padding(padding = padding) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Padding is applied on both sides of an axis
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt
index fef4e8f..5ec3e40 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt
@@ -29,19 +29,19 @@
import androidx.ui.core.ipx
import androidx.ui.core.withDensity
import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.Height
-import androidx.ui.layout.MaxHeight
-import androidx.ui.layout.MaxSize
-import androidx.ui.layout.MaxWidth
-import androidx.ui.layout.MinHeight
-import androidx.ui.layout.MinSize
-import androidx.ui.layout.MinWidth
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutMaxHeight
+import androidx.ui.layout.LayoutMaxSize
+import androidx.ui.layout.LayoutMaxWidth
+import androidx.ui.layout.LayoutMinHeight
+import androidx.ui.layout.LayoutMinSize
+import androidx.ui.layout.LayoutMinWidth
import androidx.ui.layout.Row
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -64,27 +64,27 @@
Align(alignment = Alignment.TopLeft) {
Column {
Container(
- MaxWidth(sizeDp * 2) wraps MinWidth(sizeDp) wraps Height(sizeDp)
+ LayoutMaxWidth(sizeDp * 2) + LayoutMinWidth(sizeDp) + LayoutHeight(sizeDp)
) {
SaveLayoutInfo(size[0], position[0], positionedLatch)
}
- Container(MaxWidth(sizeDp * 2) wraps Height(sizeDp)) {
+ Container(LayoutMaxWidth(sizeDp * 2) + LayoutHeight(sizeDp)) {
SaveLayoutInfo(size[1], position[1], positionedLatch)
}
- Container(MinWidth(sizeDp) wraps Height(sizeDp)) {
+ Container(LayoutMinWidth(sizeDp) + LayoutHeight(sizeDp)) {
SaveLayoutInfo(size[2], position[2], positionedLatch)
}
Container(
- MaxWidth(sizeDp) wraps MinWidth(sizeDp * 2) wraps Height(sizeDp)
+ LayoutMaxWidth(sizeDp) + LayoutMinWidth(sizeDp * 2) + LayoutHeight(sizeDp)
) {
SaveLayoutInfo(size[3], position[3], positionedLatch)
}
Container(
- MinWidth(sizeDp * 2) wraps MaxWidth(sizeDp) wraps Height(sizeDp)
+ LayoutMinWidth(sizeDp * 2) + LayoutMaxWidth(sizeDp) + LayoutHeight(sizeDp)
) {
SaveLayoutInfo(size[4], position[4], positionedLatch)
}
- Container(Width(sizeDp) wraps Height(sizeDp)) {
+ Container(LayoutWidth(sizeDp) + LayoutHeight(sizeDp)) {
SaveLayoutInfo(size[5], position[5], positionedLatch)
}
}
@@ -123,27 +123,27 @@
Align(alignment = Alignment.TopLeft) {
Row {
Container(
- MaxHeight(sizeDp * 2) wraps MinHeight(sizeDp) wraps Width(sizeDp)
+ LayoutMaxHeight(sizeDp * 2) + LayoutMinHeight(sizeDp) + LayoutWidth(sizeDp)
) {
SaveLayoutInfo(size[0], position[0], positionedLatch)
}
- Container(MaxHeight(sizeDp * 2) wraps Width(sizeDp)) {
+ Container(LayoutMaxHeight(sizeDp * 2) + LayoutWidth(sizeDp)) {
SaveLayoutInfo(size[1], position[1], positionedLatch)
}
- Container(MinHeight(sizeDp) wraps Width(sizeDp)) {
+ Container(LayoutMinHeight(sizeDp) + LayoutWidth(sizeDp)) {
SaveLayoutInfo(size[2], position[2], positionedLatch)
}
Container(
- MaxHeight(sizeDp) wraps MinHeight(sizeDp * 2) wraps Width(sizeDp)
+ LayoutMaxHeight(sizeDp) + LayoutMinHeight(sizeDp * 2) + LayoutWidth(sizeDp)
) {
SaveLayoutInfo(size[3], position[3], positionedLatch)
}
Container(
- MinHeight(sizeDp * 2) wraps MaxHeight(sizeDp) wraps Width(sizeDp)
+ LayoutMinHeight(sizeDp * 2) + LayoutMaxHeight(sizeDp) + LayoutWidth(sizeDp)
) {
SaveLayoutInfo(size[4], position[4], positionedLatch)
}
- Container(Height(sizeDp) wraps Width(sizeDp)) {
+ Container(LayoutHeight(sizeDp) + LayoutWidth(sizeDp)) {
SaveLayoutInfo(size[5], position[5], positionedLatch)
}
}
@@ -182,28 +182,26 @@
Align(alignment = Alignment.TopLeft) {
Row {
Container(
- MaxSize(sizeDp * 2, sizeDp * 2)
- wraps MinSize(sizeDp, sizeDp)
+ LayoutMaxSize(sizeDp * 2, sizeDp * 2) + LayoutMinSize(sizeDp, sizeDp)
) {
SaveLayoutInfo(size[0], position[0], positionedLatch)
}
Container(
- MaxSize(sizeDp, sizeDp) wraps MinSize(sizeDp * 2, sizeDp)
+ LayoutMaxSize(sizeDp, sizeDp) + LayoutMinSize(sizeDp * 2, sizeDp)
) {
SaveLayoutInfo(size[1], position[1], positionedLatch)
}
Container(
- MinSize(sizeDp, sizeDp) wraps MaxSize(sizeDp * 2, sizeDp * 2)
+ LayoutMinSize(sizeDp, sizeDp) + LayoutMaxSize(sizeDp * 2, sizeDp * 2)
) {
SaveLayoutInfo(size[2], position[2], positionedLatch)
}
Container(
- MinSize(sizeDp * 2, sizeDp * 2)
- wraps MaxSize(sizeDp, sizeDp)
+ LayoutMinSize(sizeDp * 2, sizeDp * 2) + LayoutMaxSize(sizeDp, sizeDp)
) {
SaveLayoutInfo(size[3], position[3], positionedLatch)
}
- Container(Size(sizeDp, sizeDp)) {
+ Container(LayoutSize(sizeDp, sizeDp)) {
SaveLayoutInfo(size[4], position[4], positionedLatch)
}
}
@@ -243,7 +241,7 @@
constrainedBoxSize.value = coordinates.size
positionedLatch.countDown()
}) {
- Container(Width(sizeDp * 2) wraps Height(sizeDp * 3)) {
+ Container(LayoutWidth(sizeDp * 2) + LayoutHeight(sizeDp * 3)) {
Container(expanded = true) {
SaveLayoutInfo(
size = childSize,
@@ -274,21 +272,23 @@
show {
Align(alignment = Alignment.TopLeft) {
Row {
- Container(MaxWidth(Dp.Infinity)) {
+ Container(LayoutMaxWidth(Dp.Infinity)) {
Container(width = sizeDp, height = sizeDp) {
SaveLayoutInfo(size[0], position[0], positionedLatch)
}
}
- Container(MaxHeight(Dp.Infinity)) {
+ Container(LayoutMaxHeight(Dp.Infinity)) {
Container(width = sizeDp, height = sizeDp) {
SaveLayoutInfo(size[1], position[1], positionedLatch)
}
}
- Container(Width(sizeDp) wraps Height(sizeDp) wraps MaxWidth(Dp.Infinity)
- wraps MaxHeight(Dp.Infinity)) {
+ Container(
+ LayoutWidth(sizeDp) + LayoutHeight(sizeDp) + LayoutMaxWidth(Dp.Infinity) +
+ LayoutMaxHeight(Dp.Infinity)
+ ) {
SaveLayoutInfo(size[2], position[2], positionedLatch)
}
- Container(MaxSize(Dp.Infinity, Dp.Infinity)) {
+ Container(LayoutMaxSize(Dp.Infinity, Dp.Infinity)) {
Container(width = sizeDp, height = sizeDp) {
SaveLayoutInfo(size[3], position[3], positionedLatch)
}
@@ -307,8 +307,8 @@
@Test
fun testMinWidthModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(MinWidth(10.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutMinWidth(10.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -337,8 +337,8 @@
@Test
fun testMaxWidthModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(MaxWidth(20.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutMaxWidth(20.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -367,8 +367,8 @@
@Test
fun testMinHeightModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(MinHeight(30.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutMinHeight(30.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -397,8 +397,8 @@
@Test
fun testMaxHeightModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(MaxHeight(40.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutMaxHeight(40.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -427,8 +427,8 @@
@Test
fun testWidthModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(Width(10.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutWidth(10.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -457,8 +457,8 @@
@Test
fun testHeightModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(Height(10.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutHeight(10.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -487,9 +487,9 @@
@Test
fun testWidthHeightModifiers_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(MinWidth(10.dp) wraps MaxWidth(20.dp) wraps MinHeight(30.dp) wraps
- MaxHeight(40.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutMinWidth(10.dp) + LayoutMaxWidth(20.dp) + LayoutMinHeight(30.dp) +
+ LayoutMaxHeight(40.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -518,8 +518,8 @@
@Test
fun testMinSizeModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(MinSize(20.dp, 30.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutMinSize(20.dp, 30.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -548,8 +548,8 @@
@Test
fun testMaxSizeModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(MaxSize(40.dp, 50.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutMaxSize(40.dp, 50.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -578,8 +578,8 @@
@Test
fun testSizeModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(Size(40.dp, 50.dp)) {
- Container(AspectRatio(1f)) { }
+ Container(LayoutSize(40.dp, 50.dp)) {
+ Container(LayoutAspectRatio(1f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
index 854f9f5..31f942b 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
@@ -26,10 +26,10 @@
import androidx.ui.layout.Center
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
import com.google.common.truth.Truth
import org.junit.Test
import org.junit.runner.RunWith
@@ -59,7 +59,7 @@
size = position.size
drawLatch.countDown()
}) {
- Spacer(Size(width = width, height = height))
+ Spacer(LayoutSize(width = width, height = height))
}
}
}
@@ -92,7 +92,7 @@
size = position.size
drawLatch.countDown()
}) {
- Spacer(Size(width = width, height = height))
+ Spacer(LayoutSize(width = width, height = height))
}
}
}
@@ -117,7 +117,7 @@
size = position.size
drawLatch.countDown()
}) {
- Spacer(Width(width))
+ Spacer(LayoutWidth(width))
}
}
}
@@ -149,7 +149,7 @@
size = position.size
drawLatch.countDown()
}) {
- Spacer(Width(width))
+ Spacer(LayoutWidth(width))
}
}
}
@@ -174,7 +174,7 @@
size = position.size
drawLatch.countDown()
}) {
- Spacer(Height(height))
+ Spacer(LayoutHeight(height))
}
}
}
@@ -206,7 +206,7 @@
size = position.size
drawLatch.countDown()
}) {
- Spacer(Height(height))
+ Spacer(LayoutHeight(height))
}
}
}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
index b6e3118..7f40c2e 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
@@ -16,9 +16,11 @@
package androidx.ui.layout.test
+import androidx.compose.Composable
import androidx.test.filters.SmallTest
-import androidx.ui.core.OnChildPositioned
+import androidx.ui.core.Alignment
import androidx.ui.core.IntPx
+import androidx.ui.core.OnChildPositioned
import androidx.ui.core.PxPosition
import androidx.ui.core.PxSize
import androidx.ui.core.Ref
@@ -30,14 +32,12 @@
import androidx.ui.layout.ConstrainedBox
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
+import androidx.ui.layout.LayoutAspectRatio
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.LayoutSize
import androidx.ui.layout.Stack
-import androidx.compose.Composable
-import androidx.ui.core.Alignment
-import androidx.ui.layout.AspectRatio
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Size
-import androidx.ui.layout.Spacing
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -65,7 +65,7 @@
positionedLatch.countDown()
}) {
Stack {
- Container(modifier = Gravity.BottomRight, width = sizeDp, height = sizeDp) {
+ Container(LayoutGravity.BottomRight, width = sizeDp, height = sizeDp) {
SaveLayoutInfo(
size = alignedChildSize,
position = alignedChildPosition,
@@ -73,7 +73,7 @@
)
}
- Container(Gravity.Stretch wraps Spacing(10.dp)) {
+ Container(LayoutGravity.Stretch + LayoutPadding(10.dp)) {
SaveLayoutInfo(
size = positionedChildSize,
position = positionedChildPosition,
@@ -112,7 +112,7 @@
}) {
Stack {
Container(
- modifier = Gravity.BottomRight, width = sizeDp, height = sizeDp
+ modifier = LayoutGravity.BottomRight, width = sizeDp, height = sizeDp
) {
SaveLayoutInfo(
size = childSize[0],
@@ -121,7 +121,7 @@
)
}
Container(
- modifier = Gravity.BottomRight,
+ modifier = LayoutGravity.BottomRight,
width = doubleSizeDp,
height = doubleSizeDp
) {
@@ -163,7 +163,7 @@
positionedLatch.countDown()
}) {
Stack {
- Container(modifier = Gravity.Center, width = sizeDp, height = sizeDp) {
+ Container(LayoutGravity.Center, width = sizeDp, height = sizeDp) {
SaveLayoutInfo(
size = childSize[0],
position = childPosition[0],
@@ -171,7 +171,10 @@
)
}
Container(
- Gravity.Stretch wraps Spacing(left = insetDp, top = insetDp),
+ LayoutGravity.Stretch + LayoutPadding(
+ left = insetDp,
+ top = insetDp
+ ),
width = halfSizeDp,
height = halfSizeDp
) {
@@ -182,7 +185,10 @@
)
}
Container(
- Gravity.Stretch wraps Spacing(right = insetDp, bottom = insetDp),
+ LayoutGravity.Stretch + LayoutPadding(
+ right = insetDp,
+ bottom = insetDp
+ ),
width = halfSizeDp,
height = halfSizeDp
) {
@@ -193,7 +199,10 @@
)
}
Container(
- Gravity.Stretch wraps Spacing(right = insetDp, left = insetDp),
+ LayoutGravity.Stretch + LayoutPadding(
+ left = insetDp,
+ right = insetDp
+ ),
width = halfSizeDp,
height = halfSizeDp) {
SaveLayoutInfo(
@@ -203,7 +212,10 @@
)
}
Container(
- Gravity.Stretch wraps Spacing(top = insetDp, bottom = insetDp),
+ LayoutGravity.Stretch + LayoutPadding(
+ top = insetDp,
+ bottom = insetDp
+ ),
width = halfSizeDp,
height = halfSizeDp
) {
@@ -249,9 +261,9 @@
stackSize.value = coordinates.size
positionedLatch.countDown()
}) {
- Container(Size(sizeDp, sizeDp)) {
+ Container(LayoutSize(sizeDp, sizeDp)) {
Stack {
- Container(Expanded) {
+ Container(LayoutExpanded) {
SaveLayoutInfo(
size = childSize[0],
position = childPosition[0],
@@ -259,7 +271,7 @@
)
}
Container(
- Gravity.BottomRight,
+ LayoutGravity.BottomRight,
width = halfSizeDp,
height = halfSizeDp
) {
@@ -296,13 +308,14 @@
testIntrinsics(@Composable {
Stack {
- Container(Gravity.TopLeft wraps AspectRatio(2f)) { }
+ Container(LayoutGravity.TopLeft + LayoutAspectRatio(2f)) { }
ConstrainedBox(
- DpConstraints.tightConstraints(testWidth, testHeight), Gravity.BottomCenter
+ DpConstraints.tightConstraints(testWidth, testHeight),
+ LayoutGravity.BottomCenter
) { }
ConstrainedBox(
DpConstraints.tightConstraints(200.dp, 200.dp),
- Gravity.Stretch wraps Spacing(10.dp)
+ LayoutGravity.Stretch + LayoutPadding(10.dp)
) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -330,7 +343,7 @@
testIntrinsics(@Composable {
Stack {
ConstrainedBox(
- modifier = Gravity.Stretch wraps Spacing(10.dp),
+ modifier = LayoutGravity.Stretch + LayoutPadding(10.dp),
constraints = DpConstraints.tightConstraints(200.dp, 200.dp)
) { }
}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt
index 5beeb0e5..c7f590d7 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt
@@ -31,7 +31,7 @@
import androidx.ui.core.min
import androidx.ui.core.withDensity
import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
import androidx.ui.layout.ConstrainedBox
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
@@ -1309,7 +1309,7 @@
for (i in 0 until rows) {
tableRow {
for (j in 0 until columns) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}
}
@@ -1354,7 +1354,7 @@
for (i in 0 until rows) {
tableRow {
for (j in 0 until columns) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}
}
@@ -1399,7 +1399,7 @@
for (i in 0 until rows) {
tableRow {
for (j in 0 until columns) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}
}
@@ -1444,7 +1444,7 @@
for (i in 0 until rows) {
tableRow {
for (j in 0 until columns) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}
}
@@ -1489,7 +1489,7 @@
for (i in 0 until rows) {
tableRow {
for (j in 0 until columns) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}
}
@@ -1536,7 +1536,7 @@
for (i in 0 until rows) {
tableRow {
for (j in 0 until columns) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}
}
@@ -1581,7 +1581,7 @@
for (i in 0 until rows) {
tableRow {
for (j in 0 until columns) {
- Container(AspectRatio(2f)) { }
+ Container(LayoutAspectRatio(2f)) { }
}
}
}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
index bc36812..d1e7eae 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
@@ -36,10 +36,10 @@
import androidx.ui.core.Layout
import androidx.ui.core.OnPositioned
import androidx.ui.core.enforce
-import androidx.ui.layout.Aligned
-import androidx.ui.layout.AspectRatio
-import androidx.ui.layout.Size
-import androidx.ui.layout.Wrapped
+import androidx.ui.layout.LayoutAlign
+import androidx.ui.layout.LayoutAspectRatio
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWrapped
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -91,12 +91,12 @@
val positionedLatch = CountDownLatch(2)
val wrapSize = Ref<PxSize>()
show {
- Container(Wrapped) {
+ Container(LayoutWrapped) {
OnPositioned(onPositioned = { coordinates ->
wrapSize.value = coordinates.size
positionedLatch.countDown()
})
- Container(Size(sizeDp, sizeDp)) { }
+ Container(LayoutSize(sizeDp, sizeDp)) { }
}
}
positionedLatch.await(1, TimeUnit.SECONDS)
@@ -156,14 +156,14 @@
val childSize = Ref<PxSize>()
val childPosition = Ref<PxPosition>()
show {
- Container(Aligned.TopLeft) {
+ Container(LayoutAlign.TopLeft) {
OnChildPositioned(onPositioned = { coordinates ->
wrapSize.value = coordinates.size
positionedLatch.countDown()
}) {
Layout(
children = {
- Container(Wrapped wraps Size(sizeDp, sizeDp)) {
+ Container(LayoutWrapped + LayoutSize(sizeDp, sizeDp)) {
SaveLayoutInfo(
size = childSize,
position = childPosition,
@@ -242,7 +242,7 @@
fun testWrap_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
Wrap {
- Container(modifier = AspectRatio(2f)) { }
+ Container(modifier = LayoutAspectRatio(2f)) { }
}
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
@@ -263,7 +263,7 @@
@Test
fun testWrappedModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
- Container(modifier = AspectRatio(2f) wraps Wrapped) { }
+ Container(modifier = LayoutAspectRatio(2f) + LayoutWrapped) { }
}) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
// Min width.
assertEquals(25.dp.toIntPx() * 2, minIntrinsicWidth(25.dp.toIntPx()))
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
index 1ef4221..8beb58b 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
@@ -93,9 +93,9 @@
/**
* Provides scope-dependent alignment options for children layouts where the alignment is handled
* by the parent layout rather than the child itself. Different layout models allow different
- * [Gravity] options. For example, [Row] provides Top and Bottom, while [Column] provides
+ * [LayoutGravity] options. For example, [Row] provides Top and Bottom, while [Column] provides
* Start and End.
- * Unlike [Aligned], layout children with [Gravity] are aligned only after the size
+ * Unlike [LayoutAlign], layout children with [LayoutGravity] are aligned only after the size
* of the parent is known, therefore not affecting the size of the parent in order to achieve
* their own alignment.
*
@@ -105,7 +105,7 @@
*
* @sample androidx.ui.layout.samples.SimpleGravityInColumn
*/
-object Gravity
+object LayoutGravity
/**
* Provides alignment options for a target layout where the alignment is handled by the modifier
@@ -118,7 +118,7 @@
* @sample androidx.ui.layout.samples.SimpleAlignedModifier
* @sample androidx.ui.layout.samples.SimpleVerticallyAlignedModifier
*/
-object Aligned {
+object LayoutAlign {
/**
* A layout modifier that positions the target component inside its parent to the top in
* vertical direction and wraps the component in horizontal direction.
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
index 76529d1..d39f868 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
@@ -45,20 +45,14 @@
* Example usage:
* @sample androidx.ui.layout.samples.SimpleAspectRatio
*
- * @param value A positive non-zero value representing the aspect ratio.
+ * @param aspectRatio A positive non-zero value representing the aspect ratio.
*/
-fun AspectRatio(
- @FloatRange(from = 0.0, fromInclusive = false) value: Float
-): LayoutModifier = AspectRatioModifier(value)
-
-/**
- * A [LayoutModifier] that applies an aspect ratio to the wrapped UI element's size.
- */
-private data class AspectRatioModifier(val aspectRatio: Float) : LayoutModifier {
+data class LayoutAspectRatio(
+ @FloatRange(from = 0.0, fromInclusive = false)
+ val aspectRatio: Float
+) : LayoutModifier {
init {
- require(aspectRatio > 0) {
- "Received aspect ratio value $aspectRatio is expected to be positive non-zero."
- }
+ require(aspectRatio > 0) { "aspectRatio $aspectRatio must be > 0" }
}
override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt
index 3d70787..6d24e01 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt
@@ -29,7 +29,7 @@
* Example usage:
* @sample androidx.ui.layout.samples.SimpleExpandedWidthModifier
*/
-val ExpandedWidth: LayoutModifier = object : LayoutModifier {
+val LayoutExpandedWidth: LayoutModifier = object : LayoutModifier {
override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
return if (constraints.hasBoundedWidth) {
constraints.withTight(width = constraints.maxWidth)
@@ -45,7 +45,7 @@
* Example usage:
* @sample androidx.ui.layout.samples.SimpleExpandedHeightModifier
*/
-val ExpandedHeight: LayoutModifier = object : LayoutModifier {
+val LayoutExpandedHeight: LayoutModifier = object : LayoutModifier {
override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
return if (constraints.hasBoundedHeight) {
constraints.withTight(height = constraints.maxHeight)
@@ -61,7 +61,7 @@
* Example usage:
* @sample androidx.ui.layout.samples.SimpleExpandedModifier
*/
-val Expanded: LayoutModifier = object : LayoutModifier {
+val LayoutExpanded: LayoutModifier = object : LayoutModifier {
override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
return if (constraints.hasBoundedWidth && constraints.hasBoundedHeight) {
Constraints.tightConstraints(constraints.maxWidth, constraints.maxHeight)
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
index 3f4a401..77d4155 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
@@ -171,11 +171,11 @@
* A layout modifier within a [Column] or [Row] that makes the target component flexible.
* It will be assigned a space according to its flex weight relative to the flexible siblings.
* When [tight] is set to true, the target component is forced to occupy the entire space
- * assigned to it by the parent. [Flexible] children will be measured after all the
- * [Inflexible] ones have been measured, in order to divide the unclaimed space between
+ * assigned to it by the parent. [LayoutFlexible] children will be measured after all the
+ * [LayoutInflexible] ones have been measured, in order to divide the unclaimed space between
* them.
*/
- fun Flexible(
+ fun LayoutFlexible(
@FloatRange(from = 0.0, fromInclusive = false) flex: Float,
tight: Boolean = true
): LayoutModifier {
@@ -189,15 +189,15 @@
/**
* A layout modifier within a [Column] or [Row] that makes the target component inflexible.
- * All [Inflexible] children will be measured before the [Flexible] ones. They will be
- * measured in the order they appear, without min constraints and with max constraints in
+ * All [LayoutInflexible] children will be measured before the [LayoutFlexible] ones. They will
+ * be measured in the order they appear, without min constraints and with max constraints in
* the main direction of the layout (maxHeight for Column and maxWidth for Row) such that
* the sum of the space occupied by inflexible children will not exceed the incoming constraint
* of the [Column] or [Row]: for example the first child of a [Column] will be measured with
* maxHeight = column's maxHeight; the second child will be measured with maxHeight = column's
* maxHeight - first child's height, and so on.
*/
- val Inflexible: LayoutModifier = inflexibleModifier
+ val LayoutInflexible: LayoutModifier = inflexibleModifier
internal companion object {
val inflexibleModifier: LayoutModifier = FlexModifier(
@@ -211,13 +211,14 @@
* [alignmentLineBlock].
* If target component is the only component with the specified RelativeToSiblings modifier
* within a Column or Row, then the component will be positioned using
- * [ColumnScope.Gravity.Start] in Column or [RowScope.Gravity.Top] in Row respectively.
+ * [LayoutGravity.Start][ColumnScope.Start] in Column or [LayoutGravity.Top][RowScope.Top] in
+ * Row respectively.
*
* Example usage:
* @sample androidx.ui.layout.samples.SimpleRelativeToSiblings
*/
@Suppress("unused")
- fun Gravity.RelativeToSiblings(alignmentLineBlock: (Placeable) -> IntPx): LayoutModifier =
+ fun LayoutGravity.RelativeToSiblings(alignmentLineBlock: (Placeable) -> IntPx): LayoutModifier =
SiblingsAlignedModifier.WithAlignmentLineBlock(alignmentLineBlock)
}
@@ -231,29 +232,29 @@
* so that its start edge is aligned to the start edge of the horizontal axis.
*/
// TODO: Consider ltr/rtl.
- val Gravity.Start: LayoutModifier get() = StartGravityModifier
+ val LayoutGravity.Start: LayoutModifier get() = StartGravityModifier
/**
* A layout modifier within a Column that positions target component in a horizontal direction
* so that its center is in the middle of the horizontal axis.
*/
- val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+ val LayoutGravity.Center: LayoutModifier get() = CenterGravityModifier
/**
* A layout modifier within a Column that positions target component in a horizontal direction
* so that its end edge is aligned to the end edge of the horizontal axis.
*/
- val Gravity.End: LayoutModifier get() = EndGravityModifier
+ val LayoutGravity.End: LayoutModifier get() = EndGravityModifier
/**
* A layout modifier within a [Column] that positions target component in a perpendicular
* direction according to the [AlignmentLine].
* If target component is the only component within a Column with the specified
* RelativeToSiblings modifier, or if the provided alignment line is not defined for the
- * component, the component will be positioned using [Gravity.Start].
+ * component, the component will be positioned using [LayoutGravity.Start].
*
* Example usage:
*
* @sample androidx.ui.layout.samples.SimpleRelativeToSiblingsInColumn
*/
- fun Gravity.RelativeToSiblings(alignmentLine: VerticalAlignmentLine): LayoutModifier =
+ fun LayoutGravity.RelativeToSiblings(alignmentLine: VerticalAlignmentLine): LayoutModifier =
SiblingsAlignedModifier.WithAlignmentLine(alignmentLine)
internal companion object {
@@ -272,28 +273,28 @@
* A layout modifier within a Row that positions target component in a vertical direction
* so that its top edge is aligned to the top edge of the vertical axis.
*/
- val Gravity.Top: LayoutModifier get() = TopGravityModifier
+ val LayoutGravity.Top: LayoutModifier get() = TopGravityModifier
/**
* A layout modifier within a Row that positions target component in a vertical direction
* so that its center is in the middle of the vertical axis.
*/
- val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+ val LayoutGravity.Center: LayoutModifier get() = CenterGravityModifier
/**
* A layout modifier within a Row that positions target component in a vertical direction
* so that its bottom edge is aligned to the bottom edge of the vertical axis.
*/
- val Gravity.Bottom: LayoutModifier get() = BottomGravityModifier
+ val LayoutGravity.Bottom: LayoutModifier get() = BottomGravityModifier
/**
* A layout modifier within a [Row] that positions target component in a perpendicular
* direction according to the [AlignmentLine].
* If target component is the only component within a Row with the specified
* RelativeToSiblings modifier, or if the provided alignment line is not defined for the
- * component, the component will be positioned using [Gravity.Top].
+ * component, the component will be positioned using [LayoutGravity.Top].
*
* Example usage:
* @sample androidx.ui.layout.samples.SimpleRelativeToSiblingsInRow
*/
- fun Gravity.RelativeToSiblings(alignmentLine: HorizontalAlignmentLine): LayoutModifier =
+ fun LayoutGravity.RelativeToSiblings(alignmentLine: HorizontalAlignmentLine): LayoutModifier =
SiblingsAlignedModifier.WithAlignmentLine(alignmentLine)
internal companion object {
@@ -305,9 +306,9 @@
/**
* A composable that places its children in a horizontal sequence and is able to assign them widths
- * according to their flex weights provided through [androidx.ui.layout.FlexScope.Flexible]
+ * according to their flex weights provided through [androidx.ui.layout.FlexScope.LayoutFlexible]
* modifier.
- * If [androidx.ui.layout.FlexScope.Inflexible] or no modifier is provided, the child will be
+ * If [androidx.ui.layout.FlexScope.LayoutInflexible] or no modifier is provided, the child will be
* treated as inflexible, and will be sized to its preferred width.
*
* Example usage:
@@ -335,9 +336,9 @@
/**
* A composable that places its children in a vertical sequence and is able to assign them heights
- * according to their flex weights provided through [androidx.ui.layout.FlexScope.Flexible]
+ * according to their flex weights provided through [androidx.ui.layout.FlexScope.LayoutFlexible]
* modifiers.
- * If [androidx.ui.layout.FlexScope.Inflexible] or no modifier is provided, the child will be
+ * If [androidx.ui.layout.FlexScope.LayoutInflexible] or no modifier is provided, the child will be
* treated as inflexible, and will be sized to its preferred height.
*
* Example usage:
@@ -376,6 +377,7 @@
/**
* Used to specify how a layout chooses its own size when multiple behaviors are possible.
*/
+// TODO Rename? Layout prefix should be reserved for LayoutModifiers.
enum class LayoutSize {
/**
* Minimize the amount of free space by wrapping the children,
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
index b3ac166..bcdcc16 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
@@ -165,13 +165,13 @@
*
* @sample androidx.ui.layout.samples.MatchParentDividerForAspectRatio
*
- * The sample builds a layout containing two [AspectRatio]s separated by a divider, where the
- * divider is sized according to the height of the taller [AspectRatio].
+ * The sample builds a layout containing two [LayoutAspectRatio]s separated by a divider, where the
+ * divider is sized according to the height of the taller [LayoutAspectRatio].
*
* Here [MaxIntrinsicHeight] is adding a speculative height measurement pass for the [FlexRow],
- * whose maximum intrinsic height will correspond to the height of the taller [AspectRatio]. Then
+ * whose maximum intrinsic height will correspond to the height of the taller [LayoutAspectRatio]. Then
* [MaxIntrinsicHeight] will measure the [FlexRow] with tight height, the same as the premeasured
- * maximum intrinsic height, which due to [CrossAxisAlignment.Stretch] will force the [AspectRatio]s
+ * maximum intrinsic height, which due to [CrossAxisAlignment.Stretch] will force the [LayoutAspectRatio]s
* and the divider to use the same height.
*/
@Composable
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacing.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
similarity index 85%
rename from ui/ui-layout/src/main/java/androidx/ui/layout/Spacing.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
index ff997af..599d57a 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacing.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
@@ -33,31 +33,57 @@
* Layout modifier that applies whitespace spacing on specified sides of the target layout.
*
* Example usage:
- * @sample androidx.ui.layout.samples.SpacingModifier
+ * @sample androidx.ui.layout.samples.LayoutPaddingModifier
*/
+@Deprecated(
+ "use LayoutPadding",
+ replaceWith = ReplaceWith(
+ "LayoutPadding(left, top, right, bottom)",
+ "androidx.ui.layout.LayoutPadding"
+ )
+)
fun Spacing(
left: Dp = 0.dp,
top: Dp = 0.dp,
right: Dp = 0.dp,
bottom: Dp = 0.dp
-): LayoutModifier = SpacingModifier(left = left, top = top, right = right, bottom = bottom)
+): LayoutModifier = LayoutPadding(left = left, top = top, right = right, bottom = bottom)
/**
* Layout modifier that applies the same whitespace spacing of [all] dp on each side
* of the target layout.
*
* Example usage:
- * @sample androidx.ui.layout.samples.SpacingAllModifier
+ * @sample androidx.ui.layout.samples.LayoutPaddingAllModifier
*/
+@Deprecated(
+ "use LayoutPadding",
+ replaceWith = ReplaceWith(
+ "LayoutPadding(all)",
+ "androidx.ui.layout.LayoutPadding"
+ )
+)
fun Spacing(all: Dp = 0.dp): LayoutModifier =
- SpacingModifier(left = all, top = all, right = all, bottom = all)
+ LayoutPadding(left = all, top = all, right = all, bottom = all)
+
+/**
+ * Layout modifier that applies the same padding of [all] dp on each side of the target layout.
+ *
+ * Example usage:
+ * @sample androidx.ui.layout.samples.LayoutPaddingAllModifier
+ */
+fun LayoutPadding(all: Dp): LayoutPadding = LayoutPadding(
+ left = all,
+ top = all,
+ right = all,
+ bottom = all
+)
/**
* A [LayoutModifier] that adds [left], [top], [right] and [bottom] padding
* to the wrapped layout.
- * Used as shared implementation for the [Spacing] overloads.
*/
-private data class SpacingModifier(
+data class LayoutPadding(
val left: Dp = 0.dp,
val top: Dp = 0.dp,
val right: Dp = 0.dp,
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt
index f98cec6..c480ee4 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt
@@ -31,10 +31,10 @@
*
* @sample androidx.ui.layout.samples.SimpleSizeModifier
*
- * If the [Size] modifier's target layout is measured with constraints that do not allow the
+ * If the [LayoutSize] modifier's target layout is measured with constraints that do not allow the
* specified width and/or height, the size will be coerced inside the incoming constraints.
*/
-fun Size(width: Dp, height: Dp): LayoutModifier {
+fun LayoutSize(width: Dp, height: Dp): LayoutModifier {
require(width.isFinite() && height.isFinite()) {
"Width and height parameters should be finite."
}
@@ -44,11 +44,11 @@
/**
* A layout modifier that sets the minimum width and height of the component.
*
- * If the [MinSize] modifier's target layout is measured with constraints that do not allow the
- * specified minimum width and/or height, the minimum size will be coerced inside the incoming
+ * If the [LayoutMinSize] modifier's target layout is measured with constraints that do not allow
+ * the specified minimum width and/or height, the minimum size will be coerced inside the incoming
* constraints.
*/
-fun MinSize(minWidth: Dp, minHeight: Dp): LayoutModifier {
+fun LayoutMinSize(minWidth: Dp, minHeight: Dp): LayoutModifier {
require(minWidth.isFinite() && minHeight.isFinite()) {
"MinWidth and minHeight parameters should be finite."
}
@@ -58,11 +58,11 @@
/**
* A layout modifier that sets the maximum width and height of the component.
*
- * If the [MaxSize] modifier's target layout is measured with constraints that do not allow the
- * specified maximum width and/or height, the maximum size will be coerced inside the incoming
+ * If the [LayoutMaxSize] modifier's target layout is measured with constraints that do not allow
+ * the specified maximum width and/or height, the maximum size will be coerced inside the incoming
* constraints.
*/
-fun MaxSize(maxWidth: Dp, maxHeight: Dp): LayoutModifier =
+fun LayoutMaxSize(maxWidth: Dp, maxHeight: Dp): LayoutModifier =
SizeModifier(DpConstraints(maxWidth = maxWidth, maxHeight = maxHeight))
/**
@@ -70,10 +70,10 @@
*
* @sample androidx.ui.layout.samples.SimpleWidthModifier
*
- * If the [Width] modifier's target layout is measured with constraints that do not allow the
+ * If the [LayoutWidth] modifier's target layout is measured with constraints that do not allow the
* specified width, the width will be coerced inside the incoming constraints.
*/
-fun Width(value: Dp): LayoutModifier {
+fun LayoutWidth(value: Dp): LayoutModifier {
require(value.isFinite()) { "Width value parameter should be finite." }
return SizeModifier(DpConstraints.tightConstraintsForWidth(value))
}
@@ -81,10 +81,11 @@
/**
* A layout modifier that sets the minimum width of the component.
*
- * If the [MinWidth] modifier's target layout is measured with constraints that do not allow the
- * specified minimum width, the minimum width will be coerced inside the incoming constraints.
+ * If the [LayoutMinWidth] modifier's target layout is measured with constraints that do not
+ * allow the specified minimum width, the minimum width will be coerced inside the incoming
+ * constraints.
*/
-fun MinWidth(value: Dp): LayoutModifier {
+fun LayoutMinWidth(value: Dp): LayoutModifier {
require(value.isFinite()) { "MinWidth value parameter should be finite." }
return SizeModifier(DpConstraints(minWidth = value))
}
@@ -92,20 +93,21 @@
/**
* A layout modifier that sets the maximum width of the component.
*
- * If the [MaxWidth] modifier's target layout is measured with constraints that do not allow the
- * specified maximum width, the maximum width will be coerced inside the incoming constraints.
+ * If the [LayoutMaxWidth] modifier's target layout is measured with constraints that do not
+ * allow the specified maximum width, the maximum width will be coerced inside the incoming
+ * constraints.
*/
-fun MaxWidth(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxWidth = value))
+fun LayoutMaxWidth(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxWidth = value))
/**
* A layout modifier that sets the exact height of the component.
*
* @sample androidx.ui.layout.samples.SimpleHeightModifier
*
- * If the [Height] modifier's target layout is measured with constraints that do not allow the
+ * If the [LayoutHeight] modifier's target layout is measured with constraints that do not allow the
* specified height, the height will be coerced inside the incoming constraints.
*/
-fun Height(value: Dp): LayoutModifier {
+fun LayoutHeight(value: Dp): LayoutModifier {
require(value.isFinite()) { "Height value parameter should be finite." }
return SizeModifier(DpConstraints.tightConstraintsForHeight(value))
}
@@ -113,10 +115,11 @@
/**
* A layout modifier that sets the minimum height of the component.
*
- * If the [MinHeight] modifier's target layout is measured with constraints that do not allow the
- * specified minimum height, the minimum height will be coerced inside the incoming constraints.
+ * If the [LayoutMinHeight] modifier's target layout is measured with constraints that do not
+ * allow the specified minimum height, the minimum height will be coerced inside the incoming
+ * constraints.
*/
-fun MinHeight(value: Dp): LayoutModifier {
+fun LayoutMinHeight(value: Dp): LayoutModifier {
require(value.isFinite()) { "MinHeight value parameter should be finite." }
return SizeModifier(DpConstraints(minHeight = value))
}
@@ -124,10 +127,11 @@
/**
* A layout modifier that sets the maximum height of the component.
*
- * If the [MaxHeight] modifier's target layout is measured with constraints that do not allow the
- * specified maximum height, the maximum height will be coerced inside the incomingL constraints.
+ * If the [LayoutMaxHeight] modifier's target layout is measured with constraints that do not
+ * allow the specified maximum height, the maximum height will be coerced inside the incoming
+ * constraints.
*/
-fun MaxHeight(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxHeight = value))
+fun LayoutMaxHeight(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxHeight = value))
private data class SizeModifier(private val modifierConstraints: DpConstraints) : LayoutModifier {
override fun DensityScope.modifyConstraints(constraints: Constraints) =
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
index 170b457..565687c 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
@@ -20,8 +20,8 @@
import androidx.ui.core.Modifier
/**
- * Component that represents an empty space layout, whose size can be defined using the [Width],
- * [Height] and [Size] modifiers.
+ * Component that represents an empty space layout, whose size can be defined using the [LayoutWidth],
+ * [LayoutHeight] and [LayoutSize] modifiers.
*
* @sample androidx.ui.layout.samples.SpacerExample
*
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
index 0272b7c..2895bd3 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
@@ -35,7 +35,7 @@
* A composable that positions its children relative to its edges.
* The component is useful for drawing children that overlap. The children will always be
* drawn in the order they are specified in the body of the [Stack].
- * Use [Gravity] options to define how to position a target component inside the [Stack] box.
+ * Use [LayoutGravity] options to define how to position a target component inside the [Stack] box.
*
* Example usage:
*
@@ -102,28 +102,28 @@
* size of the [Stack] and are positioned within the stack after its size is calculated to
* wrap the non-stretch components.
*/
- val Gravity.Stretch: LayoutModifier get() = StretchGravityModifier
+ val LayoutGravity.Stretch: LayoutModifier get() = StretchGravityModifier
/**
* A layout modifier that defines that child should be positioned top-left inside the [Stack].
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.TopLeft: LayoutModifier get() = TopLeftGravityModifier
+ val LayoutGravity.TopLeft: LayoutModifier get() = TopLeftGravityModifier
/**
* A layout modifier that defines that child should be positioned top-center inside the [Stack].
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.TopCenter: LayoutModifier get() = TopCenterGravityModifier
+ val LayoutGravity.TopCenter: LayoutModifier get() = TopCenterGravityModifier
/**
* A layout modifier that defines that child should be positioned top-right inside the [Stack].
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.TopRight: LayoutModifier get() = TopRightGravityModifier
+ val LayoutGravity.TopRight: LayoutModifier get() = TopRightGravityModifier
/**
* A layout modifier that defines that child should be positioned center-left inside the
@@ -131,14 +131,14 @@
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.CenterLeft: LayoutModifier get() = CenterLeftGravityModifier
+ val LayoutGravity.CenterLeft: LayoutModifier get() = CenterLeftGravityModifier
/**
* A layout modifier that defines that child should be positioned in the center of the [Stack].
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+ val LayoutGravity.Center: LayoutModifier get() = CenterGravityModifier
/**
* A layout modifier that defines that child should be positioned center-right inside the
@@ -146,7 +146,7 @@
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.CenterRight: LayoutModifier get() = CenterRightGravityModifier
+ val LayoutGravity.CenterRight: LayoutModifier get() = CenterRightGravityModifier
/**
* A layout modifier that defines that child should be positioned bottom-left inside the
@@ -154,7 +154,7 @@
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.BottomLeft: LayoutModifier get() = BottomLeftGravityModifier
+ val LayoutGravity.BottomLeft: LayoutModifier get() = BottomLeftGravityModifier
/**
* A layout modifier that defines that child should be positioned bottom-center inside the
@@ -162,7 +162,7 @@
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.BottomCenter: LayoutModifier get() = BottomCenterGravityModifier
+ val LayoutGravity.BottomCenter: LayoutModifier get() = BottomCenterGravityModifier
/**
* A layout modifier that defines that child should be positioned bottom-right inside the
@@ -170,7 +170,7 @@
* If the [Stack] wraps its content (by not being constrained to a min size by its own
* parent), a child with this gravity option will contribute to the size of the [Stack].
*/
- val Gravity.BottomRight: LayoutModifier get() = BottomRightGravityModifier
+ val LayoutGravity.BottomRight: LayoutModifier get() = BottomRightGravityModifier
internal companion object {
val TopLeftGravityModifier: LayoutModifier = StackGravityModifier(Alignment.TopLeft)
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
index bcec4fe..aff79be 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
@@ -66,7 +66,7 @@
* the target layout is smaller than the incoming min constraints, the modified component will
* size itself to min incoming constraints and place its content in the center.
*/
-val Wrapped: LayoutModifier = object : LayoutModifier {
+val LayoutWrapped: LayoutModifier = object : LayoutModifier {
override fun DensityScope.modifyConstraints(constraints: Constraints) = constraints.looseMin()
override fun DensityScope.modifySize(
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
index 69edd80..0ccf58b 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
@@ -26,7 +26,7 @@
import androidx.ui.layout.Arrangement
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
import androidx.ui.layout.FlexColumn
import androidx.ui.material.MaterialTheme
import androidx.ui.material.RadioGroup
@@ -89,7 +89,7 @@
}
}
flexible(1f) {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceBetween) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceBetween) {
DemoText("TopAppBar options")
RadioGroup {
topAppBarOptions.forEach { topAppBar ->
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
index ffe2ce7..0db0e03 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
@@ -38,7 +38,7 @@
import androidx.ui.layout.Arrangement
import androidx.ui.layout.Center
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
import androidx.ui.material.Button
import androidx.ui.material.ContainedButtonStyle
import androidx.ui.material.MaterialTheme
@@ -53,7 +53,7 @@
override fun materialContent() {
val onClick: () -> Unit = { Log.e("ButtonDemo", "onClick") }
Center {
- Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
ContainedButtonSample(onClick)
OutlinedButtonSample(onClick)
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
index 49cc2a5..c1998ad 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
@@ -24,7 +24,7 @@
import androidx.ui.foundation.shape.GenericShape
import androidx.ui.foundation.shape.border.Border
import androidx.ui.graphics.Color
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
import androidx.ui.layout.Spacer
import androidx.ui.layout.Wrap
import androidx.ui.material.Button
@@ -48,7 +48,7 @@
border = Border(Color.DarkGray, 1.dp)
)
) {
- Spacer(Size(100.dp, 100.dp))
+ Spacer(LayoutSize(100.dp, 100.dp))
}
}
}
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
index badd47c..675d246 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
@@ -25,11 +25,11 @@
import androidx.ui.layout.Column
import androidx.ui.layout.Container
import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
import androidx.ui.layout.Row
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
import androidx.ui.material.Divider
import androidx.ui.material.MaterialTheme
@@ -61,9 +61,9 @@
}
}
}
- Spacer(Height(30.dp))
+ Spacer(LayoutHeight(30.dp))
Divider(height = 2.dp, color = blackColor)
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
Column {
items.forEach { text ->
Item(text = text)
@@ -84,11 +84,11 @@
width = avatarSize,
height = avatarSize,
color = color,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
- Spacer(Width(ItemPadding))
+ Spacer(LayoutWidth(ItemPadding))
}
- Text(text = text, style = textStyle, modifier = Gravity.Center)
+ Text(text = text, style = textStyle, modifier = LayoutGravity.Center)
}
}
}
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
index ec30f46..53ab4b0 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
@@ -36,11 +36,11 @@
import androidx.ui.graphics.toArgb
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.FlexColumn
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
import androidx.ui.layout.Padding
import androidx.ui.layout.Stack
@@ -92,8 +92,8 @@
@Composable
private fun DynamicThemeApp(scrollFraction: ScrollFraction, palette: ColorPalette) {
MaterialTheme(palette) {
- Stack(Expanded) {
- FlexColumn(Expanded) {
+ Stack(LayoutExpanded) {
+ FlexColumn(LayoutExpanded) {
inflexible {
TopBar()
}
@@ -104,7 +104,7 @@
}
}
}
- Container(Gravity.BottomCenter) {
+ Container(LayoutGravity.BottomCenter) {
BottomBar(scrollFraction)
}
}
@@ -147,7 +147,7 @@
val shapeColor = lerp(Color(0xFF303030), Color.White, index / 19f)
val textColor = lerp(Color.White, Color(0xFF303030), index / 19f)
Padding(25.dp) {
- Container(ExpandedWidth, height = 150.dp) {
+ Container(LayoutExpandedWidth, height = 150.dp) {
// TODO: ideally this would be a Card but currently Surface consumes every
// colour from the Material theme to work out text colour, so we end up doing a
// large amount of work here when the top level theme changes
@@ -156,7 +156,7 @@
}
}
}
- Spacer(Height(100.dp))
+ Spacer(LayoutHeight(100.dp))
}
}
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
index 3e5b000..b042402 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
@@ -22,8 +22,8 @@
import androidx.ui.layout.Arrangement
import androidx.ui.layout.Center
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutGravity
import androidx.ui.material.FloatingActionButton
class FloatingActionButtonActivity : MaterialDemoActivity() {
@@ -33,17 +33,18 @@
val icon = imageFromResource(resources, R.drawable.ic_favorite)
Center {
val onClick: () -> Unit = { Log.e("FABDemo", "onClick") }
- Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
- FloatingActionButton(icon = icon, onClick = onClick, modifier = Gravity.Center)
+ Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+ FloatingActionButton(icon = icon, onClick = onClick,
+ modifier = LayoutGravity.Center)
FloatingActionButton(
text = "EXTENDED",
onClick = onClick,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
FloatingActionButton(
icon = icon, text = "ADD TO FAVS",
onClick = onClick,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
}
}
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
index 1c8461d..f7e5928 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
@@ -24,7 +24,7 @@
import androidx.compose.unaryPlus
import androidx.ui.graphics.Color
import androidx.ui.layout.Arrangement
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.FlexColumn
import androidx.ui.layout.MainAxisAlignment
import androidx.ui.layout.Row
@@ -87,12 +87,12 @@
FlexColumn(mainAxisAlignment = MainAxisAlignment.Center) {
expanded(flex = 1f) {
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
// Determinate indicators
LinearProgressIndicator(progress = state.progress)
CircularProgressIndicator(progress = state.progress)
}
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
// Fancy colours!
LinearProgressIndicator(progress = (state.progress), color = state.generateColor())
CircularProgressIndicator(
@@ -100,7 +100,7 @@
color = state.generateColor()
)
}
- Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+ Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
// Indeterminate indicators
LinearProgressIndicator()
CircularProgressIndicator()
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt
index e800d8f..b550f41 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt
@@ -20,15 +20,15 @@
import androidx.ui.core.Text
import androidx.ui.core.dp
import androidx.ui.layout.Column
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutPadding
import androidx.ui.material.samples.SimpleSnackbar
import androidx.ui.material.samples.SlotsSnackbar
class SnackbarActivity : MaterialDemoActivity() {
@Composable
override fun materialContent() {
- Column(Spacing(left = 12.dp, right = 12.dp)) {
- val textSpacing = Spacing(top = 12.dp, bottom = 12.dp)
+ Column(LayoutPadding(left = 12.dp, right = 12.dp)) {
+ val textSpacing = LayoutPadding(top = 12.dp, bottom = 12.dp)
Text("Default Snackbar", modifier = textSpacing)
SimpleSnackbar()
Text(
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
index 9740c08..0baff99 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
@@ -25,9 +25,9 @@
import androidx.ui.core.setContent
import androidx.ui.foundation.VerticalScroller
import androidx.ui.layout.Column
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutPadding
import androidx.ui.layout.Spacer
-import androidx.ui.layout.Spacing
import androidx.ui.material.Tab
import androidx.ui.material.TabRow
import androidx.ui.material.studies.Scaffold
@@ -65,11 +65,11 @@
@Composable
fun RallyBody() {
VerticalScroller {
- Column(modifier = Spacing(16.dp)) {
+ Column(modifier = LayoutPadding(16.dp)) {
RallyAlertCard()
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
RallyAccountsOverviewCard()
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
RallyBillsOverviewCard()
}
}
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
index cb1c976..249f41a 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
@@ -23,8 +23,8 @@
import androidx.ui.foundation.shape.RectangleShape
import androidx.ui.layout.Column
import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutPadding
import androidx.ui.material.AlertDialog
import androidx.ui.material.Button
import androidx.ui.material.Divider
@@ -45,14 +45,14 @@
val style = TextButtonStyle(RectangleShape).copy(paddings = EdgeInsets(16.dp))
Column {
Divider(
- Spacing(left = 12.dp, right = 12.dp),
+ LayoutPadding(left = 12.dp, right = 12.dp),
color = (+MaterialTheme.colors()).onSurface.copy(alpha = 0.2f)
)
Button(
text = buttonText,
onClick = onDismiss,
style = style,
- modifier = ExpandedWidth
+ modifier = LayoutExpandedWidth
)
}
}
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
index bfa7156..f83a4f7 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
@@ -28,16 +28,16 @@
import androidx.ui.layout.Arrangement
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Size
-import androidx.ui.layout.Spacer
import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
import androidx.ui.layout.Row
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.Spacer
import androidx.ui.layout.Stack
-import androidx.ui.layout.Width
import androidx.ui.material.Button
import androidx.ui.material.Divider
import androidx.ui.material.MaterialTheme
@@ -69,7 +69,7 @@
Clickable(onClick = { openDialog.value = true }) {
Container {
Row(
- modifier = Spacing(12.dp) wraps ExpandedWidth,
+ modifier = LayoutPadding(12.dp) + LayoutExpandedWidth,
arrangement = Arrangement.SpaceBetween
) {
Text(text = "Alerts", style = (+MaterialTheme.typography()).subtitle2)
@@ -79,17 +79,17 @@
}
}
Divider(
- Spacing(left = 12.dp, right = 12.dp),
+ LayoutPadding(left = 12.dp, right = 12.dp),
color = (+MaterialTheme.colors()).background,
height = 2.dp
)
Ripple(bounded = true) {
Clickable(onClick = { openDialog.value = true }) {
Container {
- Row(Spacing(12.dp)) {
+ Row(LayoutPadding(12.dp)) {
Text(
style = (+MaterialTheme.typography()).body1,
- modifier = Flexible(1f),
+ modifier = LayoutFlexible(1f),
text = alertMessage
)
// TODO: icons still don't work
@@ -111,12 +111,12 @@
fun RallyAccountsOverviewCard() {
Card {
Column {
- Column(modifier = Spacing(12.dp)) {
+ Column(modifier = LayoutPadding(12.dp)) {
Text(text = "Accounts", style = (+MaterialTheme.typography()).body1)
Text(text = "$12,132.49", style = (+MaterialTheme.typography()).h3)
}
Divider(color = rallyGreen, height = 1.dp)
- Column(modifier = Spacing(12.dp)) {
+ Column(modifier = LayoutPadding(12.dp)) {
RallyAccountRow(
name = "Checking",
number = "1234",
@@ -151,29 +151,29 @@
fun RallyAccountsCard() {
VerticalScroller {
Column {
- Stack(Spacing(16.dp)) {
+ Stack(LayoutPadding(16.dp)) {
val accountsProportion = listOf(0.595f, 0.045f, 0.095f, 0.195f, 0.045f)
val colors = listOf(0xFF1EB980, 0xFF005D57, 0xFF04B97F, 0xFF37EFBA,
0xFFFAFFBF).map { Color(it) }
- Container(modifier = Gravity.Center, height = 300.dp, expanded = true) {
+ Container(LayoutGravity.Center, height = 300.dp, expanded = true) {
DrawAnimatedCircle(accountsProportion, colors)
}
- Column(modifier = Gravity.Center) {
+ Column(modifier = LayoutGravity.Center) {
Text(
text = "Total",
style = (+MaterialTheme.typography()).body1,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
Text(
text = "$12,132.49",
style = (+MaterialTheme.typography()).h3,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
}
}
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
Card {
- Column(modifier = Spacing(12.dp)) {
+ Column(modifier = LayoutPadding(12.dp)) {
RallyAccountRow(
name = "Checking",
number = "1234",
@@ -212,17 +212,17 @@
*/
@Composable
fun RallyAccountRow(name: String, number: String, amount: String, color: Color) {
- FlexRow(Spacing(top = 12.dp, bottom = 12.dp)) {
+ FlexRow(LayoutPadding(top = 12.dp, bottom = 12.dp)) {
inflexible {
AccountIndicator(color = color)
- Spacer(Width(8.dp))
+ Spacer(LayoutWidth(8.dp))
Column {
Text(text = name, style = (+MaterialTheme.typography()).body1)
Text(text = "•••••$number", style = (+MaterialTheme.typography()).subtitle1)
}
}
expanded(flex = 1.0f) {
- Spacer(Size(width = 0.dp, height = 0.dp))
+ Spacer(LayoutSize(width = 0.dp, height = 0.dp))
}
inflexible {
Text(text = "$ $amount", style = (+MaterialTheme.typography()).h6)
@@ -245,13 +245,13 @@
fun RallyBillsOverviewCard() {
Card {
Column {
- Column(modifier = Spacing(12.dp)) {
+ Column(modifier = LayoutPadding(12.dp)) {
Text(text = "Bills", style = (+MaterialTheme.typography()).subtitle2)
Text(text = "$1,810.00", style = (+MaterialTheme.typography()).h3)
}
Divider(color = rallyGreen, height = 1.dp)
// TODO: change to proper bill items
- Column(modifier = Spacing(12.dp)) {
+ Column(modifier = LayoutPadding(12.dp)) {
RallyAccountRow(
name = "RedPay Credit",
number = "Jan 29",
@@ -286,31 +286,31 @@
fun RallyBillsCard() {
VerticalScroller {
Column {
- Stack(Spacing(16.dp)) {
+ Stack(LayoutPadding(16.dp)) {
val accountsProportion = listOf(0.65f, 0.25f, 0.03f, 0.05f)
val colors = listOf(0xFF1EB980, 0xFF005D57, 0xFF04B97F, 0xFF37EFBA).map {
Color(it)
}
- Container(modifier = Gravity.Center, height = 300.dp, expanded = true) {
+ Container(modifier = LayoutGravity.Center, height = 300.dp, expanded = true) {
DrawAnimatedCircle(accountsProportion, colors)
}
- Column(modifier = Gravity.Center) {
+ Column(modifier = LayoutGravity.Center) {
Text(
text = "Due",
style = (+MaterialTheme.typography()).body1,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
Text(
text = "$1,810.00",
style = (+MaterialTheme.typography()).h3,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
}
}
- Spacer(Height(10.dp))
+ Spacer(LayoutHeight(10.dp))
Card {
// TODO: change to proper bill items
- Column(modifier = Spacing(12.dp)) {
+ Column(modifier = LayoutPadding(12.dp)) {
RallyAccountRow(
name = "RedPay Credit",
number = "Jan 29",
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
index 1f8ecd6..bb3d9be 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
@@ -27,9 +27,9 @@
import androidx.ui.layout.Center
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
import androidx.ui.layout.Row
import androidx.ui.material.BottomDrawerLayout
@@ -41,7 +41,7 @@
@Sampled
@Composable
fun StaticDrawerSample() {
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
StaticDrawer {
Center {
Text("Drawer Content")
@@ -83,9 +83,9 @@
@Composable
private fun YourDrawerContent(onStateChange: (DrawerState) -> Unit) {
Container(expanded = true) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
Text(text = "Drawer Content")
- Spacer(Height(20.dp))
+ Spacer(LayoutHeight(20.dp))
Button(
text = "Close Drawer",
onClick = { onStateChange(DrawerState.Closed) })
@@ -96,9 +96,9 @@
@Composable
private fun YourAppContent(text: String, onDrawerStateChange: (DrawerState) -> Unit) {
Center {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
Text(text = text)
- Spacer(Height(20.dp))
+ Spacer(LayoutHeight(20.dp))
Button(
text = "Click to open",
onClick = { onDrawerStateChange(DrawerState.Opened) }
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
index ef10226..ef95fd8 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
@@ -46,8 +46,8 @@
import androidx.ui.material.Tab
import androidx.ui.material.TabRow
import androidx.ui.graphics.Image
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutGravity
import androidx.ui.material.MaterialTheme
@Sampled
@@ -289,14 +289,15 @@
fun FancyTab(title: String, onClick: () -> Unit, selected: Boolean) {
MutuallyExclusiveSetItem(selected = selected, onClick = onClick) {
Container(height = 50.dp, padding = EdgeInsets(10.dp)) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
val color = if (selected) Color.Red else Color.Gray
- ColoredRect(height = 10.dp, width = 10.dp, color = color, modifier = Gravity.Center)
+ ColoredRect(height = 10.dp, width = 10.dp, color = color,
+ modifier = LayoutGravity.Center)
Padding(5.dp) {
Text(
text = title,
style = (+MaterialTheme.typography()).body1,
- modifier = Gravity.Center
+ modifier = LayoutGravity.Center
)
}
}
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
index 8cac77b..63eb9bc 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
@@ -27,11 +27,11 @@
import androidx.ui.layout.Column
import androidx.ui.layout.Container
import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutHeight
import androidx.ui.layout.Spacer
import androidx.ui.layout.Row
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
import androidx.ui.material.AlertDialogButtonLayout.SideBySide
import androidx.ui.material.AlertDialogButtonLayout.Stacked
import androidx.ui.material.surface.Surface
@@ -129,14 +129,14 @@
} else {
// TODO(b/138924683): Temporary until padding for the Text's
// baseline
- Spacer(Height(NoTitleExtraHeight))
+ Spacer(LayoutHeight(NoTitleExtraHeight))
}
Container(alignment = Alignment.CenterLeft, padding = TextPadding) {
val textStyle = (+MaterialTheme.typography()).body1
CurrentTextStyleProvider(textStyle, text)
}
- Spacer(Height(TextToButtonsHeight))
+ Spacer(LayoutHeight(TextToButtonsHeight))
buttons()
}
}
@@ -163,12 +163,12 @@
dismissButton: @Composable() (() -> Unit)?,
buttonLayout: AlertDialogButtonLayout
) {
- Container(ExpandedWidth, padding = ButtonsPadding, alignment = Alignment.CenterRight) {
+ Container(LayoutExpandedWidth, padding = ButtonsPadding, alignment = Alignment.CenterRight) {
if (buttonLayout == AlertDialogButtonLayout.SideBySide) {
Row(arrangement = Arrangement.End) {
if (dismissButton != null) {
dismissButton()
- Spacer(Width(ButtonsWidthSpace))
+ Spacer(LayoutWidth(ButtonsWidthSpace))
}
confirmButton()
@@ -178,7 +178,7 @@
confirmButton()
if (dismissButton != null) {
- Spacer(Height(ButtonsHeightSpace))
+ Spacer(LayoutHeight(ButtonsHeightSpace))
dismissButton()
}
}
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt b/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
index 2cefabf..e661377 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
@@ -48,7 +48,7 @@
import androidx.ui.layout.MainAxisAlignment
import androidx.ui.layout.Row
import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
import androidx.ui.material.surface.Surface
import androidx.ui.graphics.Color
import androidx.ui.layout.EdgeInsets
@@ -63,8 +63,8 @@
import androidx.ui.layout.Align
import androidx.ui.layout.AlignmentLineOffset
import androidx.ui.layout.Arrangement
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedHeight
import androidx.ui.layout.Padding
import androidx.ui.text.TextStyle
import kotlin.math.sqrt
@@ -158,7 +158,7 @@
if (startContent != null) {
inflexible {
Container(
- modifier = ExpandedHeight,
+ modifier = LayoutExpandedHeight,
width = AppBarTitleStartPadding,
alignment = Alignment.CenterLeft,
children = startContent
@@ -181,7 +181,7 @@
if (endContent != null) {
inflexible {
Container(
- modifier = ExpandedHeight,
+ modifier = LayoutExpandedHeight,
alignment = Alignment.Center,
children = endContent
)
@@ -629,7 +629,7 @@
) {
BaseAppBar(color, BottomAppBarElevation, shape) {
Padding(top = AppBarPadding, bottom = AppBarPadding) {
- Row(Expanded, arrangement = Arrangement.SpaceBetween) {
+ Row(LayoutExpanded, arrangement = Arrangement.SpaceBetween) {
// Using wrap so that even if startContent is null or emits no layout nodes,
// we will still force end content to be placed at the end of the row.
Wrap(alignment = Alignment.Center, children = startContent ?: {})
@@ -726,11 +726,11 @@
shownActions.forEach { (index, shownAction) ->
action(shownAction)
if (index != shownActions.lastIndex) {
- Spacer(Width(24.dp))
+ Spacer(LayoutWidth(24.dp))
}
}
if (overflowActions.isNotEmpty()) {
- Spacer(Width(24.dp))
+ Spacer(LayoutWidth(24.dp))
// TODO: use overflowActions to build menu here
Container(width = 12.dp) {
Text(text = "${overflowActions.size}", style = TextStyle(fontSize = 15.sp))
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
index 6e45c65..415c7df 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
@@ -40,13 +40,13 @@
import androidx.ui.layout.Column
import androidx.ui.layout.Container
import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutGravity
import androidx.ui.layout.Row
import androidx.ui.layout.Table
import androidx.ui.layout.TableColumnWidth
import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
import androidx.ui.material.ripple.Ripple
import androidx.ui.text.TextStyle
import androidx.ui.text.font.FontWeight
@@ -212,7 +212,7 @@
} else {
Row {
SimpleImage(image = image)
- Spacer(Width(2.dp))
+ Spacer(LayoutWidth(2.dp))
Text(text = text(j))
}
}
@@ -257,7 +257,7 @@
} else {
Row {
SimpleImage(image = image)
- Spacer(Width(2.dp))
+ Spacer(LayoutWidth(2.dp))
Text(text = text(j))
}
}
@@ -395,7 +395,7 @@
headerDecoration = {
// TODO(calintat): Replace with animated arrow icons.
Text(text = if (sorting.ascending) "↑" else "↓")
- Spacer(Width(2.dp))
+ Spacer(LayoutWidth(2.dp))
}
} else {
onSort = {
@@ -484,11 +484,11 @@
Column {
table()
Container(height = dataRowHeight, padding = cellSpacing) {
- Row(Expanded, arrangement = Arrangement.End) {
+ Row(LayoutExpanded, arrangement = Arrangement.End) {
val pages = (rows.size - 1) / pagination.rowsPerPage + 1
val startRow = pagination.rowsPerPage * pagination.page
val endRow = (startRow + pagination.rowsPerPage).coerceAtMost(rows.size)
- val modifier = Gravity.Center
+ val modifier = LayoutGravity.Center
// TODO(calintat): Replace this with a dropdown menu whose items are taken
// from availableRowsPerPage (filtered to those that are in the range
@@ -496,11 +496,11 @@
// onRowsPerPageChange with the appropriate value.
Text(text = "Rows per page: ${pagination.rowsPerPage}", modifier = modifier)
- Spacer(Width(32.dp))
+ Spacer(LayoutWidth(32.dp))
Text(text = "${startRow + 1}-$endRow of ${rows.size}", modifier = modifier)
- Spacer(Width(32.dp))
+ Spacer(LayoutWidth(32.dp))
// TODO(calintat): Replace this with an image button with chevron_left icon.
Container(modifier = modifier) {
@@ -515,7 +515,7 @@
}
}
- Spacer(Width(24.dp))
+ Spacer(LayoutWidth(24.dp))
// TODO(calintat): Replace this with an image button with chevron_right icon.
Container(modifier = modifier) {
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt b/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
index 1534067..1331de27 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
@@ -23,7 +23,7 @@
import androidx.ui.core.dp
import androidx.ui.foundation.ColoredRect
import androidx.ui.graphics.Color
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutPadding
/**
* A divider is a thin line that groups content in lists and layouts
@@ -39,6 +39,6 @@
height: Dp = 1.dp,
indent: Dp = 0.dp
) {
- val indentMod = if (indent.value != 0f) Spacing(left = indent) else Modifier.None
- ColoredRect(color, modifier wraps indentMod, height = height)
+ val indentMod = if (indent.value != 0f) LayoutPadding(left = indent) else Modifier.None
+ ColoredRect(color, modifier + indentMod, height = height)
}
\ No newline at end of file
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
index 4ea4cc3..514bfee 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
@@ -33,7 +33,7 @@
import androidx.ui.layout.Padding
import androidx.ui.layout.Row
import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
import androidx.ui.graphics.Image
import androidx.ui.material.ripple.Ripple
import androidx.ui.material.surface.Surface
@@ -157,7 +157,7 @@
Padding(left = ExtendedFabIconPadding, right = ExtendedFabTextPadding) {
Row {
SimpleImage(image = icon)
- Spacer(Width(ExtendedFabIconPadding))
+ Spacer(LayoutWidth(ExtendedFabIconPadding))
Text(text = text, style = textStyle)
}
}
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
index 6bb6337..c496844 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
@@ -45,7 +45,7 @@
import androidx.ui.graphics.Canvas
import androidx.ui.graphics.Paint
import androidx.ui.graphics.PaintingStyle
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.text.TextStyle
/**
@@ -160,7 +160,7 @@
) {
RadioGroupItem(selected = selected, onSelect = onSelect) {
Padding(padding = DefaultRadioItemPadding) {
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
RadioButton(selected = selected, onSelect = onSelect, color = radioColor)
Padding(left = DefaultRadioLabelOffset) {
Text(
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt b/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
index 928585a..6103841 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
@@ -50,7 +50,7 @@
import androidx.ui.layout.Container
import androidx.ui.layout.DpConstraints
import androidx.ui.layout.Padding
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
import androidx.ui.layout.Spacer
import androidx.ui.lerp
import androidx.ui.material.ripple.Ripple
@@ -223,7 +223,7 @@
color = color,
elevation = if (pressed) 6.dp else 1.dp
) {
- Spacer(Size(thumbSize, thumbSize))
+ Spacer(LayoutSize(thumbSize, thumbSize))
}
}
}
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt b/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt
index 09277b1..bab3b32 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt
@@ -35,9 +35,9 @@
import androidx.ui.layout.AlignmentLineOffset
import androidx.ui.layout.Column
import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
import androidx.ui.material.surface.Surface
/**
@@ -145,7 +145,7 @@
@Composable
private fun TextOnlySnackbar(text: @Composable() () -> Unit) {
Layout(
- text, modifier = Spacing(left = HorizontalSpacing, right = HorizontalSpacing)
+ text, modifier = LayoutPadding(left = HorizontalSpacing, right = HorizontalSpacing)
) { measurables, constraints ->
require(measurables.size == 1) {
"text for Snackbar expected to have exactly only one child"
@@ -168,7 +168,7 @@
button: @Composable() () -> Unit
) {
Column(
- modifier = ExpandedWidth wraps Spacing(
+ modifier = LayoutExpandedWidth + LayoutPadding(
left = HorizontalSpacing,
right = HorizontalSpacingButtonSide,
bottom = SeparateButtonExtraY
@@ -176,10 +176,10 @@
) {
AlignmentLineOffset(alignmentLine = LastBaseline, after = LongButtonVerticalOffset) {
AlignmentLineOffset(alignmentLine = FirstBaseline, before = HeightToFirstLine) {
- Container(modifier = Spacing(right = HorizontalSpacingButtonSide), children = text)
+ Container(LayoutPadding(right = HorizontalSpacingButtonSide), children = text)
}
}
- Container(modifier = Gravity.End, children = button)
+ Container(modifier = LayoutGravity.End, children = button)
}
}
@@ -190,7 +190,7 @@
) {
Layout(
text, button,
- modifier = Spacing(left = HorizontalSpacing, right = HorizontalSpacingButtonSide)
+ modifier = LayoutPadding(left = HorizontalSpacing, right = HorizontalSpacingButtonSide)
) { measurables, constraints ->
require(measurables[text].size == 1) {
"text for Snackbar expected to have exactly only one child"
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt b/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
index 302be91..5d8d32b 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
@@ -35,6 +35,7 @@
import androidx.ui.core.Placeable
import androidx.ui.core.Px
import androidx.ui.core.Text
+import androidx.ui.core.WithConstraints
import androidx.ui.core.ambientDensity
import androidx.ui.core.coerceIn
import androidx.ui.core.dp
@@ -49,15 +50,17 @@
import androidx.ui.foundation.SimpleImage
import androidx.ui.foundation.selection.MutuallyExclusiveSetItem
import androidx.ui.graphics.Color
+import androidx.ui.graphics.Image
import androidx.ui.layout.Container
import androidx.ui.layout.FlexRow
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
import androidx.ui.layout.Padding
import androidx.ui.layout.Stack
+import androidx.ui.material.TabRow.IndicatorTransition
import androidx.ui.material.TabRow.TabPosition
import androidx.ui.material.ripple.Ripple
import androidx.ui.material.surface.Surface
-import androidx.ui.graphics.Image
-import androidx.ui.layout.Gravity
import androidx.ui.text.style.TextAlign
/**
@@ -137,7 +140,8 @@
}
}
- WithExpandedWidth { width ->
+ WithConstraints { constraints ->
+ val width = constraints.maxWidth
// TODO: force scrollable for tabs that will be too small if they take up equal space?
if (scrollable) {
ScrollableTabRow(width, selectedIndex, tabs, indicatorContainer)
@@ -168,12 +172,12 @@
TabRow.Divider(modifier)
}
- Stack {
- FlexRow(Gravity.Center) {
+ Stack(LayoutExpandedWidth) {
+ FlexRow(LayoutGravity.Center) {
expanded(1f, tabs)
}
- divider(Gravity.BottomCenter)
- Container(Gravity.Stretch) {
+ divider(LayoutGravity.BottomCenter)
+ Container(LayoutGravity.Stretch) {
indicatorContainer(tabPositions)
}
}
@@ -196,8 +200,8 @@
ScrollableTabData(selectedIndex, tabPositions, width, edgeOffset)
}
- scrollableTabData.selectedTab = selectedIndex
scrollableTabData.tabPositions = tabPositions
+ scrollableTabData.selectedTab = selectedIndex
scrollableTabData.visibleWidth = width
val indicator = @Composable {
@@ -211,7 +215,10 @@
TabRow.Divider()
}
- HorizontalScroller(scrollerPosition = scrollableTabData.position) {
+ HorizontalScroller(
+ scrollerPosition = scrollableTabData.position,
+ modifier = LayoutExpandedWidth
+ ) {
Layout(tabs, indicator, divider) { measurables, constraints ->
val tabPlaceables = mutableListOf<Pair<Placeable, IntPx>>()
val minTabWidth = ScrollableTabRowMinimumTabWidth.toIntPx()
@@ -304,27 +311,6 @@
}
}
-// TODO: cleanup when expanded width layouts are supported natively b/140408477
-/**
- * A layout that is sized according to its [child]'s height, and all the available width.
- */
-@Composable
-private fun WithExpandedWidth(child: @Composable() (width: IntPx) -> Unit) {
- // TODO: unfortunate 1f lag as we need to first measure total width and then recompose so the
- // tab row knows the correct width
- var widthState by +state { IntPx.Zero }
- Layout({ child(widthState) }) { measurables, constraints ->
- val width = constraints.maxWidth
- if (widthState != width) widthState = width
- val placeable = measurables.first().measure(constraints)
- val height = placeable.height
-
- layout(width, height) {
- placeable.place(IntPx.Zero, IntPx.Zero)
- }
- }
-}
-
object TabRow {
private val IndicatorOffset = PxPropKey()
diff --git a/ui/ui-platform/OWNERS b/ui/ui-platform/OWNERS
index af392f8..8fee348 100644
--- a/ui/ui-platform/OWNERS
+++ b/ui/ui-platform/OWNERS
@@ -2,6 +2,7 @@
[email protected]
[email protected]
[email protected]
[email protected]
# For text input
[email protected]
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt
index ad7e85f..0a785c2 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt
@@ -75,6 +75,7 @@
useParcel { parcel ->
parcel.writeInt(++previousId) // View Id.
parcel.writeInt(NO_SESSION) // Flag.
+ parcel.setDataPosition(0)
autofillId = AutofillId.CREATOR.createFromParcel(parcel)
}
return autofillId ?: error("Could not generate autofill id")
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
index 7d0f2b1..b182e9d 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
@@ -24,7 +24,7 @@
import androidx.ui.input.KeyboardType
import androidx.ui.layout.Column
import androidx.ui.foundation.VerticalScroller
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
import androidx.ui.text.TextStyle
val KEYBOARD_TYPES = listOf(
@@ -51,7 +51,7 @@
@Composable
fun InputFieldDemo() {
VerticalScroller {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
TagLine(tag = "simple editing")
EditLine()
TagLine(tag = "simple editing2")
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
index 23186ec..12e03eeb 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
@@ -35,8 +35,8 @@
import androidx.ui.text.style.TextOverflow
import androidx.ui.core.em
import androidx.ui.core.sp
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.text.LocaleList
import androidx.ui.text.SpanStyle
import androidx.ui.text.samples.BaselineShiftSample
@@ -278,7 +278,7 @@
@Composable
fun TextDemoHeight() {
// This group of text composables show different height.
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
Text {
Span(
text = "$displayText\n$displayText ",
@@ -365,7 +365,7 @@
for (i in 1..10) {
text = "$text$displayText "
}
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
SecondTagLine(tag = "textAlign = TextAlign.Left")
Text(style = TextStyle(textAlign = TextAlign.Left)) {
Span(text = displayText, style = SpanStyle(fontSize = fontSize8))
@@ -425,7 +425,7 @@
}
val spanStyle = SpanStyle(fontSize = fontSize8, color = Color(0xFFFF0000))
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
Text {
Span(text = text, style = spanStyle)
}
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt
index 344e439..6a5aa5e 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt
@@ -26,8 +26,8 @@
import androidx.ui.foundation.VerticalScroller
import androidx.ui.graphics.Color
import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
import androidx.ui.layout.Row
import androidx.ui.text.LocaleList
import androidx.ui.text.SpanStyle
@@ -133,9 +133,9 @@
SelectionContainer(
selection = selection.value,
onSelectionChange = { selection.value = it }) {
- Column(ExpandedHeight) {
+ Column(LayoutExpandedHeight) {
for (i in 0..2) {
- Row(ExpandedWidth) {
+ Row(LayoutExpandedWidth) {
for (j in 0..2) {
Text {
Span(
diff --git a/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx b/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
index 11225c9..1d0736c 100644
--- a/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
+++ b/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
@@ -20,6 +20,7 @@
<GlyphID id="1" name="1em"/>
<GlyphID id="2" name="1em_rtl"/>
<GlyphID id="3" name="space"/>
+ <GlyphID id="4" name="linefeed"/>
</GlyphOrder>
<head>
@@ -130,12 +131,14 @@
<mtx name="1em" width="1000" lsb="0"/>
<mtx name="1em_rtl" width="1000" lsb="0"/>
<mtx name="space" width="1000" lsb="0"/>
+ <mtx name="linefeed" width="500" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="3" platEncID="10" language="0">
<map code="0x0009" name="1em" /> <!-- TAB -->
+ <map code="0x000A" name="linefeed" /> <!-- LINEFEED -->
<map code="0x0020" name="space" /> <!-- SPACE -->
<map code="0x002C" name="1em" /> <!-- , -->
<map code="0x002D" name="1em" /> <!-- - -->
@@ -247,14 +250,16 @@
<instructions />
</TTGlyph>
<TTGlyph name="space" xMin="0" yMin="-200" xMax="1000" yMax="800">
- <contour>
- <pt x="0" y="0" on="1"/>
- <pt x="1000" y="0" on="1"/>
- <pt x="1000" y="10" on="1"/>
- <pt x="0" y="10" on="1"/>
- </contour>
- <instructions />
- </TTGlyph>
+ <contour>
+ <pt x="0" y="0" on="1"/>
+ <pt x="1000" y="0" on="1"/>
+ <pt x="1000" y="10" on="1"/>
+ <pt x="0" y="10" on="1"/>
+ </contour>
+ <instructions />
+ </TTGlyph>
+ <TTGlyph name="linefeed" xMin="0" yMin="-200" xMax="0" yMax="800"/>
+
</glyf>
<name>
@@ -299,4 +304,4 @@
<maxMemType1 value="0"/>
</post>
-</ttFont>
\ No newline at end of file
+</ttFont>
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
index 8693047..aed7b76 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
@@ -2141,19 +2141,45 @@
}
@Test
- fun lineHeight_returnsSameAsGiven() {
+ fun lineHeight_inSp() {
withDensity(defaultDensity) {
val text = "abcdefgh"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
+ val fontSize = 20f
// Make the layout 4 lines
- val layoutWidth = text.length * fontSizeInPx / 4
- val lineHeight = 30.sp
+ val layoutWidth = text.length * fontSize / 4
+ val lineHeight = 30f
val paragraph = simpleParagraph(
text = text,
- fontSize = fontSize,
- lineHeight = lineHeight,
+ fontSize = fontSize.sp,
+ lineHeight = lineHeight.sp,
+ constraints = ParagraphConstraints(width = layoutWidth)
+ )
+
+ assertThat(paragraph.lineCount).isEqualTo(4)
+ // First/last line is influenced by top/bottom padding
+ for (i in 1 until paragraph.lineCount - 1) {
+ val actualHeight = paragraph.getLineHeight(i)
+ // In the sample_font.ttf, the height of the line should be
+ // fontSize + 0.2f * fontSize(line gap)
+ assertWithMessage("line number $i").that(actualHeight).isEqualTo(lineHeight)
+ }
+ }
+ }
+
+ @Test
+ fun lineHeight_InEm() {
+ withDensity(defaultDensity) {
+ val text = "abcdefgh"
+ val fontSize = 20f
+ // Make the layout 4 lines
+ val layoutWidth = text.length * fontSize / 4
+ val lineHeight = 1.5f
+
+ val paragraph = simpleParagraph(
+ text = text,
+ fontSize = fontSize.sp,
+ lineHeight = lineHeight.em,
constraints = ParagraphConstraints(width = layoutWidth)
)
@@ -2164,7 +2190,7 @@
// In the sample_font.ttf, the height of the line should be
// fontSize + 0.2f * fontSize(line gap)
assertWithMessage("line number $i")
- .that(actualHeight).isEqualTo(lineHeight.toPx().value)
+ .that(actualHeight).isEqualTo(lineHeight * fontSize)
}
}
}
@@ -2461,7 +2487,7 @@
}
@Test
- fun textIndent_onSingleLine() {
+ fun textIndent_inSp_onSingleLine() {
withDensity(defaultDensity) {
val text = "abc"
val fontSize = 20.sp
@@ -2485,65 +2511,110 @@
}
@Test
- fun textIndent_onFirstLine() {
+ fun textIndent_inSp_onFirstLine() {
withDensity(defaultDensity) {
val text = "abcdef"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val indent = 20.sp
- val indentInPx = indent.toPx().value
- val paragraphWidth = "abcd".length * fontSizeInPx
+ val fontSize = 20f
+ val indent = 15f
+ val paragraphWidth = "abcd".length * fontSize
val paragraph = simpleParagraph(
text = text,
- textIndent = TextIndent(firstLine = indent),
- fontSize = fontSize,
+ textIndent = TextIndent(firstLine = indent.sp),
+ fontSize = fontSize.sp,
fontFamily = fontFamilyMeasureFont,
constraints = ParagraphConstraints(width = paragraphWidth)
)
assertThat(paragraph.lineCount).isEqualTo(2)
-
- // This position should point to the first character of the first line if indent is
- // applied. Otherwise this position will point to the second character of the second line.
- val position = PxPosition((indentInPx + 1).px, (fontSizeInPx / 2).px)
-
- // The offset corresponding to the position should be the first char 'a'.
- assertThat(paragraph.getOffsetForPosition(position)).isZero()
+ assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(indent)
}
}
@Test
- fun textIndent_onRestLine() {
+ fun textIndent_inSp_onRestLine() {
withDensity(defaultDensity) {
val text = "abcde"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val indent = 20.sp
- val indentInPx = indent.toPx().value
- val paragraphWidth = "abc".length * fontSizeInPx
+ val fontSize = 20f
+ val indent = 20f
+ val paragraphWidth = "abc".length * fontSize
val paragraph = simpleParagraph(
text = text,
- textIndent = TextIndent(
- firstLine = 0.sp,
- restLine = indent
- ),
- fontSize = fontSize,
+ textIndent = TextIndent(restLine = indent.sp),
+ fontSize = fontSize.sp,
fontFamily = fontFamilyMeasureFont,
constraints = ParagraphConstraints(width = paragraphWidth)
)
- // This position should point to the first character of the second line if indent is
- // applied. Otherwise this position will point to the second character of the second line.
- val position = PxPosition((indentInPx + 1).px, (fontSizeInPx / 2 + fontSizeInPx).px)
-
- // The offset corresponding to the position should be the 'd' in the second line.
- assertThat(paragraph.getOffsetForPosition(position)).isEqualTo("abcd".length - 1)
+ // check the position of the first character in second line: "d" should be indented
+ assertThat(paragraph.getHorizontalPosition(3, true)).isEqualTo(indent)
}
}
@Test
+ fun textIndent_inEm_onSingleLine() {
+ withDensity(defaultDensity) {
+ val text = "abc"
+ val fontSize = 20f
+ val indent = 1.5f
+
+ val paragraph = simpleParagraph(
+ text = text,
+ textIndent = TextIndent(firstLine = indent.em),
+ fontSize = fontSize.sp,
+ fontFamily = fontFamilyMeasureFont
+ )
+
+ assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(indent * fontSize)
+ }
+ }
+
+ @Test
+ fun textIndent_inEm_onFirstLine() {
+ withDensity(defaultDensity) {
+ val text = "abcdef"
+ val fontSize = 20f
+ val indent = 1.5f
+
+ val paragraphWidth = "abcd".length * fontSize
+
+ val paragraph = simpleParagraph(
+ text = text,
+ textIndent = TextIndent(firstLine = indent.em),
+ fontSize = fontSize.sp,
+ fontFamily = fontFamilyMeasureFont,
+ constraints = ParagraphConstraints(width = paragraphWidth)
+ )
+
+ assertThat(paragraph.lineCount).isEqualTo(2)
+ assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(indent * fontSize)
+ }
+ }
+
+ @Test
+ fun textIndent_inEm_onRestLine() {
+ withDensity(defaultDensity) {
+ val text = "abcdef"
+ val fontSize = 20f
+ val indent = 1.5f
+
+ val paragraphWidth = "abcd".length * fontSize
+
+ val paragraph = simpleParagraph(
+ text = text,
+ textIndent = TextIndent(restLine = indent.em),
+ fontSize = fontSize.sp,
+ fontFamily = fontFamilyMeasureFont,
+ constraints = ParagraphConstraints(width = paragraphWidth)
+ )
+
+ assertThat(paragraph.lineCount).isEqualTo(2)
+ // check the position of the first character in second line: "e" should be indented
+ assertThat(paragraph.getHorizontalPosition(4, true)).isEqualTo(indent * fontSize)
+ }
+ }
+ @Test
fun testAnnotatedString_fontFamily_changesMeasurement() {
withDensity(defaultDensity) {
val text = "ad"
diff --git a/ui/ui-text/src/androidTest/res/font/sample_font.ttf b/ui/ui-text/src/androidTest/res/font/sample_font.ttf
index 382a737..dc10688 100644
--- a/ui/ui-text/src/androidTest/res/font/sample_font.ttf
+++ b/ui/ui-text/src/androidTest/res/font/sample_font.ttf
Binary files differ
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
index a8ef86a..13c926d 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
@@ -43,7 +43,6 @@
import androidx.ui.core.Density
import androidx.ui.core.TextUnit
import androidx.ui.core.TextUnitType
-import androidx.ui.core.px
import androidx.ui.core.sp
import androidx.ui.core.withDensity
import androidx.ui.graphics.toArgb
@@ -146,6 +145,7 @@
internal fun createStyledText(
text: String,
+ contextFontSize: Float,
lineHeight: TextUnit,
textIndent: TextIndent?,
spanStyles: List<AnnotatedString.Item<SpanStyle>>,
@@ -165,7 +165,12 @@
)
}
TextUnitType.Em -> {
- // Support line height with EM unit: b/144957855
+ spannableString.setSpan(
+ LineHeightSpan(ceil(lineHeight.value * contextFontSize).toInt()),
+ 0,
+ text.length,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+ )
}
TextUnitType.Inherit -> {} // Do nothing
}
@@ -175,25 +180,19 @@
if (indent.firstLine.isInherit || indent.restLine.isInherit) return@let
withDensity(density) {
val firstLine = when (indent.firstLine.type) {
- TextUnitType.Sp -> indent.firstLine.toPx()
- TextUnitType.Em -> {
- // Support indents with Em unit type: b/144958549
- 0.px
- }
- TextUnitType.Inherit -> { 0.px } // do nothing
+ TextUnitType.Sp -> indent.firstLine.toPx().value
+ TextUnitType.Em -> indent.firstLine.value * contextFontSize
+ TextUnitType.Inherit -> { 0f } // do nothing
}
val restLine = when (indent.restLine.type) {
- TextUnitType.Sp -> indent.restLine.toPx()
- TextUnitType.Em -> {
- // Support indents with Em unit type: b/144958549
- 0.px
- }
- TextUnitType.Inherit -> { 0.px } // do nothing
+ TextUnitType.Sp -> indent.restLine.toPx().value
+ TextUnitType.Em -> indent.restLine.value * contextFontSize
+ TextUnitType.Inherit -> { 0f } // do nothing
}
spannableString.setSpan(
LeadingMarginSpan.Standard(
- firstLine.value.toInt(),
- restLine.value.toInt()
+ ceil(firstLine).toInt(),
+ ceil(restLine).toInt()
),
0,
text.length,
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
index 83b0a9b..2fc807e 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
@@ -57,6 +57,7 @@
charSequence = createStyledText(
text = text,
+ contextFontSize = textPaint.textSize,
lineHeight = paragraphStyle.lineHeight,
textIndent = paragraphStyle.textIndent,
spanStyles = listOf(
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
index 030e07a..1bc08db 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
@@ -39,20 +39,21 @@
private var progress: Data = Data.EMPTY
override suspend fun doWork(): Result {
+ val notificationId = inputData.getInt(InputNotificationId, NotificationId)
+ val delayTime = inputData.getLong(InputDelayTime, Delay)
// Run in the context of a Foreground service
- setForeground(getNotification())
-
+ setForeground(getForegroundInfo(notificationId))
val range = 20
for (i in 1..range) {
- delay(1000)
+ delay(delayTime)
progress = workDataOf(Progress to i * (100 / range))
setProgress(progress)
- setForeground(getNotification())
+ setForeground(getForegroundInfo(notificationId))
}
return Result.success()
}
- private fun getNotification(): ForegroundInfo {
+ private fun getForegroundInfo(notificationId: Int): ForegroundInfo {
val percent = progress.getInt(Progress, 0)
val id = applicationContext.getString(R.string.channel_id)
val title = applicationContext.getString(R.string.notification_title)
@@ -69,7 +70,7 @@
.setOngoing(true)
.build()
- return ForegroundInfo(NotificationId, notification)
+ return ForegroundInfo(notificationId, notification)
}
@RequiresApi(Build.VERSION_CODES.O)
@@ -85,6 +86,9 @@
companion object {
private const val NotificationId = 10
+ private const val Delay = 1000L
private const val Progress = "Progress"
+ const val InputNotificationId = "NotificationId"
+ const val InputDelayTime = "DelayTime"
}
}
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
index 1d789de..63e6858 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
@@ -67,6 +67,7 @@
// Synthetic access
WorkRequest mLastForegroundWorkRequest;
+ int mLastNotificationId = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -364,8 +365,15 @@
findViewById(R.id.run_foreground_worker).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
+ mLastNotificationId += 1;
+
+ Data inputData = new Data.Builder()
+ .putInt(ForegroundWorker.InputNotificationId, mLastNotificationId)
+ .build();
+
OneTimeWorkRequest request =
new OneTimeWorkRequest.Builder(ForegroundWorker.class)
+ .setInputData(inputData)
.setConstraints(new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED).build()
).build();
@@ -378,8 +386,14 @@
findViewById(R.id.cancel_foreground_worker).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- WorkManager.getInstance(MainActivity.this)
- .cancelAllWorkByTag(ForegroundWorker.class.getName());
+ if (mLastForegroundWorkRequest != null) {
+ WorkManager.getInstance(MainActivity.this)
+ .cancelWorkById(mLastForegroundWorkRequest.getId());
+ mLastForegroundWorkRequest = null;
+ } else {
+ WorkManager.getInstance(MainActivity.this)
+ .cancelAllWorkByTag(ForegroundWorker.class.getName());
+ }
}
});
@@ -396,6 +410,7 @@
try {
pendingIntent.send(0);
+ mLastForegroundWorkRequest = null;
} catch (PendingIntent.CanceledException exception) {
Log.e(TAG, "Pending intent was cancelled.", exception);
}
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt b/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
index fdcc604..56359de 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
@@ -18,10 +18,13 @@
import android.app.Notification
import android.content.Context
+import android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
+import android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION
import android.util.Log
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
import androidx.work.Configuration
import androidx.work.Constraints
import androidx.work.ForegroundInfo
@@ -131,7 +134,7 @@
}
@Test
- fun testHandleNotify() {
+ fun testStartForeground() {
val workSpecId = "workSpecId"
val notificationId = 1
val notification = mock(Notification::class.java)
@@ -139,7 +142,139 @@
val intent = createNotifyIntent(context, workSpecId, metadata)
dispatcher.onStartCommand(intent)
verify(dispatcherCallback, times(1))
- .notify(eq(notificationId), eq(0), eq(workSpecId), any<Notification>())
+ .startForeground(eq(notificationId), eq(0), any<Notification>())
+ }
+
+ @Test
+ fun testNotify() {
+ val workSpecId = "workSpecId"
+ val notificationId = 1
+ val notification = mock(Notification::class.java)
+ val metadata = ForegroundInfo(notificationId, notification)
+ val intent = createNotifyIntent(context, workSpecId, metadata)
+ dispatcher.mCurrentForegroundWorkSpecId = "anotherWorkSpecId"
+ dispatcher.onStartCommand(intent)
+ verify(dispatcherCallback, times(1))
+ .notify(eq(notificationId), any<Notification>())
+ }
+
+ @Test
+ fun testPromoteWorkSpecForStartForeground() {
+ val firstWorkSpecId = "first"
+ val firstId = 1
+ val notification = mock(Notification::class.java)
+ val firstInfo = ForegroundInfo(firstId, notification)
+ val firstIntent = createNotifyIntent(context, firstWorkSpecId, firstInfo)
+
+ val secondWorkSpecId = "second"
+ val secondId = 2
+ val secondInfo = ForegroundInfo(secondId, notification)
+ val secondIntent = createNotifyIntent(context, secondWorkSpecId, secondInfo)
+
+ dispatcher.onStartCommand(firstIntent)
+ assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+ verify(dispatcherCallback, times(1))
+ .startForeground(eq(firstId), eq(0), any<Notification>())
+
+ dispatcher.onStartCommand(secondIntent)
+ assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+ verify(dispatcherCallback, times(1))
+ .notify(eq(secondId), any<Notification>())
+ assertThat(dispatcher.mForegroundInfoById.count(), `is`(2))
+
+ dispatcher.onExecuted(firstWorkSpecId, false)
+ verify(dispatcherCallback, times(1))
+ .startForeground(eq(secondId), eq(0), any<Notification>())
+ verify(dispatcherCallback, times(1))
+ .cancelNotification(secondId)
+ assertThat(dispatcher.mForegroundInfoById.count(), `is`(1))
+
+ dispatcher.onExecuted(secondWorkSpecId, false)
+ verify(dispatcherCallback, times(1))
+ .cancelNotification(secondId)
+ assertThat(dispatcher.mForegroundInfoById.count(), `is`(0))
+ }
+
+ @Test
+ fun promoteWorkSpecForStartForeground2() {
+ val firstWorkSpecId = "first"
+ val firstId = 1
+ val notification = mock(Notification::class.java)
+ val firstInfo = ForegroundInfo(firstId, notification)
+ val firstIntent = createNotifyIntent(context, firstWorkSpecId, firstInfo)
+
+ val secondWorkSpecId = "second"
+ val secondId = 2
+ val secondInfo = ForegroundInfo(secondId, notification)
+ val secondIntent = createNotifyIntent(context, secondWorkSpecId, secondInfo)
+
+ val thirdWorkSpecId = "third"
+ val thirdId = 3
+ val thirdInfo = ForegroundInfo(thirdId, notification)
+ val thirdIntent = createNotifyIntent(context, thirdWorkSpecId, thirdInfo)
+
+ dispatcher.onStartCommand(firstIntent)
+ assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+ verify(dispatcherCallback, times(1))
+ .startForeground(eq(firstId), eq(0), any<Notification>())
+
+ dispatcher.onStartCommand(secondIntent)
+ assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+ verify(dispatcherCallback, times(1))
+ .notify(eq(secondId), any<Notification>())
+ assertThat(dispatcher.mForegroundInfoById.count(), `is`(2))
+
+ dispatcher.onStartCommand(thirdIntent)
+ assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+ verify(dispatcherCallback, times(1))
+ .notify(eq(secondId), any<Notification>())
+ assertThat(dispatcher.mForegroundInfoById.count(), `is`(3))
+
+ dispatcher.onExecuted(firstWorkSpecId, false)
+ verify(dispatcherCallback, times(1))
+ .startForeground(eq(thirdId), eq(0), any<Notification>())
+ verify(dispatcherCallback, times(1))
+ .cancelNotification(thirdId)
+ assertThat(dispatcher.mForegroundInfoById.count(), `is`(2))
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = 29)
+ fun testUpdateNotificationWithDifferentForegroundServiceType() {
+ val firstWorkSpecId = "first"
+ val firstId = 1
+ val notification = mock(Notification::class.java)
+ val firstInfo =
+ ForegroundInfo(firstId, notification, FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE)
+ val firstIntent = createNotifyIntent(context, firstWorkSpecId, firstInfo)
+
+ val secondWorkSpecId = "second"
+ val secondId = 2
+ val secondInfo = ForegroundInfo(secondId, notification, FOREGROUND_SERVICE_TYPE_LOCATION)
+ val secondIntent = createNotifyIntent(context, secondWorkSpecId, secondInfo)
+
+ dispatcher.onStartCommand(firstIntent)
+ verify(dispatcherCallback, times(1))
+ .startForeground(
+ eq(firstId),
+ eq(FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE),
+ any<Notification>()
+ )
+
+ dispatcher.onStartCommand(secondIntent)
+ assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+ verify(dispatcherCallback, times(1))
+ .notify(eq(secondId), any<Notification>())
+
+ val expectedNotificationType =
+ FOREGROUND_SERVICE_TYPE_LOCATION or FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
+
+ verify(dispatcherCallback, times(1))
+ .startForeground(
+ eq(firstId),
+ eq(expectedNotificationType),
+ any<Notification>()
+ )
}
@Test
diff --git a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
index 91df909..12bf6fe 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
@@ -16,10 +16,13 @@
package androidx.work.impl.foreground;
+import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE;
+
import android.app.Notification;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
+import android.os.Build;
import android.text.TextUtils;
import androidx.annotation.MainThread;
@@ -39,6 +42,8 @@
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -60,7 +65,6 @@
private static final String KEY_NOTIFICATION = "KEY_NOTIFICATION";
private static final String KEY_NOTIFICATION_ID = "KEY_NOTIFICATION_ID";
private static final String KEY_FOREGROUND_SERVICE_TYPE = "KEY_FOREGROUND_SERVICE_TYPE";
- private static final String KEY_NOTIFICATION_TAG = "KEY_NOTIFICATION_TAG";
private static final String KEY_WORKSPEC_ID = "KEY_WORKSPEC_ID";
// actions
@@ -78,6 +82,12 @@
final Object mLock;
@SuppressWarnings("WeakerAccess") // Synthetic access
+ String mCurrentForegroundWorkSpecId;
+
+ @SuppressWarnings("WeakerAccess") // Synthetic access
+ final Map<String, ForegroundInfo> mForegroundInfoById;
+
+ @SuppressWarnings("WeakerAccess") // Synthetic access
final Map<String, WorkSpec> mWorkSpecById;
@SuppressWarnings("WeakerAccess") // Synthetic access
@@ -94,6 +104,8 @@
mLock = new Object();
mWorkManagerImpl = WorkManagerImpl.getInstance(mContext);
mTaskExecutor = mWorkManagerImpl.getWorkTaskExecutor();
+ mCurrentForegroundWorkSpecId = null;
+ mForegroundInfoById = new LinkedHashMap<>();
mTrackedWorkSpecs = new HashSet<>();
mWorkSpecById = new HashMap<>();
mConstraintsTracker = new WorkConstraintsTracker(mContext, mTaskExecutor, this);
@@ -110,6 +122,8 @@
mLock = new Object();
mWorkManagerImpl = workManagerImpl;
mTaskExecutor = mWorkManagerImpl.getWorkTaskExecutor();
+ mCurrentForegroundWorkSpecId = null;
+ mForegroundInfoById = new LinkedHashMap<>();
mTrackedWorkSpecs = new HashSet<>();
mWorkSpecById = new HashMap<>();
mConstraintsTracker = tracker;
@@ -127,9 +141,48 @@
}
}
if (removed) {
- // Stop tracking
+ // Stop tracking constraints.
mConstraintsTracker.replace(mTrackedWorkSpecs);
}
+
+ // Promote new notifications to the foreground if necessary.
+ ForegroundInfo removedInfo = mForegroundInfoById.remove(workSpecId);
+ if (workSpecId.equals(mCurrentForegroundWorkSpecId)) {
+ if (mForegroundInfoById.size() > 0) {
+ // Find the next eligible ForegroundInfo
+ // LinkedHashMap uses insertion order, so find the last one because that was
+ // the most recent ForegroundInfo used. That way when different WorkSpecs share
+ // notification ids, we still end up in a reasonably good place.
+ Iterator<Map.Entry<String, ForegroundInfo>> iterator =
+ mForegroundInfoById.entrySet().iterator();
+
+ Map.Entry<String, ForegroundInfo> entry = iterator.next();
+ while (iterator.hasNext()) {
+ entry = iterator.next();
+ }
+
+ mCurrentForegroundWorkSpecId = entry.getKey();
+ if (mCallback != null) {
+ ForegroundInfo info = entry.getValue();
+ mCallback.startForeground(
+ info.getNotificationId(),
+ info.getForegroundServiceType(),
+ info.getNotification());
+
+ // We used NotificationManager before to update notifications, so ensure
+ // that we reference count the Notification instance down by
+ // cancelling the notification.
+ mCallback.cancelNotification(info.getNotificationId());
+ }
+ }
+ } else if (mCallback != null && removedInfo != null) {
+ // We don't need to worry about the current foreground WorkSpecId because if there
+ // is nothing running, the Processor will call stopForeground() which will eventually
+ // turn into a stopSelf().
+
+ // Explicitly remove this notification instance to decrease the reference count.
+ mCallback.cancelNotification(removedInfo.getNotificationId());
+ }
}
@MainThread
@@ -191,10 +244,45 @@
private void handleNotify(@NonNull Intent intent) {
int notificationId = intent.getIntExtra(KEY_NOTIFICATION_ID, 0);
int notificationType = intent.getIntExtra(KEY_FOREGROUND_SERVICE_TYPE, 0);
- String notificationTag = intent.getStringExtra(KEY_NOTIFICATION_TAG);
+ String workSpecId = intent.getStringExtra(KEY_WORKSPEC_ID);
Notification notification = intent.getParcelableExtra(KEY_NOTIFICATION);
+ Logger.get().debug(TAG,
+ String.format("Notifying with (id: %s, workSpecId: %s, notificationType: %s)",
+ notificationId, workSpecId, notificationType));
+
if (notification != null && mCallback != null) {
- mCallback.notify(notificationId, notificationType, notificationTag, notification);
+ // Keep track of this ForegroundInfo
+ ForegroundInfo info = new ForegroundInfo(
+ notificationId, notification, notificationType);
+
+ mForegroundInfoById.put(workSpecId, info);
+ if (TextUtils.isEmpty(mCurrentForegroundWorkSpecId)) {
+ // This is the current workSpecId which owns the Foreground lifecycle.
+ mCurrentForegroundWorkSpecId = workSpecId;
+ mCallback.startForeground(notificationId, notificationType, notification);
+ } else {
+ // Update notification
+ mCallback.notify(notificationId, notification);
+ // Update the notification in the foreground such that it's the union of
+ // all current foreground service types if necessary.
+ if (notificationType != FOREGROUND_SERVICE_TYPE_NONE
+ && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ int foregroundServiceType = FOREGROUND_SERVICE_TYPE_NONE;
+ for (Map.Entry<String, ForegroundInfo> entry : mForegroundInfoById.entrySet()) {
+ ForegroundInfo foregroundInfo = entry.getValue();
+ foregroundServiceType |= foregroundInfo.getForegroundServiceType();
+ }
+ ForegroundInfo currentInfo =
+ mForegroundInfoById.get(mCurrentForegroundWorkSpecId);
+ if (currentInfo != null) {
+ mCallback.startForeground(
+ currentInfo.getNotificationId(),
+ foregroundServiceType,
+ currentInfo.getNotification()
+ );
+ }
+ }
+ }
}
}
@@ -288,7 +376,7 @@
intent.putExtra(KEY_NOTIFICATION_ID, info.getNotificationId());
intent.putExtra(KEY_FOREGROUND_SERVICE_TYPE, info.getForegroundServiceType());
intent.putExtra(KEY_NOTIFICATION, info.getNotification());
- intent.putExtra(KEY_NOTIFICATION_TAG, workSpecId);
+ intent.putExtra(KEY_WORKSPEC_ID, workSpecId);
return intent;
}
@@ -310,15 +398,25 @@
*/
interface Callback {
/**
- * Used to update the {@link Notification}.
+ * An implementation of this callback should call
+ * {@link android.app.Service#startForeground(int, Notification, int)}.
*/
- void notify(
+ void startForeground(
int notificationId,
int notificationType,
- @Nullable String notificationTag,
@NonNull Notification notification);
/**
+ * Used to update the {@link Notification}.
+ */
+ void notify(int notificationId, @NonNull Notification notification);
+
+ /**
+ * Used to cancel a {@link Notification}.
+ */
+ void cancelNotification(int notificationId);
+
+ /**
* Used to stop the {@link SystemForegroundService}.
*/
void stop();
diff --git a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
index 3298f43..3b91796 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
@@ -17,7 +17,9 @@
package androidx.work.impl.foreground;
import android.app.Notification;
+import android.app.NotificationManager;
import android.app.Service;
+import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Handler;
@@ -43,6 +45,9 @@
private Handler mHandler;
private boolean mIsShutdown;
+ // Synthetic access
+ NotificationManager mNotificationManager;
+
@Override
public void onCreate() {
super.onCreate();
@@ -81,6 +86,8 @@
@MainThread
private void initializeDispatcher() {
mHandler = new Handler(Looper.getMainLooper());
+ mNotificationManager = (NotificationManager)
+ getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
mDispatcher = new SystemForegroundDispatcher(getApplicationContext());
mDispatcher.setCallback(this);
}
@@ -99,10 +106,9 @@
}
@Override
- public void notify(
+ public void startForeground(
final int notificationId,
final int notificationType,
- @Nullable final String notificationTag,
@NonNull final Notification notification) {
mHandler.post(new Runnable() {
@@ -116,4 +122,24 @@
}
});
}
+
+ @Override
+ public void notify(final int notificationId, @NonNull final Notification notification) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mNotificationManager.notify(notificationId, notification);
+ }
+ });
+ }
+
+ @Override
+ public void cancelNotification(final int notificationId) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mNotificationManager.cancel(notificationId);
+ }
+ });
+ }
}
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java b/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java
index e69446a..7aa48eb 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java
@@ -73,7 +73,7 @@
@Override
public void run() {
String workSpecId = id.toString();
- Logger.get().info(TAG, String.format("Updating progress for %s (%s)", id, data));
+ Logger.get().debug(TAG, String.format("Updating progress for %s (%s)", id, data));
mWorkDatabase.beginTransaction();
try {
WorkSpecDao workSpecDao = mWorkDatabase.workSpecDao();