Skip to content

Commit 1b3d9ec

Browse files
committed
Focus on searchbar when HighlightsSearchScreen is launched
1 parent b8bab79 commit 1b3d9ec

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

app/src/main/java/com/cornellappdev/score/components/highlights/HighlightsScreenSearchFilterBar.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.compose.runtime.Composable
1414
import androidx.compose.ui.Alignment
1515
import androidx.compose.ui.Modifier
1616
import androidx.compose.ui.draw.clip
17+
import androidx.compose.ui.focus.FocusRequester
1718
import androidx.compose.ui.tooling.preview.Preview
1819
import androidx.compose.ui.unit.dp
1920
import com.cornellappdev.score.components.ScorePreview
@@ -25,6 +26,7 @@ import com.cornellappdev.score.util.sportList
2526
fun HighlightsScreenSearchFilterBar(
2627
sportList: List<Sport>,
2728
isActive: Boolean,
29+
focusRequester: FocusRequester? = null
2830
) {
2931
Column(modifier = Modifier.fillMaxWidth()) {
3032
Row(
@@ -35,7 +37,12 @@ fun HighlightsScreenSearchFilterBar(
3537
horizontalArrangement = Arrangement.spacedBy(12.dp),
3638
verticalAlignment = Alignment.CenterVertically
3739
) {
38-
HighlightsSearchBar({}, isActive, Modifier.weight(1f))
40+
HighlightsSearchBar(
41+
onSearchClick = {},
42+
isActive = isActive,
43+
focusRequester = focusRequester,
44+
modifier = Modifier.weight(1f)
45+
)
3946
if (isActive) {
4047
Text("Cancel", style = bodyMedium)
4148
}
@@ -49,14 +56,14 @@ fun HighlightsScreenSearchFilterBar(
4956
@Composable
5057
private fun HighlightsScreenSearchFilterBarActivePreview() {
5158
ScorePreview {
52-
HighlightsScreenSearchFilterBar(sportList, true)
59+
HighlightsScreenSearchFilterBar(sportList, true, focusRequester = FocusRequester())
5360
}
5461
}
5562

5663
@Preview
5764
@Composable
5865
private fun HighlightsScreenSearchFilterBarInactivePreview() {
5966
ScorePreview {
60-
HighlightsScreenSearchFilterBar(sportList, false)
67+
HighlightsScreenSearchFilterBar(sportList, false, focusRequester = FocusRequester())
6168
}
6269
}

app/src/main/java/com/cornellappdev/score/components/highlights/HighlightsSearchBar.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import androidx.compose.runtime.setValue
2222
import androidx.compose.ui.Alignment
2323
import androidx.compose.ui.Modifier
2424
import androidx.compose.ui.draw.clip
25+
import androidx.compose.ui.focus.FocusRequester
26+
import androidx.compose.ui.focus.focusRequester
2527
import androidx.compose.ui.graphics.Color
2628
import androidx.compose.ui.res.painterResource
2729
import androidx.compose.ui.text.input.VisualTransformation
@@ -35,6 +37,7 @@ import com.cornellappdev.score.theme.Style.bodyNormal
3537
fun HighlightsSearchBar(
3638
onSearchClick: () -> Unit,
3739
isActive: Boolean,
40+
focusRequester: FocusRequester? = null,
3841
modifier: Modifier = Modifier
3942
) {
4043
val interactionSource = remember { MutableInteractionSource() }
@@ -76,6 +79,9 @@ fun HighlightsSearchBar(
7679
visualTransformation = VisualTransformation.None,
7780
interactionSource = interactionSource,
7881
modifier = Modifier
82+
.then(
83+
focusRequester?.let { Modifier.focusRequester(it) } ?: Modifier
84+
)
7985
.fillMaxWidth()
8086
.background(Color.Transparent)
8187
)

app/src/main/java/com/cornellappdev/score/screen/HighlightsSearchScreen.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import androidx.compose.foundation.layout.height
99
import androidx.compose.foundation.layout.padding
1010
import androidx.compose.material3.Text
1111
import androidx.compose.runtime.Composable
12+
import androidx.compose.runtime.LaunchedEffect
13+
import androidx.compose.runtime.remember
1214
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.focus.FocusRequester
1316
import androidx.compose.ui.graphics.Color
1417
import androidx.compose.ui.tooling.preview.Preview
1518
import androidx.compose.ui.unit.dp
@@ -39,13 +42,20 @@ fun HighlightsSearchScreen(
3942
.background(color = Color.White)
4043
.padding(top = 24.dp)
4144
) {
45+
val focusRequester = remember { FocusRequester() }
46+
47+
LaunchedEffect(Unit) {
48+
focusRequester.requestFocus()
49+
}
50+
4251
Row(modifier = Modifier.padding(horizontal = 24.dp)) {
4352
Text(text = header, style = heading2)
4453
}
4554
Spacer(modifier = Modifier.height(16.dp))
4655
HighlightsScreenSearchFilterBar(
4756
sportList,
48-
true
57+
true,
58+
focusRequester = focusRequester
4959
) //need viewmodel to handle comms between composables
5060
Spacer(modifier = Modifier.height(24.dp))
5161
Column(

gradle/libs.versions.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ media3CommonKtx = "1.5.1"
1717
# See https://stackoverflow.com/a/79126321
1818
material3 = "1.4.0-alpha11"
1919
material3Version = "1.3.2"
20+
runtime = "1.9.4"
21+
ui = "1.9.4"
2022

2123
[libraries]
2224
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -33,6 +35,8 @@ androidx-runtime-android = { group = "androidx.compose.runtime", name = "runtime
3335
apollo-runtime = { module = "com.apollographql.apollo:apollo-runtime" }
3436
androidx-media3-common-ktx = { group = "androidx.media3", name = "media3-common-ktx", version.ref = "media3CommonKtx" }
3537
androidx-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3Version" }
38+
androidx-runtime = { group = "androidx.compose.runtime", name = "runtime", version.ref = "runtime" }
39+
androidx-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "ui" }
3640

3741
[plugins]
3842
androidApplication = { id = "com.android.application", version.ref = "agp" }

0 commit comments

Comments
 (0)