Skip to content

Commit

Permalink
Merge branch 'main' into takahirom/preview-test/2023-08-17
Browse files Browse the repository at this point in the history
  • Loading branch information
takahirom authored Aug 17, 2023
2 parents 33e1a25 + c839415 commit 8477104
Show file tree
Hide file tree
Showing 10 changed files with 145 additions and 67 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package io.github.droidkaigi.confsched2023.testing.robot

import androidx.compose.ui.test.hasTestTag
import androidx.compose.ui.test.isRoot
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.compose.ui.test.performTouchInput
import androidx.compose.ui.test.swipeUp
import com.github.takahirom.roborazzi.captureRoboImage
import io.github.droidkaigi.confsched2023.designsystem.theme.KaigiTheme
import io.github.droidkaigi.confsched2023.sponsors.SponsorsScreen
import io.github.droidkaigi.confsched2023.sponsors.SponsorsScreenTestTag
import io.github.droidkaigi.confsched2023.testing.RobotTestRule
import io.github.droidkaigi.confsched2023.testing.coroutines.runTestWithLogging
import kotlinx.coroutines.test.TestDispatcher
Expand Down Expand Up @@ -37,6 +41,17 @@ class SponsorsScreenRobot @Inject constructor(
waitUntilIdle()
}

fun scrollSponsorScreen() {
composeTestRule
.onNode(hasTestTag(SponsorsScreenTestTag))
.performTouchInput {
swipeUp(
startY = visibleSize.height * 3F / 4,
endY = visibleSize.height / 3F,
)
}
}

