From cb5f6c5b0bba9fafbb6fc0c542f8fef92c7e8dfc Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 16:20:07 -0400
Subject: [PATCH 01/49] Created activity_main.xml for activity embedding
snippets.
---
misc/src/main/res/layout/activity_main.xml | 1 +
1 file changed, 1 insertion(+)
create mode 100644 misc/src/main/res/layout/activity_main.xml
diff --git a/misc/src/main/res/layout/activity_main.xml b/misc/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/misc/src/main/res/layout/activity_main.xml
@@ -0,0 +1 @@
+
From 433dd0f53c2e7fa1ec3cbf47b99615cf62f52a05 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 16:21:47 -0400
Subject: [PATCH 02/49] Added contents of activity_main.xml.
---
misc/src/main/res/layout/activity_main.xml | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/misc/src/main/res/layout/activity_main.xml b/misc/src/main/res/layout/activity_main.xml
index 8b137891..bf8b9297 100644
--- a/misc/src/main/res/layout/activity_main.xml
+++ b/misc/src/main/res/layout/activity_main.xml
@@ -1 +1,20 @@
+
+
+
+
+
+
+
+
From 54dc6701ea7bbb1311aa64a7acefa7ee8438407b Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 16:32:25 -0400
Subject: [PATCH 03/49] Update build.gradle.kts with dependencies for activity
embedding snippets.
---
misc/build.gradle.kts | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/misc/build.gradle.kts b/misc/build.gradle.kts
index de867bb8..c9a40afd 100644
--- a/misc/build.gradle.kts
+++ b/misc/build.gradle.kts
@@ -64,6 +64,11 @@ dependencies {
ksp(libs.hilt.compiler)
implementation(libs.androidx.lifecycle.runtime)
+ implementation(libs.androidx.window)
+ implementation(libs.androidx.startup.runtime)
+ implementation(libs.androidx.window.java)
+ implementation(libs.appcompat)
+ implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.core)
From 443df8926577f6290f380650787c318be370c0c9 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 17:31:14 -0400
Subject: [PATCH 04/49] Update libs.versions.toml with libraries for activity
embedding.
---
gradle/libs.versions.toml | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 72e8d497..284875ca 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -16,9 +16,12 @@ androidx-lifecycle-compose = "2.8.7"
androidx-lifecycle-runtime-compose = "2.8.7"
androidx-navigation = "2.8.7"
androidx-paging = "3.3.6"
+androidx-startup-runtime = "1.2.0"
androidx-test = "1.6.1"
androidx-test-espresso = "3.6.1"
-androidx-window = "1.4.0-beta02"
+androidx-window = "1.4.0-rc01"
+androidx-window-core = "1.4.0-beta02"
+androidx-window-java = "1.3.0"
androidxHiltNavigationCompose = "1.2.0"
coil = "2.7.0"
# @keep
@@ -112,6 +115,7 @@ androidx-protolayout = { module = "androidx.wear.protolayout:protolayout", versi
androidx-protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", version.ref = "protolayout" }
androidx-protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", version.ref = "protolayout" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" }
+androidx-startup-runtime = {group = "androidx.startup", version.ref = "androidx-startup-runtime" }
androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
androidx-test-runner = "androidx.test:runner:1.6.2"
@@ -122,7 +126,9 @@ androidx-tiles-tooling = { module = "androidx.wear.tiles:tiles-tooling", version
androidx-tiles-tooling-preview = { module = "androidx.wear.tiles:tiles-tooling-preview", version.ref = "tiles" }
androidx-wear = { module = "androidx.wear:wear", version.ref = "wear" }
androidx-wear-tooling-preview = { module = "androidx.wear:wear-tooling-preview", version.ref = "wearToolingPreview" }
-androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window" }
+androidx-window = { group = "androidx.window", version.ref = "androidx-window" }
+androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
+androidx-window-java = {group = "androidx.window", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
From bf205b1968b2f9335e29d360163b5822bb65fa88 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 17:40:46 -0400
Subject: [PATCH 05/49] Update libs.versions.toml with names for
androidx-window, androidx-window-java, and androidx-startup-runtime.
---
gradle/libs.versions.toml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 284875ca..1eb65762 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -115,7 +115,7 @@ androidx-protolayout = { module = "androidx.wear.protolayout:protolayout", versi
androidx-protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", version.ref = "protolayout" }
androidx-protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", version.ref = "protolayout" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" }
-androidx-startup-runtime = {group = "androidx.startup", version.ref = "androidx-startup-runtime" }
+androidx-startup-runtime = {group = "androidx.startup", name="startup-runtime" version.ref = "androidx-startup-runtime" }
androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
androidx-test-runner = "androidx.test:runner:1.6.2"
@@ -126,9 +126,9 @@ androidx-tiles-tooling = { module = "androidx.wear.tiles:tiles-tooling", version
androidx-tiles-tooling-preview = { module = "androidx.wear.tiles:tiles-tooling-preview", version.ref = "tiles" }
androidx-wear = { module = "androidx.wear:wear", version.ref = "wear" }
androidx-wear-tooling-preview = { module = "androidx.wear:wear-tooling-preview", version.ref = "wearToolingPreview" }
-androidx-window = { group = "androidx.window", version.ref = "androidx-window" }
+androidx-window = { group = "androidx.window", name="window" version.ref = "androidx-window" }
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
-androidx-window-java = {group = "androidx.window", version.ref = "androidx-window-java" }
+androidx-window-java = {group = "androidx.window", name = "window-java" version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
From d6ebf058394bd3305eaa47e2c83f2130ff474306 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 17:44:06 -0400
Subject: [PATCH 06/49] Update libs.versions.toml with names for
androidx-window, androidx-window-java, and androidx-startup-runtime.
---
gradle/libs.versions.toml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1eb65762..bfb3d19b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -115,7 +115,7 @@ androidx-protolayout = { module = "androidx.wear.protolayout:protolayout", versi
androidx-protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", version.ref = "protolayout" }
androidx-protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", version.ref = "protolayout" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" }
-androidx-startup-runtime = {group = "androidx.startup", name="startup-runtime" version.ref = "androidx-startup-runtime" }
+androidx-startup-runtime = {group = "androidx.startup", name="startup-runtime", version.ref = "androidx-startup-runtime" }
androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
androidx-test-runner = "androidx.test:runner:1.6.2"
@@ -126,9 +126,9 @@ androidx-tiles-tooling = { module = "androidx.wear.tiles:tiles-tooling", version
androidx-tiles-tooling-preview = { module = "androidx.wear.tiles:tiles-tooling-preview", version.ref = "tiles" }
androidx-wear = { module = "androidx.wear:wear", version.ref = "wear" }
androidx-wear-tooling-preview = { module = "androidx.wear:wear-tooling-preview", version.ref = "wearToolingPreview" }
-androidx-window = { group = "androidx.window", name="window" version.ref = "androidx-window" }
+androidx-window = { group = "androidx.window", name="window", version.ref = "androidx-window" }
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
-androidx-window-java = {group = "androidx.window", name = "window-java" version.ref = "androidx-window-java" }
+androidx-window-java = {group = "androidx.window", name = "window-java", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
From aa12646f6c32c8b4dd6dd5d513a2f24c1c736328 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 18:05:29 -0400
Subject: [PATCH 07/49] Update libs.versions.toml with appcompat library.
---
gradle/libs.versions.toml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index bfb3d19b..1995a937 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -23,6 +23,7 @@ androidx-window = "1.4.0-rc01"
androidx-window-core = "1.4.0-beta02"
androidx-window-java = "1.3.0"
androidxHiltNavigationCompose = "1.2.0"
+appcompat = "1.7.0"
coil = "2.7.0"
# @keep
compileSdk = "35"
@@ -130,6 +131,7 @@ androidx-window = { group = "androidx.window", name="window", version.ref = "and
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
androidx-window-java = {group = "androidx.window", name = "window-java", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
+appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wearComposeMaterial" }
From bb6bd7701933a95c054743d23388197531015f4d Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 18:06:47 -0400
Subject: [PATCH 08/49] Update build.gradle.kts removed libs.material.
---
misc/build.gradle.kts | 1 -
1 file changed, 1 deletion(-)
diff --git a/misc/build.gradle.kts b/misc/build.gradle.kts
index c9a40afd..41560b14 100644
--- a/misc/build.gradle.kts
+++ b/misc/build.gradle.kts
@@ -68,7 +68,6 @@ dependencies {
implementation(libs.androidx.startup.runtime)
implementation(libs.androidx.window.java)
implementation(libs.appcompat)
- implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.core)
From 4c9750c3a0152f7279b85ec2fc0f76d319228cea Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:15:58 -0400
Subject: [PATCH 09/49] Update libs.versions.toml added
androidx.constraintlayout library.
---
gradle/libs.versions.toml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1995a937..063352fd 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -5,7 +5,8 @@ androidx-activity-compose = "1.10.0"
androidx-appcompat = "1.7.0"
androidx-compose-bom = "2025.02.00"
androidx-compose-ui-test = "1.7.0-alpha08"
-androidx-constraintlayout = "2.2.0"
+androidx-constrainglayout = "2.2.1"
+androidx-constraintlayout-constraintlayout = "2.2.0"
androidx-constraintlayout-compose = "1.1.0"
androidx-coordinator-layout = "1.2.0"
androidx-corektx = "1.15.0"
@@ -92,7 +93,8 @@ androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
androidx-compose-ui-util = { module = "androidx.compose.ui:ui-util" }
androidx-compose-ui-viewbinding = { module = "androidx.compose.ui:ui-viewbinding" }
-androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout" }
+androidx-constraintlayout = {group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" }
+androidx-constraintlayout-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout-constraintlayout" }
androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "androidx-constraintlayout-compose" }
androidx-coordinator-layout = { module = "androidx.coordinatorlayout:coordinatorlayout", version.ref = "androidx-coordinator-layout" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-corektx" }
From 798f3808ab7b0f7bfbf04057c4bc418bcb82c594 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:24:53 -0400
Subject: [PATCH 10/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 063352fd..b0d6bfce 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -5,7 +5,7 @@ androidx-activity-compose = "1.10.0"
androidx-appcompat = "1.7.0"
androidx-compose-bom = "2025.02.00"
androidx-compose-ui-test = "1.7.0-alpha08"
-androidx-constrainglayout = "2.2.1"
+androidx-constraintlayout = "2.2.1"
androidx-constraintlayout-constraintlayout = "2.2.0"
androidx-constraintlayout-compose = "1.1.0"
androidx-coordinator-layout = "1.2.0"
@@ -93,7 +93,7 @@ androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
androidx-compose-ui-util = { module = "androidx.compose.ui:ui-util" }
androidx-compose-ui-viewbinding = { module = "androidx.compose.ui:ui-viewbinding" }
-androidx-constraintlayout = {group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" }
+androidx-constraintlayout = {module = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" }
androidx-constraintlayout-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout-constraintlayout" }
androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "androidx-constraintlayout-compose" }
androidx-coordinator-layout = { module = "androidx.coordinatorlayout:coordinatorlayout", version.ref = "androidx-coordinator-layout" }
@@ -118,7 +118,7 @@ androidx-protolayout = { module = "androidx.wear.protolayout:protolayout", versi
androidx-protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", version.ref = "protolayout" }
androidx-protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", version.ref = "protolayout" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" }
-androidx-startup-runtime = {group = "androidx.startup", name="startup-runtime", version.ref = "androidx-startup-runtime" }
+androidx-startup-runtime = {module = "androidx.startup", name="startup-runtime", version.ref = "androidx-startup-runtime" }
androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
androidx-test-runner = "androidx.test:runner:1.6.2"
@@ -129,11 +129,11 @@ androidx-tiles-tooling = { module = "androidx.wear.tiles:tiles-tooling", version
androidx-tiles-tooling-preview = { module = "androidx.wear.tiles:tiles-tooling-preview", version.ref = "tiles" }
androidx-wear = { module = "androidx.wear:wear", version.ref = "wear" }
androidx-wear-tooling-preview = { module = "androidx.wear:wear-tooling-preview", version.ref = "wearToolingPreview" }
-androidx-window = { group = "androidx.window", name="window", version.ref = "androidx-window" }
+androidx-window = { module = "androidx.window", name="window", version.ref = "androidx-window" }
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
-androidx-window-java = {group = "androidx.window", name = "window-java", version.ref = "androidx-window-java" }
+androidx-window-java = {module = "androidx.window", name = "window-java", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+appcompat = { module = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wearComposeMaterial" }
From 136410fb3d97d138531d292c49485eb478081d77 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:30:38 -0400
Subject: [PATCH 11/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b0d6bfce..2b4bc9de 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -133,7 +133,7 @@ androidx-window = { module = "androidx.window", name="window", version.ref = "an
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
androidx-window-java = {module = "androidx.window", name = "window-java", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
-appcompat = { module = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wearComposeMaterial" }
From 6f20f36acaa4bbd09681fd1d7a71994fb346b688 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:34:21 -0400
Subject: [PATCH 12/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 2b4bc9de..65b6d4ee 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -93,7 +93,7 @@ androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
androidx-compose-ui-util = { module = "androidx.compose.ui:ui-util" }
androidx-compose-ui-viewbinding = { module = "androidx.compose.ui:ui-viewbinding" }
-androidx-constraintlayout = {module = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" }
+androidx-constraintlayout = {module = "androidx.constraintlayout", version.ref = "androidx-constraintlayout" }
androidx-constraintlayout-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout-constraintlayout" }
androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "androidx-constraintlayout-compose" }
androidx-coordinator-layout = { module = "androidx.coordinatorlayout:coordinatorlayout", version.ref = "androidx-coordinator-layout" }
@@ -118,7 +118,7 @@ androidx-protolayout = { module = "androidx.wear.protolayout:protolayout", versi
androidx-protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", version.ref = "protolayout" }
androidx-protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", version.ref = "protolayout" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" }
-androidx-startup-runtime = {module = "androidx.startup", name="startup-runtime", version.ref = "androidx-startup-runtime" }
+androidx-startup-runtime = {module = "androidx.startup", version.ref = "androidx-startup-runtime" }
androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
androidx-test-runner = "androidx.test:runner:1.6.2"
@@ -129,11 +129,11 @@ androidx-tiles-tooling = { module = "androidx.wear.tiles:tiles-tooling", version
androidx-tiles-tooling-preview = { module = "androidx.wear.tiles:tiles-tooling-preview", version.ref = "tiles" }
androidx-wear = { module = "androidx.wear:wear", version.ref = "wear" }
androidx-wear-tooling-preview = { module = "androidx.wear:wear-tooling-preview", version.ref = "wearToolingPreview" }
-androidx-window = { module = "androidx.window", name="window", version.ref = "androidx-window" }
+androidx-window = { module = "androidx.window", version.ref = "androidx-window" }
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
-androidx-window-java = {module = "androidx.window", name = "window-java", version.ref = "androidx-window-java" }
+androidx-window-java = {module = "androidx.window", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+appcompat = { module = "androidx.appcompat", version.ref = "appcompat" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wearComposeMaterial" }
From 13d7a03072c81780c226f05a14d0fbc6745cd797 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:41:08 -0400
Subject: [PATCH 13/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 65b6d4ee..bdca26b3 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -133,7 +133,7 @@ androidx-window = { module = "androidx.window", version.ref = "androidx-window"
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
androidx-window-java = {module = "androidx.window", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
-appcompat = { module = "androidx.appcompat", version.ref = "appcompat" }
+appcompat = { group = "androidx.appcompat", name="appcompat" version.ref = "appcompat" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wearComposeMaterial" }
From 33cd0986deef6e2be9c94b54c7da472d736fa724 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:42:44 -0400
Subject: [PATCH 14/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index bdca26b3..5a10ca92 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -133,7 +133,7 @@ androidx-window = { module = "androidx.window", version.ref = "androidx-window"
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
androidx-window-java = {module = "androidx.window", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
-appcompat = { group = "androidx.appcompat", name="appcompat" version.ref = "appcompat" }
+appcompat = { group = "androidx.appcompat", name="appcompat", version.ref = "appcompat" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wearComposeMaterial" }
From 1dd1fbd8669ee02dd6571f2b1494d180fca21e41 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:47:41 -0400
Subject: [PATCH 15/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 5a10ca92..b1b9b01b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -118,7 +118,7 @@ androidx-protolayout = { module = "androidx.wear.protolayout:protolayout", versi
androidx-protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", version.ref = "protolayout" }
androidx-protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", version.ref = "protolayout" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" }
-androidx-startup-runtime = {module = "androidx.startup", version.ref = "androidx-startup-runtime" }
+androidx-startup-runtime = {module = "androidx.startup:startup-runtime", version.ref = "androidx-startup-runtime" }
androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
androidx-test-runner = "androidx.test:runner:1.6.2"
@@ -129,11 +129,11 @@ androidx-tiles-tooling = { module = "androidx.wear.tiles:tiles-tooling", version
androidx-tiles-tooling-preview = { module = "androidx.wear.tiles:tiles-tooling-preview", version.ref = "tiles" }
androidx-wear = { module = "androidx.wear:wear", version.ref = "wear" }
androidx-wear-tooling-preview = { module = "androidx.wear:wear-tooling-preview", version.ref = "wearToolingPreview" }
-androidx-window = { module = "androidx.window", version.ref = "androidx-window" }
+androidx-window = { module = "androidx.window:window", version.ref = "androidx-window" }
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
-androidx-window-java = {module = "androidx.window", version.ref = "androidx-window-java" }
+androidx-window-java = {module = "androidx.window:window-java", version.ref = "androidx-window-java" }
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.10.0"
-appcompat = { group = "androidx.appcompat", name="appcompat", version.ref = "appcompat" }
+appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wearComposeFoundation" }
compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wearComposeMaterial" }
From 034935ef959e1afe3b4d2ea79bf117c9e7b9749c Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:51:52 -0400
Subject: [PATCH 16/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b1b9b01b..f8fa3e64 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -93,8 +93,8 @@ androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
androidx-compose-ui-util = { module = "androidx.compose.ui:ui-util" }
androidx-compose-ui-viewbinding = { module = "androidx.compose.ui:ui-viewbinding" }
-androidx-constraintlayout = {module = "androidx.constraintlayout", version.ref = "androidx-constraintlayout" }
-androidx-constraintlayout-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout-constraintlayout" }
+androidx-constraintlayout = {module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout" }
+androidx-constraintlayout-constraintlayout = { module = "androidx.constraintlayout:constraintlayout-constraintlayout", version.ref = "androidx-constraintlayout-constraintlayout" }
androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "androidx-constraintlayout-compose" }
androidx-coordinator-layout = { module = "androidx.coordinatorlayout:coordinatorlayout", version.ref = "androidx-coordinator-layout" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-corektx" }
From ae4cd365eab839b30a502d503dcd38f637aed8af Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 20:16:12 -0400
Subject: [PATCH 17/49] Update build.gradle.kts
---
misc/build.gradle.kts | 1 +
1 file changed, 1 insertion(+)
diff --git a/misc/build.gradle.kts b/misc/build.gradle.kts
index 41560b14..b2619b9e 100644
--- a/misc/build.gradle.kts
+++ b/misc/build.gradle.kts
@@ -63,6 +63,7 @@ dependencies {
implementation(libs.kotlinx.serialization.json)
ksp(libs.hilt.compiler)
+ implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.window)
implementation(libs.androidx.startup.runtime)
From 47799718084d2c42e8ea3377e488643b40224198 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Fri, 14 Mar 2025 20:44:00 -0400
Subject: [PATCH 18/49] Update activity_main.xml
---
misc/src/main/res/layout/activity_main.xml | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/misc/src/main/res/layout/activity_main.xml b/misc/src/main/res/layout/activity_main.xml
index bf8b9297..59cbc1b4 100644
--- a/misc/src/main/res/layout/activity_main.xml
+++ b/misc/src/main/res/layout/activity_main.xml
@@ -2,19 +2,28 @@
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="@id/pinButton"
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintLeft_toLeftOf="@id/infoButton"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
From dcc267a7c0c8f47d9b212d78c5c10b86c25455da Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Mon, 17 Mar 2025 15:18:55 -0400
Subject: [PATCH 19/49] Update libs.versions.toml
---
gradle/libs.versions.toml | 2 --
1 file changed, 2 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index f8fa3e64..0ddeab5d 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -6,7 +6,6 @@ androidx-appcompat = "1.7.0"
androidx-compose-bom = "2025.02.00"
androidx-compose-ui-test = "1.7.0-alpha08"
androidx-constraintlayout = "2.2.1"
-androidx-constraintlayout-constraintlayout = "2.2.0"
androidx-constraintlayout-compose = "1.1.0"
androidx-coordinator-layout = "1.2.0"
androidx-corektx = "1.15.0"
@@ -94,7 +93,6 @@ androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling
androidx-compose-ui-util = { module = "androidx.compose.ui:ui-util" }
androidx-compose-ui-viewbinding = { module = "androidx.compose.ui:ui-viewbinding" }
androidx-constraintlayout = {module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout" }
-androidx-constraintlayout-constraintlayout = { module = "androidx.constraintlayout:constraintlayout-constraintlayout", version.ref = "androidx-constraintlayout-constraintlayout" }
androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "androidx-constraintlayout-compose" }
androidx-coordinator-layout = { module = "androidx.coordinatorlayout:coordinatorlayout", version.ref = "androidx-coordinator-layout" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-corektx" }
From b54beca6649ce3211313929680cdf1e978036297 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 18:17:22 -0400
Subject: [PATCH 20/49] Add files via upload
---
.../ActivityEmbeddingJavaSnippets.java | 376 ++++++++++++++++++
.../ActivityEmbeddingKotlinSnippets.kt | 349 ++++++++++++++++
2 files changed, 725 insertions(+)
create mode 100644 misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
create mode 100644 misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
new file mode 100644
index 00000000..f1d3c17f
--- /dev/null
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
@@ -0,0 +1,376 @@
+package com.example.snippets;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+import androidx.startup.Initializer;
+import androidx.window.WindowSdkExtensions;
+import androidx.window.core.ExperimentalWindowApi;
+import androidx.window.embedding.ActivityEmbeddingController;
+import androidx.window.embedding.ActivityFilter;
+import androidx.window.embedding.ActivityRule;
+import androidx.window.embedding.DividerAttributes;
+import androidx.window.embedding.EmbeddingAspectRatio;
+import androidx.window.embedding.RuleController;
+import androidx.window.embedding.SplitAttributes;
+import androidx.window.embedding.SplitAttributes.SplitType;
+import androidx.window.embedding.SplitController;
+import androidx.window.embedding.SplitPairFilter;
+import androidx.window.embedding.SplitPairRule;
+import androidx.window.embedding.SplitPinRule;
+import androidx.window.embedding.SplitPlaceholderRule;
+import androidx.window.embedding.SplitRule;
+import androidx.window.java.embedding.SplitControllerCallbackAdapter;
+import androidx.window.layout.FoldingFeature;
+import androidx.window.layout.WindowMetrics;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class ActivityEmbeddingJavaSnippets {
+
+ static class SnippetsActivity extends Activity {
+
+ private Context context;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // [START activity_embedding_split_attributes_calculator_java]
+ if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 2) {
+ SplitController.getInstance(this).setSplitAttributesCalculator(params -> {
+ Configuration parentConfiguration = params.getParentConfiguration();
+ SplitAttributes.Builder builder = new SplitAttributes.Builder();
+ if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ return builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build();
+ } else if (parentConfiguration.screenHeightDp >= 600) {
+ // Horizontal split for tall displays.
+ return builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.BOTTOM_TO_TOP)
+ .build();
+ } else {
+ // Fallback to expand the secondary container.
+ return builder
+ .setSplitType(SplitType.SPLIT_TYPE_EXPAND)
+ .build();
+ }
+ });
+ }
+ // [END activity_embedding_split_attributes_calculator_java]
+
+ // [START activity_embedding_split_attributes_calculator_tabletop_java ]
+ if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 2) {
+ SplitController.getInstance(this).setSplitAttributesCalculator(params -> {
+ String tag = params.getSplitRuleTag();
+ WindowMetrics parentWindowMetrics = params.getParentWindowMetrics();
+ Configuration parentConfiguration = params.getParentConfiguration();
+ List foldingFeatures =
+ params.getParentWindowLayoutInfo().getDisplayFeatures().stream().filter(
+ item -> item instanceof FoldingFeature)
+ .map(item -> (FoldingFeature) item)
+ .collect(Collectors.toList());
+ FoldingFeature feature = foldingFeatures.size() == 1 ? foldingFeatures.get(0) : null;
+ SplitAttributes.Builder builder = new SplitAttributes.Builder();
+ builder.setSplitType(SplitType.SPLIT_TYPE_HINGE);
+ if (feature != null && feature.isSeparating()) {
+ // Horizontal slit for tabletop posture.
+ return builder
+ .setSplitType(SplitType.SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ feature.getOrientation() == FoldingFeature.Orientation.HORIZONTAL
+ ? SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ : SplitAttributes.LayoutDirection.LOCALE)
+ .build();
+ }
+ else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ return builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build();
+ } else {
+ // No split for tall displays.
+ return builder
+ .setSplitType(SplitType.SPLIT_TYPE_EXPAND)
+ .build();
+ }
+ });
+ }
+ // [END activity_embedding_split_attributes_calculator_tabletop_java ]
+
+ // [START activity_embedding_splitPairFilter_java]
+ SplitPairFilter splitPairFilter = new SplitPairFilter(
+ new ComponentName(this, ListActivity.class),
+ new ComponentName(this, DetailActivity.class),
+ null
+ );
+ // [END activity_embedding_splitPairFilter_java]
+
+ // [START activity_embedding_filterSet_java]
+ Set filterSet = new HashSet<>();
+ filterSet.add(splitPairFilter);
+ // [END activity_embedding_filterSet_java]
+
+ // [START activity_embedding_splitAttributes_java]
+ SplitAttributes splitAttributes = new SplitAttributes.Builder()
+ .setSplitType(SplitAttributes.SplitType.ratio(0.33f))
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
+ .build();
+ // [START activity_embedding_splitAttributes_java]
+
+ // [START activity_embedding_splitPairRule_java]
+ SplitPairRule splitPairRule = new SplitPairRule.Builder(filterSet)
+ .setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithSecondary(SplitRule.FinishBehavior.NEVER)
+ .setFinishSecondaryWithPrimary(SplitRule.FinishBehavior.ALWAYS)
+ .setClearTop(false)
+ .build();
+ // [END activity_embedding_splitPairRule_java]
+
+ // [START activity_embedding_ruleController_java]
+ RuleController ruleController = RuleController.getInstance(this);
+ ruleController.addRule(splitPairRule);
+ // [END activity_embedding_ruleController_java]
+
+ // [START activity_embedding_placeholderActivityFilter_java]
+ ActivityFilter placeholderActivityFilter = new ActivityFilter(
+ new ComponentName(this, ListActivity.class),
+ null
+ );
+ // [END activity_embedding_placeholderActivityFilter_java]
+
+ // [START activity_embedding_placeholderActivityFilterSet_java]
+ Set placeholderActivityFilterSet = new HashSet<>();
+ placeholderActivityFilterSet.add(placeholderActivityFilter);
+ // [END activity_embedding_placeholderActivityFilterSet_java]
+
+ // [START activity_embedding_splitPlaceholderRule_java]
+ SplitPlaceholderRule splitPlaceholderRule = new SplitPlaceholderRule.Builder(
+ placeholderActivityFilterSet,
+ new Intent(this, PlaceholderActivity.class)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build();
+ // [END activity_embedding_splitPlaceholderRule_java]
+
+ // [START activity_embedding_addRuleSplitPlaceholderRule_java]
+ ruleController.addRule(splitPlaceholderRule);
+ // [END activity_embedding_addRuleSplitPlaceholderRule_java]
+
+ // [START activity_embedding_expandedActivityFilter_java]
+ ActivityFilter expandedActivityFilter = new ActivityFilter(
+ new ComponentName(this, ExpandedActivity.class),
+ null
+ );
+ // [END activity_embedding_expandedActivityFilter_java]
+
+ // [START activity_embedding_expandedActivityFilterSet_java]
+ Set expandedActivityFilterSet = new HashSet<>();
+ expandedActivityFilterSet.add(expandedActivityFilter);
+ // [END activity_embedding_expandedActivityFilterSet_java]
+
+ // [START activity_embedding_activityRule_java]
+ ActivityRule activityRule = new ActivityRule.Builder(
+ expandedActivityFilterSet
+ ).setAlwaysExpand(true)
+ .build();
+ // [END activity_embedding_activityRule_java]
+
+ // [START activity_embedding_addRuleActivityRule_java]
+ ruleController.addRule(activityRule);
+ // [END activity_embedding_addRuleActivityRule_java]
+
+ // [START activity_embedding_splitAttributesBuilder_java]
+ SplitAttributes.Builder _splitAttributesBuilder = new SplitAttributes.Builder()
+ .setSplitType(SplitAttributes.SplitType.ratio(0.33f))
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT);
+
+ if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 6) {
+ _splitAttributesBuilder.setDividerAttributes(
+ new DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(ContextCompat.getColor(this, R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
+ );
+ }
+ SplitAttributes _splitAttributes = _splitAttributesBuilder.build();
+ // [END activity_embedding_splitAttributesBuilder_java]
+
+ }
+
+
+ // [START activity_embedding_isActivityEmbedded_java]
+ boolean isActivityEmbedded(Activity activity) {
+ return ActivityEmbeddingController.getInstance(context).isActivityEmbedded(activity);
+ }
+ // [END activity_embedding_isActivityEmbedded_java]
+
+ }
+
+
+ /** @noinspection InnerClassMayBeStatic*/
+ // [START activity_embedding_DetailActivity_class_java]
+ public class DetailActivity extends AppCompatActivity {
+ void onOpenSubdetail() {
+ startActivity(new Intent(this, SubdetailActivity.class));
+ }
+ }
+ // [END activity_embedding_DetailActivity_class_java]
+
+
+ /** @noinspection InnerClassMayBeStatic*/
+ // [START activity_embedding_SplitInitializer_class_java]
+ public class SplitInitializer implements Initializer {
+
+ @NonNull
+ @Override
+ public RuleController create(@NonNull Context context) {
+ RuleController ruleController = RuleController.getInstance(context);
+ ruleController.setRules(
+ RuleController.parseRules(context, R.xml.main_split_config)
+ );
+ return ruleController;
+ }
+
+ @NonNull
+ @Override
+ public List>> dependencies() {
+ return Collections.emptyList();
+ }
+ }
+ // [END activity_embedding_SplitInitializer_class_java]
+
+
+ /**
+ * Function used by snippet.
+ */
+ private Class> classForItem(int item) { return Class.class; }
+
+ /** @noinspection InnerClassMayBeStatic*/
+ // [START activity_embedding_MenuActivity_class_java]
+ public class MenuActivity extends AppCompatActivity{
+ void onMenuItemSelected(int selectedMenuItem) {
+ startActivity(new Intent(this, classForItem(selectedMenuItem)));
+ }
+ }
+ // [END activity_embedding_MenuActivity_class_java]
+
+
+ /** @noinspection InnerClassMayBeStatic*/
+ // [START activity_embedding_B_class_java]
+ public class B extends AppCompatActivity{
+ void onOpenC() {
+ startActivity(new Intent(this, C.class));
+ }
+ }
+ // [END activity_embedding_B_class_java]
+
+
+ static class SnippetActivity2 extends Activity {
+
+ private Set filterSet = new HashSet<>();
+
+ // [START activity_embedding_onCreate_RuleController_java]
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ RuleController.getInstance(this)
+ .addRule(new SplitPairRule.Builder(filterSet).build());
+ startActivity(new Intent(this, DetailActivity.class));
+ }
+ // [START activity_embedding_onCreate_RuleController_java]
+
+ }
+
+
+ static class SnippetActivity3 extends AppCompatActivity {
+
+ @OptIn(markerClass = ExperimentalWindowApi.class)
+ // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_java'
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ new SplitControllerCallbackAdapter(SplitController.getInstance(this))
+ .addSplitListener(
+ this,
+ Runnable::run,
+ splitInfoList -> {
+ View layout = getLayoutInflater().inflate(R.layout.activity_main, null);
+ layout.findViewById(R.id.infoButton).setVisibility(
+ splitInfoList.isEmpty() ? View.VISIBLE : View.GONE);
+ });
+ }
+ // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_java'
+
+ }
+
+ static class SnippetActivity4 extends Activity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ // [START activity_embedding_pinButton_java]
+ Button pinButton = findViewById(R.id.pinButton);
+ pinButton.setOnClickListener( (view) -> {
+ SplitAttributes splitAttributes = new SplitAttributes.Builder()
+ .setSplitType(SplitAttributes.SplitType.ratio(0.66f))
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
+ .build();
+
+ SplitPinRule pinSplitRule = new SplitPinRule.Builder()
+ .setSticky(true)
+ .setDefaultSplitAttributes(splitAttributes)
+ .build();
+
+ SplitController.getInstance(
+ getApplicationContext()).pinTopActivityStack(getTaskId(),
+ pinSplitRule);
+ });
+ // [END activity_embedding_pinButton_java]
+
+ // [START activity_embedding_getSplitSupportStatus_java]
+ if (SplitController.getInstance(this).getSplitSupportStatus() ==
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
+ // Device supports split activity features.
+ }
+ // [END activity_embedding_getSplitSupportStatus_java]
+
+ }
+ }
+
+
+ /**
+ * Used by snippets.
+ */
+ static class ListActivity {}
+ static class SubdetailActivity {}
+ static class PlaceholderActivity {}
+ static class ExpandedActivity {}
+ static class C {}
+
+}
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
new file mode 100644
index 00000000..145e1427
--- /dev/null
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -0,0 +1,349 @@
+package com.example.snippets
+
+import android.app.Activity
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.view.View
+import android.widget.Button
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import androidx.startup.Initializer
+import androidx.window.WindowSdkExtensions
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.embedding.ActivityEmbeddingController
+import androidx.window.embedding.ActivityFilter
+import androidx.window.embedding.ActivityRule
+import androidx.window.embedding.DividerAttributes
+import androidx.window.embedding.EmbeddingAspectRatio
+import androidx.window.embedding.RuleController
+import androidx.window.embedding.SplitAttributes
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
+import androidx.window.embedding.SplitController
+import androidx.window.embedding.SplitInfo
+import androidx.window.embedding.SplitPairFilter
+import androidx.window.embedding.SplitPairRule
+import androidx.window.embedding.SplitPinRule
+import androidx.window.embedding.SplitPlaceholderRule
+import androidx.window.embedding.SplitRule
+import androidx.window.java.embedding.SplitControllerCallbackAdapter
+import androidx.window.layout.FoldingFeature
+import java.util.concurrent.Executor
+import kotlinx.coroutines.launch
+
+class ActivityEmbeddingKotlinSnippets {
+
+ class SnippetActivity: Activity() {
+
+ private val context = this
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ // [START activity_embedding_split_attributes_calculator_kotlin]
+ if (WindowSdkExtensions.getInstance().extensionVersion >= 2) {
+ SplitController.getInstance(this).setSplitAttributesCalculator { params ->
+ val parentConfiguration = params.parentConfiguration
+ val builder = SplitAttributes.Builder()
+ return@setSplitAttributesCalculator if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
+ } else if (parentConfiguration.screenHeightDp >= 600) {
+ // Horizontal split for tall displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.BOTTOM_TO_TOP)
+ .build()
+ } else {
+ // Fallback to expand the secondary container.
+ builder
+ .setSplitType(SPLIT_TYPE_EXPAND)
+ .build()
+ }
+ }
+ }
+ // [END activity_embedding_split_attributes_calculator_kotlin]
+
+ // [START activity_embedding_split_attributes_calculator_tabletop_kotlin]
+ if (WindowSdkExtensions.getInstance().extensionVersion >= 2) {
+ SplitController.getInstance(this).setSplitAttributesCalculator { params ->
+ val tag = params.splitRuleTag
+ val parentWindowMetrics = params.parentWindowMetrics
+ val parentConfiguration = params.parentConfiguration
+ val foldingFeatures =
+ params.parentWindowLayoutInfo.displayFeatures.filterIsInstance()
+ val feature = if (foldingFeatures.size == 1) foldingFeatures[0] else null
+ val builder = SplitAttributes.Builder()
+ builder.setSplitType(SPLIT_TYPE_HINGE)
+ return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ })
+ .build()
+ }
+ else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
+ } else {
+ // No split for tall displays.
+ builder
+ .setSplitType(SPLIT_TYPE_EXPAND)
+ .build()
+ }
+ }
+ }
+ // [END activity_embedding_split_attributes_calculator_tabletop_kotlin]
+
+ // [START activity_embedding_splitPairFilter_kotlin]
+ val splitPairFilter = SplitPairFilter(
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
+ )
+ // [END activity_embedding_splitPairFilter_kotlin]
+
+ // [START activity_embedding_filterSet_kotlin]
+ val filterSet = setOf(splitPairFilter)
+ // [END activity_embedding_filterSet_kotlin]
+
+ // [START activity_embedding_splitAttributes_kotlin]
+ val splitAttributes: SplitAttributes = SplitAttributes.Builder()
+ .setSplitType(SplitAttributes.SplitType.ratio(0.33f))
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
+ .build()
+ // [END activity_embedding_splitAttributes_kotlin]
+
+ // [START activity_embedding_splitPairRule_kotlin]
+ val splitPairRule = SplitPairRule.Builder(filterSet)
+ .setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithSecondary(SplitRule.FinishBehavior.NEVER)
+ .setFinishSecondaryWithPrimary(SplitRule.FinishBehavior.ALWAYS)
+ .setClearTop(false)
+ .build()
+ // [END activity_embedding_splitPairRule_kotlin]
+
+ // [START activity_embedding_ruleController_kotlin]
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
+ // [END activity_embedding_ruleController_kotlin]
+
+ // [START activity_embedding_placeholderActivityFilter_kotlin]
+ val placeholderActivityFilter = ActivityFilter(
+ ComponentName(this, ListActivity::class.java),
+ null
+ )
+ // [END activity_embedding_placeholderActivityFilter_kotlin]
+
+ // [START activity_embedding_placeholderActivityFilterSet_kotlin]
+ val placeholderActivityFilterSet = setOf(placeholderActivityFilter)
+ // [END activity_embedding_placeholderActivityFilterSet_kotlin]
+
+ // [START activity_embedding_splitPlaceholderRule_kotlin]
+ val splitPlaceholderRule = SplitPlaceholderRule.Builder(
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
+ // [END activity_embedding_splitPlaceholderRule_kotlin]
+
+ // [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
+ ruleController.addRule(splitPlaceholderRule)
+ // [END activity_embedding_addRuleSplitPlaceholderRule_kotlin]
+
+ // [START activity_embedding_expandedActivityFilter_kotlin]
+ val expandedActivityFilter = ActivityFilter(
+ ComponentName(this, ExpandedActivity::class.java),
+ null
+ )
+ // [END activity_embedding_expandedActivityFilter_kotlin]
+
+ // [START activity_embedding_expandedActivityFilterSet_kotlin]
+ val expandedActivityFilterSet = setOf(expandedActivityFilter)
+ // [END activity_embedding_expandedActivityFilterSet_kotlin]
+
+ // [START activity_embedding_activityRule_kotlin]
+ val activityRule = ActivityRule.Builder(expandedActivityFilterSet)
+ .setAlwaysExpand(true)
+ .build()
+ // [END activity_embedding_activityRule_kotlin]
+
+ // [START activity_embedding_addRuleActivityRule_kotlin]
+ ruleController.addRule(activityRule)
+ // [END activity_embedding_addRuleActivityRule_kotlin]
+
+ // [START activity_embedding_splitAttributesBuilder_kotlin]
+ val _splitAttributesBuilder: SplitAttributes.Builder = SplitAttributes.Builder()
+ .setSplitType(SplitAttributes.SplitType.ratio(0.33f))
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
+
+ if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
+ _splitAttributesBuilder.setDividerAttributes(
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
+ )
+ }
+ val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
+ // [END activity_embedding_splitAttributesBuilder_kotlin]
+
+ // [START activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END activity_embedding_isActivityEmbedded_kotlin]
+
+ }
+ }
+
+
+ // [START activity_embedding_DetailActivity_class_kotlin]
+ class DetailActivity: AppCompatActivity() {
+ fun onOpenSubdetail() {
+ startActivity(Intent(this, SubdetailActivity::class.java))
+ }
+ }
+ // [END activity_embedding_DetailActivity_class_kotlin]
+
+
+ // [START activity_embedding_SplitInitializer_class_kotlin]
+ class SplitInitializer : Initializer {
+
+ override fun create(context: Context): RuleController {
+ return RuleController.getInstance(context).apply {
+ setRules(RuleController.parseRules(context, R.xml.main_split_config))
+ }
+ }
+
+ override fun dependencies(): List>> {
+ return emptyList()
+ }
+ }
+ // [END activity_embedding_SplitInitializer_class_kotlin]
+
+
+ /**
+ * Function used by snippet.
+ */
+ fun classForItem(item: Int): Class<*> { return Class::class.java }
+
+ // [START activity_embedding_MenuActivity_class_kotlin]
+ inner class MenuActivity: AppCompatActivity() {
+ fun onMenuItemSelected(selectedMenuItem: Int) {
+ startActivity(Intent(this, classForItem(selectedMenuItem)))
+ }
+ }
+ // [END activity_embedding_MenuActivity_class_kotlin]
+
+
+ // [START activity_embedding_B_class_kotlin]
+ class B: AppCompatActivity() {
+ fun onOpenC() {
+ startActivity(Intent(this, C::class.java))
+ }
+ }
+ // [END activity_embedding_B_class_kotlin]
+
+
+ class SnippetActivity2: Activity() {
+
+ private val filterSet = HashSet()
+
+ // [START activity_embedding_onCreate_RuleController_kotlin]
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ RuleController.getInstance(this)
+ .addRule(SplitPairRule.Builder(filterSet).build())
+ startActivity(Intent(this, DetailActivity::class.java))
+ }
+ // [END activity_embedding_onCreate_RuleController_kotlin]
+ }
+
+
+ class SplitDeviceActivity: AppCompatActivity() {
+
+ @OptIn(ExperimentalWindowApi::class)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val splitController = SplitController.getInstance(this)
+ // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin'
+ val layout = layoutInflater.inflate(R.layout.activity_main, null)
+ val view = layout.findViewById(R.id.infoButton)
+ lifecycleScope.launch {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ splitController.splitInfoList(this@SplitDeviceActivity) // The activity instance.
+ .collect { list ->
+ view.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE
+ }
+ }
+ }
+ // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin'
+ }
+ }
+
+
+ class SnippetActivity3: AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?){
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
+ // [START activity_embedding_pinButton_kotlin]
+ val pinButton: Button = findViewById(R.id.pinButton)
+ pinButton.setOnClickListener {
+ val splitAttributes: SplitAttributes = SplitAttributes.Builder()
+ .setSplitType(SplitAttributes.SplitType.ratio(0.66f))
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
+ .build()
+
+ val pinSplitRule = SplitPinRule.Builder()
+ .setSticky(true)
+ .setDefaultSplitAttributes(splitAttributes)
+ .build()
+
+ SplitController.getInstance(applicationContext).pinTopActivityStack(taskId, pinSplitRule)
+ }
+ // [END activity_embedding_pinButton_kotlin]
+
+ // [START activity_embedding_getSplitSupportStatus_kotlin]
+ if (SplitController.getInstance(this).splitSupportStatus ==
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
+ // Device supports split activity features.
+ }
+ // [END activity_embedding_getSplitSupportStatus_kotlin]
+ }
+ }
+
+
+ /**
+ * Used by snippets.
+ */
+ class ListActivity {}
+ class SubdetailActivity {}
+ class PlaceholderActivity {}
+ class ExpandedActivity {}
+ class C {}
+
+}
From 583cdce0b37ac6b8526926567dccaefe67b5a224 Mon Sep 17 00:00:00 2001
From: JonEckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 22:19:02 +0000
Subject: [PATCH 21/49] Apply Spotless
---
.../ActivityEmbeddingKotlinSnippets.kt | 148 +++++++++---------
1 file changed, 75 insertions(+), 73 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index 145e1427..c7a4361a 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 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
+ *
+ * https://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 com.example.snippets
import android.app.Activity
@@ -5,12 +21,10 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.os.PersistableBundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.startup.Initializer
@@ -26,20 +40,17 @@ import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitController
-import androidx.window.embedding.SplitInfo
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
import androidx.window.embedding.SplitPinRule
import androidx.window.embedding.SplitPlaceholderRule
import androidx.window.embedding.SplitRule
-import androidx.window.java.embedding.SplitControllerCallbackAdapter
import androidx.window.layout.FoldingFeature
-import java.util.concurrent.Executor
import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity: Activity() {
+ class SnippetActivity : Activity() {
private val context = this
@@ -83,22 +94,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- })
- .build()
- }
- else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ }
+ )
+ .build()
+ } else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -111,9 +122,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END activity_embedding_splitPairFilter_kotlin]
@@ -141,8 +152,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_splitPairRule_kotlin]
// [START activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END activity_embedding_ruleController_kotlin]
// [START activity_embedding_placeholderActivityFilter_kotlin]
@@ -158,15 +169,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END activity_embedding_splitPlaceholderRule_kotlin]
// [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -175,8 +186,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END activity_embedding_expandedActivityFilter_kotlin]
@@ -201,35 +212,32 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END activity_embedding_splitAttributesBuilder_kotlin]
- // [START activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END activity_embedding_isActivityEmbedded_kotlin]
-
+ // [START activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END activity_embedding_isActivityEmbedded_kotlin]
}
}
-
// [START activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity: AppCompatActivity() {
+ class DetailActivity : AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END activity_embedding_DetailActivity_class_kotlin]
-
// [START activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -245,31 +253,28 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END activity_embedding_SplitInitializer_class_kotlin]
-
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity: AppCompatActivity() {
+ inner class MenuActivity : AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END activity_embedding_MenuActivity_class_kotlin]
-
// [START activity_embedding_B_class_kotlin]
- class B: AppCompatActivity() {
+ class B : AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END activity_embedding_B_class_kotlin]
-
- class SnippetActivity2: Activity() {
+ class SnippetActivity2 : Activity() {
private val filterSet = HashSet()
@@ -283,8 +288,7 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_onCreate_RuleController_kotlin]
}
-
- class SplitDeviceActivity: AppCompatActivity() {
+ class SplitDeviceActivity : AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -305,9 +309,8 @@ class ActivityEmbeddingKotlinSnippets {
}
}
-
- class SnippetActivity3: AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?){
+ class SnippetActivity3 : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START activity_embedding_pinButton_kotlin]
@@ -329,21 +332,20 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE
+ ) {
+ // Device supports split activity features.
}
// [END activity_embedding_getSplitSupportStatus_kotlin]
}
}
-
/**
* Used by snippets.
*/
- class ListActivity {}
- class SubdetailActivity {}
- class PlaceholderActivity {}
- class ExpandedActivity {}
- class C {}
-
+ class ListActivity
+ class SubdetailActivity
+ class PlaceholderActivity
+ class ExpandedActivity
+ class C
}
From 00902284feb3724c24b400aba26cbda12686de61 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 18:29:09 -0400
Subject: [PATCH 22/49] Add files via upload
---
.../ActivityEmbeddingJavaSnippets.java | 12 +-
.../ActivityEmbeddingKotlinSnippets.kt | 152 +++++++++---------
2 files changed, 81 insertions(+), 83 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
index f1d3c17f..db63cf22 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
@@ -74,7 +74,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
}
// [END activity_embedding_split_attributes_calculator_java]
- // [START activity_embedding_split_attributes_calculator_tabletop_java ]
+ // [START activity_embedding_split_attributes_calculator_tabletop_java]
if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 2) {
SplitController.getInstance(this).setSplitAttributesCalculator(params -> {
String tag = params.getSplitRuleTag();
@@ -111,7 +111,7 @@ else if (parentConfiguration.screenWidthDp >= 840) {
}
});
}
- // [END activity_embedding_split_attributes_calculator_tabletop_java ]
+ // [END activity_embedding_split_attributes_calculator_tabletop_java]
// [START activity_embedding_splitPairFilter_java]
SplitPairFilter splitPairFilter = new SplitPairFilter(
@@ -131,7 +131,7 @@ else if (parentConfiguration.screenWidthDp >= 840) {
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
.build();
- // [START activity_embedding_splitAttributes_java]
+ // [END activity_embedding_splitAttributes_java]
// [START activity_embedding_splitPairRule_java]
SplitPairRule splitPairRule = new SplitPairRule.Builder(filterSet)
@@ -301,7 +301,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
.addRule(new SplitPairRule.Builder(filterSet).build());
startActivity(new Intent(this, DetailActivity.class));
}
- // [START activity_embedding_onCreate_RuleController_java]
+ // [END activity_embedding_onCreate_RuleController_java]
}
@@ -309,7 +309,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
static class SnippetActivity3 extends AppCompatActivity {
@OptIn(markerClass = ExperimentalWindowApi.class)
- // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_java'
+ // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_java]
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -323,7 +323,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
splitInfoList.isEmpty() ? View.VISIBLE : View.GONE);
});
}
- // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_java'
+ // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_java]
}
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index c7a4361a..f60ee5ff 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,19 +1,3 @@
-/*
- * Copyright 2025 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
- *
- * https://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 com.example.snippets
import android.app.Activity
@@ -21,10 +5,12 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
+import android.os.PersistableBundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.startup.Initializer
@@ -40,17 +26,20 @@ import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitController
+import androidx.window.embedding.SplitInfo
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
import androidx.window.embedding.SplitPinRule
import androidx.window.embedding.SplitPlaceholderRule
import androidx.window.embedding.SplitRule
+import androidx.window.java.embedding.SplitControllerCallbackAdapter
import androidx.window.layout.FoldingFeature
+import java.util.concurrent.Executor
import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity : Activity() {
+ class SnippetActivity: Activity() {
private val context = this
@@ -94,22 +83,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- }
- )
- .build()
- } else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ })
+ .build()
+ }
+ else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -122,9 +111,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END activity_embedding_splitPairFilter_kotlin]
@@ -152,8 +141,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_splitPairRule_kotlin]
// [START activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END activity_embedding_ruleController_kotlin]
// [START activity_embedding_placeholderActivityFilter_kotlin]
@@ -169,15 +158,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END activity_embedding_splitPlaceholderRule_kotlin]
// [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -186,8 +175,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END activity_embedding_expandedActivityFilter_kotlin]
@@ -212,32 +201,35 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END activity_embedding_splitAttributesBuilder_kotlin]
- // [START activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END activity_embedding_isActivityEmbedded_kotlin]
+ // [START activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END activity_embedding_isActivityEmbedded_kotlin]
+
}
}
+
// [START activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity : AppCompatActivity() {
+ class DetailActivity: AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END activity_embedding_DetailActivity_class_kotlin]
+
// [START activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -253,28 +245,31 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END activity_embedding_SplitInitializer_class_kotlin]
+
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity : AppCompatActivity() {
+ inner class MenuActivity: AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END activity_embedding_MenuActivity_class_kotlin]
+
// [START activity_embedding_B_class_kotlin]
- class B : AppCompatActivity() {
+ class B: AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END activity_embedding_B_class_kotlin]
- class SnippetActivity2 : Activity() {
+
+ class SnippetActivity2: Activity() {
private val filterSet = HashSet()
@@ -288,13 +283,14 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_onCreate_RuleController_kotlin]
}
- class SplitDeviceActivity : AppCompatActivity() {
+
+ class SplitDeviceActivity: AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val splitController = SplitController.getInstance(this)
- // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin'
+ // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin]
val layout = layoutInflater.inflate(R.layout.activity_main, null)
val view = layout.findViewById(R.id.infoButton)
lifecycleScope.launch {
@@ -305,12 +301,13 @@ class ActivityEmbeddingKotlinSnippets {
}
}
}
- // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin'
+ // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin]
}
}
- class SnippetActivity3 : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
+
+ class SnippetActivity3: AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START activity_embedding_pinButton_kotlin]
@@ -332,20 +329,21 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE
- ) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
+ // Device supports split activity features.
}
// [END activity_embedding_getSplitSupportStatus_kotlin]
}
}
+
/**
* Used by snippets.
*/
- class ListActivity
- class SubdetailActivity
- class PlaceholderActivity
- class ExpandedActivity
- class C
+ class ListActivity {}
+ class SubdetailActivity {}
+ class PlaceholderActivity {}
+ class ExpandedActivity {}
+ class C {}
+
}
From 4be04ab0806c71f9efc776f49e5f8657c5d2d64c Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 18:30:33 -0400
Subject: [PATCH 23/49] Add activity embedding snippet files.
From 887ae05c6f1b0c191c413401f7b6a0e8937a6ecb Mon Sep 17 00:00:00 2001
From: JonEckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 22:32:10 +0000
Subject: [PATCH 24/49] Apply Spotless
---
.../ActivityEmbeddingKotlinSnippets.kt | 148 +++++++++---------
1 file changed, 75 insertions(+), 73 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index f60ee5ff..1a88d842 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 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
+ *
+ * https://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 com.example.snippets
import android.app.Activity
@@ -5,12 +21,10 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.os.PersistableBundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.startup.Initializer
@@ -26,20 +40,17 @@ import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitController
-import androidx.window.embedding.SplitInfo
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
import androidx.window.embedding.SplitPinRule
import androidx.window.embedding.SplitPlaceholderRule
import androidx.window.embedding.SplitRule
-import androidx.window.java.embedding.SplitControllerCallbackAdapter
import androidx.window.layout.FoldingFeature
-import java.util.concurrent.Executor
import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity: Activity() {
+ class SnippetActivity : Activity() {
private val context = this
@@ -83,22 +94,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- })
- .build()
- }
- else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ }
+ )
+ .build()
+ } else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -111,9 +122,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END activity_embedding_splitPairFilter_kotlin]
@@ -141,8 +152,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_splitPairRule_kotlin]
// [START activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END activity_embedding_ruleController_kotlin]
// [START activity_embedding_placeholderActivityFilter_kotlin]
@@ -158,15 +169,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END activity_embedding_splitPlaceholderRule_kotlin]
// [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -175,8 +186,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END activity_embedding_expandedActivityFilter_kotlin]
@@ -201,35 +212,32 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END activity_embedding_splitAttributesBuilder_kotlin]
- // [START activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END activity_embedding_isActivityEmbedded_kotlin]
-
+ // [START activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END activity_embedding_isActivityEmbedded_kotlin]
}
}
-
// [START activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity: AppCompatActivity() {
+ class DetailActivity : AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END activity_embedding_DetailActivity_class_kotlin]
-
// [START activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -245,31 +253,28 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END activity_embedding_SplitInitializer_class_kotlin]
-
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity: AppCompatActivity() {
+ inner class MenuActivity : AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END activity_embedding_MenuActivity_class_kotlin]
-
// [START activity_embedding_B_class_kotlin]
- class B: AppCompatActivity() {
+ class B : AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END activity_embedding_B_class_kotlin]
-
- class SnippetActivity2: Activity() {
+ class SnippetActivity2 : Activity() {
private val filterSet = HashSet()
@@ -283,8 +288,7 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_onCreate_RuleController_kotlin]
}
-
- class SplitDeviceActivity: AppCompatActivity() {
+ class SplitDeviceActivity : AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -305,9 +309,8 @@ class ActivityEmbeddingKotlinSnippets {
}
}
-
- class SnippetActivity3: AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?){
+ class SnippetActivity3 : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START activity_embedding_pinButton_kotlin]
@@ -329,21 +332,20 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE
+ ) {
+ // Device supports split activity features.
}
// [END activity_embedding_getSplitSupportStatus_kotlin]
}
}
-
/**
* Used by snippets.
*/
- class ListActivity {}
- class SubdetailActivity {}
- class PlaceholderActivity {}
- class ExpandedActivity {}
- class C {}
-
+ class ListActivity
+ class SubdetailActivity
+ class PlaceholderActivity
+ class ExpandedActivity
+ class C
}
From 85c20a711cf5cd8f0cd2221d5cd538104c27d4c9 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 18:34:24 -0400
Subject: [PATCH 25/49] Add activity embedding snippet files.
---
.../ActivityEmbeddingJavaSnippets.java | 2 +-
.../ActivityEmbeddingKotlinSnippets.kt | 150 +++++++++---------
2 files changed, 75 insertions(+), 77 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
index db63cf22..d050855d 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
@@ -365,7 +365,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
/**
- * Used by snippets.
+ * Classes used by snippets.
*/
static class ListActivity {}
static class SubdetailActivity {}
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index 1a88d842..43c85bae 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,19 +1,3 @@
-/*
- * Copyright 2025 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
- *
- * https://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 com.example.snippets
import android.app.Activity
@@ -21,10 +5,12 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
+import android.os.PersistableBundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.startup.Initializer
@@ -40,17 +26,20 @@ import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitController
+import androidx.window.embedding.SplitInfo
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
import androidx.window.embedding.SplitPinRule
import androidx.window.embedding.SplitPlaceholderRule
import androidx.window.embedding.SplitRule
+import androidx.window.java.embedding.SplitControllerCallbackAdapter
import androidx.window.layout.FoldingFeature
+import java.util.concurrent.Executor
import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity : Activity() {
+ class SnippetActivity: Activity() {
private val context = this
@@ -94,22 +83,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- }
- )
- .build()
- } else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ })
+ .build()
+ }
+ else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -122,9 +111,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END activity_embedding_splitPairFilter_kotlin]
@@ -152,8 +141,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_splitPairRule_kotlin]
// [START activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END activity_embedding_ruleController_kotlin]
// [START activity_embedding_placeholderActivityFilter_kotlin]
@@ -169,15 +158,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END activity_embedding_splitPlaceholderRule_kotlin]
// [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -186,8 +175,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END activity_embedding_expandedActivityFilter_kotlin]
@@ -212,32 +201,35 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END activity_embedding_splitAttributesBuilder_kotlin]
- // [START activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END activity_embedding_isActivityEmbedded_kotlin]
+ // [START activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END activity_embedding_isActivityEmbedded_kotlin]
+
}
}
+
// [START activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity : AppCompatActivity() {
+ class DetailActivity: AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END activity_embedding_DetailActivity_class_kotlin]
+
// [START activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -253,28 +245,31 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END activity_embedding_SplitInitializer_class_kotlin]
+
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity : AppCompatActivity() {
+ inner class MenuActivity: AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END activity_embedding_MenuActivity_class_kotlin]
+
// [START activity_embedding_B_class_kotlin]
- class B : AppCompatActivity() {
+ class B: AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END activity_embedding_B_class_kotlin]
- class SnippetActivity2 : Activity() {
+
+ class SnippetActivity2: Activity() {
private val filterSet = HashSet()
@@ -288,7 +283,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_onCreate_RuleController_kotlin]
}
- class SplitDeviceActivity : AppCompatActivity() {
+
+ class SplitDeviceActivity: AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -309,8 +305,9 @@ class ActivityEmbeddingKotlinSnippets {
}
}
- class SnippetActivity3 : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
+
+ class SnippetActivity3: AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START activity_embedding_pinButton_kotlin]
@@ -332,20 +329,21 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE
- ) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
+ // Device supports split activity features.
}
// [END activity_embedding_getSplitSupportStatus_kotlin]
}
}
+
/**
- * Used by snippets.
+ * Classes used by snippets.
*/
- class ListActivity
- class SubdetailActivity
- class PlaceholderActivity
- class ExpandedActivity
- class C
+ class ListActivity {}
+ class SubdetailActivity {}
+ class PlaceholderActivity {}
+ class ExpandedActivity {}
+ class C {}
+
}
From 455e814eb49703c6d255eb0a41a63e58b6f59ae3 Mon Sep 17 00:00:00 2001
From: JonEckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 22:36:20 +0000
Subject: [PATCH 26/49] Apply Spotless
---
.../ActivityEmbeddingKotlinSnippets.kt | 148 +++++++++---------
1 file changed, 75 insertions(+), 73 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index 43c85bae..95bb6c7e 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 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
+ *
+ * https://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 com.example.snippets
import android.app.Activity
@@ -5,12 +21,10 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.os.PersistableBundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.startup.Initializer
@@ -26,20 +40,17 @@ import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitController
-import androidx.window.embedding.SplitInfo
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
import androidx.window.embedding.SplitPinRule
import androidx.window.embedding.SplitPlaceholderRule
import androidx.window.embedding.SplitRule
-import androidx.window.java.embedding.SplitControllerCallbackAdapter
import androidx.window.layout.FoldingFeature
-import java.util.concurrent.Executor
import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity: Activity() {
+ class SnippetActivity : Activity() {
private val context = this
@@ -83,22 +94,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- })
- .build()
- }
- else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ }
+ )
+ .build()
+ } else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -111,9 +122,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END activity_embedding_splitPairFilter_kotlin]
@@ -141,8 +152,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_splitPairRule_kotlin]
// [START activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END activity_embedding_ruleController_kotlin]
// [START activity_embedding_placeholderActivityFilter_kotlin]
@@ -158,15 +169,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END activity_embedding_splitPlaceholderRule_kotlin]
// [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -175,8 +186,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END activity_embedding_expandedActivityFilter_kotlin]
@@ -201,35 +212,32 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END activity_embedding_splitAttributesBuilder_kotlin]
- // [START activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END activity_embedding_isActivityEmbedded_kotlin]
-
+ // [START activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END activity_embedding_isActivityEmbedded_kotlin]
}
}
-
// [START activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity: AppCompatActivity() {
+ class DetailActivity : AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END activity_embedding_DetailActivity_class_kotlin]
-
// [START activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -245,31 +253,28 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END activity_embedding_SplitInitializer_class_kotlin]
-
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity: AppCompatActivity() {
+ inner class MenuActivity : AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END activity_embedding_MenuActivity_class_kotlin]
-
// [START activity_embedding_B_class_kotlin]
- class B: AppCompatActivity() {
+ class B : AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END activity_embedding_B_class_kotlin]
-
- class SnippetActivity2: Activity() {
+ class SnippetActivity2 : Activity() {
private val filterSet = HashSet()
@@ -283,8 +288,7 @@ class ActivityEmbeddingKotlinSnippets {
// [END activity_embedding_onCreate_RuleController_kotlin]
}
-
- class SplitDeviceActivity: AppCompatActivity() {
+ class SplitDeviceActivity : AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -305,9 +309,8 @@ class ActivityEmbeddingKotlinSnippets {
}
}
-
- class SnippetActivity3: AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?){
+ class SnippetActivity3 : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START activity_embedding_pinButton_kotlin]
@@ -329,21 +332,20 @@ class ActivityEmbeddingKotlinSnippets {
// [START activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE
+ ) {
+ // Device supports split activity features.
}
// [END activity_embedding_getSplitSupportStatus_kotlin]
}
}
-
/**
* Classes used by snippets.
*/
- class ListActivity {}
- class SubdetailActivity {}
- class PlaceholderActivity {}
- class ExpandedActivity {}
- class C {}
-
+ class ListActivity
+ class SubdetailActivity
+ class PlaceholderActivity
+ class ExpandedActivity
+ class C
}
From f477466ad9d97d30d4994d449d55375cb9e70df2 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 18:42:14 -0400
Subject: [PATCH 27/49] Add activity embedding snippet files.
---
.../ActivityEmbeddingJavaSnippets.java | 100 +++----
.../ActivityEmbeddingKotlinSnippets.kt | 246 +++++++++---------
2 files changed, 172 insertions(+), 174 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
index d050855d..c06632b2 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
@@ -49,7 +49,7 @@ static class SnippetsActivity extends Activity {
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- // [START activity_embedding_split_attributes_calculator_java]
+ // [START android_activity_embeddingsplit_attributes_calculator_java]
if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 2) {
SplitController.getInstance(this).setSplitAttributesCalculator(params -> {
Configuration parentConfiguration = params.getParentConfiguration();
@@ -72,9 +72,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
}
});
}
- // [END activity_embedding_split_attributes_calculator_java]
+ // [END android_activity_embeddingsplit_attributes_calculator_java]
- // [START activity_embedding_split_attributes_calculator_tabletop_java]
+ // [START android_activity_embeddingsplit_attributes_calculator_tabletop_java]
if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 2) {
SplitController.getInstance(this).setSplitAttributesCalculator(params -> {
String tag = params.getSplitRuleTag();
@@ -111,29 +111,29 @@ else if (parentConfiguration.screenWidthDp >= 840) {
}
});
}
- // [END activity_embedding_split_attributes_calculator_tabletop_java]
+ // [END android_activity_embeddingsplit_attributes_calculator_tabletop_java]
- // [START activity_embedding_splitPairFilter_java]
+ // [START android_activity_embeddingsplitPairFilter_java]
SplitPairFilter splitPairFilter = new SplitPairFilter(
new ComponentName(this, ListActivity.class),
new ComponentName(this, DetailActivity.class),
null
);
- // [END activity_embedding_splitPairFilter_java]
+ // [END android_activity_embeddingsplitPairFilter_java]
- // [START activity_embedding_filterSet_java]
+ // [START android_activity_embeddingfilterSet_java]
Set filterSet = new HashSet<>();
filterSet.add(splitPairFilter);
- // [END activity_embedding_filterSet_java]
+ // [END android_activity_embeddingfilterSet_java]
- // [START activity_embedding_splitAttributes_java]
+ // [START android_activity_embeddingsplitAttributes_java]
SplitAttributes splitAttributes = new SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
.build();
- // [END activity_embedding_splitAttributes_java]
+ // [END android_activity_embeddingsplitAttributes_java]
- // [START activity_embedding_splitPairRule_java]
+ // [START android_activity_embeddingsplitPairRule_java]
SplitPairRule splitPairRule = new SplitPairRule.Builder(filterSet)
.setDefaultSplitAttributes(splitAttributes)
.setMinWidthDp(840)
@@ -143,26 +143,26 @@ else if (parentConfiguration.screenWidthDp >= 840) {
.setFinishSecondaryWithPrimary(SplitRule.FinishBehavior.ALWAYS)
.setClearTop(false)
.build();
- // [END activity_embedding_splitPairRule_java]
+ // [END android_activity_embeddingsplitPairRule_java]
- // [START activity_embedding_ruleController_java]
+ // [START android_activity_embeddingruleController_java]
RuleController ruleController = RuleController.getInstance(this);
ruleController.addRule(splitPairRule);
- // [END activity_embedding_ruleController_java]
+ // [END android_activity_embeddingruleController_java]
- // [START activity_embedding_placeholderActivityFilter_java]
+ // [START android_activity_embeddingplaceholderActivityFilter_java]
ActivityFilter placeholderActivityFilter = new ActivityFilter(
new ComponentName(this, ListActivity.class),
null
);
- // [END activity_embedding_placeholderActivityFilter_java]
+ // [END android_activity_embeddingplaceholderActivityFilter_java]
- // [START activity_embedding_placeholderActivityFilterSet_java]
+ // [START android_activity_embeddingplaceholderActivityFilterSet_java]
Set placeholderActivityFilterSet = new HashSet<>();
placeholderActivityFilterSet.add(placeholderActivityFilter);
- // [END activity_embedding_placeholderActivityFilterSet_java]
+ // [END android_activity_embeddingplaceholderActivityFilterSet_java]
- // [START activity_embedding_splitPlaceholderRule_java]
+ // [START android_activity_embeddingsplitPlaceholderRule_java]
SplitPlaceholderRule splitPlaceholderRule = new SplitPlaceholderRule.Builder(
placeholderActivityFilterSet,
new Intent(this, PlaceholderActivity.class)
@@ -173,36 +173,36 @@ else if (parentConfiguration.screenWidthDp >= 840) {
.setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
.setSticky(false)
.build();
- // [END activity_embedding_splitPlaceholderRule_java]
+ // [END android_activity_embeddingsplitPlaceholderRule_java]
- // [START activity_embedding_addRuleSplitPlaceholderRule_java]
+ // [START android_activity_embeddingaddRuleSplitPlaceholderRule_java]
ruleController.addRule(splitPlaceholderRule);
- // [END activity_embedding_addRuleSplitPlaceholderRule_java]
+ // [END android_activity_embeddingaddRuleSplitPlaceholderRule_java]
- // [START activity_embedding_expandedActivityFilter_java]
+ // [START android_activity_embeddingexpandedActivityFilter_java]
ActivityFilter expandedActivityFilter = new ActivityFilter(
new ComponentName(this, ExpandedActivity.class),
null
);
- // [END activity_embedding_expandedActivityFilter_java]
+ // [END android_activity_embeddingexpandedActivityFilter_java]
- // [START activity_embedding_expandedActivityFilterSet_java]
+ // [START android_activity_embeddingexpandedActivityFilterSet_java]
Set expandedActivityFilterSet = new HashSet<>();
expandedActivityFilterSet.add(expandedActivityFilter);
- // [END activity_embedding_expandedActivityFilterSet_java]
+ // [END android_activity_embeddingexpandedActivityFilterSet_java]
- // [START activity_embedding_activityRule_java]
+ // [START android_activity_embeddingactivityRule_java]
ActivityRule activityRule = new ActivityRule.Builder(
expandedActivityFilterSet
).setAlwaysExpand(true)
.build();
- // [END activity_embedding_activityRule_java]
+ // [END android_activity_embeddingactivityRule_java]
- // [START activity_embedding_addRuleActivityRule_java]
+ // [START android_activity_embeddingaddRuleActivityRule_java]
ruleController.addRule(activityRule);
- // [END activity_embedding_addRuleActivityRule_java]
+ // [END android_activity_embeddingaddRuleActivityRule_java]
- // [START activity_embedding_splitAttributesBuilder_java]
+ // [START android_activity_embeddingsplitAttributesBuilder_java]
SplitAttributes.Builder _splitAttributesBuilder = new SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT);
@@ -217,32 +217,32 @@ else if (parentConfiguration.screenWidthDp >= 840) {
);
}
SplitAttributes _splitAttributes = _splitAttributesBuilder.build();
- // [END activity_embedding_splitAttributesBuilder_java]
+ // [END android_activity_embeddingsplitAttributesBuilder_java]
}
- // [START activity_embedding_isActivityEmbedded_java]
+ // [START android_activity_embeddingisActivityEmbedded_java]
boolean isActivityEmbedded(Activity activity) {
return ActivityEmbeddingController.getInstance(context).isActivityEmbedded(activity);
}
- // [END activity_embedding_isActivityEmbedded_java]
+ // [END android_activity_embeddingisActivityEmbedded_java]
}
/** @noinspection InnerClassMayBeStatic*/
- // [START activity_embedding_DetailActivity_class_java]
+ // [START android_activity_embeddingDetailActivity_class_java]
public class DetailActivity extends AppCompatActivity {
void onOpenSubdetail() {
startActivity(new Intent(this, SubdetailActivity.class));
}
}
- // [END activity_embedding_DetailActivity_class_java]
+ // [END android_activity_embeddingDetailActivity_class_java]
/** @noinspection InnerClassMayBeStatic*/
- // [START activity_embedding_SplitInitializer_class_java]
+ // [START android_activity_embeddingSplitInitializer_class_java]
public class SplitInitializer implements Initializer {
@NonNull
@@ -261,7 +261,7 @@ public List>> dependencies() {
return Collections.emptyList();
}
}
- // [END activity_embedding_SplitInitializer_class_java]
+ // [END android_activity_embeddingSplitInitializer_class_java]
/**
@@ -270,30 +270,30 @@ public List>> dependencies() {
private Class> classForItem(int item) { return Class.class; }
/** @noinspection InnerClassMayBeStatic*/
- // [START activity_embedding_MenuActivity_class_java]
+ // [START android_activity_embeddingMenuActivity_class_java]
public class MenuActivity extends AppCompatActivity{
void onMenuItemSelected(int selectedMenuItem) {
startActivity(new Intent(this, classForItem(selectedMenuItem)));
}
}
- // [END activity_embedding_MenuActivity_class_java]
+ // [END android_activity_embeddingMenuActivity_class_java]
/** @noinspection InnerClassMayBeStatic*/
- // [START activity_embedding_B_class_java]
+ // [START android_activity_embeddingB_class_java]
public class B extends AppCompatActivity{
void onOpenC() {
startActivity(new Intent(this, C.class));
}
}
- // [END activity_embedding_B_class_java]
+ // [END android_activity_embeddingB_class_java]
static class SnippetActivity2 extends Activity {
private Set filterSet = new HashSet<>();
- // [START activity_embedding_onCreate_RuleController_java]
+ // [START android_activity_embeddingonCreate_RuleController_java]
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -301,7 +301,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
.addRule(new SplitPairRule.Builder(filterSet).build());
startActivity(new Intent(this, DetailActivity.class));
}
- // [END activity_embedding_onCreate_RuleController_java]
+ // [END android_activity_embeddingonCreate_RuleController_java]
}
@@ -309,7 +309,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
static class SnippetActivity3 extends AppCompatActivity {
@OptIn(markerClass = ExperimentalWindowApi.class)
- // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_java]
+ // [START android_activity_embeddingonCreate_SplitControllerCallbackAdapter_java]
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -323,7 +323,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
splitInfoList.isEmpty() ? View.VISIBLE : View.GONE);
});
}
- // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_java]
+ // [END android_activity_embeddingonCreate_SplitControllerCallbackAdapter_java]
}
@@ -334,7 +334,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- // [START activity_embedding_pinButton_java]
+ // [START android_activity_embeddingpinButton_java]
Button pinButton = findViewById(R.id.pinButton);
pinButton.setOnClickListener( (view) -> {
SplitAttributes splitAttributes = new SplitAttributes.Builder()
@@ -351,14 +351,14 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
getApplicationContext()).pinTopActivityStack(getTaskId(),
pinSplitRule);
});
- // [END activity_embedding_pinButton_java]
+ // [END android_activity_embeddingpinButton_java]
- // [START activity_embedding_getSplitSupportStatus_java]
+ // [START android_activity_embeddinggetSplitSupportStatus_java]
if (SplitController.getInstance(this).getSplitSupportStatus() ==
SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
// Device supports split activity features.
}
- // [END activity_embedding_getSplitSupportStatus_java]
+ // [END android_activity_embeddinggetSplitSupportStatus_java]
}
}
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index 95bb6c7e..3ea56fc1 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,19 +1,3 @@
-/*
- * Copyright 2025 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
- *
- * https://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 com.example.snippets
import android.app.Activity
@@ -21,10 +5,12 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
+import android.os.PersistableBundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.startup.Initializer
@@ -40,24 +26,27 @@ import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitController
+import androidx.window.embedding.SplitInfo
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
import androidx.window.embedding.SplitPinRule
import androidx.window.embedding.SplitPlaceholderRule
import androidx.window.embedding.SplitRule
+import androidx.window.java.embedding.SplitControllerCallbackAdapter
import androidx.window.layout.FoldingFeature
+import java.util.concurrent.Executor
import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity : Activity() {
+ class SnippetActivity: Activity() {
private val context = this
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- // [START activity_embedding_split_attributes_calculator_kotlin]
+ // [START android_activity_embedding_split_attributes_calculator_kotlin]
if (WindowSdkExtensions.getInstance().extensionVersion >= 2) {
SplitController.getInstance(this).setSplitAttributesCalculator { params ->
val parentConfiguration = params.parentConfiguration
@@ -80,9 +69,9 @@ class ActivityEmbeddingKotlinSnippets {
}
}
}
- // [END activity_embedding_split_attributes_calculator_kotlin]
+ // [END android_activity_embedding_split_attributes_calculator_kotlin]
- // [START activity_embedding_split_attributes_calculator_tabletop_kotlin]
+ // [START android_activity_embedding_split_attributes_calculator_tabletop_kotlin]
if (WindowSdkExtensions.getInstance().extensionVersion >= 2) {
SplitController.getInstance(this).setSplitAttributesCalculator { params ->
val tag = params.splitRuleTag
@@ -94,22 +83,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- }
- )
- .build()
- } else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ })
+ .build()
+ }
+ else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -118,28 +107,28 @@ class ActivityEmbeddingKotlinSnippets {
}
}
}
- // [END activity_embedding_split_attributes_calculator_tabletop_kotlin]
+ // [END android_activity_embedding_split_attributes_calculator_tabletop_kotlin]
- // [START activity_embedding_splitPairFilter_kotlin]
+ // [START android_activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
- // [END activity_embedding_splitPairFilter_kotlin]
+ // [END android_activity_embedding_splitPairFilter_kotlin]
- // [START activity_embedding_filterSet_kotlin]
+ // [START android_activity_embedding_filterSet_kotlin]
val filterSet = setOf(splitPairFilter)
- // [END activity_embedding_filterSet_kotlin]
+ // [END android_activity_embedding_filterSet_kotlin]
- // [START activity_embedding_splitAttributes_kotlin]
+ // [START android_activity_embedding_splitAttributes_kotlin]
val splitAttributes: SplitAttributes = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
.build()
- // [END activity_embedding_splitAttributes_kotlin]
+ // [END android_activity_embedding_splitAttributes_kotlin]
- // [START activity_embedding_splitPairRule_kotlin]
+ // [START android_activity_embedding_splitPairRule_kotlin]
val splitPairRule = SplitPairRule.Builder(filterSet)
.setDefaultSplitAttributes(splitAttributes)
.setMinWidthDp(840)
@@ -149,96 +138,99 @@ class ActivityEmbeddingKotlinSnippets {
.setFinishSecondaryWithPrimary(SplitRule.FinishBehavior.ALWAYS)
.setClearTop(false)
.build()
- // [END activity_embedding_splitPairRule_kotlin]
+ // [END android_activity_embedding_splitPairRule_kotlin]
- // [START activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
- // [END activity_embedding_ruleController_kotlin]
+ // [START android_activity_embedding_ruleController_kotlin]
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
+ // [END android_activity_embedding_ruleController_kotlin]
- // [START activity_embedding_placeholderActivityFilter_kotlin]
+ // [START android_activity_embedding_placeholderActivityFilter_kotlin]
val placeholderActivityFilter = ActivityFilter(
ComponentName(this, ListActivity::class.java),
null
)
- // [END activity_embedding_placeholderActivityFilter_kotlin]
+ // [END android_activity_embedding_placeholderActivityFilter_kotlin]
- // [START activity_embedding_placeholderActivityFilterSet_kotlin]
+ // [START android_activity_embedding_placeholderActivityFilterSet_kotlin]
val placeholderActivityFilterSet = setOf(placeholderActivityFilter)
- // [END activity_embedding_placeholderActivityFilterSet_kotlin]
+ // [END android_activity_embedding_placeholderActivityFilterSet_kotlin]
- // [START activity_embedding_splitPlaceholderRule_kotlin]
+ // [START android_activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
- // [END activity_embedding_splitPlaceholderRule_kotlin]
-
- // [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
+ // [END android_activity_embedding_splitPlaceholderRule_kotlin]
+
+ // [START android_activity_embedding_addRuleSplitPlaceholderRule_kotlin]
ruleController.addRule(splitPlaceholderRule)
- // [END activity_embedding_addRuleSplitPlaceholderRule_kotlin]
+ // [END android_activity_embedding_addRuleSplitPlaceholderRule_kotlin]
- // [START activity_embedding_expandedActivityFilter_kotlin]
+ // [START android_activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
- // [END activity_embedding_expandedActivityFilter_kotlin]
+ // [END android_activity_embedding_expandedActivityFilter_kotlin]
- // [START activity_embedding_expandedActivityFilterSet_kotlin]
+ // [START android_activity_embedding_expandedActivityFilterSet_kotlin]
val expandedActivityFilterSet = setOf(expandedActivityFilter)
- // [END activity_embedding_expandedActivityFilterSet_kotlin]
+ // [END android_activity_embedding_expandedActivityFilterSet_kotlin]
- // [START activity_embedding_activityRule_kotlin]
+ // [START android_activity_embedding_activityRule_kotlin]
val activityRule = ActivityRule.Builder(expandedActivityFilterSet)
.setAlwaysExpand(true)
.build()
- // [END activity_embedding_activityRule_kotlin]
+ // [END android_activity_embedding_activityRule_kotlin]
- // [START activity_embedding_addRuleActivityRule_kotlin]
+ // [START android_activity_embedding_addRuleActivityRule_kotlin]
ruleController.addRule(activityRule)
- // [END activity_embedding_addRuleActivityRule_kotlin]
+ // [END android_activity_embedding_addRuleActivityRule_kotlin]
- // [START activity_embedding_splitAttributesBuilder_kotlin]
+ // [START android_activity_embedding_splitAttributesBuilder_kotlin]
val _splitAttributesBuilder: SplitAttributes.Builder = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
- // [END activity_embedding_splitAttributesBuilder_kotlin]
+ // [END android_activity_embedding_splitAttributesBuilder_kotlin]
+
+ // [START android_activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END android_activity_embedding_isActivityEmbedded_kotlin]
- // [START activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END activity_embedding_isActivityEmbedded_kotlin]
}
}
- // [START activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity : AppCompatActivity() {
+
+ // [START android_activity_embedding_DetailActivity_class_kotlin]
+ class DetailActivity: AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
- // [END activity_embedding_DetailActivity_class_kotlin]
+ // [END android_activity_embedding_DetailActivity_class_kotlin]
+
- // [START activity_embedding_SplitInitializer_class_kotlin]
+ // [START android_activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
override fun create(context: Context): RuleController {
@@ -251,50 +243,54 @@ class ActivityEmbeddingKotlinSnippets {
return emptyList()
}
}
- // [END activity_embedding_SplitInitializer_class_kotlin]
+ // [END android_activity_embedding_SplitInitializer_class_kotlin]
+
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
- // [START activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity : AppCompatActivity() {
+ // [START android_activity_embedding_MenuActivity_class_kotlin]
+ inner class MenuActivity: AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
- // [END activity_embedding_MenuActivity_class_kotlin]
+ // [END android_activity_embedding_MenuActivity_class_kotlin]
+
- // [START activity_embedding_B_class_kotlin]
- class B : AppCompatActivity() {
+ // [START android_activity_embedding_B_class_kotlin]
+ class B: AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
- // [END activity_embedding_B_class_kotlin]
+ // [END android_activity_embedding_B_class_kotlin]
- class SnippetActivity2 : Activity() {
+
+ class SnippetActivity2: Activity() {
private val filterSet = HashSet()
- // [START activity_embedding_onCreate_RuleController_kotlin]
+ // [START android_activity_embedding_onCreate_RuleController_kotlin]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
RuleController.getInstance(this)
.addRule(SplitPairRule.Builder(filterSet).build())
startActivity(Intent(this, DetailActivity::class.java))
}
- // [END activity_embedding_onCreate_RuleController_kotlin]
+ // [END android_activity_embedding_onCreate_RuleController_kotlin]
}
- class SplitDeviceActivity : AppCompatActivity() {
+
+ class SplitDeviceActivity: AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val splitController = SplitController.getInstance(this)
- // [START activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin]
+ // [START android_activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin]
val layout = layoutInflater.inflate(R.layout.activity_main, null)
val view = layout.findViewById(R.id.infoButton)
lifecycleScope.launch {
@@ -305,15 +301,16 @@ class ActivityEmbeddingKotlinSnippets {
}
}
}
- // [END activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin]
+ // [END android_activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin]
}
}
- class SnippetActivity3 : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
+
+ class SnippetActivity3: AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- // [START activity_embedding_pinButton_kotlin]
+ // [START android_activity_embedding_pinButton_kotlin]
val pinButton: Button = findViewById(R.id.pinButton)
pinButton.setOnClickListener {
val splitAttributes: SplitAttributes = SplitAttributes.Builder()
@@ -328,24 +325,25 @@ class ActivityEmbeddingKotlinSnippets {
SplitController.getInstance(applicationContext).pinTopActivityStack(taskId, pinSplitRule)
}
- // [END activity_embedding_pinButton_kotlin]
+ // [END android_activity_embedding_pinButton_kotlin]
- // [START activity_embedding_getSplitSupportStatus_kotlin]
+ // [START android_activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE
- ) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
+ // Device supports split activity features.
}
- // [END activity_embedding_getSplitSupportStatus_kotlin]
+ // [END android_activity_embedding_getSplitSupportStatus_kotlin]
}
}
+
/**
* Classes used by snippets.
*/
- class ListActivity
- class SubdetailActivity
- class PlaceholderActivity
- class ExpandedActivity
- class C
+ class ListActivity {}
+ class SubdetailActivity {}
+ class PlaceholderActivity {}
+ class ExpandedActivity {}
+ class C {}
+
}
From d84beb4f9774c8c369066889f2357b27d2df0616 Mon Sep 17 00:00:00 2001
From: JonEckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 22:43:43 +0000
Subject: [PATCH 28/49] Apply Spotless
---
.../ActivityEmbeddingKotlinSnippets.kt | 148 +++++++++---------
1 file changed, 75 insertions(+), 73 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index 3ea56fc1..7561dabd 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 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
+ *
+ * https://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 com.example.snippets
import android.app.Activity
@@ -5,12 +21,10 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.os.PersistableBundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.startup.Initializer
@@ -26,20 +40,17 @@ import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitController
-import androidx.window.embedding.SplitInfo
import androidx.window.embedding.SplitPairFilter
import androidx.window.embedding.SplitPairRule
import androidx.window.embedding.SplitPinRule
import androidx.window.embedding.SplitPlaceholderRule
import androidx.window.embedding.SplitRule
-import androidx.window.java.embedding.SplitControllerCallbackAdapter
import androidx.window.layout.FoldingFeature
-import java.util.concurrent.Executor
import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity: Activity() {
+ class SnippetActivity : Activity() {
private val context = this
@@ -83,22 +94,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- })
- .build()
- }
- else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ }
+ )
+ .build()
+ } else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -111,9 +122,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END android_activity_embedding_splitPairFilter_kotlin]
@@ -141,8 +152,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END android_activity_embedding_splitPairRule_kotlin]
// [START android_activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END android_activity_embedding_ruleController_kotlin]
// [START android_activity_embedding_placeholderActivityFilter_kotlin]
@@ -158,15 +169,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END android_activity_embedding_splitPlaceholderRule_kotlin]
// [START android_activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -175,8 +186,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END android_activity_embedding_expandedActivityFilter_kotlin]
@@ -201,35 +212,32 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END android_activity_embedding_splitAttributesBuilder_kotlin]
- // [START android_activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END android_activity_embedding_isActivityEmbedded_kotlin]
-
+ // [START android_activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END android_activity_embedding_isActivityEmbedded_kotlin]
}
}
-
// [START android_activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity: AppCompatActivity() {
+ class DetailActivity : AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END android_activity_embedding_DetailActivity_class_kotlin]
-
// [START android_activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -245,31 +253,28 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END android_activity_embedding_SplitInitializer_class_kotlin]
-
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START android_activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity: AppCompatActivity() {
+ inner class MenuActivity : AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END android_activity_embedding_MenuActivity_class_kotlin]
-
// [START android_activity_embedding_B_class_kotlin]
- class B: AppCompatActivity() {
+ class B : AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END android_activity_embedding_B_class_kotlin]
-
- class SnippetActivity2: Activity() {
+ class SnippetActivity2 : Activity() {
private val filterSet = HashSet()
@@ -283,8 +288,7 @@ class ActivityEmbeddingKotlinSnippets {
// [END android_activity_embedding_onCreate_RuleController_kotlin]
}
-
- class SplitDeviceActivity: AppCompatActivity() {
+ class SplitDeviceActivity : AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -305,9 +309,8 @@ class ActivityEmbeddingKotlinSnippets {
}
}
-
- class SnippetActivity3: AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?){
+ class SnippetActivity3 : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START android_activity_embedding_pinButton_kotlin]
@@ -329,21 +332,20 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE
+ ) {
+ // Device supports split activity features.
}
// [END android_activity_embedding_getSplitSupportStatus_kotlin]
}
}
-
/**
* Classes used by snippets.
*/
- class ListActivity {}
- class SubdetailActivity {}
- class PlaceholderActivity {}
- class ExpandedActivity {}
- class C {}
-
+ class ListActivity
+ class SubdetailActivity
+ class PlaceholderActivity
+ class ExpandedActivity
+ class C
}
From a5f2fd5e0e63606ad8579d81082d2c3bd8216949 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 19:04:42 -0400
Subject: [PATCH 29/49] Update colors.xml
---
misc/src/main/res/values/colors.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/misc/src/main/res/values/colors.xml b/misc/src/main/res/values/colors.xml
index f8c6127d..ab21f324 100644
--- a/misc/src/main/res/values/colors.xml
+++ b/misc/src/main/res/values/colors.xml
@@ -7,4 +7,5 @@
#FF018786
#FF000000
#FFFFFFFF
-
\ No newline at end of file
+ #FFFFAA00
+
From c844aeadf43be26bd089fcd0001e5f6659dfca24 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 19:27:54 -0400
Subject: [PATCH 30/49] Create main_split_config.xml
---
misc/src/main/res/xml/main_split_config.xml | 1 +
1 file changed, 1 insertion(+)
create mode 100644 misc/src/main/res/xml/main_split_config.xml
diff --git a/misc/src/main/res/xml/main_split_config.xml b/misc/src/main/res/xml/main_split_config.xml
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/misc/src/main/res/xml/main_split_config.xml
@@ -0,0 +1 @@
+
From 61d1fb420bc3bf7d9b48ae28d066b2475cb8ae0b Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 19:28:24 -0400
Subject: [PATCH 31/49] Add files via upload
---
misc/src/main/res/xml/main_split_config.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/misc/src/main/res/xml/main_split_config.xml b/misc/src/main/res/xml/main_split_config.xml
index 8b137891..2113dc80 100644
--- a/misc/src/main/res/xml/main_split_config.xml
+++ b/misc/src/main/res/xml/main_split_config.xml
@@ -1 +1,5 @@
+
+
+
+
\ No newline at end of file
From dbf6cafe1be68c81f2f2b434e7e53b5797e96294 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 20:05:37 -0400
Subject: [PATCH 32/49] Update libs.versions.toml to minSdk = "24"
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 9ca92afc..9dcc4a01 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -49,7 +49,7 @@ material3-adaptive = "1.1.0"
material3-adaptive-navigation-suite = "1.3.1"
media3 = "1.5.1"
# @keep
-minSdk = "21"
+minSdk = "24"
playServicesWearable = "19.0.0"
protolayout = "1.2.1"
recyclerview = "1.4.0"
From 6b0271c7d7eb291e66ecab9fe4c4882e73d12bdc Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Tue, 18 Mar 2025 20:37:12 -0400
Subject: [PATCH 33/49] Add files via upload
---
.../example/snippets/ActivityEmbeddingJavaSnippets.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
index c06632b2..08a1dfeb 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
@@ -231,7 +231,7 @@ boolean isActivityEmbedded(Activity activity) {
}
- /** @noinspection InnerClassMayBeStatic*/
+ /** @noinspection InnerClassMayBeStatic */
// [START android_activity_embeddingDetailActivity_class_java]
public class DetailActivity extends AppCompatActivity {
void onOpenSubdetail() {
@@ -241,7 +241,7 @@ void onOpenSubdetail() {
// [END android_activity_embeddingDetailActivity_class_java]
- /** @noinspection InnerClassMayBeStatic*/
+ /** @noinspection InnerClassMayBeStatic */
// [START android_activity_embeddingSplitInitializer_class_java]
public class SplitInitializer implements Initializer {
@@ -269,7 +269,7 @@ public List>> dependencies() {
*/
private Class> classForItem(int item) { return Class.class; }
- /** @noinspection InnerClassMayBeStatic*/
+ /** @noinspection InnerClassMayBeStatic */
// [START android_activity_embeddingMenuActivity_class_java]
public class MenuActivity extends AppCompatActivity{
void onMenuItemSelected(int selectedMenuItem) {
@@ -279,7 +279,7 @@ void onMenuItemSelected(int selectedMenuItem) {
// [END android_activity_embeddingMenuActivity_class_java]
- /** @noinspection InnerClassMayBeStatic*/
+ /** @noinspection InnerClassMayBeStatic */
// [START android_activity_embeddingB_class_java]
public class B extends AppCompatActivity{
void onOpenC() {
From d54140477720dbd3de2fa0ac09d5d292d652d2c0 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 13:01:55 -0400
Subject: [PATCH 34/49] Update colors.xml with comment for color used by
activity embedding snippets.
---
misc/src/main/res/values/colors.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/misc/src/main/res/values/colors.xml b/misc/src/main/res/values/colors.xml
index ab21f324..61944aef 100644
--- a/misc/src/main/res/values/colors.xml
+++ b/misc/src/main/res/values/colors.xml
@@ -7,5 +7,6 @@
#FF018786
#FF000000
#FFFFFFFF
+
#FFFFAA00
From e7bfcdbc8832d1a5bcdc3c92792d34745c09f074 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 13:04:44 -0400
Subject: [PATCH 35/49] Update AndroidManifest.xml with initialization
provider.
---
misc/src/main/AndroidManifest.xml | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 0a7a5c6f..8cb81dd7 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -45,6 +45,16 @@
+
+
+
+ android:name="${applicationId}.SplitInitializer"
+ android:value="androidx.startup" />
+
-
\ No newline at end of file
+
From b0dae455dd07988e2a6805c9b03e9d6afd259b59 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 13:18:45 -0400
Subject: [PATCH 36/49] Update AndroidManifest.xml removed comment to fix
parsing error.
---
misc/src/main/AndroidManifest.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 8cb81dd7..96cab82f 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -51,7 +51,6 @@
android:exported="false">
android:name="${applicationId}.SplitInitializer"
android:value="androidx.startup" />
From 8abbf0048ac27192739c515861f5ec2e3af48747 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 13:37:34 -0400
Subject: [PATCH 37/49] Update AndroidManifest.xml
---
misc/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 96cab82f..68d4d348 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -49,8 +49,8 @@
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
-
android:name="${applicationId}.SplitInitializer"
android:value="androidx.startup" />
From 926761c4663a80f635a077b1c2f9a6333d76904b Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 13:51:04 -0400
Subject: [PATCH 38/49] Update AndroidManifest.xml
---
misc/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 68d4d348..4bb39f7a 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -49,8 +49,8 @@
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
+
android:name="${applicationId}.SplitInitializer"
android:value="androidx.startup" />
From 56ad034dc4f81ce6a0c5396d26ba6226e921240f Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 14:09:17 -0400
Subject: [PATCH 39/49] Update AndroidManifest.xml removed comment.
---
misc/src/main/AndroidManifest.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 4bb39f7a..904b44aa 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -49,7 +49,6 @@
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
-
From 1d3ff661825f92557b3302216230d298bcc74647 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 14:28:11 -0400
Subject: [PATCH 40/49] Update AndroidManifest.xml
---
misc/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 904b44aa..2c5a40c2 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -50,7 +50,7 @@
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
From 5d0d2b8987cfcf8302b502e0a34000b6b31810a5 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 15:17:06 -0400
Subject: [PATCH 41/49] Update AndroidManifest.xml
---
misc/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 2c5a40c2..76fd5622 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -50,7 +50,7 @@
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
From c80847d5b8c56086b4517a1aebe482d824bf4f62 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 16:10:49 -0400
Subject: [PATCH 42/49] Update AndroidManifest.xml
---
misc/src/main/AndroidManifest.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 76fd5622..42d8c517 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -47,10 +47,10 @@
From dc0fb94a66423f87a13518b9eb8da92e589a0c1e Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 16:25:53 -0400
Subject: [PATCH 43/49] Update AndroidManifest.xml
---
misc/src/main/AndroidManifest.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 42d8c517..2ad7db1e 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -49,6 +49,9 @@
android:name="androidx.startup.InitializationProvider"
android:authorities="com.example.snippets.androidx-startup"
android:exported="false">
+
From 77b07ec3c534eaf756e3554bd37adba006482d73 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Wed, 19 Mar 2025 17:13:50 -0400
Subject: [PATCH 44/49] Add files via upload
---
.../ActivityEmbeddingJavaSnippets.java | 100 +++++++++---------
1 file changed, 50 insertions(+), 50 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
index 08a1dfeb..bdaf3b7f 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
@@ -49,7 +49,7 @@ static class SnippetsActivity extends Activity {
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- // [START android_activity_embeddingsplit_attributes_calculator_java]
+ // [START android_activity_embedding_split_attributes_calculator_java]
if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 2) {
SplitController.getInstance(this).setSplitAttributesCalculator(params -> {
Configuration parentConfiguration = params.getParentConfiguration();
@@ -72,9 +72,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
}
});
}
- // [END android_activity_embeddingsplit_attributes_calculator_java]
+ // [END android_activity_embedding_split_attributes_calculator_java]
- // [START android_activity_embeddingsplit_attributes_calculator_tabletop_java]
+ // [START android_activity_embedding_split_attributes_calculator_tabletop_java]
if (WindowSdkExtensions.getInstance().getExtensionVersion() >= 2) {
SplitController.getInstance(this).setSplitAttributesCalculator(params -> {
String tag = params.getSplitRuleTag();
@@ -111,29 +111,29 @@ else if (parentConfiguration.screenWidthDp >= 840) {
}
});
}
- // [END android_activity_embeddingsplit_attributes_calculator_tabletop_java]
+ // [END android_activity_embedding_split_attributes_calculator_tabletop_java]
- // [START android_activity_embeddingsplitPairFilter_java]
+ // [START android_activity_embedding_splitPairFilter_java]
SplitPairFilter splitPairFilter = new SplitPairFilter(
new ComponentName(this, ListActivity.class),
new ComponentName(this, DetailActivity.class),
null
);
- // [END android_activity_embeddingsplitPairFilter_java]
+ // [END android_activity_embedding_splitPairFilter_java]
- // [START android_activity_embeddingfilterSet_java]
+ // [START android_activity_embedding_filterSet_java]
Set filterSet = new HashSet<>();
filterSet.add(splitPairFilter);
- // [END android_activity_embeddingfilterSet_java]
+ // [END android_activity_embedding_filterSet_java]
- // [START android_activity_embeddingsplitAttributes_java]
+ // [START android_activity_embedding_splitAttributes_java]
SplitAttributes splitAttributes = new SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
.build();
- // [END android_activity_embeddingsplitAttributes_java]
+ // [END android_activity_embedding_splitAttributes_java]
- // [START android_activity_embeddingsplitPairRule_java]
+ // [START android_activity_embedding_splitPairRule_java]
SplitPairRule splitPairRule = new SplitPairRule.Builder(filterSet)
.setDefaultSplitAttributes(splitAttributes)
.setMinWidthDp(840)
@@ -143,26 +143,26 @@ else if (parentConfiguration.screenWidthDp >= 840) {
.setFinishSecondaryWithPrimary(SplitRule.FinishBehavior.ALWAYS)
.setClearTop(false)
.build();
- // [END android_activity_embeddingsplitPairRule_java]
+ // [END android_activity_embedding_splitPairRule_java]
- // [START android_activity_embeddingruleController_java]
+ // [START android_activity_embedding_ruleController_java]
RuleController ruleController = RuleController.getInstance(this);
ruleController.addRule(splitPairRule);
- // [END android_activity_embeddingruleController_java]
+ // [END android_activity_embedding_ruleController_java]
- // [START android_activity_embeddingplaceholderActivityFilter_java]
+ // [START android_activity_embedding_placeholderActivityFilter_java]
ActivityFilter placeholderActivityFilter = new ActivityFilter(
new ComponentName(this, ListActivity.class),
null
);
- // [END android_activity_embeddingplaceholderActivityFilter_java]
+ // [END android_activity_embedding_placeholderActivityFilter_java]
- // [START android_activity_embeddingplaceholderActivityFilterSet_java]
+ // [START android_activity_embedding_placeholderActivityFilterSet_java]
Set placeholderActivityFilterSet = new HashSet<>();
placeholderActivityFilterSet.add(placeholderActivityFilter);
- // [END android_activity_embeddingplaceholderActivityFilterSet_java]
+ // [END android_activity_embedding_placeholderActivityFilterSet_java]
- // [START android_activity_embeddingsplitPlaceholderRule_java]
+ // [START android_activity_embedding_splitPlaceholderRule_java]
SplitPlaceholderRule splitPlaceholderRule = new SplitPlaceholderRule.Builder(
placeholderActivityFilterSet,
new Intent(this, PlaceholderActivity.class)
@@ -173,36 +173,36 @@ else if (parentConfiguration.screenWidthDp >= 840) {
.setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
.setSticky(false)
.build();
- // [END android_activity_embeddingsplitPlaceholderRule_java]
+ // [END android_activity_embedding_splitPlaceholderRule_java]
- // [START android_activity_embeddingaddRuleSplitPlaceholderRule_java]
+ // [START android_activity_embedding_addRuleSplitPlaceholderRule_java]
ruleController.addRule(splitPlaceholderRule);
- // [END android_activity_embeddingaddRuleSplitPlaceholderRule_java]
+ // [END android_activity_embedding_addRuleSplitPlaceholderRule_java]
- // [START android_activity_embeddingexpandedActivityFilter_java]
+ // [START android_activity_embedding_expandedActivityFilter_java]
ActivityFilter expandedActivityFilter = new ActivityFilter(
new ComponentName(this, ExpandedActivity.class),
null
);
- // [END android_activity_embeddingexpandedActivityFilter_java]
+ // [END android_activity_embedding_expandedActivityFilter_java]
- // [START android_activity_embeddingexpandedActivityFilterSet_java]
+ // [START android_activity_embedding_expandedActivityFilterSet_java]
Set expandedActivityFilterSet = new HashSet<>();
expandedActivityFilterSet.add(expandedActivityFilter);
- // [END android_activity_embeddingexpandedActivityFilterSet_java]
+ // [END android_activity_embedding_expandedActivityFilterSet_java]
- // [START android_activity_embeddingactivityRule_java]
+ // [START android_activity_embedding_activityRule_java]
ActivityRule activityRule = new ActivityRule.Builder(
expandedActivityFilterSet
).setAlwaysExpand(true)
.build();
- // [END android_activity_embeddingactivityRule_java]
+ // [END android_activity_embedding_activityRule_java]
- // [START android_activity_embeddingaddRuleActivityRule_java]
+ // [START android_activity_embedding_addRuleActivityRule_java]
ruleController.addRule(activityRule);
- // [END android_activity_embeddingaddRuleActivityRule_java]
+ // [END android_activity_embedding_addRuleActivityRule_java]
- // [START android_activity_embeddingsplitAttributesBuilder_java]
+ // [START android_activity_embedding_splitAttributesBuilder_java]
SplitAttributes.Builder _splitAttributesBuilder = new SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT);
@@ -217,32 +217,32 @@ else if (parentConfiguration.screenWidthDp >= 840) {
);
}
SplitAttributes _splitAttributes = _splitAttributesBuilder.build();
- // [END android_activity_embeddingsplitAttributesBuilder_java]
+ // [END android_activity_embedding_splitAttributesBuilder_java]
}
- // [START android_activity_embeddingisActivityEmbedded_java]
+ // [START android_activity_embedding_isActivityEmbedded_java]
boolean isActivityEmbedded(Activity activity) {
return ActivityEmbeddingController.getInstance(context).isActivityEmbedded(activity);
}
- // [END android_activity_embeddingisActivityEmbedded_java]
+ // [END android_activity_embedding_isActivityEmbedded_java]
}
/** @noinspection InnerClassMayBeStatic */
- // [START android_activity_embeddingDetailActivity_class_java]
+ // [START android_activity_embedding_DetailActivity_class_java]
public class DetailActivity extends AppCompatActivity {
void onOpenSubdetail() {
startActivity(new Intent(this, SubdetailActivity.class));
}
}
- // [END android_activity_embeddingDetailActivity_class_java]
+ // [END android_activity_embedding_DetailActivity_class_java]
/** @noinspection InnerClassMayBeStatic */
- // [START android_activity_embeddingSplitInitializer_class_java]
+ // [START android_activity_embedding_SplitInitializer_class_java]
public class SplitInitializer implements Initializer {
@NonNull
@@ -261,7 +261,7 @@ public List>> dependencies() {
return Collections.emptyList();
}
}
- // [END android_activity_embeddingSplitInitializer_class_java]
+ // [END android_activity_embedding_SplitInitializer_class_java]
/**
@@ -270,30 +270,30 @@ public List>> dependencies() {
private Class> classForItem(int item) { return Class.class; }
/** @noinspection InnerClassMayBeStatic */
- // [START android_activity_embeddingMenuActivity_class_java]
+ // [START android_activity_embedding_MenuActivity_class_java]
public class MenuActivity extends AppCompatActivity{
void onMenuItemSelected(int selectedMenuItem) {
startActivity(new Intent(this, classForItem(selectedMenuItem)));
}
}
- // [END android_activity_embeddingMenuActivity_class_java]
+ // [END android_activity_embedding_MenuActivity_class_java]
/** @noinspection InnerClassMayBeStatic */
- // [START android_activity_embeddingB_class_java]
+ // [START android_activity_embedding_B_class_java]
public class B extends AppCompatActivity{
void onOpenC() {
startActivity(new Intent(this, C.class));
}
}
- // [END android_activity_embeddingB_class_java]
+ // [END android_activity_embedding_B_class_java]
static class SnippetActivity2 extends Activity {
private Set filterSet = new HashSet<>();
- // [START android_activity_embeddingonCreate_RuleController_java]
+ // [START android_activity_embedding_onCreate_RuleController_java]
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -301,7 +301,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
.addRule(new SplitPairRule.Builder(filterSet).build());
startActivity(new Intent(this, DetailActivity.class));
}
- // [END android_activity_embeddingonCreate_RuleController_java]
+ // [END android_activity_embedding_onCreate_RuleController_java]
}
@@ -309,7 +309,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
static class SnippetActivity3 extends AppCompatActivity {
@OptIn(markerClass = ExperimentalWindowApi.class)
- // [START android_activity_embeddingonCreate_SplitControllerCallbackAdapter_java]
+ // [START android_activity_embedding_onCreate_SplitControllerCallbackAdapter_java]
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -323,7 +323,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
splitInfoList.isEmpty() ? View.VISIBLE : View.GONE);
});
}
- // [END android_activity_embeddingonCreate_SplitControllerCallbackAdapter_java]
+ // [END android_activity_embedding_onCreate_SplitControllerCallbackAdapter_java]
}
@@ -334,7 +334,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- // [START android_activity_embeddingpinButton_java]
+ // [START android_activity_embedding_pinButton_java]
Button pinButton = findViewById(R.id.pinButton);
pinButton.setOnClickListener( (view) -> {
SplitAttributes splitAttributes = new SplitAttributes.Builder()
@@ -351,14 +351,14 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
getApplicationContext()).pinTopActivityStack(getTaskId(),
pinSplitRule);
});
- // [END android_activity_embeddingpinButton_java]
+ // [END android_activity_embedding_pinButton_java]
- // [START android_activity_embeddinggetSplitSupportStatus_java]
+ // [START android_activity_embedding_getSplitSupportStatus_java]
if (SplitController.getInstance(this).getSplitSupportStatus() ==
SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
// Device supports split activity features.
}
- // [END android_activity_embeddinggetSplitSupportStatus_java]
+ // [END android_activity_embedding_getSplitSupportStatus_java]
}
}
From ef916dc4042617d0c495ca9d6cc33978b6be1a0e Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Thu, 20 Mar 2025 14:05:08 -0400
Subject: [PATCH 45/49] Update libs.versions.toml restored minSdk to 21.
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 9dcc4a01..9ca92afc 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -49,7 +49,7 @@ material3-adaptive = "1.1.0"
material3-adaptive-navigation-suite = "1.3.1"
media3 = "1.5.1"
# @keep
-minSdk = "24"
+minSdk = "21"
playServicesWearable = "19.0.0"
protolayout = "1.2.1"
recyclerview = "1.4.0"
From 98f7a6833c2ec408f5246506792cc41709c47107 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Thu, 20 Mar 2025 14:08:15 -0400
Subject: [PATCH 46/49] Added @RequiresApi to enable SDK 24 features.
---
.../ActivityEmbeddingJavaSnippets.java | 8 +-
.../ActivityEmbeddingKotlinSnippets.kt | 150 +++++++++---------
2 files changed, 76 insertions(+), 82 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
index bdaf3b7f..61dd91ce 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java
@@ -5,13 +5,14 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
+import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.OptIn;
-import androidx.appcompat.app.AppCompatActivity;
+import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.startup.Initializer;
import androidx.window.WindowSdkExtensions;
@@ -45,6 +46,7 @@ static class SnippetsActivity extends Activity {
private Context context;
+ @RequiresApi(api=VERSION_CODES.N)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -364,9 +366,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
}
- /**
- * Classes used by snippets.
- */
+ // Classes used by snippets.
static class ListActivity {}
static class SubdetailActivity {}
static class PlaceholderActivity {}
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index 7561dabd..a0864356 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,28 +1,14 @@
-/*
- * Copyright 2025 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
- *
- * https://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 com.example.snippets
import android.app.Activity
import android.content.ComponentName
import android.content.Context
import android.content.Intent
+import android.os.Build.VERSION_CODES
import android.os.Bundle
import android.view.View
import android.widget.Button
+import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
@@ -50,10 +36,11 @@ import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity : Activity() {
+ class SnippetActivity: Activity() {
private val context = this
+ @RequiresApi(api=VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -94,22 +81,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- }
- )
- .build()
- } else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ })
+ .build()
+ }
+ else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -122,9 +109,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END android_activity_embedding_splitPairFilter_kotlin]
@@ -152,8 +139,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END android_activity_embedding_splitPairRule_kotlin]
// [START android_activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END android_activity_embedding_ruleController_kotlin]
// [START android_activity_embedding_placeholderActivityFilter_kotlin]
@@ -169,15 +156,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END android_activity_embedding_splitPlaceholderRule_kotlin]
// [START android_activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -186,8 +173,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END android_activity_embedding_expandedActivityFilter_kotlin]
@@ -212,32 +199,35 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END android_activity_embedding_splitAttributesBuilder_kotlin]
- // [START android_activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END android_activity_embedding_isActivityEmbedded_kotlin]
+ // [START android_activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END android_activity_embedding_isActivityEmbedded_kotlin]
+
}
}
+
// [START android_activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity : AppCompatActivity() {
+ class DetailActivity: AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END android_activity_embedding_DetailActivity_class_kotlin]
+
// [START android_activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -253,28 +243,31 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END android_activity_embedding_SplitInitializer_class_kotlin]
+
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START android_activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity : AppCompatActivity() {
+ inner class MenuActivity: AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END android_activity_embedding_MenuActivity_class_kotlin]
+
// [START android_activity_embedding_B_class_kotlin]
- class B : AppCompatActivity() {
+ class B: AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END android_activity_embedding_B_class_kotlin]
- class SnippetActivity2 : Activity() {
+
+ class SnippetActivity2: Activity() {
private val filterSet = HashSet()
@@ -288,7 +281,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END android_activity_embedding_onCreate_RuleController_kotlin]
}
- class SplitDeviceActivity : AppCompatActivity() {
+
+ class SplitDeviceActivity: AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -309,8 +303,9 @@ class ActivityEmbeddingKotlinSnippets {
}
}
- class SnippetActivity3 : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
+
+ class SnippetActivity3: AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START android_activity_embedding_pinButton_kotlin]
@@ -332,20 +327,19 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE
- ) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
+ // Device supports split activity features.
}
// [END android_activity_embedding_getSplitSupportStatus_kotlin]
}
}
- /**
- * Classes used by snippets.
- */
- class ListActivity
- class SubdetailActivity
- class PlaceholderActivity
- class ExpandedActivity
- class C
+
+ // Classes used by snippets.
+ class ListActivity {}
+ class SubdetailActivity {}
+ class PlaceholderActivity {}
+ class ExpandedActivity {}
+ class C {}
+
}
From 7812bfe492176f108816c5da461c962122fc66d7 Mon Sep 17 00:00:00 2001
From: JonEckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Thu, 20 Mar 2025 18:09:46 +0000
Subject: [PATCH 47/49] Apply Spotless
---
.../ActivityEmbeddingKotlinSnippets.kt | 145 +++++++++---------
1 file changed, 76 insertions(+), 69 deletions(-)
diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
index a0864356..a2c90e0f 100644
--- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
+++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 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
+ *
+ * https://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 com.example.snippets
import android.app.Activity
@@ -36,11 +52,11 @@ import kotlinx.coroutines.launch
class ActivityEmbeddingKotlinSnippets {
- class SnippetActivity: Activity() {
+ class SnippetActivity : Activity() {
private val context = this
- @RequiresApi(api=VERSION_CODES.N)
+ @RequiresApi(api = VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -81,22 +97,22 @@ class ActivityEmbeddingKotlinSnippets {
val builder = SplitAttributes.Builder()
builder.setSplitType(SPLIT_TYPE_HINGE)
return@setSplitAttributesCalculator if (feature?.isSeparating == true) {
- // Horizontal split for tabletop posture.
- builder
- .setSplitType(SPLIT_TYPE_HINGE)
- .setLayoutDirection(
- if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
- SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
- } else {
- SplitAttributes.LayoutDirection.LOCALE
- })
- .build()
- }
- else if (parentConfiguration.screenWidthDp >= 840) {
- // Side-by-side dual-pane layout for wide displays.
- builder
- .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .build()
+ // Horizontal split for tabletop posture.
+ builder
+ .setSplitType(SPLIT_TYPE_HINGE)
+ .setLayoutDirection(
+ if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
+ SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
+ } else {
+ SplitAttributes.LayoutDirection.LOCALE
+ }
+ )
+ .build()
+ } else if (parentConfiguration.screenWidthDp >= 840) {
+ // Side-by-side dual-pane layout for wide displays.
+ builder
+ .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+ .build()
} else {
// No split for tall displays.
builder
@@ -109,9 +125,9 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_splitPairFilter_kotlin]
val splitPairFilter = SplitPairFilter(
- ComponentName(this, ListActivity::class.java),
- ComponentName(this, DetailActivity::class.java),
- null
+ ComponentName(this, ListActivity::class.java),
+ ComponentName(this, DetailActivity::class.java),
+ null
)
// [END android_activity_embedding_splitPairFilter_kotlin]
@@ -139,8 +155,8 @@ class ActivityEmbeddingKotlinSnippets {
// [END android_activity_embedding_splitPairRule_kotlin]
// [START android_activity_embedding_ruleController_kotlin]
- val ruleController = RuleController.getInstance(this)
- ruleController.addRule(splitPairRule)
+ val ruleController = RuleController.getInstance(this)
+ ruleController.addRule(splitPairRule)
// [END android_activity_embedding_ruleController_kotlin]
// [START android_activity_embedding_placeholderActivityFilter_kotlin]
@@ -156,15 +172,15 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_splitPlaceholderRule_kotlin]
val splitPlaceholderRule = SplitPlaceholderRule.Builder(
- placeholderActivityFilterSet,
- Intent(context, PlaceholderActivity::class.java)
- ).setDefaultSplitAttributes(splitAttributes)
- .setMinWidthDp(840)
- .setMinSmallestWidthDp(600)
- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
- .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
- .setSticky(false)
- .build()
+ placeholderActivityFilterSet,
+ Intent(context, PlaceholderActivity::class.java)
+ ).setDefaultSplitAttributes(splitAttributes)
+ .setMinWidthDp(840)
+ .setMinSmallestWidthDp(600)
+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
+ .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
+ .setSticky(false)
+ .build()
// [END android_activity_embedding_splitPlaceholderRule_kotlin]
// [START android_activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -173,8 +189,8 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_expandedActivityFilter_kotlin]
val expandedActivityFilter = ActivityFilter(
- ComponentName(this, ExpandedActivity::class.java),
- null
+ ComponentName(this, ExpandedActivity::class.java),
+ null
)
// [END android_activity_embedding_expandedActivityFilter_kotlin]
@@ -199,35 +215,32 @@ class ActivityEmbeddingKotlinSnippets {
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
_splitAttributesBuilder.setDividerAttributes(
- DividerAttributes.DraggableDividerAttributes.Builder()
- .setColor(getColor(R.color.divider_color))
- .setWidthDp(4)
- .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
- .build()
+ DividerAttributes.DraggableDividerAttributes.Builder()
+ .setColor(getColor(R.color.divider_color))
+ .setWidthDp(4)
+ .setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
+ .build()
)
}
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
// [END android_activity_embedding_splitAttributesBuilder_kotlin]
- // [START android_activity_embedding_isActivityEmbedded_kotlin]
- fun isActivityEmbedded(activity: Activity): Boolean {
- return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
- }
- // [END android_activity_embedding_isActivityEmbedded_kotlin]
-
+ // [START android_activity_embedding_isActivityEmbedded_kotlin]
+ fun isActivityEmbedded(activity: Activity): Boolean {
+ return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
+ }
+ // [END android_activity_embedding_isActivityEmbedded_kotlin]
}
}
-
// [START android_activity_embedding_DetailActivity_class_kotlin]
- class DetailActivity: AppCompatActivity() {
+ class DetailActivity : AppCompatActivity() {
fun onOpenSubdetail() {
- startActivity(Intent(this, SubdetailActivity::class.java))
+ startActivity(Intent(this, SubdetailActivity::class.java))
}
}
// [END android_activity_embedding_DetailActivity_class_kotlin]
-
// [START android_activity_embedding_SplitInitializer_class_kotlin]
class SplitInitializer : Initializer {
@@ -243,31 +256,28 @@ class ActivityEmbeddingKotlinSnippets {
}
// [END android_activity_embedding_SplitInitializer_class_kotlin]
-
/**
* Function used by snippet.
*/
fun classForItem(item: Int): Class<*> { return Class::class.java }
// [START android_activity_embedding_MenuActivity_class_kotlin]
- inner class MenuActivity: AppCompatActivity() {
+ inner class MenuActivity : AppCompatActivity() {
fun onMenuItemSelected(selectedMenuItem: Int) {
startActivity(Intent(this, classForItem(selectedMenuItem)))
}
}
// [END android_activity_embedding_MenuActivity_class_kotlin]
-
// [START android_activity_embedding_B_class_kotlin]
- class B: AppCompatActivity() {
+ class B : AppCompatActivity() {
fun onOpenC() {
startActivity(Intent(this, C::class.java))
}
}
// [END android_activity_embedding_B_class_kotlin]
-
- class SnippetActivity2: Activity() {
+ class SnippetActivity2 : Activity() {
private val filterSet = HashSet()
@@ -281,8 +291,7 @@ class ActivityEmbeddingKotlinSnippets {
// [END android_activity_embedding_onCreate_RuleController_kotlin]
}
-
- class SplitDeviceActivity: AppCompatActivity() {
+ class SplitDeviceActivity : AppCompatActivity() {
@OptIn(ExperimentalWindowApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -303,9 +312,8 @@ class ActivityEmbeddingKotlinSnippets {
}
}
-
- class SnippetActivity3: AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?){
+ class SnippetActivity3 : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START android_activity_embedding_pinButton_kotlin]
@@ -327,19 +335,18 @@ class ActivityEmbeddingKotlinSnippets {
// [START android_activity_embedding_getSplitSupportStatus_kotlin]
if (SplitController.getInstance(this).splitSupportStatus ==
- SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
- // Device supports split activity features.
+ SplitController.SplitSupportStatus.SPLIT_AVAILABLE
+ ) {
+ // Device supports split activity features.
}
// [END android_activity_embedding_getSplitSupportStatus_kotlin]
}
}
-
// Classes used by snippets.
- class ListActivity {}
- class SubdetailActivity {}
- class PlaceholderActivity {}
- class ExpandedActivity {}
- class C {}
-
+ class ListActivity
+ class SubdetailActivity
+ class PlaceholderActivity
+ class ExpandedActivity
+ class C
}
From 39fd0831567fe1731d728d6c6fde200bbc91c42f Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Thu, 20 Mar 2025 14:28:13 -0400
Subject: [PATCH 48/49] Update AndroidManifest.xml with ${applicationid}
---
misc/src/main/AndroidManifest.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index 2ad7db1e..e0082b7c 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -50,10 +50,10 @@
android:authorities="com.example.snippets.androidx-startup"
android:exported="false">
From ac60261ad3778027ffa5867d435625ab9c66c750 Mon Sep 17 00:00:00 2001
From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com>
Date: Thu, 20 Mar 2025 14:43:46 -0400
Subject: [PATCH 49/49] Update AndroidManifest.xml removed ${applicationId}
---
misc/src/main/AndroidManifest.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/misc/src/main/AndroidManifest.xml b/misc/src/main/AndroidManifest.xml
index e0082b7c..2ad7db1e 100644
--- a/misc/src/main/AndroidManifest.xml
+++ b/misc/src/main/AndroidManifest.xml
@@ -50,10 +50,10 @@
android:authorities="com.example.snippets.androidx-startup"
android:exported="false">