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+
117package com.example.snippets
218
319import android.app.Activity
420import android.content.ComponentName
521import android.content.Context
622import android.content.Intent
723import android.os.Bundle
8- import android.os.PersistableBundle
924import android.view.View
1025import android.widget.Button
1126import androidx.appcompat.app.AppCompatActivity
1227import androidx.lifecycle.Lifecycle
13- import androidx.lifecycle.LifecycleOwner
1428import androidx.lifecycle.lifecycleScope
1529import androidx.lifecycle.repeatOnLifecycle
1630import androidx.startup.Initializer
@@ -26,20 +40,17 @@ import androidx.window.embedding.SplitAttributes
2640import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
2741import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
2842import androidx.window.embedding.SplitController
29- import androidx.window.embedding.SplitInfo
3043import androidx.window.embedding.SplitPairFilter
3144import androidx.window.embedding.SplitPairRule
3245import androidx.window.embedding.SplitPinRule
3346import androidx.window.embedding.SplitPlaceholderRule
3447import androidx.window.embedding.SplitRule
35- import androidx.window.java.embedding.SplitControllerCallbackAdapter
3648import androidx.window.layout.FoldingFeature
37- import java.util.concurrent.Executor
3849import kotlinx.coroutines.launch
3950
4051class ActivityEmbeddingKotlinSnippets {
4152
42- class SnippetActivity : Activity () {
53+ class SnippetActivity : Activity () {
4354
4455 private val context = this
4556
@@ -83,22 +94,22 @@ class ActivityEmbeddingKotlinSnippets {
8394 val builder = SplitAttributes .Builder ()
8495 builder.setSplitType(SPLIT_TYPE_HINGE )
8596 return @setSplitAttributesCalculator if (feature?.isSeparating == true ) {
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()
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()
102113 } else {
103114 // No split for tall displays.
104115 builder
@@ -111,9 +122,9 @@ class ActivityEmbeddingKotlinSnippets {
111122
112123 // [START activity_embedding_splitPairFilter_kotlin]
113124 val splitPairFilter = SplitPairFilter (
114- ComponentName (this , ListActivity ::class .java),
115- ComponentName (this , DetailActivity ::class .java),
116- null
125+ ComponentName (this , ListActivity ::class .java),
126+ ComponentName (this , DetailActivity ::class .java),
127+ null
117128 )
118129 // [END activity_embedding_splitPairFilter_kotlin]
119130
@@ -141,8 +152,8 @@ class ActivityEmbeddingKotlinSnippets {
141152 // [END activity_embedding_splitPairRule_kotlin]
142153
143154 // [START activity_embedding_ruleController_kotlin]
144- val ruleController = RuleController .getInstance(this )
145- ruleController.addRule(splitPairRule)
155+ val ruleController = RuleController .getInstance(this )
156+ ruleController.addRule(splitPairRule)
146157 // [END activity_embedding_ruleController_kotlin]
147158
148159 // [START activity_embedding_placeholderActivityFilter_kotlin]
@@ -158,15 +169,15 @@ class ActivityEmbeddingKotlinSnippets {
158169
159170 // [START activity_embedding_splitPlaceholderRule_kotlin]
160171 val splitPlaceholderRule = SplitPlaceholderRule .Builder (
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()
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()
170181 // [END activity_embedding_splitPlaceholderRule_kotlin]
171182
172183 // [START activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -175,8 +186,8 @@ class ActivityEmbeddingKotlinSnippets {
175186
176187 // [START activity_embedding_expandedActivityFilter_kotlin]
177188 val expandedActivityFilter = ActivityFilter (
178- ComponentName (this , ExpandedActivity ::class .java),
179- null
189+ ComponentName (this , ExpandedActivity ::class .java),
190+ null
180191 )
181192 // [END activity_embedding_expandedActivityFilter_kotlin]
182193
@@ -201,35 +212,32 @@ class ActivityEmbeddingKotlinSnippets {
201212
202213 if (WindowSdkExtensions .getInstance().extensionVersion >= 6 ) {
203214 _splitAttributesBuilder .setDividerAttributes(
204- DividerAttributes .DraggableDividerAttributes .Builder ()
205- .setColor(getColor(R .color.divider_color))
206- .setWidthDp(4 )
207- .setDragRange(DividerAttributes .DragRange .DRAG_RANGE_SYSTEM_DEFAULT )
208- .build()
215+ DividerAttributes .DraggableDividerAttributes .Builder ()
216+ .setColor(getColor(R .color.divider_color))
217+ .setWidthDp(4 )
218+ .setDragRange(DividerAttributes .DragRange .DRAG_RANGE_SYSTEM_DEFAULT )
219+ .build()
209220 )
210221 }
211222 val _splitAttributes : SplitAttributes = _splitAttributesBuilder .build()
212223 // [END activity_embedding_splitAttributesBuilder_kotlin]
213224
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-
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]
220230 }
221231 }
222232
223-
224233 // [START activity_embedding_DetailActivity_class_kotlin]
225- class DetailActivity : AppCompatActivity () {
234+ class DetailActivity : AppCompatActivity () {
226235 fun onOpenSubdetail () {
227- startActivity(Intent (this , SubdetailActivity ::class .java))
236+ startActivity(Intent (this , SubdetailActivity ::class .java))
228237 }
229238 }
230239 // [END activity_embedding_DetailActivity_class_kotlin]
231240
232-
233241 // [START activity_embedding_SplitInitializer_class_kotlin]
234242 class SplitInitializer : Initializer <RuleController > {
235243
@@ -245,31 +253,28 @@ class ActivityEmbeddingKotlinSnippets {
245253 }
246254 // [END activity_embedding_SplitInitializer_class_kotlin]
247255
248-
249256 /* *
250257 * Function used by snippet.
251258 */
252259 fun classForItem (item : Int ): Class <* > { return Class ::class .java }
253260
254261 // [START activity_embedding_MenuActivity_class_kotlin]
255- inner class MenuActivity : AppCompatActivity () {
262+ inner class MenuActivity : AppCompatActivity () {
256263 fun onMenuItemSelected (selectedMenuItem : Int ) {
257264 startActivity(Intent (this , classForItem(selectedMenuItem)))
258265 }
259266 }
260267 // [END activity_embedding_MenuActivity_class_kotlin]
261268
262-
263269 // [START activity_embedding_B_class_kotlin]
264- class B : AppCompatActivity () {
270+ class B : AppCompatActivity () {
265271 fun onOpenC () {
266272 startActivity(Intent (this , C ::class .java))
267273 }
268274 }
269275 // [END activity_embedding_B_class_kotlin]
270276
271-
272- class SnippetActivity2 : Activity () {
277+ class SnippetActivity2 : Activity () {
273278
274279 private val filterSet = HashSet <SplitPairFilter >()
275280
@@ -283,8 +288,7 @@ class ActivityEmbeddingKotlinSnippets {
283288 // [END activity_embedding_onCreate_RuleController_kotlin]
284289 }
285290
286-
287- class SplitDeviceActivity : AppCompatActivity () {
291+ class SplitDeviceActivity : AppCompatActivity () {
288292
289293 @OptIn(ExperimentalWindowApi ::class )
290294 override fun onCreate (savedInstanceState : Bundle ? ) {
@@ -305,9 +309,8 @@ class ActivityEmbeddingKotlinSnippets {
305309 }
306310 }
307311
308-
309- class SnippetActivity3 : AppCompatActivity () {
310- override fun onCreate (savedInstanceState : Bundle ? ){
312+ class SnippetActivity3 : AppCompatActivity () {
313+ override fun onCreate (savedInstanceState : Bundle ? ) {
311314 super .onCreate(savedInstanceState)
312315 setContentView(R .layout.activity_main)
313316 // [START activity_embedding_pinButton_kotlin]
@@ -329,21 +332,20 @@ class ActivityEmbeddingKotlinSnippets {
329332
330333 // [START activity_embedding_getSplitSupportStatus_kotlin]
331334 if (SplitController .getInstance(this ).splitSupportStatus ==
332- SplitController .SplitSupportStatus .SPLIT_AVAILABLE ) {
333- // Device supports split activity features.
335+ SplitController .SplitSupportStatus .SPLIT_AVAILABLE
336+ ) {
337+ // Device supports split activity features.
334338 }
335339 // [END activity_embedding_getSplitSupportStatus_kotlin]
336340 }
337341 }
338342
339-
340343 /* *
341344 * Classes used by snippets.
342345 */
343- class ListActivity {}
344- class SubdetailActivity {}
345- class PlaceholderActivity {}
346- class ExpandedActivity {}
347- class C {}
348-
346+ class ListActivity
347+ class SubdetailActivity
348+ class PlaceholderActivity
349+ class ExpandedActivity
350+ class C
349351}
0 commit comments