Skip to content

Commit 98f7a68

Browse files
authored
Added @RequiresApi to enable SDK 24 features.
1 parent ef916dc commit 98f7a68

File tree

2 files changed

+76
-82
lines changed

2 files changed

+76
-82
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
import android.content.Context;
66
import android.content.Intent;
77
import android.content.res.Configuration;
8+
import android.os.Build.VERSION_CODES;
89
import android.os.Bundle;
910
import android.view.View;
1011
import android.widget.Button;
1112
import androidx.annotation.NonNull;
1213
import androidx.annotation.Nullable;
1314
import androidx.annotation.OptIn;
14-
import androidx.appcompat.app.AppCompatActivity;
15+
import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;
1516
import androidx.core.content.ContextCompat;
1617
import androidx.startup.Initializer;
1718
import androidx.window.WindowSdkExtensions;
@@ -45,6 +46,7 @@ static class SnippetsActivity extends Activity {
4546

4647
private Context context;
4748

49+
@RequiresApi(api=VERSION_CODES.N)
4850
@Override
4951
protected void onCreate(@Nullable Bundle savedInstanceState) {
5052
super.onCreate(savedInstanceState);
@@ -364,9 +366,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
364366
}
365367

366368

367-
/**
368-
* Classes used by snippets.
369-
*/
369+
// Classes used by snippets.
370370
static class ListActivity {}
371371
static class SubdetailActivity {}
372372
static class PlaceholderActivity {}

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

Lines changed: 72 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,14 @@
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
7+
import android.os.Build.VERSION_CODES
238
import android.os.Bundle
249
import android.view.View
2510
import android.widget.Button
11+
import androidx.annotation.RequiresApi
2612
import androidx.appcompat.app.AppCompatActivity
2713
import androidx.lifecycle.Lifecycle
2814
import androidx.lifecycle.lifecycleScope
@@ -50,10 +36,11 @@ import kotlinx.coroutines.launch
5036

5137
class ActivityEmbeddingKotlinSnippets {
5238

53-
class SnippetActivity : Activity() {
39+
class SnippetActivity: Activity() {
5440

5541
private val context = this
5642

43+
@RequiresApi(api=VERSION_CODES.N)
5744
override fun onCreate(savedInstanceState: Bundle?) {
5845
super.onCreate(savedInstanceState)
5946

@@ -94,22 +81,22 @@ class ActivityEmbeddingKotlinSnippets {
9481
val builder = SplitAttributes.Builder()
9582
builder.setSplitType(SPLIT_TYPE_HINGE)
9683
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()
84+
// Horizontal split for tabletop posture.
85+
builder
86+
.setSplitType(SPLIT_TYPE_HINGE)
87+
.setLayoutDirection(
88+
if (feature.orientation == FoldingFeature.Orientation.HORIZONTAL) {
89+
SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
90+
} else {
91+
SplitAttributes.LayoutDirection.LOCALE
92+
})
93+
.build()
94+
}
95+
else if (parentConfiguration.screenWidthDp >= 840) {
96+
// Side-by-side dual-pane layout for wide displays.
97+
builder
98+
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
99+
.build()
113100
} else {
114101
// No split for tall displays.
115102
builder
@@ -122,9 +109,9 @@ class ActivityEmbeddingKotlinSnippets {
122109

123110
// [START android_activity_embedding_splitPairFilter_kotlin]
124111
val splitPairFilter = SplitPairFilter(
125-
ComponentName(this, ListActivity::class.java),
126-
ComponentName(this, DetailActivity::class.java),
127-
null
112+
ComponentName(this, ListActivity::class.java),
113+
ComponentName(this, DetailActivity::class.java),
114+
null
128115
)
129116
// [END android_activity_embedding_splitPairFilter_kotlin]
130117

@@ -152,8 +139,8 @@ class ActivityEmbeddingKotlinSnippets {
152139
// [END android_activity_embedding_splitPairRule_kotlin]
153140

154141
// [START android_activity_embedding_ruleController_kotlin]
155-
val ruleController = RuleController.getInstance(this)
156-
ruleController.addRule(splitPairRule)
142+
val ruleController = RuleController.getInstance(this)
143+
ruleController.addRule(splitPairRule)
157144
// [END android_activity_embedding_ruleController_kotlin]
158145

159146
// [START android_activity_embedding_placeholderActivityFilter_kotlin]
@@ -169,15 +156,15 @@ class ActivityEmbeddingKotlinSnippets {
169156

170157
// [START android_activity_embedding_splitPlaceholderRule_kotlin]
171158
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()
159+
placeholderActivityFilterSet,
160+
Intent(context, PlaceholderActivity::class.java)
161+
).setDefaultSplitAttributes(splitAttributes)
162+
.setMinWidthDp(840)
163+
.setMinSmallestWidthDp(600)
164+
.setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ratio(1.5f))
165+
.setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ALWAYS)
166+
.setSticky(false)
167+
.build()
181168
// [END android_activity_embedding_splitPlaceholderRule_kotlin]
182169

183170
// [START android_activity_embedding_addRuleSplitPlaceholderRule_kotlin]
@@ -186,8 +173,8 @@ class ActivityEmbeddingKotlinSnippets {
186173

187174
// [START android_activity_embedding_expandedActivityFilter_kotlin]
188175
val expandedActivityFilter = ActivityFilter(
189-
ComponentName(this, ExpandedActivity::class.java),
190-
null
176+
ComponentName(this, ExpandedActivity::class.java),
177+
null
191178
)
192179
// [END android_activity_embedding_expandedActivityFilter_kotlin]
193180

@@ -212,32 +199,35 @@ class ActivityEmbeddingKotlinSnippets {
212199

213200
if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
214201
_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()
202+
DividerAttributes.DraggableDividerAttributes.Builder()
203+
.setColor(getColor(R.color.divider_color))
204+
.setWidthDp(4)
205+
.setDragRange(DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
206+
.build()
220207
)
221208
}
222209
val _splitAttributes: SplitAttributes = _splitAttributesBuilder.build()
223210
// [END android_activity_embedding_splitAttributesBuilder_kotlin]
224211

225-
// [START android_activity_embedding_isActivityEmbedded_kotlin]
226-
fun isActivityEmbedded(activity: Activity): Boolean {
227-
return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
228-
}
229-
// [END android_activity_embedding_isActivityEmbedded_kotlin]
212+
// [START android_activity_embedding_isActivityEmbedded_kotlin]
213+
fun isActivityEmbedded(activity: Activity): Boolean {
214+
return ActivityEmbeddingController.getInstance(this).isActivityEmbedded(activity)
215+
}
216+
// [END android_activity_embedding_isActivityEmbedded_kotlin]
217+
230218
}
231219
}
232220

221+
233222
// [START android_activity_embedding_DetailActivity_class_kotlin]
234-
class DetailActivity : AppCompatActivity() {
223+
class DetailActivity: AppCompatActivity() {
235224
fun onOpenSubdetail() {
236-
startActivity(Intent(this, SubdetailActivity::class.java))
225+
startActivity(Intent(this, SubdetailActivity::class.java))
237226
}
238227
}
239228
// [END android_activity_embedding_DetailActivity_class_kotlin]
240229

230+
241231
// [START android_activity_embedding_SplitInitializer_class_kotlin]
242232
class SplitInitializer : Initializer<RuleController> {
243233

@@ -253,28 +243,31 @@ class ActivityEmbeddingKotlinSnippets {
253243
}
254244
// [END android_activity_embedding_SplitInitializer_class_kotlin]
255245

246+
256247
/**
257248
* Function used by snippet.
258249
*/
259250
fun classForItem(item: Int): Class<*> { return Class::class.java }
260251

261252
// [START android_activity_embedding_MenuActivity_class_kotlin]
262-
inner class MenuActivity : AppCompatActivity() {
253+
inner class MenuActivity: AppCompatActivity() {
263254
fun onMenuItemSelected(selectedMenuItem: Int) {
264255
startActivity(Intent(this, classForItem(selectedMenuItem)))
265256
}
266257
}
267258
// [END android_activity_embedding_MenuActivity_class_kotlin]
268259

260+
269261
// [START android_activity_embedding_B_class_kotlin]
270-
class B : AppCompatActivity() {
262+
class B: AppCompatActivity() {
271263
fun onOpenC() {
272264
startActivity(Intent(this, C::class.java))
273265
}
274266
}
275267
// [END android_activity_embedding_B_class_kotlin]
276268

277-
class SnippetActivity2 : Activity() {
269+
270+
class SnippetActivity2: Activity() {
278271

279272
private val filterSet = HashSet<SplitPairFilter>()
280273

@@ -288,7 +281,8 @@ class ActivityEmbeddingKotlinSnippets {
288281
// [END android_activity_embedding_onCreate_RuleController_kotlin]
289282
}
290283

291-
class SplitDeviceActivity : AppCompatActivity() {
284+
285+
class SplitDeviceActivity: AppCompatActivity() {
292286

293287
@OptIn(ExperimentalWindowApi::class)
294288
override fun onCreate(savedInstanceState: Bundle?) {
@@ -309,8 +303,9 @@ class ActivityEmbeddingKotlinSnippets {
309303
}
310304
}
311305

312-
class SnippetActivity3 : AppCompatActivity() {
313-
override fun onCreate(savedInstanceState: Bundle?) {
306+
307+
class SnippetActivity3: AppCompatActivity() {
308+
override fun onCreate(savedInstanceState: Bundle?){
314309
super.onCreate(savedInstanceState)
315310
setContentView(R.layout.activity_main)
316311
// [START android_activity_embedding_pinButton_kotlin]
@@ -332,20 +327,19 @@ class ActivityEmbeddingKotlinSnippets {
332327

333328
// [START android_activity_embedding_getSplitSupportStatus_kotlin]
334329
if (SplitController.getInstance(this).splitSupportStatus ==
335-
SplitController.SplitSupportStatus.SPLIT_AVAILABLE
336-
) {
337-
// Device supports split activity features.
330+
SplitController.SplitSupportStatus.SPLIT_AVAILABLE) {
331+
// Device supports split activity features.
338332
}
339333
// [END android_activity_embedding_getSplitSupportStatus_kotlin]
340334
}
341335
}
342336

343-
/**
344-
* Classes used by snippets.
345-
*/
346-
class ListActivity
347-
class SubdetailActivity
348-
class PlaceholderActivity
349-
class ExpandedActivity
350-
class C
337+
338+
// Classes used by snippets.
339+
class ListActivity {}
340+
class SubdetailActivity {}
341+
class PlaceholderActivity {}
342+
class ExpandedActivity {}
343+
class C {}
344+
351345
}

0 commit comments

Comments
 (0)