From 12a0bb7c6bf00389bfef5f12e30a4654bb1f3602 Mon Sep 17 00:00:00 2001 From: takathemax Date: Wed, 16 Aug 2023 23:24:03 +0900 Subject: [PATCH 01/10] Made it possible to display the logo. --- .../sponsors/component/SponsorItem.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt index e4a9f47df..b61866fdf 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt @@ -1,5 +1,6 @@ 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 @@ -8,13 +9,19 @@ 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.material.icons.filled.Person import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier 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( @@ -39,7 +46,13 @@ fun SponsorItem( shape = RoundedCornerShape(if (sponsor.plan.isSupporter) 4.dp else 8.dp), ), ) { - // TODO Implement Sponsor UI + Image( + painter = previewOverride(previewPainter = { rememberVectorPainter(image = Icons.Default.Image) }) { + rememberAsyncImagePainter(sponsor.logo) + }, + contentDescription = sponsor.name, + modifier = Modifier.fillMaxSize() + ) } } } From 4f5ca702270b9b8807a23845f308cd366481fa76 Mon Sep 17 00:00:00 2001 From: takathemax Date: Wed, 16 Aug 2023 23:25:26 +0900 Subject: [PATCH 02/10] add Preview --- .../sponsors/section/SponsorList.kt | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt index c229b9718..f442e379f 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt @@ -1,5 +1,6 @@ package io.github.droidkaigi.confsched2023.sponsors.section +import android.content.res.Configuration import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height @@ -8,10 +9,15 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items +import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import io.github.droidkaigi.confsched2023.designsystem.theme.KaigiTheme +import io.github.droidkaigi.confsched2023.model.Plan.GOLD +import io.github.droidkaigi.confsched2023.model.Plan.PLATINUM +import io.github.droidkaigi.confsched2023.model.Plan.SUPPORTER import io.github.droidkaigi.confsched2023.model.Sponsor import io.github.droidkaigi.confsched2023.model.fakes import io.github.droidkaigi.confsched2023.sponsors.component.SponsorHeader @@ -101,12 +107,19 @@ fun SponsorList( } } -@Preview +@Preview(locale = "en", uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(locale = "ja", uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(locale = "en", uiMode = Configuration.UI_MODE_NIGHT_YES) +@Preview(locale = "ja", uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable fun SponsorListPreview() { - SponsorList( - platinumSponsors = Sponsor.fakes().take(5).toImmutableList(), - goldSponsors = Sponsor.fakes().take(5).toImmutableList(), - supporters = Sponsor.fakes().take(5).toImmutableList(), - ) + KaigiTheme { + Surface { + SponsorList( + platinumSponsors = Sponsor.fakes().filter { it.plan == PLATINUM }.toImmutableList(), + goldSponsors = Sponsor.fakes().filter { it.plan == GOLD }.toImmutableList(), + supporters = Sponsor.fakes().filter { it.plan == SUPPORTER }.toImmutableList(), + ) + } + } } From 3007392af554b8660f897d9692ae612ff39a0981 Mon Sep 17 00:00:00 2001 From: takathemax Date: Wed, 16 Aug 2023 23:45:59 +0900 Subject: [PATCH 03/10] add SponsorStrings --- .../confsched2023/sponsors/SponsorsStrings.kt | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt index 5edecef21..93f7045ef 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt @@ -6,12 +6,27 @@ import io.github.droidkaigi.confsched2023.designsystem.strings.StringsBindings sealed class SponsorsStrings : Strings(Bindings) { + data object Sponsor : SponsorsStrings() + data object PlatinumSponsors : SponsorsStrings() + data object GoldSponsors : SponsorsStrings() + data object Supporters : SponsorsStrings() + private object Bindings : StringsBindings( 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, ) From e5bff3a7ee338ec5cb9e22bfcdd47de09c198088 Mon Sep 17 00:00:00 2001 From: takathemax Date: Wed, 16 Aug 2023 23:46:30 +0900 Subject: [PATCH 04/10] add SponsorListUiState --- .../confsched2023/sponsors/SponsorsScreen.kt | 16 ++++------ .../sponsors/SponsorsScreenViewModel.kt | 9 ++++-- .../sponsors/section/SponsorList.kt | 32 ++++++++++++------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt index a5ac2f4d4..0d89ea68e 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt @@ -25,6 +25,7 @@ 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 @@ -69,9 +70,7 @@ fun SponsorsScreen( } data class SponsorsScreenUiState( - val platinumSponsors: ImmutableList, - val goldSponsors: ImmutableList, - val supporters: ImmutableList, + val sponsorListUiState: SponsorListUiState, ) @OptIn(ExperimentalMaterial3Api::class) @@ -84,7 +83,9 @@ private fun SponsorsScreen( ) { val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffold( - modifier = Modifier.testTag(SponsorsScreenTestTag), + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection) + .testTag(SponsorsScreenTestTag), topBar = { LargeTopAppBar( title = { @@ -106,13 +107,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, ) }, diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt index 4e6b39fb1..4da98f0be 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt @@ -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 @@ -29,9 +30,11 @@ class SponsorsScreenViewModel @Inject constructor( val uiState: StateFlow = 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(), + ) ) } } diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt index f442e379f..6dada63a2 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt @@ -20,6 +20,7 @@ import io.github.droidkaigi.confsched2023.model.Plan.PLATINUM import io.github.droidkaigi.confsched2023.model.Plan.SUPPORTER import io.github.droidkaigi.confsched2023.model.Sponsor import io.github.droidkaigi.confsched2023.model.fakes +import io.github.droidkaigi.confsched2023.sponsors.SponsorsStrings import io.github.droidkaigi.confsched2023.sponsors.component.SponsorHeader import io.github.droidkaigi.confsched2023.sponsors.component.SponsorItem import kotlinx.collections.immutable.ImmutableList @@ -30,11 +31,15 @@ private const val SINGLE_ITEM_SPAN_COUNT = 6 private const val DOUBLE_ITEM_SPAN_COUNT = 6 / 2 private const val TRIPLE_ITEM_SPAN_COUNT = 6 / 3 +data class SponsorListUiState( + val platinumSponsors: ImmutableList, + val goldSponsors: ImmutableList, + val supporters: ImmutableList, +) + @Composable fun SponsorList( - platinumSponsors: ImmutableList, - goldSponsors: ImmutableList, - supporters: ImmutableList, + uiState: SponsorListUiState, modifier: Modifier = Modifier, onSponsorClick: (Sponsor) -> Unit = {}, ) { @@ -47,10 +52,10 @@ fun SponsorList( key = "platinum_sponsor_header", span = { GridItemSpan(SINGLE_ITEM_SPAN_COUNT) }, ) { - SponsorHeader(title = "PLATINUM SPONSORS") + SponsorHeader(title = SponsorsStrings.PlatinumSponsors.asString()) } items( - items = platinumSponsors, + items = uiState.platinumSponsors, key = { sponsor -> sponsor.name }, span = { GridItemSpan(SINGLE_ITEM_SPAN_COUNT) }, ) { sponsor -> @@ -69,10 +74,10 @@ fun SponsorList( key = "gold_sponsor_header", span = { GridItemSpan(SINGLE_ITEM_SPAN_COUNT) }, ) { - SponsorHeader(title = "GOLD SPONSORS") + SponsorHeader(title = SponsorsStrings.GoldSponsors.asString()) } items( - items = goldSponsors, + items = uiState.goldSponsors, key = { sponsor -> sponsor.name }, span = { GridItemSpan(DOUBLE_ITEM_SPAN_COUNT) }, ) { sponsor -> @@ -86,10 +91,10 @@ fun SponsorList( key = "supporter_header", span = { GridItemSpan(SINGLE_ITEM_SPAN_COUNT) }, ) { - SponsorHeader(title = "SUPPORTERS") + SponsorHeader(title = SponsorsStrings.Supporters.asString()) } items( - items = supporters, + items = uiState.supporters, key = { sponsor -> sponsor.name }, span = { GridItemSpan(TRIPLE_ITEM_SPAN_COUNT) }, ) { sponsor -> @@ -113,12 +118,15 @@ fun SponsorList( @Preview(locale = "ja", uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable fun SponsorListPreview() { + val uiState = SponsorListUiState( + platinumSponsors = Sponsor.fakes().filter { it.plan == PLATINUM }.toImmutableList(), + goldSponsors = Sponsor.fakes().filter { it.plan == GOLD }.toImmutableList(), + supporters = Sponsor.fakes().filter { it.plan == SUPPORTER }.toImmutableList(), + ) KaigiTheme { Surface { SponsorList( - platinumSponsors = Sponsor.fakes().filter { it.plan == PLATINUM }.toImmutableList(), - goldSponsors = Sponsor.fakes().filter { it.plan == GOLD }.toImmutableList(), - supporters = Sponsor.fakes().filter { it.plan == SUPPORTER }.toImmutableList(), + uiState = uiState ) } } From 3a269ec92717fea1fc5fd04b458053e96f0e3509 Mon Sep 17 00:00:00 2001 From: takathemax Date: Thu, 17 Aug 2023 00:03:10 +0900 Subject: [PATCH 05/10] fix ripple --- .../sponsors/component/SponsorItem.kt | 36 ++++++------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt index b61866fdf..4bb154c17 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt @@ -3,17 +3,14 @@ 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.material.icons.filled.Person 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 @@ -29,32 +26,21 @@ fun SponsorItem( 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), - ), - ) { - Image( - painter = previewOverride(previewPainter = { rememberVectorPainter(image = Icons.Default.Image) }) { - rememberAsyncImagePainter(sponsor.logo) - }, - contentDescription = sponsor.name, - modifier = Modifier.fillMaxSize() - ) - } - } + .background(color = Color.White) + .clip(RoundedCornerShape(if (sponsor.plan.isSupporter) 4.dp else 8.dp)) + .clickable { onSponsorClick(sponsor) } + .fillMaxSize() + ) } @Preview From ede79222906b0c14bc6ab274c05aff58906eeefe Mon Sep 17 00:00:00 2001 From: takathemax Date: Thu, 17 Aug 2023 00:06:58 +0900 Subject: [PATCH 06/10] code format --- .../droidkaigi/confsched2023/sponsors/SponsorsScreen.kt | 1 - .../confsched2023/sponsors/SponsorsScreenViewModel.kt | 2 +- .../droidkaigi/confsched2023/sponsors/SponsorsStrings.kt | 4 ++-- .../confsched2023/sponsors/component/SponsorItem.kt | 2 +- .../droidkaigi/confsched2023/sponsors/section/SponsorList.kt | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt index 0d89ea68e..7331de3ca 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt @@ -27,7 +27,6 @@ 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( diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt index 4da98f0be..18b698d3d 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreenViewModel.kt @@ -34,7 +34,7 @@ class SponsorsScreenViewModel @Inject constructor( platinumSponsors = sponsors.filter { it.plan.isPlatinum }.toImmutableList(), goldSponsors = sponsors.filter { it.plan.isGold }.toImmutableList(), supporters = sponsors.filter { it.plan.isSupporter }.toImmutableList(), - ) + ), ) } } diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt index 93f7045ef..a253ff928 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsStrings.kt @@ -13,7 +13,7 @@ sealed class SponsorsStrings : Strings(Bindings) { private object Bindings : StringsBindings( Lang.Japanese to { item, _ -> - when(item){ + when (item) { Sponsor -> "スポンサー" PlatinumSponsors -> "プラチナスポンサー" GoldSponsors -> "ゴールドスポンサー" @@ -21,7 +21,7 @@ sealed class SponsorsStrings : Strings(Bindings) { } }, Lang.English to { item, _ -> - when(item){ + when (item) { Sponsor -> "Sponsor" PlatinumSponsors -> "PLATINUM SPONSORS" GoldSponsors -> "GOLD SPONSORS" diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt index 4bb154c17..85fb9afd1 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/component/SponsorItem.kt @@ -39,7 +39,7 @@ fun SponsorItem( .background(color = Color.White) .clip(RoundedCornerShape(if (sponsor.plan.isSupporter) 4.dp else 8.dp)) .clickable { onSponsorClick(sponsor) } - .fillMaxSize() + .fillMaxSize(), ) } diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt index 6dada63a2..5b9e9c47e 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/section/SponsorList.kt @@ -126,7 +126,7 @@ fun SponsorListPreview() { KaigiTheme { Surface { SponsorList( - uiState = uiState + uiState = uiState, ) } } From f70c59d5989f03a15a2472c8b348e28d825fa140 Mon Sep 17 00:00:00 2001 From: takathemax Date: Thu, 17 Aug 2023 13:41:10 +0900 Subject: [PATCH 07/10] replaced to SponsorsStrings from "Sponsor". --- .../github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt index 7331de3ca..d0f2c6a46 100644 --- a/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt +++ b/feature/sponsors/src/main/java/io/github/droidkaigi/confsched2023/sponsors/SponsorsScreen.kt @@ -88,7 +88,7 @@ private fun SponsorsScreen( topBar = { LargeTopAppBar( title = { - Text(text = "Sponsor") + Text(text = SponsorsStrings.Sponsor.asString()) }, navigationIcon = { IconButton( From bbf44108c6b39b2983d611d4014354179fb6f149 Mon Sep 17 00:00:00 2001 From: hiraike32 Date: Thu, 17 Aug 2023 14:00:44 +0900 Subject: [PATCH 08/10] Modify about screen's title --- .../confsched2023/about/AboutScreen.kt | 33 ++++++++++++++++++- .../about/component/AboutDroidKaigiDetail.kt | 17 +--------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/AboutScreen.kt b/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/AboutScreen.kt index 8e515e4c3..ea2de72e6 100644 --- a/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/AboutScreen.kt +++ b/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/AboutScreen.kt @@ -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 @@ -73,6 +81,7 @@ fun AboutScreen( class AboutScreenUiState() +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun AboutScreen( uiState: AboutScreenUiState, @@ -81,8 +90,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( @@ -91,7 +121,8 @@ private fun AboutScreen( top = padding.calculateTopPadding(), start = padding.calculateStartPadding(LocalLayoutDirection.current), end = padding.calculateEndPadding(LocalLayoutDirection.current), - ), + ) + .nestedScroll(scrollBehavior.nestedScrollConnection), ) { item { AboutDroidKaigiDetail( diff --git a/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/component/AboutDroidKaigiDetail.kt b/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/component/AboutDroidKaigiDetail.kt index b0023598c..5e1d07e00 100644 --- a/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/component/AboutDroidKaigiDetail.kt +++ b/feature/about/src/main/java/io/github/droidkaigi/confsched2023/about/component/AboutDroidKaigiDetail.kt @@ -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(), From 1f1dd7ec63b715ac2ded1bd7d50f7b2d4b2a9523 Mon Sep 17 00:00:00 2001 From: takathemax Date: Thu, 17 Aug 2023 13:57:31 +0900 Subject: [PATCH 09/10] added a scroll screenshot test. --- .../testing/robot/SponsorsScreenRobot.kt | 15 +++++++++++++++ .../confsched2023/SponsorsScreenTest.kt | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/core/testing/src/main/java/io/github/droidkaigi/confsched2023/testing/robot/SponsorsScreenRobot.kt b/core/testing/src/main/java/io/github/droidkaigi/confsched2023/testing/robot/SponsorsScreenRobot.kt index 2305315d8..1caae1be1 100644 --- a/core/testing/src/main/java/io/github/droidkaigi/confsched2023/testing/robot/SponsorsScreenRobot.kt +++ b/core/testing/src/main/java/io/github/droidkaigi/confsched2023/testing/robot/SponsorsScreenRobot.kt @@ -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 @@ -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()) diff --git a/feature/sponsors/src/test/java/io/github/droidkaigi/confsched2023/SponsorsScreenTest.kt b/feature/sponsors/src/test/java/io/github/droidkaigi/confsched2023/SponsorsScreenTest.kt index e681756de..f52233601 100644 --- a/feature/sponsors/src/test/java/io/github/droidkaigi/confsched2023/SponsorsScreenTest.kt +++ b/feature/sponsors/src/test/java/io/github/droidkaigi/confsched2023/SponsorsScreenTest.kt @@ -38,4 +38,16 @@ class SponsorsScreenTest { checkScreenCapture() } } + + @Test + @Category(ScreenshotTests::class) + fun checkScrollShot() { + sponsorsScreenRobot { + setupScreenContent() + scrollSponsorScreen() + checkScreenCapture() + scrollSponsorScreen() + checkScreenCapture() + } + } } From ac5d80df6dd2137483338cc9564533698ad058e6 Mon Sep 17 00:00:00 2001 From: Tatsuya Fujisaki <1838962+tatsuyafujisaki@users.noreply.github.com> Date: Thu, 17 Aug 2023 15:03:46 +0900 Subject: [PATCH 10/10] Add padding to the left of time in the timetable --- .../droidkaigi/confsched2023/sessions/section/TimetableList.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/sessions/src/main/java/io/github/droidkaigi/confsched2023/sessions/section/TimetableList.kt b/feature/sessions/src/main/java/io/github/droidkaigi/confsched2023/sessions/section/TimetableList.kt index 9f64ff70a..43af9282e 100644 --- a/feature/sessions/src/main/java/io/github/droidkaigi/confsched2023/sessions/section/TimetableList.kt +++ b/feature/sessions/src/main/java/io/github/droidkaigi/confsched2023/sessions/section/TimetableList.kt @@ -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,