1- /*
2- * Copyright 2025 The Android Open Source Project
3- *
4- * Licensed under the Apache License, Version 2.0 (the "License");
5- * you may not use this file except in compliance with the License.
6- * You may obtain a copy of the License at
7- *
8- * https://www.apache.org/licenses/LICENSE-2.0
9- *
10- * Unless required by applicable law or agreed to in writing, software
11- * distributed under the License is distributed on an "AS IS" BASIS,
12- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13- * See the License for the specific language governing permissions and
14- * limitations under the License.
15- */
16-
171package com.example.snippets
182
193import android.app.Activity
@@ -31,7 +15,6 @@ import androidx.lifecycle.lifecycleScope
3115import androidx.lifecycle.repeatOnLifecycle
3216import androidx.startup.Initializer
3317import androidx.window.WindowSdkExtensions
34- import androidx.window.core.ExperimentalWindowApi
3518import androidx.window.embedding.ActivityEmbeddingController
3619import androidx.window.embedding.ActivityFilter
3720import androidx.window.embedding.ActivityRule
@@ -52,11 +35,8 @@ import kotlinx.coroutines.launch
5235
5336class ActivityEmbeddingKotlinSnippets {
5437
55- class SnippetActivity : Activity () {
56-
57- private val context = this
38+ class SplitAttributesCalculatorSnippetsActivity : AppCompatActivity () {
5839
59- @RequiresApi(api = VERSION_CODES .N )
6040 override fun onCreate (savedInstanceState : Bundle ? ) {
6141 super .onCreate(savedInstanceState)
6242
@@ -105,8 +85,7 @@ class ActivityEmbeddingKotlinSnippets {
10585 SplitAttributes .LayoutDirection .BOTTOM_TO_TOP
10686 } else {
10787 SplitAttributes .LayoutDirection .LOCALE
108- }
109- )
88+ })
11089 .build()
11190 } else if (parentConfiguration.screenWidthDp >= 840 ) {
11291 // Side-by-side dual-pane layout for wide displays.
@@ -123,6 +102,17 @@ class ActivityEmbeddingKotlinSnippets {
123102 }
124103 // [END android_activity_embedding_split_attributes_calculator_tabletop_kotlin]
125104
105+ }
106+ }
107+
108+ class SplitRuleSnippetsActivity : AppCompatActivity () {
109+
110+ private val context = this
111+
112+ @RequiresApi(api= VERSION_CODES .N )
113+ override fun onCreate (savedInstanceState : Bundle ? ) {
114+ super .onCreate(savedInstanceState)
115+
126116 // [START android_activity_embedding_splitPairFilter_kotlin]
127117 val splitPairFilter = SplitPairFilter (
128118 ComponentName (this , ListActivity ::class .java),
@@ -172,15 +162,15 @@ class ActivityEmbeddingKotlinSnippets {
172162
173163 // [START android_activity_embedding_splitPlaceholderRule_kotlin]
174164 val splitPlaceholderRule = SplitPlaceholderRule .Builder (
175- placeholderActivityFilterSet,
176- Intent (context, PlaceholderActivity ::class .java)
177- ).setDefaultSplitAttributes(splitAttributes)
178- .setMinWidthDp(840 )
179- .setMinSmallestWidthDp(600 )
180- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio .ratio(1.5f ))
181- .setFinishPrimaryWithPlaceholder(SplitRule .FinishBehavior .ALWAYS )
182- .setSticky(false )
183- .build()
165+ placeholderActivityFilterSet,
166+ Intent (context, PlaceholderActivity ::class .java)
167+ ).setDefaultSplitAttributes(splitAttributes)
168+ .setMinWidthDp(840 )
169+ .setMinSmallestWidthDp(600 )
170+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio .ratio(1.5f ))
171+ .setFinishPrimaryWithPlaceholder(SplitRule .FinishBehavior .ALWAYS )
172+ .setSticky(false )
173+ .build()
184174 // [END android_activity_embedding_splitPlaceholderRule_kotlin]
185175
186176 // [START android_activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -207,23 +197,53 @@ class ActivityEmbeddingKotlinSnippets {
207197 // [START android_activity_embedding_addRuleActivityRule_kotlin]
208198 ruleController.addRule(activityRule)
209199 // [END android_activity_embedding_addRuleActivityRule_kotlin]
200+
210201 }
211202
212203 // [START android_activity_embedding_isActivityEmbedded_kotlin]
213204 fun isActivityEmbedded (activity : Activity ): Boolean {
214205 return ActivityEmbeddingController .getInstance(this ).isActivityEmbedded(activity)
215206 }
216207 // [END android_activity_embedding_isActivityEmbedded_kotlin]
208+
209+ }
210+
211+ class SplitAttributesBuilderSnippetsActivity : AppCompatActivity () {
212+
213+ @RequiresApi(VERSION_CODES .M )
214+ override fun onCreate (savedInstanceState : Bundle ? ) {
215+ super .onCreate(savedInstanceState)
216+
217+ // [START android_activity_embedding_splitAttributesBuilder_kotlin]
218+ val splitAttributesBuilder: SplitAttributes .Builder = SplitAttributes .Builder ()
219+ .setSplitType(SplitAttributes .SplitType .ratio(0.33f ))
220+ .setLayoutDirection(SplitAttributes .LayoutDirection .LEFT_TO_RIGHT )
221+
222+ if (WindowSdkExtensions .getInstance().extensionVersion >= 6 ) {
223+ splitAttributesBuilder.setDividerAttributes(
224+ DividerAttributes .DraggableDividerAttributes .Builder ()
225+ .setColor(getColor(R .color.divider_color))
226+ .setWidthDp(4 )
227+ .setDragRange(DividerAttributes .DragRange .DRAG_RANGE_SYSTEM_DEFAULT )
228+ .build()
229+ )
230+ }
231+ val splitAttributes: SplitAttributes = splitAttributesBuilder.build()
232+ // [END android_activity_embedding_splitAttributesBuilder_kotlin]
233+
234+ }
217235 }
218236
237+
219238 // [START android_activity_embedding_DetailActivity_class_kotlin]
220- class DetailActivity : AppCompatActivity () {
239+ class DetailActivity : AppCompatActivity () {
221240 fun onOpenSubdetail () {
222241 startActivity(Intent (this , SubdetailActivity ::class .java))
223242 }
224243 }
225244 // [END android_activity_embedding_DetailActivity_class_kotlin]
226245
246+
227247 // [START android_activity_embedding_SplitInitializer_class_kotlin]
228248 class SplitInitializer : Initializer <RuleController > {
229249
@@ -239,28 +259,31 @@ class ActivityEmbeddingKotlinSnippets {
239259 }
240260 // [END android_activity_embedding_SplitInitializer_class_kotlin]
241261
262+
242263 /* *
243264 * Function used by snippet.
244265 */
245266 fun classForItem (item : Int ): Class <* > { return Class ::class .java }
246267
247268 // [START android_activity_embedding_MenuActivity_class_kotlin]
248- inner class MenuActivity : AppCompatActivity () {
269+ inner class MenuActivity : AppCompatActivity () {
249270 fun onMenuItemSelected (selectedMenuItem : Int ) {
250271 startActivity(Intent (this , classForItem(selectedMenuItem)))
251272 }
252273 }
253274 // [END android_activity_embedding_MenuActivity_class_kotlin]
254275
276+
255277 // [START android_activity_embedding_B_class_kotlin]
256- class B : AppCompatActivity () {
278+ class B : AppCompatActivity () {
257279 fun onOpenC () {
258280 startActivity(Intent (this , C ::class .java))
259281 }
260282 }
261283 // [END android_activity_embedding_B_class_kotlin]
262284
263- class SnippetActivity2 : Activity () {
285+
286+ class RuleControllerSnippetsActivity : Activity () {
264287
265288 private val filterSet = HashSet <SplitPairFilter >()
266289
@@ -274,30 +297,12 @@ class ActivityEmbeddingKotlinSnippets {
274297 // [END android_activity_embedding_onCreate_RuleController_kotlin]
275298 }
276299
277- class SplitDeviceActivity : AppCompatActivity () {
278300
279- @RequiresApi( VERSION_CODES . N )
280- @OptIn( ExperimentalWindowApi :: class )
301+ class SplitDeviceActivity : AppCompatActivity () {
302+
281303 override fun onCreate (savedInstanceState : Bundle ? ) {
282304 super .onCreate(savedInstanceState)
283305
284- // [START android_activity_embedding_splitAttributesBuilder_kotlin]
285- val splitAttributesBuilder: SplitAttributes .Builder = SplitAttributes .Builder ()
286- .setSplitType(SplitAttributes .SplitType .ratio(0.33f ))
287- .setLayoutDirection(SplitAttributes .LayoutDirection .LEFT_TO_RIGHT )
288-
289- if (WindowSdkExtensions .getInstance().extensionVersion >= 6 ) {
290- splitAttributesBuilder.setDividerAttributes(
291- DividerAttributes .DraggableDividerAttributes .Builder ()
292- .setColor(getColor(R .color.divider_color))
293- .setWidthDp(4 )
294- .setDragRange(DividerAttributes .DragRange .DRAG_RANGE_SYSTEM_DEFAULT )
295- .build()
296- )
297- }
298- val splitAttributes: SplitAttributes = splitAttributesBuilder.build()
299- // [END android_activity_embedding_splitAttributesBuilder_kotlin]
300-
301306 val splitController = SplitController .getInstance(this )
302307 // [START android_activity_embedding_onCreate_SplitControllerCallbackAdapter_kotlin]
303308 val layout = layoutInflater.inflate(R .layout.activity_main, null )
@@ -314,10 +319,12 @@ class ActivityEmbeddingKotlinSnippets {
314319 }
315320 }
316321
317- class SnippetActivity3 : AppCompatActivity () {
322+
323+ class ActivityPinningSnippetsActivity : AppCompatActivity () {
318324 override fun onCreate (savedInstanceState : Bundle ? ) {
319325 super .onCreate(savedInstanceState)
320326 setContentView(R .layout.activity_main)
327+
321328 // [START android_activity_embedding_pinButton_kotlin]
322329 val pinButton: Button = findViewById(R .id.pinButton)
323330 pinButton.setOnClickListener {
@@ -338,18 +345,19 @@ class ActivityEmbeddingKotlinSnippets {
338345
339346 // [START android_activity_embedding_getSplitSupportStatus_kotlin]
340347 if (SplitController .getInstance(this ).splitSupportStatus ==
341- SplitController .SplitSupportStatus .SPLIT_AVAILABLE
342- ) {
343- // Device supports split activity features.
348+ SplitController .SplitSupportStatus .SPLIT_AVAILABLE ) {
349+ // Device supports split activity features.
344350 }
345351 // [END android_activity_embedding_getSplitSupportStatus_kotlin]
346352 }
347353 }
348354
355+
349356 // Classes used by snippets.
350- class ListActivity
351- class SubdetailActivity
352- class PlaceholderActivity
353- class ExpandedActivity
354- class C
357+ class ListActivity {}
358+ class SubdetailActivity {}
359+ class PlaceholderActivity {}
360+ class ExpandedActivity {}
361+ class C {}
362+
355363}
0 commit comments