Skip to content

Commit 0fbde2f

Browse files
matakuvinaygaba
andauthored
Support edge-to-edge content (#412)
* Specify targetSdkVersion to 35 in sample project * Support edgeToEdge material2 TopAppBar's height is 56dp, so we couldn't set maxLines to 2 or over * Fix import --------- Co-authored-by: Vinay Gaba <vinaygaba@gmail.com>
1 parent e5090e7 commit 0fbde2f

3 files changed

Lines changed: 120 additions & 95 deletions

File tree

sample/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ android {
2626
applicationId "com.airbnb.android.showkasesample"
2727
minSdkVersion 21
2828
compileSdk 36
29-
targetSdkVersion 33
29+
targetSdkVersion 35
3030
versionCode 1
3131
versionName "1.0"
3232
testInstrumentationRunner "com.karumi.shot.ShotTestRunner"

showkase/src/main/java/com/airbnb/android/showkase/ui/ShowkaseBrowserActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Context
44
import android.content.Intent
55
import android.os.Bundle
66
import androidx.activity.compose.setContent
7+
import androidx.activity.enableEdgeToEdge
78
import androidx.appcompat.app.AppCompatActivity
89
import androidx.compose.runtime.getValue
910
import androidx.compose.runtime.mutableStateOf
@@ -20,6 +21,7 @@ import com.airbnb.android.showkase.models.ShowkaseElementsMetadata
2021
*/
2122
class ShowkaseBrowserActivity : AppCompatActivity() {
2223
override fun onCreate(savedInstanceState: Bundle?) {
24+
enableEdgeToEdge()
2325
super.onCreate(savedInstanceState)
2426
val classKey =
2527
intent.extras?.getString(SHOWKASE_ROOT_MODULE_KEY) ?: throw ShowkaseException(

showkase/src/main/java/com/airbnb/android/showkase/ui/ShowkaseBrowserApp.kt

Lines changed: 117 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.airbnb.android.showkase.ui
22

3-
import android.annotation.SuppressLint
43
import android.content.res.Configuration
54
import androidx.compose.animation.AnimatedVisibility
65
import androidx.compose.animation.expandHorizontally
@@ -14,9 +13,11 @@ import androidx.compose.foundation.layout.Row
1413
import androidx.compose.foundation.layout.fillMaxSize
1514
import androidx.compose.foundation.layout.fillMaxWidth
1615
import androidx.compose.foundation.layout.padding
16+
import androidx.compose.foundation.layout.safeDrawingPadding
1717
import androidx.compose.material.Icon
1818
import androidx.compose.material.IconButton
1919
import androidx.compose.material.Scaffold
20+
import androidx.compose.material.Surface
2021
import androidx.compose.material.Text
2122
import androidx.compose.material.TextField
2223
import androidx.compose.material.TextFieldDefaults
@@ -34,7 +35,6 @@ import androidx.compose.ui.Alignment
3435
import kotlinx.coroutines.delay
3536
import androidx.compose.ui.Modifier
3637
import androidx.compose.ui.graphics.Color
37-
import androidx.compose.ui.graphics.graphicsLayer
3838
import androidx.compose.ui.platform.LocalConfiguration
3939
import androidx.compose.ui.platform.LocalContext
4040
import androidx.compose.ui.platform.LocalInspectionMode
@@ -63,7 +63,6 @@ import com.airbnb.android.showkase.models.insideGroup
6363
import com.airbnb.android.showkase.ui.SemanticsUtils.lineCountVal
6464

6565
@Suppress("LongMethod")
66-
@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
6766
@Composable
6867
internal fun ShowkaseBrowserApp(
6968
groupedComponentMap: Map<String, List<ShowkaseBrowserComponent>>,
@@ -82,56 +81,63 @@ internal fun ShowkaseBrowserApp(
8281
val navController = rememberNavController()
8382
val navBackStackEntry by navController.currentBackStackEntryAsState()
8483
val currentRoute = navBackStackEntry?.destination?.route
84+
Surface(
85+
color = Color.White
86+
) {
87+
Scaffold(
88+
drawerContent = null,
89+
topBar = {
90+
ShowkaseAppBar(
91+
currentRoute = currentRoute,
92+
showkaseBrowserScreenMetadata = showkaseBrowserScreenMetadata,
93+
onSearchQueryChanged = {
94+
onUpdateShowkaseBrowserScreenMetadata(
95+
showkaseBrowserScreenMetadata.copy(searchQuery = it)
96+
)
97+
},
98+
onClearSearch = {
99+
onUpdateShowkaseBrowserScreenMetadata(
100+
showkaseBrowserScreenMetadata.copy(searchQuery = "")
101+
)
102+
},
103+
onActivateSearch = {
104+
onUpdateShowkaseBrowserScreenMetadata(
105+
showkaseBrowserScreenMetadata.copy(isSearchActive = true)
106+
)
107+
},
108+
onCloseSearch = {
109+
onUpdateShowkaseBrowserScreenMetadata(
110+
showkaseBrowserScreenMetadata.copy(isSearchActive = false)
111+
)
112+
},
85113

86-
Scaffold(
87-
drawerContent = null,
88-
topBar = {
89-
ShowkaseAppBar(
90-
currentRoute = currentRoute,
91-
showkaseBrowserScreenMetadata = showkaseBrowserScreenMetadata,
92-
onSearchQueryChanged = {
93-
onUpdateShowkaseBrowserScreenMetadata(
94-
showkaseBrowserScreenMetadata.copy(searchQuery = it)
95114
)
96-
},
97-
onClearSearch = {
98-
onUpdateShowkaseBrowserScreenMetadata(
99-
showkaseBrowserScreenMetadata.copy(searchQuery = "")
100-
)
101-
},
102-
onActivateSearch = {
103-
onUpdateShowkaseBrowserScreenMetadata(
104-
showkaseBrowserScreenMetadata.copy(isSearchActive = true)
105-
)
106-
},
107-
onCloseSearch = {
108-
onUpdateShowkaseBrowserScreenMetadata(
109-
showkaseBrowserScreenMetadata.copy(isSearchActive = false)
115+
},
116+
content = { contentPadding ->
117+
Column(
118+
modifier = Modifier
119+
.fillMaxSize()
120+
.background(color = SHOWKASE_COLOR_BACKGROUND)
121+
.padding(contentPadding),
122+
) {
123+
ShowkaseBodyContent(
124+
navController,
125+
groupedComponentMap,
126+
groupedColorsMap,
127+
groupedTypographyMap,
128+
showkaseBrowserScreenMetadata,
129+
onUpdateShowkaseBrowserScreenMetadata,
130+
navigateTo = {
131+
navController.navigate(it.name)
132+
}
110133
)
111-
},
112-
113-
)
114-
},
115-
content = {
116-
Column(
117-
modifier = Modifier
118-
.fillMaxSize()
119-
.background(color = SHOWKASE_COLOR_BACKGROUND),
120-
) {
121-
ShowkaseBodyContent(
122-
navController,
123-
groupedComponentMap,
124-
groupedColorsMap,
125-
groupedTypographyMap,
126-
showkaseBrowserScreenMetadata,
127-
onUpdateShowkaseBrowserScreenMetadata,
128-
navigateTo = {
129-
navController.navigate(it.name)
130-
}
131-
)
132-
}
133-
}
134-
)
134+
}
135+
},
136+
modifier = Modifier
137+
.fillMaxSize()
138+
.safeDrawingPadding()
139+
)
140+
}
135141
}
136142
}
137143

@@ -144,41 +150,43 @@ internal fun ShowkaseAppBar(
144150
onActivateSearch: () -> Unit,
145151
onClearSearch: () -> Unit,
146152
) {
147-
148-
Row(
149-
Modifier
150-
.fillMaxWidth()
151-
.graphicsLayer(shadowElevation = 4f)
152-
.padding(padding2x),
153-
horizontalArrangement = Arrangement.SpaceBetween,
154-
verticalAlignment = Alignment.CenterVertically
153+
Surface(
154+
elevation = 4.dp
155155
) {
156-
ShowkaseAppBarTitle(
157-
showkaseBrowserScreenMetadata.isSearchActive,
158-
showkaseBrowserScreenMetadata.currentGroup,
159-
showkaseBrowserScreenMetadata.currentComponentName,
160-
showkaseBrowserScreenMetadata.currentComponentStyleName,
161-
currentRoute,
162-
showkaseBrowserScreenMetadata.searchQuery,
163-
{
164-
onSearchQueryChanged(it)
165-
},
166-
Modifier.fillMaxWidth(0.75f),
167-
onCloseSearchFieldClick = {
168-
onCloseSearch()
169-
},
170-
onClearSearchField = {
171-
onClearSearch()
172-
}
173-
)
174-
ShowkaseAppBarActions(
175-
isActive = showkaseBrowserScreenMetadata.isSearchActive,
176-
onActionClicked = {
177-
onActivateSearch()
178-
},
179-
currentRoute = currentRoute,
180-
modifier = Modifier.fillMaxWidth(0.25f)
181-
)
156+
Row(
157+
Modifier
158+
.fillMaxWidth()
159+
.padding(padding2x),
160+
horizontalArrangement = Arrangement.SpaceBetween,
161+
verticalAlignment = Alignment.CenterVertically
162+
) {
163+
ShowkaseAppBarTitle(
164+
isSearchActive = showkaseBrowserScreenMetadata.isSearchActive,
165+
currentGroup = showkaseBrowserScreenMetadata.currentGroup,
166+
currentComponentName = showkaseBrowserScreenMetadata.currentComponentName,
167+
currentComponentStyleName = showkaseBrowserScreenMetadata.currentComponentStyleName,
168+
currentRoute = currentRoute,
169+
searchQuery = showkaseBrowserScreenMetadata.searchQuery,
170+
searchQueryValueChange = {
171+
onSearchQueryChanged(it)
172+
},
173+
modifier = Modifier.fillMaxWidth(0.75f),
174+
onCloseSearchFieldClick = {
175+
onCloseSearch()
176+
},
177+
onClearSearchField = {
178+
onClearSearch()
179+
}
180+
)
181+
ShowkaseAppBarActions(
182+
isActive = showkaseBrowserScreenMetadata.isSearchActive,
183+
onActionClicked = {
184+
onActivateSearch()
185+
},
186+
currentRoute = currentRoute,
187+
modifier = Modifier.fillMaxWidth(0.25f)
188+
)
189+
}
182190
}
183191

184192
/**
@@ -189,18 +197,33 @@ internal fun ShowkaseAppBar(
189197
// TopAppBar(
190198
// title = {
191199
// ShowkaseAppBarTitle(
192-
// showkaseBrowserScreenMetadata.value.isSearchActive,
193-
// showkaseBrowserScreenMetadata.value.currentGroup,
194-
// showkaseBrowserScreenMetadata.value.currentComponentName,
195-
// currentRoute,
196-
// showkaseBrowserScreenMetadata.value.searchQuery
197-
// ) {
198-
// showkaseBrowserScreenMetadata.value =
199-
// showkaseBrowserScreenMetadata.value.copy(searchQuery = it)
200-
// }
200+
// isSearchActive = showkaseBrowserScreenMetadata.isSearchActive,
201+
// currentGroup = showkaseBrowserScreenMetadata.currentGroup,
202+
// currentComponentName = showkaseBrowserScreenMetadata.currentComponentName,
203+
// currentComponentStyleName = showkaseBrowserScreenMetadata.currentComponentStyleName,
204+
// currentRoute = currentRoute,
205+
// searchQuery = showkaseBrowserScreenMetadata.searchQuery,
206+
// searchQueryValueChange = {
207+
// onSearchQueryChanged(it)
208+
// },
209+
// modifier = Modifier,
210+
// onCloseSearchFieldClick = {
211+
// onCloseSearch()
212+
// },
213+
// onClearSearchField = {
214+
// onClearSearch()
215+
// }
216+
// )
201217
// },
202218
// actions = {
203-
// ShowkaseAppBarActions(showkaseBrowserScreenMetadata, currentRoute)
219+
// ShowkaseAppBarActions(
220+
// isActive = showkaseBrowserScreenMetadata.isSearchActive,
221+
// onActionClicked = {
222+
// onActivateSearch()
223+
// },
224+
// currentRoute = currentRoute,
225+
// modifier = Modifier
226+
// )
204227
// },
205228
// backgroundColor = Color.White
206229
// )

0 commit comments

Comments
 (0)