Skip to content

Commit ffc8308

Browse files
[DON-2702] Modify BpkHorizontalNav to support changeable background c… (#2614)
* [DON-2702] Add support for changeable background colors in BpkHorizontalNav * Updated snapshots --------- Co-authored-by: skyscanner-backpack-bot[bot] <197108191+skyscanner-backpack-bot[bot]@users.noreply.github.com>
1 parent 8e5b9bd commit ffc8308

File tree

7 files changed

+73
-6
lines changed

7 files changed

+73
-6
lines changed
3.29 KB
Loading
3.1 KB
Loading

app/src/main/java/net/skyscanner/backpack/demo/compose/HorizontalNavStory.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import androidx.compose.runtime.setValue
3131
import androidx.compose.ui.Modifier
3232
import androidx.compose.ui.res.stringResource
3333
import net.skyscanner.backpack.compose.horizontalnav.BpkHorizontalNav
34+
import net.skyscanner.backpack.compose.horizontalnav.BpkHorizontalNavBackgroundColor
3435
import net.skyscanner.backpack.compose.horizontalnav.BpkHorizontalNavSize
3536
import net.skyscanner.backpack.compose.horizontalnav.BpkHorizontalNavTab
3637
import net.skyscanner.backpack.compose.icon.BpkIcon
@@ -61,6 +62,9 @@ fun HorizontalNavStory(modifier: Modifier = Modifier) {
6162
BpkText(text = stringResource(R.string.tabs_small_with_icon))
6263
HorizontalNav_SmallWithIcon_Sample()
6364

65+
BpkText(text = stringResource(R.string.tabs_background))
66+
HorizontalNav_CanvasContrastBackground_Sample()
67+
6468
BpkText(text = stringResource(R.string.tabs_large))
6569
HorizontalNav_Large_Sample()
6670

@@ -69,6 +73,28 @@ fun HorizontalNavStory(modifier: Modifier = Modifier) {
6973
}
7074
}
7175

76+
@Composable
77+
internal fun HorizontalNav_CanvasContrastBackground_Sample(modifier: Modifier = Modifier) {
78+
val tabs = listOf(
79+
BpkHorizontalNavTab(
80+
title = stringResource(R.string.tabs_one),
81+
),
82+
BpkHorizontalNavTab(
83+
title = stringResource(R.string.tabs_two),
84+
),
85+
)
86+
87+
var activeIndex by rememberSaveable { mutableIntStateOf(0) }
88+
89+
BpkHorizontalNav(
90+
modifier = modifier,
91+
tabs = tabs,
92+
activeIndex = activeIndex,
93+
backgroundColor = BpkHorizontalNavBackgroundColor.CanvasContrast,
94+
onChanged = { activeIndex = it },
95+
)
96+
}
97+
7298
@Composable
7399
internal fun HorizontalNav_Small_Sample(modifier: Modifier = Modifier) {
74100
val tabs = listOf(

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@
168168

169169
<string name="tabs_small">Small</string>
170170
<string name="tabs_small_with_icon">Small with icon</string>
171+
<string name="tabs_background">Custom Background (Canvas Contrast)</string>
171172
<string name="tabs_large">Large</string>
172173
<string name="tabs_large_with_icon">Large with icon</string>
173174
<string name="tabs_one">One</string>

app/src/test/java/net/skyscanner/backpack/compose/horizontalnav/BpkHorizontalNavTest.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818

1919
package net.skyscanner.backpack.compose.horizontalnav
2020

21-
import net.skyscanner.backpack.compose.BpkSnapshotTest
2221
import net.skyscanner.backpack.BpkTestVariant
2322
import net.skyscanner.backpack.Variants
23+
import net.skyscanner.backpack.compose.BpkSnapshotTest
24+
import net.skyscanner.backpack.demo.compose.HorizontalNav_CanvasContrastBackground_Sample
2425
import net.skyscanner.backpack.demo.compose.HorizontalNav_LargeWithIcon_Sample
2526
import net.skyscanner.backpack.demo.compose.HorizontalNav_Large_Sample
2627
import net.skyscanner.backpack.demo.compose.HorizontalNav_SmallWithIcon_Sample
@@ -49,6 +50,14 @@ class BpkHorizontalNavTest : BpkSnapshotTest() {
4950
}
5051
}
5152

53+
@Test
54+
@Variants(BpkTestVariant.Default, BpkTestVariant.DarkMode)
55+
fun canvasContrastBackground() {
56+
snap {
57+
HorizontalNav_CanvasContrastBackground_Sample()
58+
}
59+
}
60+
5261
@Test
5362
@Variants(BpkTestVariant.Default)
5463
fun large() {

backpack-compose/src/main/kotlin/net/skyscanner/backpack/compose/horizontalnav/BpkHorizontalNav.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@
1818

1919
package net.skyscanner.backpack.compose.horizontalnav
2020

21-
import android.R.attr.enabled
22-
import android.R.attr.label
23-
import android.R.attr.onClick
2421
import androidx.compose.animation.core.FastOutSlowInEasing
2522
import androidx.compose.animation.core.animateFloatAsState
2623
import androidx.compose.animation.core.tween
@@ -39,7 +36,6 @@ import androidx.compose.material3.Surface
3936
import androidx.compose.material3.ripple
4037
import androidx.compose.runtime.Composable
4138
import androidx.compose.runtime.CompositionLocalProvider
42-
import androidx.compose.runtime.getValue
4339
import androidx.compose.runtime.remember
4440
import androidx.compose.ui.Alignment
4541
import androidx.compose.ui.Modifier
@@ -65,6 +61,11 @@ enum class BpkHorizontalNavSize {
6561
Small,
6662
}
6763

64+
enum class BpkHorizontalNavBackgroundColor {
65+
SurfaceDefault,
66+
CanvasContrast,
67+
}
68+
6869
data class BpkHorizontalNavTab(
6970
val title: String,
7071
val icon: BpkIcon? = null,
@@ -76,12 +77,17 @@ fun BpkHorizontalNav(
7677
activeIndex: Int,
7778
onChanged: (Int) -> Unit,
7879
modifier: Modifier = Modifier,
80+
backgroundColor: BpkHorizontalNavBackgroundColor = BpkHorizontalNavBackgroundColor.SurfaceDefault,
7981
size: BpkHorizontalNavSize = BpkHorizontalNavSize.Default,
8082
) {
8183
TabRow(
8284
selectedTabIndex = activeIndex,
8385
tabs = tabs,
8486
onChanged = onChanged,
87+
backgroundColor = when (backgroundColor) {
88+
BpkHorizontalNavBackgroundColor.SurfaceDefault -> BpkTheme.colors.surfaceDefault
89+
BpkHorizontalNavBackgroundColor.CanvasContrast -> BpkTheme.colors.canvasContrast
90+
},
8591
modifier = modifier.height(
8692
when (size) {
8793
BpkHorizontalNavSize.Default -> 48.dp
@@ -113,12 +119,13 @@ private fun TabRow(
113119
selectedTabIndex: Int,
114120
onChanged: (Int) -> Unit,
115121
tabs: List<BpkHorizontalNavTab>,
122+
backgroundColor: Color,
116123
modifier: Modifier = Modifier,
117124
content: @Composable RowScope.(BpkHorizontalNavTab) -> Unit,
118125
) {
119126
Surface(
120127
modifier = modifier.selectableGroup(),
121-
color = BpkTheme.colors.surfaceDefault,
128+
color = backgroundColor,
122129
contentColor = BpkTheme.colors.textPrimary,
123130
) {
124131
Row(

docs/compose/HorizontalNav/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,30 @@ BpkHorizontalNav(
6464
)
6565
```
6666

67+
Example of a Horizontal Nav (with contrast background color):
68+
69+
```Kotlin
70+
import net.skyscanner.backpack.compose.horizontalnav.BpkHorizontalNav
71+
import net.skyscanner.backpack.compose.horizontalnav.BpkHorizontalNavBackgroundColor
72+
import net.skyscanner.backpack.compose.horizontalnav.BpkHorizontalNavTab
73+
74+
val tabs = listOf(
75+
BpkHorizontalNavTab(
76+
title = "Tab 1",
77+
),
78+
BpkHorizontalNavTab(
79+
title = "Tab 2",
80+
),
81+
)
82+
83+
BpkHorizontalNav(
84+
tabs = tabs,
85+
activeIndex = activeIndex,
86+
backgroundColor = BpkHorizontalNavBackgroundColor.CanvasContrast,
87+
onChanged = { index -> },
88+
)
89+
```
90+
6791
Example of a Horizontal Nav (with icon):
6892

6993
```Kotlin

0 commit comments

Comments
 (0)