Skip to content

Commit 85c20a7

Browse files
authored
Add activity embedding snippet files.
1 parent 887ae05 commit 85c20a7

File tree

2 files changed

+75
-77
lines changed

2 files changed

+75
-77
lines changed

misc/src/main/java/com/example/snippets/ActivityEmbeddingJavaSnippets.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
365365

366366

367367
/**
368-
* Used by snippets.
368+
* Classes used by snippets.
369369
*/
370370
static class ListActivity {}
371371
static class SubdetailActivity {}

misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt

Lines changed: 74 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
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-
171
package com.example.snippets
182

193
import android.app.Activity
204
import android.content.ComponentName
215
import android.content.Context
226
import android.content.Intent
237
import android.os.Bundle
8+
import android.os.PersistableBundle
249
import android.view.View
2510
import android.widget.Button
2611
import androidx.appcompat.app.AppCompatActivity
2712
import androidx.lifecycle.Lifecycle
13+
import androidx.lifecycle.LifecycleOwner
2814
import androidx.lifecycle.lifecycleScope
2915
import androidx.lifecycle.repeatOnLifecycle
3016
import androidx.startup.Initializer
@@ -40,17 +26,20 @@ import androidx.window.embedding.SplitAttributes
4026
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
4127
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
4228
import androidx.window.embedding.SplitController
29+
import androidx.window.embedding.SplitInfo
4330
import androidx.window.embedding.SplitPairFilter
4431
import androidx.window.embedding.SplitPairRule
4532
import androidx.window.embedding.SplitPinRule
4633
import androidx.window.embedding.SplitPlaceholderRule
4734
import androidx.window.embedding.SplitRule
35+
import androidx.window.java.embedding.SplitControllerCallbackAdapter
4836
import androidx.window.layout.FoldingFeature
37+
import java.util.concurrent.Executor
4938
import kotlinx.coroutines.launch
5039

5140
class 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

Comments
 (0)