From 1c5373af1efb7e6b6bed684a2092c393f7e49fbf Mon Sep 17 00:00:00 2001 From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com> Date: Mon, 24 Mar 2025 18:18:02 -0400 Subject: [PATCH 1/4] Add files via upload --- .../ActivityEmbeddingJavaSnippets.java | 43 +++--- .../ActivityEmbeddingKotlinSnippets.kt | 126 +++++++++--------- 2 files changed, 82 insertions(+), 87 deletions(-) diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java index 61dd91cee..c557b42d7 100644 --- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java +++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java @@ -204,23 +204,6 @@ else if (parentConfiguration.screenWidthDp >= 840) { ruleController.addRule(activityRule); // [END android_activity_embedding_addRuleActivityRule_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); - - 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 android_activity_embedding_splitAttributesBuilder_java] - } @@ -336,6 +319,23 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + // [START android_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 android_activity_embedding_splitAttributesBuilder_java] + // [START android_activity_embedding_pinButton_java] Button pinButton = findViewById(R.id.pinButton); pinButton.setOnClickListener( (view) -> { @@ -349,16 +349,15 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { .setDefaultSplitAttributes(splitAttributes) .build(); - SplitController.getInstance( - getApplicationContext()).pinTopActivityStack(getTaskId(), - pinSplitRule); + SplitController.getInstance(getApplicationContext()) + .pinTopActivityStack(getTaskId(), pinSplitRule); }); // [END android_activity_embedding_pinButton_java] // [START android_activity_embedding_getSplitSupportStatus_java] if (SplitController.getInstance(this).getSplitSupportStatus() == - SplitController.SplitSupportStatus.SPLIT_AVAILABLE) { - // Device supports split activity features. + SplitController.SplitSupportStatus.SPLIT_AVAILABLE) { + // Device supports split activity features. } // [END android_activity_embedding_getSplitSupportStatus_java] diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt index a2c90e0f4..95fb83ade 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 @@ -52,11 +36,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) @@ -105,8 +89,7 @@ class ActivityEmbeddingKotlinSnippets { SplitAttributes.LayoutDirection.BOTTOM_TO_TOP } else { SplitAttributes.LayoutDirection.LOCALE - } - ) + }) .build() } else if (parentConfiguration.screenWidthDp >= 840) { // Side-by-side dual-pane layout for wide displays. @@ -172,15 +155,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] @@ -208,39 +191,26 @@ class ActivityEmbeddingKotlinSnippets { ruleController.addRule(activityRule) // [END android_activity_embedding_addRuleActivityRule_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() - ) - } - 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)) } } // [END android_activity_embedding_DetailActivity_class_kotlin] + // [START android_activity_embedding_SplitInitializer_class_kotlin] class SplitInitializer : Initializer { @@ -256,28 +226,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() @@ -291,11 +264,31 @@ class ActivityEmbeddingKotlinSnippets { // [END android_activity_embedding_onCreate_RuleController_kotlin] } - class SplitDeviceActivity : AppCompatActivity() { + class SplitDeviceActivity: AppCompatActivity() { + + @RequiresApi(VERSION_CODES.N) @OptIn(ExperimentalWindowApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + // [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() + ) + } + val splitAttributes: SplitAttributes = splitAttributesBuilder.build() + // [END android_activity_embedding_splitAttributesBuilder_kotlin] + val splitController = SplitController.getInstance(this) // [START android_activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin] val layout = layoutInflater.inflate(R.layout.activity_main, null) @@ -312,7 +305,8 @@ class ActivityEmbeddingKotlinSnippets { } } - class SnippetActivity3 : AppCompatActivity() { + + class SnippetActivity3: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -329,24 +323,26 @@ class ActivityEmbeddingKotlinSnippets { .setDefaultSplitAttributes(splitAttributes) .build() - SplitController.getInstance(applicationContext).pinTopActivityStack(taskId, pinSplitRule) + SplitController.getInstance(applicationContext) + .pinTopActivityStack(taskId, pinSplitRule) } // [END android_activity_embedding_pinButton_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 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 2556ad22f9ad45e945c70d14f641ab3d87a7acf2 Mon Sep 17 00:00:00 2001 From: JonEckenrode <112520815+JonEckenrode@users.noreply.github.com> Date: Mon, 24 Mar 2025 22:20:07 +0000 Subject: [PATCH 2/4] Apply Spotless --- .../ActivityEmbeddingKotlinSnippets.kt | 89 ++++++++++--------- 1 file changed, 48 insertions(+), 41 deletions(-) diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt index 95fb83ade..c64b88b03 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) @@ -89,7 +105,8 @@ class ActivityEmbeddingKotlinSnippets { SplitAttributes.LayoutDirection.BOTTOM_TO_TOP } else { SplitAttributes.LayoutDirection.LOCALE - }) + } + ) .build() } else if (parentConfiguration.screenWidthDp >= 840) { // Side-by-side dual-pane layout for wide displays. @@ -155,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] @@ -190,7 +207,6 @@ class ActivityEmbeddingKotlinSnippets { // [START android_activity_embedding_addRuleActivityRule_kotlin] ruleController.addRule(activityRule) // [END android_activity_embedding_addRuleActivityRule_kotlin] - } // [START android_activity_embedding_isActivityEmbedded_kotlin] @@ -198,19 +214,16 @@ class ActivityEmbeddingKotlinSnippets { 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)) } } // [END android_activity_embedding_DetailActivity_class_kotlin] - // [START android_activity_embedding_SplitInitializer_class_kotlin] class SplitInitializer : Initializer { @@ -226,31 +239,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() @@ -264,8 +274,7 @@ class ActivityEmbeddingKotlinSnippets { // [END android_activity_embedding_onCreate_RuleController_kotlin] } - - class SplitDeviceActivity: AppCompatActivity() { + class SplitDeviceActivity : AppCompatActivity() { @RequiresApi(VERSION_CODES.N) @OptIn(ExperimentalWindowApi::class) @@ -279,11 +288,11 @@ 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() @@ -305,8 +314,7 @@ class ActivityEmbeddingKotlinSnippets { } } - - class SnippetActivity3: AppCompatActivity() { + class SnippetActivity3 : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -330,19 +338,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 7e3f19c8443a59416551950365f28a97694ad6de Mon Sep 17 00:00:00 2001 From: Jon Eckenrode <112520815+JonEckenrode@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:08:09 -0400 Subject: [PATCH 3/4] Reorganized files to group related snippets. --- .../ActivityEmbeddingJavaSnippets.java | 63 +++++--- .../ActivityEmbeddingKotlinSnippets.kt | 138 +++++++++--------- 2 files changed, 113 insertions(+), 88 deletions(-) diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java index c557b42d7..b7ea3e165 100644 --- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java +++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java @@ -42,9 +42,7 @@ public class ActivityEmbeddingJavaSnippets { - static class SnippetsActivity extends Activity { - - private Context context; + static class SplitAttributesCalculatorSnippetsActivity extends AppCompatActivity { @RequiresApi(api=VERSION_CODES.N) @Override @@ -115,6 +113,17 @@ else if (parentConfiguration.screenWidthDp >= 840) { } // [END android_activity_embedding_split_attributes_calculator_tabletop_java] + } + } + + static class SplitRuleSnippetsActivity extends AppCompatActivity { + + private Context context; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // [START android_activity_embedding_splitPairFilter_java] SplitPairFilter splitPairFilter = new SplitPairFilter( new ComponentName(this, ListActivity.class), @@ -215,6 +224,31 @@ boolean isActivityEmbedded(Activity activity) { } + static class SplitAttributesBuilderSnippetsActivity extends AppCompatActivity { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // [START android_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 android_activity_embedding_splitAttributesBuilder_java] + + } + } /** @noinspection InnerClassMayBeStatic */ // [START android_activity_embedding_DetailActivity_class_java] @@ -274,7 +308,7 @@ void onOpenC() { // [END android_activity_embedding_B_class_java] - static class SnippetActivity2 extends Activity { + static class RuleControllerSnippetsActivity extends Activity { private Set filterSet = new HashSet<>(); @@ -291,7 +325,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } - static class SnippetActivity3 extends AppCompatActivity { + static class SplitDeviceActivity extends AppCompatActivity { @OptIn(markerClass = ExperimentalWindowApi.class) // [START android_activity_embedding_onCreate_SplitControllerCallbackAdapter_java] @@ -312,30 +346,13 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } - static class SnippetActivity4 extends Activity { + static class ActivityPinningSnippetsActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - // [START android_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 android_activity_embedding_splitAttributesBuilder_java] - // [START android_activity_embedding_pinButton_java] Button pinButton = findViewById(R.id.pinButton); pinButton.setOnClickListener( (view) -> { diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt index c64b88b03..f0105430c 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 @@ -31,7 +15,6 @@ 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 @@ -52,11 +35,8 @@ import kotlinx.coroutines.launch class ActivityEmbeddingKotlinSnippets { - class SnippetActivity : Activity() { - - private val context = this + class SplitAttributesCalculatorSnippetsActivity: AppCompatActivity() { - @RequiresApi(api = VERSION_CODES.N) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -105,8 +85,7 @@ class ActivityEmbeddingKotlinSnippets { SplitAttributes.LayoutDirection.BOTTOM_TO_TOP } else { SplitAttributes.LayoutDirection.LOCALE - } - ) + }) .build() } else if (parentConfiguration.screenWidthDp >= 840) { // Side-by-side dual-pane layout for wide displays. @@ -123,6 +102,17 @@ class ActivityEmbeddingKotlinSnippets { } // [END android_activity_embedding_split_attributes_calculator_tabletop_kotlin] + } + } + + class SplitRuleSnippetsActivity: AppCompatActivity() { + + private val context = this + + @RequiresApi(api=VERSION_CODES.N) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + // [START android_activity_embedding_splitPairFilter_kotlin] val splitPairFilter = SplitPairFilter( ComponentName(this, ListActivity::class.java), @@ -172,15 +162,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] @@ -207,6 +197,7 @@ class ActivityEmbeddingKotlinSnippets { // [START android_activity_embedding_addRuleActivityRule_kotlin] ruleController.addRule(activityRule) // [END android_activity_embedding_addRuleActivityRule_kotlin] + } // [START android_activity_embedding_isActivityEmbedded_kotlin] @@ -214,16 +205,45 @@ class ActivityEmbeddingKotlinSnippets { return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity) } // [END android_activity_embedding_isActivityEmbedded_kotlin] + + } + + class SplitAttributesBuilderSnippetsActivity: AppCompatActivity() { + + @RequiresApi(VERSION_CODES.M) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // [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() + ) + } + val splitAttributes: SplitAttributes = splitAttributesBuilder.build() + // [END android_activity_embedding_splitAttributesBuilder_kotlin] + + } } + // [START android_activity_embedding_DetailActivity_class_kotlin] - class DetailActivity : AppCompatActivity() { + class DetailActivity: AppCompatActivity() { fun onOpenSubdetail() { startActivity(Intent(this, SubdetailActivity::class.java)) } } // [END android_activity_embedding_DetailActivity_class_kotlin] + // [START android_activity_embedding_SplitInitializer_class_kotlin] class SplitInitializer : Initializer { @@ -239,28 +259,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 RuleControllerSnippetsActivity: Activity() { private val filterSet = HashSet() @@ -274,30 +297,12 @@ class ActivityEmbeddingKotlinSnippets { // [END android_activity_embedding_onCreate_RuleController_kotlin] } - class SplitDeviceActivity : AppCompatActivity() { - @RequiresApi(VERSION_CODES.N) - @OptIn(ExperimentalWindowApi::class) + class SplitDeviceActivity: AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // [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() - ) - } - val splitAttributes: SplitAttributes = splitAttributesBuilder.build() - // [END android_activity_embedding_splitAttributesBuilder_kotlin] - val splitController = SplitController.getInstance(this) // [START android_activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin] val layout = layoutInflater.inflate(R.layout.activity_main, null) @@ -314,10 +319,12 @@ class ActivityEmbeddingKotlinSnippets { } } - class SnippetActivity3 : AppCompatActivity() { + + class ActivityPinningSnippetsActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + // [START android_activity_embedding_pinButton_kotlin] val pinButton: Button = findViewById(R.id.pinButton) pinButton.setOnClickListener { @@ -338,18 +345,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 + class ListActivity {} + class SubdetailActivity {} + class PlaceholderActivity {} + class ExpandedActivity {} + class C {} + } From 15118a1e7b3598b9f5ec2f420941c624f5a4c55a Mon Sep 17 00:00:00 2001 From: JonEckenrode <112520815+JonEckenrode@users.noreply.github.com> Date: Tue, 25 Mar 2025 18:09:45 +0000 Subject: [PATCH 4/4] Apply Spotless --- .../ActivityEmbeddingKotlinSnippets.kt | 95 ++++++++++--------- 1 file changed, 50 insertions(+), 45 deletions(-) diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt index f0105430c..909672387 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 @@ -35,7 +51,7 @@ import kotlinx.coroutines.launch class ActivityEmbeddingKotlinSnippets { - class SplitAttributesCalculatorSnippetsActivity: AppCompatActivity() { + class SplitAttributesCalculatorSnippetsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -85,7 +101,8 @@ class ActivityEmbeddingKotlinSnippets { SplitAttributes.LayoutDirection.BOTTOM_TO_TOP } else { SplitAttributes.LayoutDirection.LOCALE - }) + } + ) .build() } else if (parentConfiguration.screenWidthDp >= 840) { // Side-by-side dual-pane layout for wide displays. @@ -101,15 +118,14 @@ class ActivityEmbeddingKotlinSnippets { } } // [END android_activity_embedding_split_attributes_calculator_tabletop_kotlin] - } } - class SplitRuleSnippetsActivity: AppCompatActivity() { + class SplitRuleSnippetsActivity : AppCompatActivity() { private val context = this - @RequiresApi(api=VERSION_CODES.N) + @RequiresApi(api = VERSION_CODES.N) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -162,15 +178,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] @@ -197,7 +213,6 @@ class ActivityEmbeddingKotlinSnippets { // [START android_activity_embedding_addRuleActivityRule_kotlin] ruleController.addRule(activityRule) // [END android_activity_embedding_addRuleActivityRule_kotlin] - } // [START android_activity_embedding_isActivityEmbedded_kotlin] @@ -205,10 +220,9 @@ class ActivityEmbeddingKotlinSnippets { return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity) } // [END android_activity_embedding_isActivityEmbedded_kotlin] - } - class SplitAttributesBuilderSnippetsActivity: AppCompatActivity() { + class SplitAttributesBuilderSnippetsActivity : AppCompatActivity() { @RequiresApi(VERSION_CODES.M) override fun onCreate(savedInstanceState: Bundle?) { @@ -221,29 +235,26 @@ 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_DetailActivity_class_kotlin] - class DetailActivity: AppCompatActivity() { + class DetailActivity : AppCompatActivity() { fun onOpenSubdetail() { startActivity(Intent(this, SubdetailActivity::class.java)) } } // [END android_activity_embedding_DetailActivity_class_kotlin] - // [START android_activity_embedding_SplitInitializer_class_kotlin] class SplitInitializer : Initializer { @@ -259,31 +270,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 RuleControllerSnippetsActivity: Activity() { + class RuleControllerSnippetsActivity : Activity() { private val filterSet = HashSet() @@ -297,8 +305,7 @@ class ActivityEmbeddingKotlinSnippets { // [END android_activity_embedding_onCreate_RuleController_kotlin] } - - class SplitDeviceActivity: AppCompatActivity() { + class SplitDeviceActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -319,8 +326,7 @@ class ActivityEmbeddingKotlinSnippets { } } - - class ActivityPinningSnippetsActivity: AppCompatActivity() { + class ActivityPinningSnippetsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -345,19 +351,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 }