Merge branch 'dev' of https://github.com/oxen-io/session-ios into unsend-message

pull/484/head
ryanzhao 4 years ago
commit 5f2890a1fc

@ -469,6 +469,15 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
} }
} }
func handleViewItemSwiped(_ viewItem: ConversationViewItem, state: SwipeState) {
switch state {
case .began:
messagesTableView.isScrollEnabled = false
case .ended, .cancelled:
messagesTableView.isScrollEnabled = true
}
}
func showFailedMessageSheet(for tsMessage: TSOutgoingMessage) { func showFailedMessageSheet(for tsMessage: TSOutgoingMessage) {
let thread = self.thread let thread = self.thread
let error = tsMessage.mostRecentFailureText let error = tsMessage.mostRecentFailureText

@ -1,5 +1,11 @@
import UIKit import UIKit
public enum SwipeState {
case began
case ended
case cancelled
}
class MessageCell : UITableViewCell { class MessageCell : UITableViewCell {
weak var delegate: MessageCellDelegate? weak var delegate: MessageCellDelegate?
var viewItem: ConversationViewItem? { didSet { update() } } var viewItem: ConversationViewItem? { didSet { update() } }
@ -55,6 +61,7 @@ protocol MessageCellDelegate : AnyObject {
func handleViewItemLongPressed(_ viewItem: ConversationViewItem) func handleViewItemLongPressed(_ viewItem: ConversationViewItem)
func handleViewItemTapped(_ viewItem: ConversationViewItem, gestureRecognizer: UITapGestureRecognizer) func handleViewItemTapped(_ viewItem: ConversationViewItem, gestureRecognizer: UITapGestureRecognizer)
func handleViewItemDoubleTapped(_ viewItem: ConversationViewItem) func handleViewItemDoubleTapped(_ viewItem: ConversationViewItem)
func handleViewItemSwiped(_ viewItem: ConversationViewItem, state: SwipeState)
func showFullText(_ viewItem: ConversationViewItem) func showFullText(_ viewItem: ConversationViewItem)
func openURL(_ url: URL) func openURL(_ url: URL)
func handleReplyButtonTapped(for viewItem: ConversationViewItem) func handleReplyButtonTapped(for viewItem: ConversationViewItem)

@ -475,9 +475,12 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate {
} }
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) { @objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
guard let viewItem = viewItem else { return }
let viewsToMove = [ bubbleView, profilePictureView, replyButton, timerView, messageStatusImageView ] let viewsToMove = [ bubbleView, profilePictureView, replyButton, timerView, messageStatusImageView ]
let translationX = gestureRecognizer.translation(in: self).x.clamp(-CGFloat.greatestFiniteMagnitude, 0) let translationX = gestureRecognizer.translation(in: self).x.clamp(-CGFloat.greatestFiniteMagnitude, 0)
switch gestureRecognizer.state { switch gestureRecognizer.state {
case .began:
delegate?.handleViewItemSwiped(viewItem, state: .began)
case .changed: case .changed:
// The idea here is to asymptotically approach a maximum drag distance // The idea here is to asymptotically approach a maximum drag distance
let damping: CGFloat = 20 let damping: CGFloat = 20
@ -495,8 +498,10 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate {
previousX = translationX previousX = translationX
case .ended, .cancelled: case .ended, .cancelled:
if abs(translationX) > VisibleMessageCell.swipeToReplyThreshold { if abs(translationX) > VisibleMessageCell.swipeToReplyThreshold {
delegate?.handleViewItemSwiped(viewItem, state: .ended)
reply() reply()
} else { } else {
delegate?.handleViewItemSwiped(viewItem, state: .cancelled)
resetReply() resetReply()
} }
default: break default: break

@ -194,7 +194,7 @@ static NSTimeInterval launchStartedAt;
mainWindow.rootViewController = [LoadingViewController new]; mainWindow.rootViewController = [LoadingViewController new];
[mainWindow makeKeyAndVisible]; [mainWindow makeKeyAndVisible];
LKAppMode appMode = [NSUserDefaults.standardUserDefaults integerForKey:@"appMode"]; LKAppMode appMode = [self getAppModeOrSystemDefault];
[self setCurrentAppMode:appMode]; [self setCurrentAppMode:appMode];
if (@available(iOS 11, *)) { if (@available(iOS 11, *)) {
@ -245,7 +245,7 @@ static NSTimeInterval launchStartedAt;
[self ensureRootViewController]; [self ensureRootViewController];
LKAppMode appMode = [NSUserDefaults.standardUserDefaults integerForKey:@"appMode"]; LKAppMode appMode = [self getCurrentAppMode];
[self setCurrentAppMode:appMode]; [self setCurrentAppMode:appMode];
[AppReadiness runNowOrWhenAppDidBecomeReady:^{ [AppReadiness runNowOrWhenAppDidBecomeReady:^{

@ -40,4 +40,20 @@ extension AppDelegate {
@objc func stopClosedGroupPoller() { @objc func stopClosedGroupPoller() {
ClosedGroupPoller.shared.stop() ClosedGroupPoller.shared.stop()
} }
@objc func getAppModeOrSystemDefault() -> AppMode {
let userDefaults = UserDefaults.standard
guard userDefaults.dictionaryRepresentation().keys.contains("appMode") else {
if #available(iOS 13.0, *) {
return UITraitCollection.current.userInterfaceStyle == .dark ? .dark : .light
} else {
return .light
}
}
let mode = userDefaults.integer(forKey: "appMode")
return AppMode(rawValue: mode) ?? .light
}
} }

Loading…
Cancel
Save