From af31444f0f366997128d0a7dce8e7270e0e372ca Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Fri, 20 Mar 2026 14:27:10 +0900 Subject: [PATCH] =?UTF-8?q?fix(live-room):=20=EC=B1=84=ED=8C=85=EC=B0=BD?= =?UTF-8?q?=20=EC=96=BC=EB=A6=BC=20=EB=B2=84=ED=8A=BC=20=EC=9C=84=EC=B9=98?= =?UTF-8?q?=EC=99=80=20=EC=95=88=EB=82=B4=20=EB=AC=B8=EA=B5=AC=EB=A5=BC=20?= =?UTF-8?q?=EC=A1=B0=EC=A0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ic_ice.imageset/Contents.json | 21 +++++++++++ .../ic_ice.imageset/ic_ice.png | Bin 0 -> 20382 bytes SodaLive/Sources/I18n/I18n.swift | 5 ++- .../Sources/Live/Room/LiveRoomViewModel.swift | 13 +++++-- .../Button/LiveRoomRightBottomButton.swift | 13 ++++++- .../Component/View/LiveRoomInfoHostView.swift | 17 --------- .../Sources/Live/Room/V2/LiveRoomViewV2.swift | 28 +++++++++----- docs/20260320_채팅창얼림버튼및문구수정.md | 35 ++++++++++++++++++ 8 files changed, 100 insertions(+), 32 deletions(-) create mode 100644 SodaLive/Resources/Assets.xcassets/ic_ice.imageset/Contents.json create mode 100644 SodaLive/Resources/Assets.xcassets/ic_ice.imageset/ic_ice.png create mode 100644 docs/20260320_채팅창얼림버튼및문구수정.md diff --git a/SodaLive/Resources/Assets.xcassets/ic_ice.imageset/Contents.json b/SodaLive/Resources/Assets.xcassets/ic_ice.imageset/Contents.json new file mode 100644 index 0000000..216712f --- /dev/null +++ b/SodaLive/Resources/Assets.xcassets/ic_ice.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ic_ice.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SodaLive/Resources/Assets.xcassets/ic_ice.imageset/ic_ice.png b/SodaLive/Resources/Assets.xcassets/ic_ice.imageset/ic_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..649c00ff533b1839c7c7b95f307b00bbd85ab9c4 GIT binary patch literal 20382 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 N002ovPDHLkV1n|CBO(9* literal 0 HcmV?d00001 diff --git a/SodaLive/Sources/I18n/I18n.swift b/SodaLive/Sources/I18n/I18n.swift index f93f100..98830b6 100644 --- a/SodaLive/Sources/I18n/I18n.swift +++ b/SodaLive/Sources/I18n/I18n.swift @@ -784,8 +784,9 @@ enum I18n { static var participants: String { pick(ko: "참여자", en: "Participants", ja: "リスナー") } static var follow: String { pick(ko: "팔로우", en: "Follow", ja: "フォロー") } static var following: String { pick(ko: "팔로잉", en: "Following", ja: "フォロー中") } - static var chatFreezeOnStatusMessage: String { pick(ko: "채팅창을 얼렸습니다.", en: "Chat has been frozen.", ja: "チャットが凍結されました。") } - static var chatFreezeOffStatusMessage: String { pick(ko: "채팅창 얼림이 해제되었습니다.", en: "Chat freeze has been lifted.", ja: "チャット凍結が解除されました。") } + static var chatFreezeOnStatusMessageForCreator: String { pick(ko: "“🧊 모두들 얼음!” 채팅창을 얼렸습니다.", en: "\"🧊 Freeze, everyone!\" The chat has been frozen.", ja: "「🧊 みんなフリーズ!」チャットを凍結しました。") } + static var chatFreezeOnStatusMessageForListener: String { pick(ko: "“🧊 모두들 얼음!” 채팅창이 얼었습니다.", en: "\"🧊 Freeze, everyone!\" The chat is now frozen.", ja: "「🧊 みんなフリーズ!」チャットが凍結されました。") } + static var chatFreezeOffStatusMessage: String { pick(ko: "“💧땡! “ 채팅창 얼리기가 해제되었습니다.", en: "\"💧 Ding!\" Chat freeze has been lifted.", ja: "「💧 たん!」チャット凍結が解除されました。") } static var chatFreezeBlockedMessage: String { pick(ko: "채팅창이 얼려져 있어 채팅할 수 없습니다.", en: "You cannot chat while chat is frozen.", ja: "チャットが凍結中のため送信できません。") } static var chatDeleteTitle: String { pick(ko: "채팅 삭제", en: "Delete chat", ja: "チャット削除") } } diff --git a/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift b/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift index d6415df..043b7ae 100644 --- a/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift +++ b/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift @@ -2133,9 +2133,16 @@ final class LiveRoomViewModel: NSObject, ObservableObject { } private func appendChatFreezeStatusMessage(isChatFrozen: Bool) { - let statusMessage = isChatFrozen - ? I18n.LiveRoom.chatFreezeOnStatusMessage - : I18n.LiveRoom.chatFreezeOffStatusMessage + let statusMessage: String + + if isChatFrozen { + statusMessage = isCreator + ? I18n.LiveRoom.chatFreezeOnStatusMessageForCreator + : I18n.LiveRoom.chatFreezeOnStatusMessageForListener + } else { + statusMessage = I18n.LiveRoom.chatFreezeOffStatusMessage + } + messages.append(LiveRoomJoinChat(nickname: "", statusMessage: statusMessage)) } diff --git a/SodaLive/Sources/Live/Room/V2/Component/Button/LiveRoomRightBottomButton.swift b/SodaLive/Sources/Live/Room/V2/Component/Button/LiveRoomRightBottomButton.swift index 35ab1be..6d8b4a6 100644 --- a/SodaLive/Sources/Live/Room/V2/Component/Button/LiveRoomRightBottomButton.swift +++ b/SodaLive/Sources/Live/Room/V2/Component/Button/LiveRoomRightBottomButton.swift @@ -11,17 +11,20 @@ struct LiveRoomRightBottomButton: View { let imageName: String let onClick: () -> Void + let backgroundColor: Color? let onLongPress: (() -> Void)? let longPressDuration: Double init( imageName: String, onClick: @escaping () -> Void, + backgroundColor: Color? = nil, onLongPress: (() -> Void)? = nil, longPressDuration: Double = 2.0 ) { self.imageName = imageName self.onClick = onClick + self.backgroundColor = backgroundColor self.onLongPress = onLongPress self.longPressDuration = longPressDuration } @@ -31,7 +34,15 @@ struct LiveRoomRightBottomButton: View { .resizable() .frame(width: 24, height: 24) .padding(10) - .background(Color.gray52.opacity(0.6)) + .background( + backgroundColor ?? Color( + .sRGB, + red: 82 / 255, + green: 82 / 255, + blue: 82 / 255, + opacity: 0.6 + ) + ) .cornerRadius(10) .onTapGesture { onClick() } .onLongPressGesture(minimumDuration: longPressDuration) { diff --git a/SodaLive/Sources/Live/Room/V2/Component/View/LiveRoomInfoHostView.swift b/SodaLive/Sources/Live/Room/V2/Component/View/LiveRoomInfoHostView.swift index 6a085fc..052ec76 100644 --- a/SodaLive/Sources/Live/Room/V2/Component/View/LiveRoomInfoHostView.swift +++ b/SodaLive/Sources/Live/Room/V2/Component/View/LiveRoomInfoHostView.swift @@ -6,7 +6,6 @@ // import SwiftUI -import Kingfisher struct LiveRoomInfoHostView: View { @@ -19,7 +18,6 @@ struct LiveRoomInfoHostView: View { let isOnNotice: Bool let isOnMenuPan: Bool let isOnSignature: Bool - let isOnChatFreeze: Bool let isShowMenuPanButton: Bool let creatorId: Int @@ -41,7 +39,6 @@ struct LiveRoomInfoHostView: View { let onClickTotalHeart: () -> Void let onClickTotalDonation: () -> Void let onClickParticipants: () -> Void - let onClickToggleChatFreeze: () -> Void let onClickToggleSignature: () -> Void var body: some View { @@ -58,18 +55,6 @@ struct LiveRoomInfoHostView: View { Spacer() - LiveRoomOverlayStrokeTextToggleButton( - isOn: isOnChatFreeze, - onText: I18n.LiveRoom.chatFreezeOn, - onTextColor: Color.button, - onStrokeColor: Color.button, - offText: I18n.LiveRoom.chatFreezeOff, - offTextColor: Color.graybb, - offStrokeColor: Color.graybb, - strokeWidth: 1, - strokeCornerRadius: 5.3 - ) { onClickToggleChatFreeze() } - LiveRoomOverlayStrokeTextToggleButton( isOn: isOnSignature, onText: I18n.LiveRoom.signatureOn, @@ -254,7 +239,6 @@ struct LiveRoomInfoHostView_Previews: PreviewProvider { isOnNotice: true, isOnMenuPan: false, isOnSignature: false, - isOnChatFreeze: false, isShowMenuPanButton: false, creatorId: 1, creatorNickname: "도화", @@ -286,7 +270,6 @@ struct LiveRoomInfoHostView_Previews: PreviewProvider { onClickTotalHeart: {}, onClickTotalDonation: {}, onClickParticipants: {}, - onClickToggleChatFreeze: {}, onClickToggleSignature: {} ) } diff --git a/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift b/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift index 220e47f..73d230a 100644 --- a/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift +++ b/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift @@ -74,7 +74,6 @@ struct LiveRoomViewV2: View { isOnNotice: viewModel.isShowNotice, isOnMenuPan: viewModel.isShowMenuPan, isOnSignature: viewModel.isSignatureOn, - isOnChatFreeze: viewModel.isChatFrozen, isShowMenuPanButton: !liveRoomInfo.menuPan.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty, creatorId: liveRoomInfo.creatorId, creatorNickname: liveRoomInfo.creatorNickname, @@ -115,9 +114,6 @@ struct LiveRoomViewV2: View { onClickParticipants: { viewModel.isShowProfileList = true }, - onClickToggleChatFreeze: { - viewModel.setChatFreeze(isChatFrozen: !viewModel.isChatFrozen) - }, onClickToggleSignature: { viewModel.isSignatureOn.toggle() } @@ -248,11 +244,25 @@ struct LiveRoomViewV2: View { VStack(alignment: .trailing, spacing: 0) { Spacer() - - LiveRoomRightBottomButton( - imageName: viewModel.isSpeakerMute ? "ic_speaker_off" : "ic_speaker_on", - onClick: { viewModel.toggleSpeakerMute() } - ) + + VStack(spacing: 13.3) { + if liveRoomInfo.creatorId == UserDefaults.int(forKey: .userId) { + LiveRoomRightBottomButton( + imageName: "ic_ice", + onClick: { + viewModel.setChatFreeze(isChatFrozen: !viewModel.isChatFrozen) + }, + backgroundColor: viewModel.isChatFrozen + ? Color(hex: "3bb9f1").opacity(0.5) + : nil + ) + } + + LiveRoomRightBottomButton( + imageName: viewModel.isSpeakerMute ? "ic_speaker_off" : "ic_speaker_on", + onClick: { viewModel.toggleSpeakerMute() } + ) + } .padding(.bottom, 40) .padding(.trailing, 13.3) diff --git a/docs/20260320_채팅창얼림버튼및문구수정.md b/docs/20260320_채팅창얼림버튼및문구수정.md new file mode 100644 index 0000000..c8be46c --- /dev/null +++ b/docs/20260320_채팅창얼림버튼및문구수정.md @@ -0,0 +1,35 @@ +# 20260320 채팅창 얼림 버튼 및 문구 수정 + +## 작업 체크리스트 +- [x] `LiveRoomViewV2`에서 방장 전용 얼림 버튼을 스피커 음소거 버튼 위에 배치한다. +- [x] 얼림 버튼 OFF/ON 상태별 배경 스타일을 요구사항(기본 배경 / `#3bb9f1` 50%, corner radius 10)로 반영한다. +- [x] 얼림 ON/OFF 시 채팅 문구를 방장/리스너 조건으로 각각 지정된 문구로 수정한다. +- [x] 수정 파일 진단 및 빌드를 실행하고 결과를 기록한다. + +## 완료 기준 (Pass/Fail) +- [x] Pass: 방장 계정에서만 `ic_ice` 버튼이 보이고, 버튼이 스피커 음소거 버튼 바로 위에 위치한다. (QA: 화면 렌더링 코드 조건/배치 확인) +- [x] Pass: OFF 상태 배경은 우측 하단 기존 버튼과 동일하고, ON 상태는 `#3bb9f1` 50% + radius 10으로 적용된다. (QA: 버튼 스타일 코드 확인) +- [x] Pass: 얼림 ON/OFF 채팅 문구가 방장/리스너 조건에 맞게 정확히 분기된다. (QA: 얼림 메시지 생성 코드 확인) +- [x] Pass: 수정 파일 LSP 진단 에러 0, 빌드 명령 종료 코드 0. (QA: `lsp_diagnostics`, `xcodebuild`) + +## 검증 기록 +- 2026-03-20 (채팅창 얼림 버튼/문구 수정) + - 무엇/왜/어떻게: 얼림 토글을 상단 호스트 토글 영역에서 우측 하단 스피커 음소거 버튼 위로 이동하고, ON/OFF 배경 스펙 및 방장 전용 노출 조건을 반영했다. 동시에 얼림 상태 채팅 문구를 방장/리스너 역할 기준으로 분기되도록 `LiveRoomViewModel` + `I18n` 경로를 수정했다. + - 실행 명령/도구: + - `lsp_diagnostics`: + - `SodaLive/Sources/Live/Room/V2/Component/Button/LiveRoomRightBottomButton.swift` + - `SodaLive/Sources/Live/Room/V2/Component/View/LiveRoomInfoHostView.swift` + - `SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift` + - `SodaLive/Sources/Live/Room/LiveRoomViewModel.swift` + - `SodaLive/Sources/I18n/I18n.swift` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test` + - `python3` 코드 QA 스크립트(버튼 위치/호스트 노출/문구 분기 문자열 정합성 PASS 체크) + - 결과: + - `lsp_diagnostics` 대상 5개 파일 모두 `No diagnostics found` 확인. + - `SodaLive` Debug build: `** BUILD SUCCEEDED **`. + - `SodaLive-dev` Debug build: `** BUILD SUCCEEDED **`. + - 테스트: 두 스킴 모두 `Scheme ... is not currently configured for the test action`으로 자동 테스트 실행 불가. + - 코드 QA 스크립트: `host_only_ice_button`, `ice_above_speaker`, `host_header_toggle_removed`, `on_message_creator`, `on_message_listener`, `off_message_common`, `viewmodel_role_branch` 전 항목 `PASS`.