Skip to content

Commit 82e9fce

Browse files
feat/#162 :: EditPhotoRoom에서 마이크 버튼 input, output 연결
1 parent 4e6c630 commit 82e9fce

File tree

6 files changed

+79
-9
lines changed

6 files changed

+79
-9
lines changed

PhotoGether/PhotoGether/App/SceneDelegate.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
160160
receiveStickerListUseCase: receiveStickerListHostUseCase,
161161
receiveFrameUseCase: receiveFrameHostUseCase,
162162
sendStickerToRepositoryUseCase: sendStickerToRepositoryHostUseCase,
163-
sendFrameToRepositoryUseCase: sendFrameToRepositoryHostUseCase
163+
sendFrameToRepositoryUseCase: sendFrameToRepositoryHostUseCase,
164+
toggleLocalMicStateUseCase: toggleLocalMicStateUseCaseImpl,
165+
getVoiceInputStateUseCase: getVoiceInputStateUseCaseImpl
164166
)
165167

166168
let stickerBottomSheetViewModel = StickerBottomSheetViewModel(
@@ -184,7 +186,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
184186
receiveStickerListUseCase: receiveStickerListGuestUseCase,
185187
receiveFrameUseCase: receiveFrameGuestUseCase,
186188
sendStickerToRepositoryUseCase: sendStickerToRepositoryGuestUseCase,
187-
sendFrameToRepositoryUseCase: sendFrameToRepositoryGuestUseCase
189+
sendFrameToRepositoryUseCase: sendFrameToRepositoryGuestUseCase,
190+
toggleLocalMicStateUseCase: toggleLocalMicStateUseCaseImpl,
191+
getVoiceInputStateUseCase: getVoiceInputStateUseCaseImpl
188192
)
189193

190194
let editPhotoRoomGuestViewController = EditPhotoRoomGuestViewController(

PhotoGether/PresentationLayer/EditPhotoRoomFeature/EditPhotoRoomFeature/Source/EditPhotoRoomGuestViewController.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public class EditPhotoRoomGuestViewController: BaseViewController, ViewControlle
4444
bindInput()
4545
bindOutput()
4646
bindNoti()
47+
micButton.toggleMicState(
48+
viewModel.fetchLocalVoiceInputState()
49+
)
4750
input.send(.initialState)
4851
}
4952

@@ -107,6 +110,12 @@ public class EditPhotoRoomGuestViewController: BaseViewController, ViewControlle
107110
self?.input.send(.frameButtonDidTap)
108111
}
109112
.store(in: &cancellables)
113+
114+
micButton.tapPublisher
115+
.sink { [weak self] in
116+
self?.input.send(.micButtonDidTap)
117+
}
118+
.store(in: &cancellables)
110119
}
111120

112121
public func bindOutput() {
@@ -122,6 +131,8 @@ public class EditPhotoRoomGuestViewController: BaseViewController, ViewControlle
122131
self?.updateFrameImage(to: image)
123132
case .presentStickerBottomSheet:
124133
self?.presentStickerBottomSheet()
134+
case .voiceInputState(let isOn):
135+
self?.micButton.toggleMicState(isOn)
125136
}
126137
}
127138
.store(in: &cancellables)

PhotoGether/PresentationLayer/EditPhotoRoomFeature/EditPhotoRoomFeature/Source/EditPhotoRoomGuestViewModel.swift

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,23 @@ public final class EditPhotoRoomGuestViewModel {
1313
case dragSticker(StickerEntity, PanGestureState)
1414
case resizeSticker(StickerEntity, PanGestureState)
1515
case stickerViewDidTap(UUID)
16+
case micButtonDidTap
1617
}
1718

1819
enum Output {
1920
case stickerList([StickerEntity])
2021
case frameImage(image: UIImage)
2122
case presentStickerBottomSheet
23+
case voiceInputState(Bool)
2224
}
2325

2426
private var frameImageGenerator: FrameImageGenerator?
2527
private let receiveStickerListUseCase: ReceiveStickerListUseCase
2628
private let receiveFrameUseCase: ReceiveFrameUseCase
2729
private let sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase
2830
private let sendFrameToRepositoryUseCase: SendFrameToRepositoryUseCase
31+
private let toggleLocalMicStateUseCase: ToggleLocalMicStateUseCase
32+
private let getVoiceInputStateUseCase: GetVoiceInputStateUseCase
2933

