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
204import android.content.ComponentName
215import android.content.Context
226import android.content.Intent
237import android.os.Bundle
8+ import android.os.PersistableBundle
249import android.view.View
2510import android.widget.Button
2611import androidx.appcompat.app.AppCompatActivity
2712import androidx.lifecycle.Lifecycle
13+ import androidx.lifecycle.LifecycleOwner
2814import androidx.lifecycle.lifecycleScope
2915import androidx.lifecycle.repeatOnLifecycle
3016import androidx.startup.Initializer
@@ -40,17 +26,20 @@ import androidx.window.embedding.SplitAttributes
4026import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
4127import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
4228import androidx.window.embedding.SplitController
29+ import androidx.window.embedding.SplitInfo
4330import androidx.window.embedding.SplitPairFilter
4431import androidx.window.embedding.SplitPairRule
4532import androidx.window.embedding.SplitPinRule
4633import androidx.window.embedding.SplitPlaceholderRule
4734import androidx.window.embedding.SplitRule
35+ import androidx.window.java.embedding.SplitControllerCallbackAdapter
4836import androidx.window.layout.FoldingFeature
37+ import java.util.concurrent.Executor
4938import kotlinx.coroutines.launch
5039
5140class ActivityEmbeddingKotlinSnippets {
5241
53- class SnippetActivity : Activity () {
42+ class SnippetActivity : Activity () {
5443
5544 private val context = this
5645
@@ -94,22 +83,22 @@ class ActivityEmbeddingKotlinSnippets {
9483 val builder = SplitAttributes .Builder ()
9584 builder.setSplitType(SPLIT_TYPE_HINGE )
9685 return @setSplitAttributesCalculator if (feature?.isSeparating == true ) {
97- // Horizontal split for tabletop posture.
98- builder
99- .setSplitType(SPLIT_TYPE_HINGE )
100- .setLayoutDirection(
101- if (feature.orientation == FoldingFeature .Orientation .HORIZONTAL ) {
102- SplitAttributes .LayoutDirection .BOTTOM_TO_TOP
103- } else {
104- SplitAttributes .LayoutDirection .LOCALE
105- }
106- )
107- .build()
108- } else if (parentConfiguration.screenWidthDp >= 840 ) {
109- // Side-by-side dual-pane layout for wide displays.
110- builder
111- .setLayoutDirection(SplitAttributes .LayoutDirection .LOCALE )
112- .build()
86+ // Horizontal split for tabletop posture.
87+ builder
88+ .setSplitType(SPLIT_TYPE_HINGE )
89+ .setLayoutDirection(
90+ if (feature.orientation == FoldingFeature .Orientation .HORIZONTAL ) {
91+ SplitAttributes .LayoutDirection .BOTTOM_TO_TOP
92+ } else {
93+ SplitAttributes .LayoutDirection .LOCALE
94+ })
95+ .build( )
96+ }
97+ else if (parentConfiguration.screenWidthDp >= 840 ) {
98+ // Side-by-side dual-pane layout for wide displays.
99+ builder
100+ .setLayoutDirection(SplitAttributes .LayoutDirection .LOCALE )
101+ .build()
113102 } else {
114103 // No split for tall displays.
115104 builder
@@ -122,9 +111,9 @@ class ActivityEmbeddingKotlinSnippets {
122111
123112 // [START activity_embedding_splitPairFilter_kotlin]
124113 val splitPairFilter = SplitPairFilter (
125- ComponentName (this , ListActivity ::class .java),
126- ComponentName (this , DetailActivity ::class .java),
127- null
114+ ComponentName (this , ListActivity ::class .java),
115+ ComponentName (this , DetailActivity ::class .java),
116+ null
128117 )
129118 // [END activity_embedding_splitPairFilter_kotlin]
130119
@@ -152,8 +141,8 @@ class ActivityEmbeddingKotlinSnippets {
152141 // [END activity_embedding_splitPairRule_kotlin]
153142
154143 // [START activity_embedding_ruleController_kotlin]
155- val ruleController = RuleController .getInstance(this )
156- ruleController.addRule(splitPairRule)
144+ val ruleController = RuleController .getInstance(this )
145+ ruleController.addRule(splitPairRule)
157146 // [END activity_embedding_ruleController_kotlin]
158147
159148 // [START activity_embedding_placeholderActivityFilter_kotlin]
@@ -169,15 +158,15 @@ class ActivityEmbeddingKotlinSnippets {
169158
170159 // [START activity_embedding_splitPlaceholderRule_kotlin]
171160 val splitPlaceholderRule = SplitPlaceholderRule .Builder (
172- placeholderActivityFilterSet,
173- Intent (context, PlaceholderActivity ::class .java)
174- ).setDefaultSplitAttributes(splitAttributes)
175- .setMinWidthDp(840 )
176- .setMinSmallestWidthDp(600 )
177- .setMaxAspectRatioInPortrait(EmbeddingAspectRatio .ratio(1.5f ))
178- .setFinishPrimaryWithPlaceholder(SplitRule .FinishBehavior .ALWAYS )
179- .setSticky(false )
180- .build()
161+ placeholderActivityFilterSet,
162+ Intent (context, PlaceholderActivity ::class .java)
163+ ).setDefaultSplitAttributes(splitAttributes)
164+ .setMinWidthDp(840 )
165+ .setMinSmallestWidthDp(600 )
166+ .setMaxAspectRatioInPortrait(EmbeddingAspectRatio .ratio(1.5f ))
167+ .setFinishPrimaryWithPlaceholder(SplitRule .FinishBehavior .ALWAYS )
168+ .setSticky(false )
169+ .build()
181170 // [END activity_embedding_splitPlaceholderRule_kotlin]
182171
183172 // [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -186,8 +175,8 @@ class ActivityEmbeddingKotlinSnippets {
186175
187176 // [START activity_embedding_expandedActivityFilter_kotlin]
188177 val expandedActivityFilter = ActivityFilter (
189- ComponentName (this , ExpandedActivity ::class .java),
190- null
178+ ComponentName (this , ExpandedActivity ::class .java),
179+ null
191180 )
192181 // [END activity_embedding_expandedActivityFilter_kotlin]
193182
@@ -212,32 +201,35 @@ class ActivityEmbeddingKotlinSnippets {
212201
213202 if (WindowSdkExtensions .getInstance().extensionVersion >= 6 ) {
214203 _splitAttributesBuilder .setDividerAttributes(
215- DividerAttributes .DraggableDividerAttributes .Builder ()
216- .setColor(getColor(R .color.divider_color))
217- .setWidthDp(4 )
218- .setDragRange(DividerAttributes .DragRange .DRAG_RANGE_SYSTEM_DEFAULT )
219- .build()
204+ DividerAttributes .DraggableDividerAttributes .Builder ()
205+ .setColor(getColor(R .color.divider_color))
206+ .setWidthDp(4 )
207+ .setDragRange(DividerAttributes .DragRange .DRAG_RANGE_SYSTEM_DEFAULT )
208+ .build()
220209 )
221210 }
222211 val _splitAttributes : SplitAttributes = _splitAttributesBuilder .build()
223212 // [END activity_embedding_splitAttributesBuilder_kotlin]
224213
225- // [START activity_embedding_isActivityEmbedded_kotlin]
226- fun isActivityEmbedded (activity : Activity ): Boolean {
227- return ActivityEmbeddingController .getInstance(this ).isActivityEmbedded(activity)
228- }
229- // [END activity_embedding_isActivityEmbedded_kotlin]
214+ // [START activity_embedding_isActivityEmbedded_kotlin]
215+ fun isActivityEmbedded (activity : Activity ): Boolean {
216+ return ActivityEmbeddingController .getInstance(this ).isActivityEmbedded(activity)
217+ }
218+ // [END activity_embedding_isActivityEmbedded_kotlin]
219+
230220 }
231221 }
232222
223+
233224 // [START activity_embedding_DetailActivity_class_kotlin]
234- class DetailActivity : AppCompatActivity () {
225+ class DetailActivity : AppCompatActivity () {
235226 fun onOpenSubdetail () {
236- startActivity(Intent (this , SubdetailActivity ::class .java))
227+ startActivity(Intent (this , SubdetailActivity ::class .java))
237228 }
238229 }
239230 // [END activity_embedding_DetailActivity_class_kotlin]
240231
232+
241233 // [START activity_embedding_SplitInitializer_class_kotlin]
242234 class SplitInitializer : Initializer <RuleController > {
243235
@@ -253,28 +245,31 @@ class ActivityEmbeddingKotlinSnippets {
253245 }
254246 // [END activity_embedding_SplitInitializer_class_kotlin]
255247
248+
256249 /* *
257250 * Function used by snippet.
258251 */
259252 fun classForItem (item : Int ): Class <* > { return Class ::class .java }
260253
261254 // [START activity_embedding_MenuActivity_class_kotlin]
262- inner class MenuActivity : AppCompatActivity () {
255+ inner class MenuActivity : AppCompatActivity () {
263256 fun onMenuItemSelected (selectedMenuItem : Int ) {
264257 startActivity(Intent (this , classForItem(selectedMenuItem)))
265258 }
266259 }
267260 // [END activity_embedding_MenuActivity_class_kotlin]
268261
262+
269263 // [START activity_embedding_B_class_kotlin]
270- class B : AppCompatActivity () {
264+ class B : AppCompatActivity () {
271265 fun onOpenC () {
272266 startActivity(Intent (this , C ::class .java))
273267 }
274268 }
275269 // [END activity_embedding_B_class_kotlin]
276270
277- class SnippetActivity2 : Activity () {
271+
272+ class SnippetActivity2 : Activity () {
278273
279274 private val filterSet = HashSet <SplitPairFilter >()
280275
@@ -288,7 +283,8 @@ class ActivityEmbeddingKotlinSnippets {
288283 // [END activity_embedding_onCreate_RuleController_kotlin]
289284 }
290285
291- class SplitDeviceActivity : AppCompatActivity () {
286+
287+ class SplitDeviceActivity : AppCompatActivity () {
292288
293289 @OptIn(ExperimentalWindowApi ::class )
294290 override fun onCreate (savedInstanceState : Bundle ? ) {
@@ -309,8 +305,9 @@ class ActivityEmbeddingKotlinSnippets {
309305 }
310306 }
311307
312- class SnippetActivity3 : AppCompatActivity () {
313- override fun onCreate (savedInstanceState : Bundle ? ) {
308+
309+ class SnippetActivity3 : AppCompatActivity () {
310+ override fun onCreate (savedInstanceState : Bundle ? ){
314311 super .onCreate(savedInstanceState)
315312 setContentView(R .layout.activity_main)
316313 // [START activity_embedding_pinButton_kotlin]
@@ -332,20 +329,21 @@ class ActivityEmbeddingKotlinSnippets {
332329
333330 // [START activity_embedding_getSplitSupportStatus_kotlin]
334331 if (SplitController .getInstance(this ).splitSupportStatus ==
335- SplitController .SplitSupportStatus .SPLIT_AVAILABLE
336- ) {
337- // Device supports split activity features.
332+ SplitController .SplitSupportStatus .SPLIT_AVAILABLE ) {
333+ // Device supports split activity features.
338334 }
339335 // [END activity_embedding_getSplitSupportStatus_kotlin]
340336 }
341337 }
342338
339+
343340 /* *
344- * Used by snippets.
341+ * Classes used by snippets.
345342 */
346- class ListActivity
347- class SubdetailActivity
348- class PlaceholderActivity
349- class ExpandedActivity
350- class C
343+ class ListActivity {}
344+ class SubdetailActivity {}
345+ class PlaceholderActivity {}
346+ class ExpandedActivity {}
347+ class C {}
348+
351349}
0 commit comments