From 4f7e18c1fd540095785e457cf5fb160e60ce4cb8 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Fri, 24 Jul 2026 22:19:24 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=EB=B0=9C=ED=91=9C=20=EC=9D=BC?= =?UTF-8?q?=EC=A0=95=20=ED=99=94=EB=A9=B4=EC=9D=98=20=EB=B0=9C=ED=91=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=9E=85=EB=A0=A5=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EA=B0=80=EC=9D=B4=EB=93=9C=20=EB=AC=B8=EA=B5=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `PresentationScheduleScreen`의 발표 이름 입력 필드(`PrezelTextField`)에 `status` 속성을 활용한 도움말 메시지 추가 - 발표 이름 입력 제약 사항(2~10자)을 안내하는 `feature_analysis_impl_presentation_name_helper` 문자열 리소스 추가 --- .../analysis/impl/schedule/PresentationScheduleScreen.kt | 4 ++++ Prezel/feature/analysis/impl/src/main/res/values/strings.xml | 1 + 2 files changed, 5 insertions(+) diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/schedule/PresentationScheduleScreen.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/schedule/PresentationScheduleScreen.kt index 3a3dd52f..cbce2916 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/schedule/PresentationScheduleScreen.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/schedule/PresentationScheduleScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import com.team.prezel.core.designsystem.component.datepicker.PrezelDatePicker import com.team.prezel.core.designsystem.component.textfield.PrezelTextField +import com.team.prezel.core.designsystem.component.textfield.PrezelTextFieldStatus import com.team.prezel.core.designsystem.icon.PrezelIcons import com.team.prezel.core.designsystem.preview.BasicPreview import com.team.prezel.core.designsystem.theme.PrezelTheme @@ -93,6 +94,9 @@ private fun PresentationScheduleScreen( onValueChange = onTitleChange, placeholder = stringResource(R.string.feature_analysis_impl_presentation_name_placeholder), label = stringResource(R.string.feature_analysis_impl_presentation_name_label), + status = PrezelTextFieldStatus.Default( + message = stringResource(R.string.feature_analysis_impl_presentation_name_helper), + ), maxLength = 10, ) diff --git a/Prezel/feature/analysis/impl/src/main/res/values/strings.xml b/Prezel/feature/analysis/impl/src/main/res/values/strings.xml index e6fbc2da..9ca200dc 100644 --- a/Prezel/feature/analysis/impl/src/main/res/values/strings.xml +++ b/Prezel/feature/analysis/impl/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ 발표 이름과 날짜를 입력해주세요. 발표 이름 발표의 이름을 설정해주세요 + 2자부터 10자 이내로 입력해주세요 발표 날짜 발표하는 날짜를 알려주세요 From 4dbbd43c10435968d5eb030fd35b8fea90c3e827 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Fri, 24 Jul 2026 22:43:29 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=EB=B6=84=EC=84=9D=20=EB=A6=AC?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=20=ED=99=94=EB=A9=B4=EC=9D=98=20=EC=83=81?= =?UTF-8?q?=EB=8B=A8=20=EB=B0=94=20=EA=B0=80=EC=8B=9C=EC=84=B1=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `ReportNavKey`에 상단 바 표시 여부를 결정하는 `showTopAppBar` 필드 추가 - `AnalysisReportScreen` 및 `ReportScreenLayout`에서 `showTopAppBar` 값에 따라 상단 바를 선택적으로 렌더링하도록 수정 - 분석 완료 후 리포트 진입 시(`AnalysisEntryBuilder`) 상단 바를 숨기도록 설정 - 히스토리에서 리포트 진입 시(`HistoryEntryBuilder`) 상단 바가 표시되도록 설정 - `AnalysisReportScreen` 관련 Compose 프리뷰에 변경된 파라미터 반영 --- .../impl/navigation/AnalysisEntryBuilder.kt | 1 + .../impl/navigation/HistoryEntryBuilder.kt | 1 + .../prezel/feature/report/api/ReportNavKey.kt | 1 + .../report/impl/navigation/ReportEntryBuilder.kt | 1 + .../report/impl/report/AnalysisReportScreen.kt | 9 +++++++++ .../impl/report/component/ReportScreenLayout.kt | 15 +++++++++------ 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt index caf334e4..c1d81dbe 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt @@ -89,6 +89,7 @@ private fun AnalysisRoute( navigator.navigate( key = ReportNavKey( presentationId = presentationId, + showTopAppBar = false, ), clearStack = true, ) diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt index ee2532e2..0a17b942 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt @@ -23,6 +23,7 @@ internal fun EntryProviderScope.featureHistoryEntryBuilder() { ReportNavKey( presentationId = presentationId, isPast = isPast, + showTopAppBar = true, ), ) }, diff --git a/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt b/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt index 5cb4de82..cb75f3a8 100644 --- a/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt +++ b/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt @@ -7,4 +7,5 @@ import kotlinx.serialization.Serializable data class ReportNavKey( val presentationId: Long, val isPast: Boolean = false, + val showTopAppBar: Boolean = true, ) : NavKey diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt index d7b1f5f4..e005f19b 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt @@ -33,6 +33,7 @@ private fun EntryProviderScope.reportEntry() { AnalysisReportScreen( onBack = { navigator.goBack() }, + showTopAppBar = key.showTopAppBar, navigateToAnalysisScript = { presentationId, isPast -> navigator.navigateToAnalysisScript( presentationId = presentationId, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt index d3a173ae..67f9d587 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt @@ -29,6 +29,7 @@ import com.team.prezel.feature.report.impl.report.preview.ReportPreviewUpcomingU @Composable internal fun AnalysisReportScreen( onBack: () -> Unit, + showTopAppBar: Boolean, navigateToAnalysisScript: (presentationId: Long, isPast: Boolean) -> Unit, navigateToAnalysisRecording: (presentationId: Long, isPast: Boolean) -> Unit, navigateToScriptAnalysis: (analysisResultId: Long) -> Unit, @@ -88,6 +89,7 @@ internal fun AnalysisReportScreen( AnalysisReportScreen( uiState = uiState, onBackClick = onBack, + showTopAppBar = showTopAppBar, onDeleteClick = { viewModel.onIntent(AnalysisReportUiIntent.ClickDelete) }, onImprovementCardIndexChange = { index -> viewModel.onIntent(AnalysisReportUiIntent.ClickGrowthGraphItem(index)) }, onDialogDismiss = { viewModel.onIntent(AnalysisReportUiIntent.DismissDialog) }, @@ -106,6 +108,7 @@ internal fun AnalysisReportScreen( internal fun AnalysisReportScreen( uiState: AnalysisReportUiState, onBackClick: () -> Unit, + showTopAppBar: Boolean, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, onDialogDismiss: () -> Unit, @@ -123,6 +126,7 @@ internal fun AnalysisReportScreen( AnalysisReportScreenContent( uiState = uiState, onBackClick = onBackClick, + showTopAppBar = showTopAppBar, onDeleteClick = onDeleteClick, modifier = modifier, onImprovementCardIndexChange = onImprovementCardIndexChange, @@ -145,6 +149,7 @@ internal fun AnalysisReportScreen( private fun AnalysisReportScreenContent( uiState: AnalysisReportUiState.Content, onBackClick: () -> Unit, + showTopAppBar: Boolean, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, onDialogDismiss: () -> Unit, @@ -167,6 +172,7 @@ private fun AnalysisReportScreenContent( ReportScreenLayout( appBarTitle = uiState.presentationInfo.title, + showTopAppBar = showTopAppBar, topAppBarContent = { LeadingIcon( iconResId = PrezelIcons.ArrowLeft, @@ -226,6 +232,7 @@ private fun UpcomingAnalysisReportScreenPreview() { AnalysisReportScreen( uiState = ReportPreviewUpcomingUiState, onBackClick = { }, + showTopAppBar = false, onDeleteClick = { }, onImprovementCardIndexChange = {}, onDialogDismiss = {}, @@ -247,6 +254,7 @@ private fun PastAnalysisReportScreenPreview() { AnalysisReportScreen( uiState = ReportPreviewPastUiState, onBackClick = { }, + showTopAppBar = true, onDeleteClick = { }, onImprovementCardIndexChange = {}, onDialogDismiss = {}, @@ -268,6 +276,7 @@ private fun AnalysisReportScreenLoadingPreview() { AnalysisReportScreen( uiState = AnalysisReportUiState.Loading, onBackClick = { }, + showTopAppBar = false, onDeleteClick = { }, onImprovementCardIndexChange = {}, onDialogDismiss = {}, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt index 912b2438..f71e8be7 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt @@ -39,6 +39,7 @@ private data class ReportTopBarState( @Composable internal fun ReportScreenLayout( appBarTitle: String, + showTopAppBar: Boolean = true, modifier: Modifier = Modifier, topAppBarContent: @Composable PrezelTopAppBarScope.() -> Unit = {}, headerContent: @Composable ColumnScope.(Modifier) -> Unit, @@ -48,12 +49,14 @@ internal fun ReportScreenLayout( val (topBarState, updateAppBarHeight, updateHeaderTitleBottom) = rememberReportTopBarState() Column(modifier = modifier.fillMaxSize()) { - ReportDetailTopAppBar( - appBarTitle = appBarTitle, - topBarState = topBarState, - onAppBarMeasured = updateAppBarHeight, - content = topAppBarContent, - ) + if (showTopAppBar) { + ReportDetailTopAppBar( + appBarTitle = appBarTitle, + topBarState = topBarState, + onAppBarMeasured = updateAppBarHeight, + content = topAppBarContent, + ) + } ReportDetailScrollContent( scrollState = scrollState, From fa406ac10233b2b6aea15c14a68ba8a769f50bac Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Fri, 24 Jul 2026 22:47:59 +0900 Subject: [PATCH 3/7] =?UTF-8?q?refactor:=20=EB=B0=9C=ED=91=9C=20=EC=83=81?= =?UTF-8?q?=ED=99=A9=20=EC=84=A4=EC=A0=95=20=ED=99=94=EB=A9=B4=EC=9D=98=20?= =?UTF-8?q?=EC=95=84=EC=BD=94=EB=94=94=EC=96=B8=20=EC=9E=90=EB=8F=99=20?= =?UTF-8?q?=ED=99=95=EC=9E=A5=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `SituationAccordionType`에서 다음 섹션을 결정하는 `next` 속성 제거 - 카테고리, 목적, 스타일, 청중 선택 시 다음 섹션을 자동으로 확장하던 `onExpandedTypeChange` 호출 로직 삭제 - `nextExpandedType` 확장 함수 제거 및 관련 선택 이벤트 핸들러 단순화 --- .../situation/PresentationSituationScreen.kt | 28 +++---------------- 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/situation/PresentationSituationScreen.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/situation/PresentationSituationScreen.kt index 7261e63a..0e313b05 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/situation/PresentationSituationScreen.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/situation/PresentationSituationScreen.kt @@ -174,10 +174,7 @@ private fun CategorySituationAccordion( CategoryOptionGrid( selectedValue = form.category, options = categoryOptions, - onSelect = { selectedCategory -> - onSelectCategory(selectedCategory) - onExpandedTypeChange(selectedCategory.nextExpandedType(SituationAccordionType.CATEGORY)) - }, + onSelect = onSelectCategory, ) } } @@ -201,9 +198,7 @@ private fun PurposeSituationAccordion( options = purposeOptions.toChipContentOptions(form.purpose), onSelect = { index -> val selectedPurpose = purposeOptions[index].value - val nextPurpose = selectedPurpose.toggleIfSelected(form.purpose) - onSelectPurpose(nextPurpose) - onExpandedTypeChange(nextPurpose.nextExpandedType(SituationAccordionType.PURPOSE)) + onSelectPurpose(selectedPurpose.toggleIfSelected(form.purpose)) }, ) } @@ -228,9 +223,7 @@ private fun StyleSituationAccordion( options = styleOptions.toChipContentOptions(form.style), onSelect = { index -> val selectedStyle = styleOptions[index].value - val nextStyle = selectedStyle.toggleIfSelected(form.style) - onSelectStyle(nextStyle) - onExpandedTypeChange(nextStyle.nextExpandedType(SituationAccordionType.STYLE)) + onSelectStyle(selectedStyle.toggleIfSelected(form.style)) }, ) } @@ -256,9 +249,7 @@ private fun AudienceSituationAccordion( options = audienceOptions.toChipContentOptions(form.audience), onSelect = { index -> val selectedAudience = audienceOptions[index].value - val nextAudience = selectedAudience.toggleIfSelected(form.audience) - onSelectAudience(nextAudience) - onExpandedTypeChange(nextAudience.nextExpandedType(SituationAccordionType.AUDIENCE)) + onSelectAudience(selectedAudience.toggleIfSelected(form.audience)) }, ) } @@ -333,21 +324,10 @@ private enum class SituationAccordionType { PURPOSE, STYLE, AUDIENCE, - ; - - val next: SituationAccordionType? - get() = when (this) { - CATEGORY -> PURPOSE - PURPOSE -> STYLE - STYLE -> AUDIENCE - AUDIENCE -> null - } } private fun T.toggleIfSelected(selectedValue: T?): T? = if (this == selectedValue) null else this -private fun Any?.nextExpandedType(currentType: SituationAccordionType): SituationAccordionType? = if (this == null) currentType else currentType.next - @Composable private fun CategoryOptionCard( option: SituationCategoryOption, From 20776ad368dec646adf96c4ac4684932573aac2d Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Fri, 24 Jul 2026 23:20:45 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20=EC=9D=8C=EC=84=B1=20=EB=85=B9?= =?UTF-8?q?=EC=9D=8C=20UI=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20PrezelButtonA?= =?UTF-8?q?rea=20=EA=B5=AC=EB=B6=84=EC=84=A0=20=EC=A0=9C=EC=96=B4=20?= =?UTF-8?q?=EC=98=B5=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `VoiceRecordingContent`의 패딩 및 간격 조정 (V16 -> V4) - 스크립트 헤더 영역의 높이를 48.dp로 확장 및 아이콘 색상을 `iconDisabled`로 변경 - `PrezelButtonArea`에 배경색 노출 여부와 별개로 구분선을 제어할 수 있는 `showDivider` 파라미터 추가 - `VoiceRecordingButtonArea`에 배경색은 표시하되 구분선은 숨기도록 설정 적용 - `VoiceRecordingContent`의 다양한 상태(Idle, Recording, ReadyToPlay 등)에 대한 Compose 프리뷰 추가 --- .../actions/area/PrezelButtonArea.kt | 3 +- .../recording/VoiceRecordingButtonArea.kt | 2 + .../impl/recording/VoiceRecordingContent.kt | 67 +++++++++++++++++-- 3 files changed, 67 insertions(+), 5 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt index 8928b2e1..4020ff48 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt @@ -41,6 +41,7 @@ fun PrezelButtonArea( isVertical: Boolean = true, isStrongStrength: Boolean = true, showBackground: Boolean = false, + showDivider: Boolean = showBackground, isNested: Boolean = false, config: PrezelButtonAreaDefault = PrezelButtonAreaDefaults.getDefault(), mainButton: @Composable (Modifier) -> Unit, @@ -53,7 +54,7 @@ fun PrezelButtonArea( .fillMaxWidth() .then(if (showBackground) Modifier.background(config.backgroundColor) else Modifier), ) { - if (showBackground) { + if (showDivider) { PrezelHorizontalDivider(type = PrezelDividerType.THICK, color = config.borderColor) } diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingButtonArea.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingButtonArea.kt index 7f127c3b..2c9b4d6c 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingButtonArea.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingButtonArea.kt @@ -67,6 +67,8 @@ private fun IdleRecordingButtonArea( ) { PrezelButtonArea( modifier = modifier, + showBackground = true, + showDivider = false, mainButton = { buttonModifier -> RecordingIconButton( iconResId = recordingState.actionIconResId, diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt index fa9a6eb7..ef317cad 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn @@ -35,6 +36,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import com.team.prezel.core.audio.AudioSessionState +import com.team.prezel.core.audio.AudioSource import com.team.prezel.core.designsystem.component.actions.button.PrezelIconButton import com.team.prezel.core.designsystem.component.actions.button.config.ButtonHierarchy import com.team.prezel.core.designsystem.component.actions.button.config.ButtonSize @@ -42,6 +44,7 @@ import com.team.prezel.core.designsystem.component.actions.button.config.ButtonT import com.team.prezel.core.designsystem.component.actions.button.config.PrezelButtonDefaults import com.team.prezel.core.designsystem.component.voice.PrezelVoiceChromeWave import com.team.prezel.core.designsystem.icon.PrezelIcons +import com.team.prezel.core.designsystem.preview.BasicPreview import com.team.prezel.core.designsystem.theme.PrezelTheme import com.team.prezel.core.ui.util.noRippleClickable import com.team.prezel.feature.analysis.impl.R @@ -65,7 +68,7 @@ internal fun VoiceRecordingContent( modifier = modifier .fillMaxWidth() .background(PrezelTheme.colors.bgRegular) - .padding(vertical = PrezelTheme.spacing.V16), + .padding(vertical = PrezelTheme.spacing.V4), horizontalAlignment = Alignment.CenterHorizontally, ) { if (!recordingState.isCompleted || isScriptExpanded) { @@ -73,7 +76,7 @@ internal fun VoiceRecordingContent( isScriptExpanded = isScriptExpanded, onToggleScriptExpanded = onToggleScriptExpanded, ) - Spacer(modifier = Modifier.height(PrezelTheme.spacing.V16)) + Spacer(modifier = Modifier.height(PrezelTheme.spacing.V4)) } VoiceRecordingScriptBody( @@ -104,7 +107,7 @@ private fun VoiceRecordingScriptHeader( Box( modifier = Modifier .fillMaxWidth() - .height(20.dp) + .height(48.dp) .padding(horizontal = PrezelTheme.spacing.V20), ) { Text( @@ -240,6 +243,7 @@ private fun VoiceRecordingStatusArea( modifier = Modifier.fillMaxWidth(), ) } + Spacer(modifier = Modifier.height(PrezelTheme.spacing.V12)) } @Composable @@ -262,7 +266,7 @@ private fun ScriptZoomButton( ), contentDescription = null, modifier = Modifier.size(24.dp), - tint = PrezelTheme.colors.iconRegular, + tint = PrezelTheme.colors.iconDisabled, ) } } @@ -447,3 +451,58 @@ private fun RecordingRoundIconButton( onClick = onClick, ) } + +@BasicPreview +@Composable +private fun VoiceRecordingContentIdlePreview() { + VoiceRecordingContentPreview(recordingState = AudioSessionState.Idle) +} + +@BasicPreview +@Composable +private fun VoiceRecordingContentEmptyScriptPreview() { + VoiceRecordingContentPreview( + recordingState = AudioSessionState.Idle, + script = "", + useMinimumScriptHeight = true, + ) +} + +@BasicPreview +@Composable +private fun VoiceRecordingContentRecordingPreview() { + VoiceRecordingContentPreview( + recordingState = AudioSessionState.Recording(elapsedSeconds = 12), + ) +} + +@BasicPreview +@Composable +private fun VoiceRecordingContentCompletedPreview() { + VoiceRecordingContentPreview( + recordingState = AudioSessionState.ReadyToPlay( + source = AudioSource.RecordedFile(filePath = "preview.m4a"), + durationSeconds = 75, + ), + ) +} + +@Composable +private fun VoiceRecordingContentPreview( + recordingState: AudioSessionState, + script: String = "한 번쯤 발표하면서 긴장하신 경험 있으시죠. 오늘도 다들 긴장되는 마음으로 오셨을 것 같습니다.", + useMinimumScriptHeight: Boolean = false, +) { + PrezelTheme { + VoiceRecordingContent( + script = script, + recordingState = recordingState, + recordingVolumes = persistentListOf(0.2f, 0.45f, 0.7f, 0.35f, 0.8f, 0.55f), + isScriptExpanded = false, + onToggleScriptExpanded = {}, + onClickRecordingControl = {}, + modifier = if (useMinimumScriptHeight) Modifier.fillMaxWidth() else Modifier.fillMaxSize(), + useMinimumScriptHeight = useMinimumScriptHeight, + ) + } +} From 3ede6160fe2fb07d84e54a2dfc2af24007f3e7f3 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Fri, 24 Jul 2026 23:52:43 +0900 Subject: [PATCH 5/7] =?UTF-8?q?refactor:=20=EC=9D=8C=EC=84=B1=20=ED=8C=8C?= =?UTF-8?q?=EB=8F=99=20=EB=A0=8C=EB=8D=94=EB=A7=81=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=8B=A8=EC=88=9C=ED=99=94=20=EB=B0=8F=20UI=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EA=B4=80=EB=A6=AC=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `PrezelVoiceChromeWave`에서 불필요한 애니메이션 상태(`activationProgress`, `volumeProgress`) 제거 - 최신 볼륨 데이터를 우선적으로 표시하도록 `sampleVolume` 로직 수정 - `VoiceRecordingChromeUi` 내 불필요한 `hideWaveform` 옵션 및 관련 조건부 로직 삭제 - `MIN_REACTIVE_VOLUME` 등 상수를 도입하여 파동 반응 임계값 및 높이 계산 로직 정교화 --- .../component/voice/PrezelVoiceChromeWave.kt | 94 +++++-------------- .../feature/analysis/impl/AnalysisScreen.kt | 1 - .../impl/recording/VoiceRecordingContent.kt | 12 +-- .../VoiceRecordingStateProperties.kt | 1 - 4 files changed, 30 insertions(+), 78 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/voice/PrezelVoiceChromeWave.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/voice/PrezelVoiceChromeWave.kt index e4a163a2..a78224ea 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/voice/PrezelVoiceChromeWave.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/voice/PrezelVoiceChromeWave.kt @@ -1,8 +1,6 @@ package com.team.prezel.core.designsystem.component.voice import androidx.annotation.FloatRange -import androidx.compose.animation.core.animateFloatAsState -import androidx.compose.animation.core.tween import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -35,6 +33,9 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlin.math.roundToInt +private const val MIN_REACTIVE_VOLUME = 0.12f +private const val MIN_WAVE_VOLUME = 0.1f + @Composable fun PrezelVoiceChromeWave( modifier: Modifier = Modifier, @@ -48,33 +49,23 @@ fun PrezelVoiceChromeWave( VoiceChromeStatus.LISTENING, VoiceChromeStatus.WAITING, -> { - val clippedVolumes = volumes.map { volume -> - volume.coerceIn( - minimumValue = 0.1f, - maximumValue = 1f, - ) - } + val clippedVolumes = volumes + .filter { volume -> volume > MIN_REACTIVE_VOLUME } + .map { volume -> + volume.coerceIn( + minimumValue = MIN_WAVE_VOLUME, + maximumValue = 1f, + ) + } clippedVolumes.toImmutableList() } } - val activationProgress by animateFloatAsState( - targetValue = if (status == VoiceChromeStatus.IDLE) 0f else 1f, - animationSpec = tween(durationMillis = 6400), - label = "VoiceChromeWaveActivationProgress", - ) - val volumeProgress by animateFloatAsState( - targetValue = if (status == VoiceChromeStatus.IDLE) 0f else 1f, - animationSpec = tween(durationMillis = 440), - label = "VoiceChromeWaveVolumeProgress", - ) Spacer( modifier = modifier.drawVoiceChromeWave( status = status, volumes = adjustedVolumes, - activationProgress = activationProgress, - volumeProgress = volumeProgress, showBaseline = showBaseline, ), ) @@ -84,8 +75,6 @@ fun PrezelVoiceChromeWave( private fun Modifier.drawVoiceChromeWave( status: VoiceChromeStatus, volumes: ImmutableList, - activationProgress: Float, - volumeProgress: Float, showBaseline: Boolean, ): Modifier { val colors = PrezelTheme.colors @@ -122,8 +111,6 @@ private fun Modifier.drawVoiceChromeWave( status = status, volumes = volumes, config = drawConfig, - activationProgress = activationProgress, - volumeProgress = volumeProgress, showBaseline = showBaseline, baselineColor = colors.borderRegular, ) @@ -147,35 +134,14 @@ private fun DrawScope.drawVoiceChromeWaveContent( status: VoiceChromeStatus, volumes: ImmutableList, config: VoiceChromeWaveDrawConfig, - activationProgress: Float, - volumeProgress: Float, showBaseline: Boolean, baselineColor: Color, ) { - if (status == VoiceChromeStatus.LISTENING && activationProgress < 1f) { - drawVoiceChromeWaveBars( - status = VoiceChromeStatus.IDLE, - volumes = persistentListOf(), - config = config, - xOffset = -size.width * activationProgress, - volumeProgress = 0f, - ) - drawVoiceChromeWaveBars( - status = VoiceChromeStatus.LISTENING, - volumes = volumes, - config = config, - xOffset = size.width * (1f - activationProgress), - volumeProgress = volumeProgress, - ) - } else { - drawVoiceChromeWaveBars( - status = status, - volumes = volumes, - config = config, - xOffset = 0f, - volumeProgress = volumeProgress, - ) - } + drawVoiceChromeWaveBars( + status = status, + volumes = volumes, + config = config, + ) drawVoiceChromeWaveBaseline( visible = showBaseline, @@ -188,10 +154,8 @@ private fun DrawScope.drawVoiceChromeWaveBars( status: VoiceChromeStatus, volumes: ImmutableList, config: VoiceChromeWaveDrawConfig, - xOffset: Float, - volumeProgress: Float, ) { - var barX = -config.barWidth + xOffset + var barX = -config.barWidth var barIndex = 0 val barCount = (size.width / config.barSpacing).roundToInt() + 1 @@ -200,10 +164,7 @@ private fun DrawScope.drawVoiceChromeWaveBars( index = barIndex, sampleCount = barCount, ) - val barHeight = config.volumeToBarHeight( - volume = volume, - progress = volumeProgress, - ) + val barHeight = config.volumeToBarHeight(volume) val barTop = (size.height - barHeight) / 2f val topLeft = Offset(x = barX, y = barTop) val barSize = Size(width = config.barWidth, height = barHeight) @@ -251,25 +212,22 @@ private fun DrawScope.drawVoiceChromeWaveBaseline( ) } -private fun VoiceChromeWaveDrawConfig.volumeToBarHeight( - volume: Float, - progress: Float, -): Float { - val volumeProgress = (volume - 0.1f) / (1f - 0.1f) - val targetHeight = minBarHeight + volumeProgress * (maxBarHeight - minBarHeight) +private fun VoiceChromeWaveDrawConfig.volumeToBarHeight(volume: Float): Float { + val volumeProgress = (volume - MIN_WAVE_VOLUME) / (1f - MIN_WAVE_VOLUME) - return minBarHeight + (targetHeight - minBarHeight) * progress + return minBarHeight + volumeProgress * (maxBarHeight - minBarHeight) } private fun ImmutableList.sampleVolume( index: Int, sampleCount: Int, ): Float { - if (isEmpty()) return 0.1f - if (size == 1 || sampleCount <= 1) return first() + if (isEmpty() || sampleCount <= 0) return MIN_WAVE_VOLUME + + val firstVisibleIndex = (size - sampleCount).coerceAtLeast(0) + val sampleIndex = firstVisibleIndex + index - val sampleIndex = (index * (lastIndex.toFloat() / (sampleCount - 1))).roundToInt() - return get(sampleIndex.coerceIn(indices)) + return getOrElse(sampleIndex) { MIN_WAVE_VOLUME } } @LargeDevicePreview diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/AnalysisScreen.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/AnalysisScreen.kt index da066b0b..5c7fa220 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/AnalysisScreen.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/AnalysisScreen.kt @@ -170,7 +170,6 @@ private fun VoiceRecordingFeedback.toChromeUi(): VoiceRecordingChromeUi = titleResId = R.string.feature_analysis_impl_voice_recording_ready_to_continue_feedback, status = VoiceChromeStatus.LISTENING, gradient = VoiceChromeGradient.NONE, - hideWaveform = true, ) VoiceRecordingFeedback.SPEAK_LOUDER -> VoiceRecordingChromeUi( diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt index ef317cad..c2567950 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingContent.kt @@ -279,14 +279,10 @@ private fun RecordingWaveform( modifier: Modifier = Modifier, ) { val playbackProgress = recordingState.playbackProgress() - val visibleVolumes = if (voiceChromeUi?.hideWaveform == true) { - persistentListOf() - } else { - recordingState.visibleRecordingVolumes( - recordingVolumes = recordingVolumes, - playbackProgress = playbackProgress, - ) - } + val visibleVolumes = recordingState.visibleRecordingVolumes( + recordingVolumes = recordingVolumes, + playbackProgress = playbackProgress, + ) PrezelVoiceChromeWave( status = voiceChromeUi?.status ?: recordingState.toVoiceChromeStatus(), diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingStateProperties.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingStateProperties.kt index bf0feabf..ec367729 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingStateProperties.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/recording/VoiceRecordingStateProperties.kt @@ -15,7 +15,6 @@ internal data class VoiceRecordingChromeUi( @param:StringRes val titleResId: Int? = null, val status: VoiceChromeStatus? = null, val gradient: VoiceChromeGradient? = null, - val hideWaveform: Boolean = false, ) internal val AudioSessionState.currentSeconds: Int From cd76a7086728d2bc22b37967ab662d3fd293eec8 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sat, 25 Jul 2026 15:34:30 +0900 Subject: [PATCH 6/7] =?UTF-8?q?refactor:=20guideScript=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20null=20=ED=97=88=EC=9A=A9=20=EB=B0=98=EC=98=81=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A7=A4=ED=95=91=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `PresentationWordDetailResponse`의 `guideScript` 필드 타입을 `String?`로 변경하여 null 허용 - `PresentationMapper`에서 `guideScript` 매핑 시 `orEmpty()`를 사용하여 안전하게 처리하도록 수정 --- .../java/com/team/prezel/core/data/mapper/PresentationMapper.kt | 2 +- .../model/presentation/PresentationWordDetailResponse.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Prezel/core/data/src/main/java/com/team/prezel/core/data/mapper/PresentationMapper.kt b/Prezel/core/data/src/main/java/com/team/prezel/core/data/mapper/PresentationMapper.kt index 5c8726ca..54e71082 100644 --- a/Prezel/core/data/src/main/java/com/team/prezel/core/data/mapper/PresentationMapper.kt +++ b/Prezel/core/data/src/main/java/com/team/prezel/core/data/mapper/PresentationMapper.kt @@ -102,7 +102,7 @@ internal fun PresentationSentenceAnalysisResponse.toDomain(): SentenceAnalysisDe status = WordAnalysisStatus.from(value = status), mainFeedback = mainFeedback, subFeedback = subFeedback, - guideScript = guideScript, + guideScript = guideScript.orEmpty(), accuracy = accuracy, startTimeMs = startTimeMs, endTimeMs = endTimeMs, diff --git a/Prezel/core/network/src/main/java/com/team/prezel/core/network/model/presentation/PresentationWordDetailResponse.kt b/Prezel/core/network/src/main/java/com/team/prezel/core/network/model/presentation/PresentationWordDetailResponse.kt index e7174251..3317637e 100644 --- a/Prezel/core/network/src/main/java/com/team/prezel/core/network/model/presentation/PresentationWordDetailResponse.kt +++ b/Prezel/core/network/src/main/java/com/team/prezel/core/network/model/presentation/PresentationWordDetailResponse.kt @@ -24,7 +24,7 @@ data class PresentationSentenceAnalysisResponse( @SerialName("subFeedback") val subFeedback: String, @SerialName("guideScript") - val guideScript: String = "", + val guideScript: String?, @SerialName("accuracy") val accuracy: Double, @SerialName("startTimeMs") From 4176d06ba6f5766efb588a693c51c9752f846337 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sun, 26 Jul 2026 10:14:46 +0900 Subject: [PATCH 7/7] =?UTF-8?q?Revert=20"feat:=20=EB=B6=84=EC=84=9D=20?= =?UTF-8?q?=EB=A6=AC=ED=8F=AC=ED=8A=B8=20=ED=99=94=EB=A9=B4=EC=9D=98=20?= =?UTF-8?q?=EC=83=81=EB=8B=A8=20=EB=B0=94=20=EA=B0=80=EC=8B=9C=EC=84=B1=20?= =?UTF-8?q?=EC=A0=9C=EC=96=B4=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 4dbbd43c10435968d5eb030fd35b8fea90c3e827. --- .../impl/navigation/AnalysisEntryBuilder.kt | 1 - .../impl/navigation/HistoryEntryBuilder.kt | 1 - .../prezel/feature/report/api/ReportNavKey.kt | 1 - .../report/impl/navigation/ReportEntryBuilder.kt | 1 - .../report/impl/report/AnalysisReportScreen.kt | 9 --------- .../impl/report/component/ReportScreenLayout.kt | 15 ++++++--------- 6 files changed, 6 insertions(+), 22 deletions(-) diff --git a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt index c1d81dbe..caf334e4 100644 --- a/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt +++ b/Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt @@ -89,7 +89,6 @@ private fun AnalysisRoute( navigator.navigate( key = ReportNavKey( presentationId = presentationId, - showTopAppBar = false, ), clearStack = true, ) diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt index 0a17b942..ee2532e2 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt @@ -23,7 +23,6 @@ internal fun EntryProviderScope.featureHistoryEntryBuilder() { ReportNavKey( presentationId = presentationId, isPast = isPast, - showTopAppBar = true, ), ) }, diff --git a/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt b/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt index cb75f3a8..5cb4de82 100644 --- a/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt +++ b/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt @@ -7,5 +7,4 @@ import kotlinx.serialization.Serializable data class ReportNavKey( val presentationId: Long, val isPast: Boolean = false, - val showTopAppBar: Boolean = true, ) : NavKey diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt index e005f19b..d7b1f5f4 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt @@ -33,7 +33,6 @@ private fun EntryProviderScope.reportEntry() { AnalysisReportScreen( onBack = { navigator.goBack() }, - showTopAppBar = key.showTopAppBar, navigateToAnalysisScript = { presentationId, isPast -> navigator.navigateToAnalysisScript( presentationId = presentationId, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt index 67f9d587..d3a173ae 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt @@ -29,7 +29,6 @@ import com.team.prezel.feature.report.impl.report.preview.ReportPreviewUpcomingU @Composable internal fun AnalysisReportScreen( onBack: () -> Unit, - showTopAppBar: Boolean, navigateToAnalysisScript: (presentationId: Long, isPast: Boolean) -> Unit, navigateToAnalysisRecording: (presentationId: Long, isPast: Boolean) -> Unit, navigateToScriptAnalysis: (analysisResultId: Long) -> Unit, @@ -89,7 +88,6 @@ internal fun AnalysisReportScreen( AnalysisReportScreen( uiState = uiState, onBackClick = onBack, - showTopAppBar = showTopAppBar, onDeleteClick = { viewModel.onIntent(AnalysisReportUiIntent.ClickDelete) }, onImprovementCardIndexChange = { index -> viewModel.onIntent(AnalysisReportUiIntent.ClickGrowthGraphItem(index)) }, onDialogDismiss = { viewModel.onIntent(AnalysisReportUiIntent.DismissDialog) }, @@ -108,7 +106,6 @@ internal fun AnalysisReportScreen( internal fun AnalysisReportScreen( uiState: AnalysisReportUiState, onBackClick: () -> Unit, - showTopAppBar: Boolean, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, onDialogDismiss: () -> Unit, @@ -126,7 +123,6 @@ internal fun AnalysisReportScreen( AnalysisReportScreenContent( uiState = uiState, onBackClick = onBackClick, - showTopAppBar = showTopAppBar, onDeleteClick = onDeleteClick, modifier = modifier, onImprovementCardIndexChange = onImprovementCardIndexChange, @@ -149,7 +145,6 @@ internal fun AnalysisReportScreen( private fun AnalysisReportScreenContent( uiState: AnalysisReportUiState.Content, onBackClick: () -> Unit, - showTopAppBar: Boolean, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, onDialogDismiss: () -> Unit, @@ -172,7 +167,6 @@ private fun AnalysisReportScreenContent( ReportScreenLayout( appBarTitle = uiState.presentationInfo.title, - showTopAppBar = showTopAppBar, topAppBarContent = { LeadingIcon( iconResId = PrezelIcons.ArrowLeft, @@ -232,7 +226,6 @@ private fun UpcomingAnalysisReportScreenPreview() { AnalysisReportScreen( uiState = ReportPreviewUpcomingUiState, onBackClick = { }, - showTopAppBar = false, onDeleteClick = { }, onImprovementCardIndexChange = {}, onDialogDismiss = {}, @@ -254,7 +247,6 @@ private fun PastAnalysisReportScreenPreview() { AnalysisReportScreen( uiState = ReportPreviewPastUiState, onBackClick = { }, - showTopAppBar = true, onDeleteClick = { }, onImprovementCardIndexChange = {}, onDialogDismiss = {}, @@ -276,7 +268,6 @@ private fun AnalysisReportScreenLoadingPreview() { AnalysisReportScreen( uiState = AnalysisReportUiState.Loading, onBackClick = { }, - showTopAppBar = false, onDeleteClick = { }, onImprovementCardIndexChange = {}, onDialogDismiss = {}, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt index f71e8be7..912b2438 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportScreenLayout.kt @@ -39,7 +39,6 @@ private data class ReportTopBarState( @Composable internal fun ReportScreenLayout( appBarTitle: String, - showTopAppBar: Boolean = true, modifier: Modifier = Modifier, topAppBarContent: @Composable PrezelTopAppBarScope.() -> Unit = {}, headerContent: @Composable ColumnScope.(Modifier) -> Unit, @@ -49,14 +48,12 @@ internal fun ReportScreenLayout( val (topBarState, updateAppBarHeight, updateHeaderTitleBottom) = rememberReportTopBarState() Column(modifier = modifier.fillMaxSize()) { - if (showTopAppBar) { - ReportDetailTopAppBar( - appBarTitle = appBarTitle, - topBarState = topBarState, - onAppBarMeasured = updateAppBarHeight, - content = topAppBarContent, - ) - } + ReportDetailTopAppBar( + appBarTitle = appBarTitle, + topBarState = topBarState, + onAppBarMeasured = updateAppBarHeight, + content = topAppBarContent, + ) ReportDetailScrollContent( scrollState = scrollState,