3034
private(set) var userInfo: UserInfo!
3135

@@ -39,12 +43,16 @@ public final class EditPhotoRoomGuestViewModel {
3943
receiveStickerListUseCase: ReceiveStickerListUseCase,
4044
receiveFrameUseCase: ReceiveFrameUseCase,
4145
sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase,
42-
sendFrameToRepositoryUseCase: SendFrameToRepositoryUseCase
46+
sendFrameToRepositoryUseCase: SendFrameToRepositoryUseCase,
47+
toggleLocalMicStateUseCase: ToggleLocalMicStateUseCase,
48+
getVoiceInputStateUseCase: GetVoiceInputStateUseCase
4349
) {
4450
self.receiveStickerListUseCase = receiveStickerListUseCase
4551
self.receiveFrameUseCase = receiveFrameUseCase
4652
self.sendStickerToRepositoryUseCase = sendStickerToRepositoryUseCase
4753
self.sendFrameToRepositoryUseCase = sendFrameToRepositoryUseCase
54+
self.toggleLocalMicStateUseCase = toggleLocalMicStateUseCase
55+
self.getVoiceInputStateUseCase = getVoiceInputStateUseCase
4856
bind()
4957
}
5058

@@ -100,12 +108,18 @@ public final class EditPhotoRoomGuestViewModel {
100108
self?.handleDragSticker(sticker: sticker, state: dragState)
101109
case .resizeSticker(let sticker, let resizeState):
102110
self?.handleResizeSticker(sticker: sticker, state: resizeState)
111+
case .micButtonDidTap:
112+
self?.handleMicButtonDidTap()
103113
}
104114
}
105115
.store(in: &cancellables)
106116

107117
return output.eraseToAnyPublisher()
108118
}
119+
120+
func fetchLocalVoiceInputState() -> Bool {
121+
getVoiceInputStateUseCase.execute()
122+
}
109123
}
110124

111125
// MARK: Sticker
@@ -310,3 +324,13 @@ extension EditPhotoRoomGuestViewModel {
310324
output.send(.presentStickerBottomSheet)
311325
}
312326
}
327+
328+
// MARK: Voice Input Control
329+
extension EditPhotoRoomGuestViewModel {
330+
private func handleMicButtonDidTap() {
331+
toggleLocalMicStateUseCase.execute()
332+
.sink { [weak self] state in
333+
self?.output.send(.voiceInputState(state))
334+
}.store(in: &cancellables)
335+
}
336+
}

PhotoGether/PresentationLayer/EditPhotoRoomFeature/EditPhotoRoomFeature/Source/EditPhotoRoomHostViewController.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ public class EditPhotoRoomHostViewController: BaseViewController, ViewController
4242
configureUI()
4343
bindInput()
4444
bindOutput()
45+
micButton.toggleMicState(
46+
viewModel.fetchLocalVoiceInputState()
47+
)
4548
input.send(.initialState)
4649
}
4750

@@ -105,6 +108,12 @@ public class EditPhotoRoomHostViewController: BaseViewController, ViewController
105108
self?.showNextView()
106109
}
107110
.store(in: &cancellables)
111+
112+
micButton.tapPublisher
113+
.sink { [weak self] in
114+
self?.input.send(.micButtonDidTap)
115+
}
116+
.store(in: &cancellables)
108117
}
109118

110119
public func bindOutput() {
@@ -120,6 +129,8 @@ public class EditPhotoRoomHostViewController: BaseViewController, ViewController
120129
self?.updateFrameImage(to: image)
121130
case .presentStickerBottomSheet:
122131
self?.presentStickerBottomSheet()
132+
case .voiceInputState(let isOn):
133+
self?.micButton.toggleMicState(isOn)
123134
}
124135
}
125136
.store(in: &cancellables)

PhotoGether/PresentationLayer/EditPhotoRoomFeature/EditPhotoRoomFeature/Source/EditPhotoRoomHostViewModel.swift

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,23 @@ public final class EditPhotoRoomHostViewModel {
1313
case dragSticker(StickerEntity, PanGestureState)
1414
case resizeSticker(StickerEntity, PanGestureState)
1515
case stickerViewDidTap(UUID)
16+
case micButtonDidTap
1617
}
1718

