suggest PR changes

This commit is contained in:
Mauro Romito 2022-11-23 13:35:05 +01:00
parent bbf43514eb
commit 9dc4b8df82
6 changed files with 32 additions and 21 deletions

View file

@ -43,9 +43,12 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
private var voiceMessageBottomConstraint: NSLayoutConstraint?
private var hostingViewController: VectorHostingController!
private var wysiwygViewModel = WysiwygComposerViewModel(textColor: ThemeService.shared().theme.colors.primaryContent)
private var viewModel: ComposerViewModelProtocol = ComposerViewModel(
initialViewState: ComposerViewState(textFormattingEnabled: RiotSettings.shared.enableWysiwygTextFormatting,
bindings: ComposerBindings(focused: false)))
private var viewModel: ComposerViewModelProtocol!
private var isLandscapePhone: Bool {
let device = UIDevice.current
return device.isPhone && device.orientation.isLandscape
}
// MARK: Public
@ -99,6 +102,9 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
override func awakeFromNib() {
super.awakeFromNib()
viewModel = ComposerViewModel(
initialViewState: ComposerViewState(textFormattingEnabled: RiotSettings.shared.enableWysiwygTextFormatting,
isLandscapePhone: isLandscapePhone, bindings: ComposerBindings(focused: false)))
viewModel.callback = { [weak self] result in
self?.handleViewModelResult(result)
@ -153,6 +159,7 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
},
wysiwygViewModel.$maximised
.dropFirst()
.removeDuplicates()
.sink { [weak self] value in
guard let self = self else { return }
@ -229,6 +236,7 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
}
@objc private func deviceDidRotate(_ notification: Notification) {
viewModel.isLandscapePhone = isLandscapePhone
DispatchQueue.main.async {
self.updateTextViewHeight()
}
@ -342,9 +350,6 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
set {
self.viewModel.textFormattingEnabled = newValue
self.wysiwygViewModel.plainTextMode = !newValue
if !newValue {
self.wysiwygViewModel.maximised = false
}
}
}

View file

@ -32,9 +32,9 @@ enum MockComposerScreenState: MockScreenState, CaseIterable {
let bindings = ComposerBindings(focused: false)
switch self {
case .send: viewModel = ComposerViewModel(initialViewState: ComposerViewState(textFormattingEnabled: true, bindings: bindings))
case .edit: viewModel = ComposerViewModel(initialViewState: ComposerViewState(sendMode: .edit, textFormattingEnabled: true, bindings: bindings))
case .reply: viewModel = ComposerViewModel(initialViewState: ComposerViewState(eventSenderDisplayName: "TestUser", sendMode: .reply, textFormattingEnabled: true, bindings: bindings))
case .send: viewModel = ComposerViewModel(initialViewState: ComposerViewState(textFormattingEnabled: true, isLandscapePhone: false, bindings: bindings))
case .edit: viewModel = ComposerViewModel(initialViewState: ComposerViewState(sendMode: .edit, textFormattingEnabled: true, isLandscapePhone: false, bindings: bindings))
case .reply: viewModel = ComposerViewModel(initialViewState: ComposerViewState(eventSenderDisplayName: "TestUser", sendMode: .reply, textFormattingEnabled: true, isLandscapePhone: false, bindings: bindings))
}
let wysiwygviewModel = WysiwygComposerViewModel(minHeight: 20, maxCompressedHeight: 360)

View file

@ -20,6 +20,7 @@ struct ComposerViewState: BindableState {
var eventSenderDisplayName: String?
var sendMode: ComposerSendMode = .send
var textFormattingEnabled: Bool
var isLandscapePhone: Bool
var placeholder: String?
var bindings: ComposerBindings
@ -47,6 +48,10 @@ extension ComposerViewState {
default: return nil
}
}
var isForcedMinimised: Bool {
isLandscapePhone || !textFormattingEnabled
}
}
struct ComposerBindings {

View file

@ -31,12 +31,6 @@ struct Composer: View {
@Environment(\.theme) private var theme: ThemeSwiftUI
@State private var isActionButtonShowing = false
@State private var isToggleButtonHidden = false
private var isLandscapeIphone: Bool {
let device = UIDevice.current
return device.userInterfaceIdiom == .phone && device.orientation.isLandscape
}
private let horizontalPadding: CGFloat = 12
private let borderHeight: CGFloat = 40
@ -122,7 +116,7 @@ struct Composer: View {
wysiwygViewModel.setup()
}
}
if viewModel.viewState.textFormattingEnabled {
if !viewModel.viewState.isForcedMinimised {
Button {
wysiwygViewModel.maximised.toggle()
} label: {
@ -132,7 +126,6 @@ struct Composer: View {
.frame(width: 16, height: 16)
}
.accessibilityIdentifier(toggleButtonAcccessibilityIdentifier)
.isHidden(isToggleButtonHidden)
.padding(.leading, 12)
.padding(.trailing, 4)
}
@ -204,7 +197,6 @@ struct Composer: View {
self.resizeAnimationDuration = resizeAnimationDuration
self.sendMessageAction = sendMessageAction
self.showSendMediaActions = showSendMediaActions
self._isToggleButtonHidden = State(initialValue: isLandscapeIphone)
}
var body: some View {
@ -238,11 +230,10 @@ struct Composer: View {
}
.padding(.horizontal, horizontalPadding)
.padding(.bottom, 4)
.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
if wysiwygViewModel.maximised, isLandscapeIphone {
.onChange(of: viewModel.viewState.isForcedMinimised) { newValue in
if wysiwygViewModel.maximised && newValue {
wysiwygViewModel.maximised = false
}
isToggleButtonHidden = isLandscapeIphone
}
}
}

View file

@ -63,6 +63,15 @@ final class ComposerViewModel: ComposerViewModelType, ComposerViewModelProtocol
}
}
var isLandscapePhone: Bool {
get {
state.isLandscapePhone
}
set {
state.isLandscapePhone = newValue
}
}
var isFocused: Bool {
state.bindings.focused
}

View file

@ -24,6 +24,7 @@ protocol ComposerViewModelProtocol {
var eventSenderDisplayName: String? { get set }
var placeholder: String? { get set }
var isFocused: Bool { get }
var isLandscapePhone: Bool { get set }
func dismissKeyboard()
func showKeyboard()