full screen improvements

This commit is contained in:
Mauro Romito 2022-11-08 16:50:44 +01:00
parent 9993e533c8
commit 0e00b30f8d
5 changed files with 62 additions and 12 deletions

View file

@ -159,16 +159,29 @@ extension RoomViewController {
if state,
roomInputToolbarContainer.superview == self.view,
let view = self.navigationController?.navigationController?.view {
roomInputToolbarContainer.removeFromSuperview()
view.addSubview(roomInputToolbarContainer)
roomInputToolbarContainer.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true
roomInputToolbarContainer.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true
roomInputToolbarContainer.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
} else if roomInputToolbarContainer.superview != self.view {
roomInputToolbarContainer.removeFromSuperview()
self.view.insertSubview(roomInputToolbarContainer, belowSubview: overlayContainerView)
NSLayoutConstraint.activate(toolbarContainerConstraints)
roomInputToolbarContainerBottomConstraint.isActive = true
let originalRect = roomInputToolbarContainer.convert(roomInputToolbarContainer.frame, to: view)
self.roomInputToolbarContainer.removeFromSuperview()
let dimmingView = UIView(frame: view.frame)
dimmingView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
view.addSubview(dimmingView)
dimmingView.addSubview(self.roomInputToolbarContainer)
roomInputToolbarContainer.frame = originalRect
self.roomInputToolbarContainer.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
self.roomInputToolbarContainer.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
self.roomInputToolbarContainer.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
UIView.animate(withDuration: 0.3) {
view.layoutIfNeeded()
}
} else {
let superView = self.roomInputToolbarContainer.superview
self.roomInputToolbarContainer.removeFromSuperview()
superView?.removeFromSuperview()
self.view.insertSubview(self.roomInputToolbarContainer, belowSubview: self.overlayContainerView)
NSLayoutConstraint.activate(self.toolbarContainerConstraints)
self.roomInputToolbarContainerBottomConstraint.isActive = true
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}
}
}

View file

@ -32,11 +32,19 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
// MARK: - Properties
// MARK: Private
private var keyboardHeight: CGFloat = .zero {
didSet {
let height = UIScreen.main.bounds.height
let finalHeight = height - keyboardHeight - 138
// TODO: Set the maxHeight in the wysiwygViewModel once exposed
return
}
}
private var voiceMessageToolbarView: VoiceMessageToolbarView?
private var cancellables = Set<AnyCancellable>()
private var heightConstraint: NSLayoutConstraint!
private var hostingViewController: VectorHostingController!
private var wysiwygViewModel = WysiwygComposerViewModel(maxHeight: 700, textColor: ThemeService.shared().theme.colors.primaryContent)
private var wysiwygViewModel = WysiwygComposerViewModel(textColor: ThemeService.shared().theme.colors.primaryContent)
private var viewModel: ComposerViewModelProtocol = ComposerViewModel(initialViewState: ComposerViewState(bindings: ComposerBindings(focused: false)))
// MARK: Public
@ -118,12 +126,30 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
wysiwygViewModel.$maximised
.removeDuplicates()
.sink { [weak self] value in
self?.toolbarViewDelegate?.didChangeMaximisedState(value)
guard let self = self else { return }
self.toolbarViewDelegate?.didChangeMaximisedState(value)
self.hostingViewController.view.layer.cornerRadius = value ? 20 : 0
if value {
self.viewModel.showKeyboard()
}
}
]
update(theme: ThemeService.shared().theme)
registerThemeServiceDidChangeThemeNotification()
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
}
@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
keyboardHeight = keyboardRectangle.height
}
}
override func customizeRendering() {

View file

@ -83,6 +83,12 @@ struct Composer: View {
var body: some View {
VStack(spacing: 8) {
if wysiwygViewModel.maximised {
RoundedRectangle(cornerRadius: 4)
.fill(theme.colors.quinaryContent)
.frame(width: 36, height: 5)
.padding(.top, 10)
}
if viewModel.viewState.textFormattingEnabled {
composerContainer
}

View file

@ -77,4 +77,8 @@ final class ComposerViewModel: ComposerViewModelType, ComposerViewModelProtocol
func dismissKeyboard() {
state.bindings.focused = false
}
func showKeyboard() {
state.bindings.focused = true
}
}

View file

@ -25,4 +25,5 @@ protocol ComposerViewModelProtocol {
var placeholder: String? { get set }
func dismissKeyboard()
func showKeyboard()
}