1819
enum Output {
1920
case stickerList([StickerEntity])
2021
case frameImage(image: UIImage)
2122
case presentStickerBottomSheet
23+
case voiceInputState(Bool)
2224
}
2325

2426
private var frameImageGenerator: FrameImageGenerator?
2527
private let receiveStickerListUseCase: ReceiveStickerListUseCase
2628
private let receiveFrameUseCase: ReceiveFrameUseCase
2729
private let sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase
2830
private let sendFrameToRepositoryUseCase: SendFrameToRepositoryUseCase
31+
private let toggleLocalMicStateUseCase: ToggleLocalMicStateUseCase
32+
private let getVoiceInputStateUseCase: GetVoiceInputStateUseCase
2933

3034
private(set) var userInfo: UserInfo!
3135

@@ -39,12 +43,16 @@ public final class EditPhotoRoomHostViewModel {
3943
receiveStickerListUseCase: ReceiveStickerListUseCase,
4044
receiveFrameUseCase: ReceiveFrameUseCase,
4145
sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase,
42-
sendFrameToRepositoryUseCase: SendFrameToRepositoryUseCase
46+
sendFrameToRepositoryUseCase: SendFrameToRepositoryUseCase,
47+
toggleLocalMicStateUseCase: ToggleLocalMicStateUseCase,
48+
getVoiceInputStateUseCase: GetVoiceInputStateUseCase
4349
) {
4450
self.receiveStickerListUseCase = receiveStickerListUseCase
4551
self.receiveFrameUseCase = receiveFrameUseCase
4652
self.sendStickerToRepositoryUseCase = sendStickerToRepositoryUseCase
4753
self.sendFrameToRepositoryUseCase = sendFrameToRepositoryUseCase
54+
self.toggleLocalMicStateUseCase = toggleLocalMicStateUseCase
55+
self.getVoiceInputStateUseCase = getVoiceInputStateUseCase
4856
bind()
4957
}
5058

@@ -101,12 +109,18 @@ public final class EditPhotoRoomHostViewModel {
101109
self?.handleDragSticker(sticker: sticker, state: dragState)
102110
case .resizeSticker(let sticker, let resizeState):
103111
self?.handleResizeSticker(sticker: sticker, state: resizeState)
112+
case .micButtonDidTap:
113+
self?.handleMicButtonDidTap()
104114
}
105115
}
106116
.store(in: &cancellables)
107117

108118
return output.eraseToAnyPublisher()
109119
}
120+
121+
func fetchLocalVoiceInputState() -> Bool {
122+
getVoiceInputStateUseCase.execute()
123+
}
110124
}
111125

112126
// MARK: Sticker
@@ -311,3 +325,13 @@ extension EditPhotoRoomHostViewModel {
311325
output.send(.presentStickerBottomSheet)
312326
}
313327
}
328+
329+
// MARK: Voice Input Control
330+
extension EditPhotoRoomHostViewModel {
331+
private func handleMicButtonDidTap() {
332+
toggleLocalMicStateUseCase.execute()
333+
.sink { [weak self] state in
334+
self?.output.send(.voiceInputState(state))
335+
}.store(in: &cancellables)
336+
}
337+
}

PhotoGether/PresentationLayer/PhotoRoomFeature/PhotoRoomFeature/Source/ViewController/PhotoRoomViewController.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public final class PhotoRoomViewController: BaseViewController, ViewControllerCo
5454
bindInput()
5555
bindOutput()
5656
bindNoti()
57-
configureMicButtonState(
57+
micButton.toggleMicState(
5858
viewModel.fetchLocalVideoInputState()
5959
)
6060
}
@@ -110,10 +110,6 @@ public final class PhotoRoomViewController: BaseViewController, ViewControllerCo
110110
navigationView.backgroundColor = PTGColor.gray90.color
111111
}
112112

113-
private func configureMicButtonState(_ isOn: Bool) {
114-
micButton.toggleMicState(isOn)
115-
}
116-
117113
public func bindInput() {
118114
photoRoomBottomView.cameraButtonTapped
119115
.filter { [weak self] in

0 commit comments

Comments
 (0)