fun checkScreenCapture() {
composeTestRule
.onNode(isRoot())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,24 @@ import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.font.FontWeight
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
Expand Down Expand Up @@ -76,6 +84,7 @@ fun AboutScreen(

class AboutScreenUiState()

@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun AboutScreen(
uiState: AboutScreenUiState,
Expand All @@ -84,8 +93,29 @@ private fun AboutScreen(
versionName: String?,
onLinkClick: (url: String) -> Unit,
) {
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
Scaffold(
modifier = Modifier.testTag(AboutScreenTestTag),
topBar = {
TopAppBar(
title = {
if (scrollBehavior.state.overlappedFraction == 0f) {
Text(
text = AboutStrings.Title.asString(),
style = MaterialTheme.typography.headlineLarge,
fontWeight = FontWeight.Medium,
)
} else {
Text(
text = AboutStrings.Title.asString(),
color = Color.Unspecified.copy(alpha = scrollBehavior.state.overlappedFraction),
style = MaterialTheme.typography.titleLarge,
)
}
},
scrollBehavior = scrollBehavior,
)
},
snackbarHost = { SnackbarHost(snackbarHostState) },
content = { padding ->
LazyColumn(
Expand All @@ -94,7 +124,8 @@ private fun AboutScreen(
top = padding.calculateTopPadding(),
start = padding.calculateStartPadding(LocalLayoutDirection.current),
end = padding.calculateEndPadding(LocalLayoutDirection.current),
),
)
.nestedScroll(scrollBehavior.nestedScrollConnection),
) {
item {
AboutDroidKaigiDetail(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,13 @@ fun AboutDroidKaigiDetail(
Column(
modifier = modifier,
) {
Text(
text = AboutStrings.Title.asString(),
style = MaterialTheme.typography.headlineLarge,
modifier = Modifier
.padding(
start = 16.dp,
top = 20.dp,
end = 16.dp,
bottom = 16.dp,
),
)
Image(
painter = painterResource(id = R.drawable.img_about_key_visual),
contentDescription = null,
contentScale = ContentScale.FillWidth,
modifier = Modifier
.fillMaxWidth()
.padding(
start = 16.dp,
end = 16.dp,
bottom = 16.dp,
),
.padding(16.dp),
)
Text(
text = AboutStrings.Description.asString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ fun TimetableList(
) {
uiState.timetableItemMap.forEach { (_, timetableItems) ->
itemsIndexed(timetableItems) { index, timetableItem ->
Row(modifier = Modifier.padding(top = 10.dp)) {
Row(modifier = Modifier.padding(start = 16.dp, top = 10.dp)) {
Column(
modifier = Modifier.width(58.dp),
verticalArrangement = Arrangement.Center,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import io.github.droidkaigi.confsched2023.model.Sponsor
import io.github.droidkaigi.confsched2023.sponsors.section.SponsorList
import io.github.droidkaigi.confsched2023.sponsors.section.SponsorListUiState
import io.github.droidkaigi.confsched2023.ui.SnackbarMessageEffect
import kotlinx.collections.immutable.ImmutableList

const val sponsorsScreenRoute = "sponsors"
fun NavGraphBuilder.sponsorsScreen(
Expand Down Expand Up @@ -69,9 +69,7 @@ fun SponsorsScreen(
}

data class SponsorsScreenUiState(
val platinumSponsors: ImmutableList<Sponsor>,
val goldSponsors: ImmutableList<Sponsor>,
val supporters: ImmutableList<Sponsor>,
val sponsorListUiState: SponsorListUiState,
)

@OptIn(ExperimentalMaterial3Api::class)
Expand All @@ -84,11 +82,13 @@ private fun SponsorsScreen(
) {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
Scaffold(
modifier = Modifier.testTag(SponsorsScreenTestTag),
modifier = Modifier
.nestedScroll(scrollBehavior.nestedScrollConnection)
.testTag(SponsorsScreenTestTag),
topBar = {
LargeTopAppBar(
title = {
Text(text = "Sponsor")
Text(text = SponsorsStrings.Sponsor.asString())
},
navigationIcon = {
IconButton(
Expand All @@ -106,13 +106,10 @@ private fun SponsorsScreen(
snackbarHost = { SnackbarHost(snackbarHostState) },
content = { padding ->
SponsorList(
platinumSponsors = uiState.platinumSponsors,
goldSponsors = uiState.goldSponsors,
supporters = uiState.supporters,
uiState = uiState.sponsorListUiState,
modifier = Modifier
.fillMaxSize()
.padding(padding)
.nestedScroll(scrollBehavior.nestedScrollConnection),
.padding(padding),
onSponsorClick = onSponsorClick,
)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package io.github.droidkaigi.confsched2023.sponsors
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import io.github.droidkaigi.confsched2023.model.SponsorsRepository
import io.github.droidkaigi.confsched2023.sponsors.section.SponsorListUiState
import io.github.droidkaigi.confsched2023.ui.UserMessageStateHolder
import io.github.droidkaigi.confsched2023.ui.buildUiState
import io.github.droidkaigi.confsched2023.ui.viewModelScope
Expand All @@ -29,9 +30,11 @@ class SponsorsScreenViewModel @Inject constructor(

val uiState: StateFlow<SponsorsScreenUiState> = buildUiState(sponsorsStateFlow) { sponsors ->
SponsorsScreenUiState(
platinumSponsors = sponsors.filter { it.plan.isPlatinum }.toImmutableList(),
goldSponsors = sponsors.filter { it.plan.isGold }.toImmutableList(),
supporters = sponsors.filter { it.plan.isSupporter }.toImmutableList(),
SponsorListUiState(
platinumSponsors = sponsors.filter { it.plan.isPlatinum }.toImmutableList(),
goldSponsors = sponsors.filter { it.plan.isGold }.toImmutableList(),
supporters = sponsors.filter { it.plan.isSupporter }.toImmutableList(),
),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,27 @@ import io.github.droidkaigi.confsched2023.designsystem.strings.StringsBindings

sealed class SponsorsStrings : Strings<SponsorsStrings>(Bindings) {

data object Sponsor : SponsorsStrings()
data object PlatinumSponsors : SponsorsStrings()
data object GoldSponsors : SponsorsStrings()
data object Supporters : SponsorsStrings()

private object Bindings : StringsBindings<SponsorsStrings>(
Lang.Japanese to { item, _ ->
TODO()
when (item) {
Sponsor -> "スポンサー"
PlatinumSponsors -> "プラチナスポンサー"
GoldSponsors -> "ゴールドスポンサー"
Supporters -> "サポーター"
}
},
Lang.English to { item, bindings ->
TODO()
Lang.English to { item, _ ->
when (item) {
Sponsor -> "Sponsor"
PlatinumSponsors -> "PLATINUM SPONSORS"
GoldSponsors -> "GOLD SPONSORS"
Supporters -> "SUPPORTERS"
}
},
default = Lang.Japanese,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,46 @@
package io.github.droidkaigi.confsched2023.sponsors.component

import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Image
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import io.github.droidkaigi.confsched2023.model.Sponsor
import io.github.droidkaigi.confsched2023.model.fakes
import io.github.droidkaigi.confsched2023.ui.previewOverride
import io.github.droidkaigi.confsched2023.ui.rememberAsyncImagePainter

@Composable
fun SponsorItem(
sponsor: Sponsor,
modifier: Modifier = Modifier,
onSponsorClick: (Sponsor) -> Unit,
) {
Column(
Image(
painter = previewOverride(previewPainter = { rememberVectorPainter(image = Icons.Default.Image) }) {
rememberAsyncImagePainter(sponsor.logo)
},
contentDescription = sponsor.name,
modifier = modifier
.fillMaxWidth()
.padding(
top = if (sponsor.plan.isPlatinum) 0.dp else 8.dp,
bottom = if (sponsor.plan.isPlatinum) 12.dp else 8.dp,
)
.clickable { onSponsorClick(sponsor) },
) {
Box(
modifier = Modifier
.fillMaxSize()
.background(
color = Color.White,
shape = RoundedCornerShape(if (sponsor.plan.isSupporter) 4.dp else 8.dp),
),
) {
// TODO Implement Sponsor UI
}
}
.background(color = Color.White)
.clip(RoundedCornerShape(if (sponsor.plan.isSupporter) 4.dp else 8.dp))
.clickable { onSponsorClick(sponsor) }
.fillMaxSize(),
)
}

@Preview
Expand Down
Loading

0 comments on commit 8477104

Please sign in to comment.