mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
full screen improvements
This commit is contained in:
parent
9993e533c8
commit
0e00b30f8d
5 changed files with 62 additions and 12 deletions
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -77,4 +77,8 @@ final class ComposerViewModel: ComposerViewModelType, ComposerViewModelProtocol
|
|||
func dismissKeyboard() {
|
||||
state.bindings.focused = false
|
||||
}
|
||||
|
||||
func showKeyboard() {
|
||||
state.bindings.focused = true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,4 +25,5 @@ protocol ComposerViewModelProtocol {
|
|||
var placeholder: String? { get set }
|
||||
|
||||
func dismissKeyboard()
|
||||
func showKeyboard()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue