From 9a27e5d7bb7fe1cc3c084958efb98e6cf37cd516 Mon Sep 17 00:00:00 2001 From: Mark Feaver Date: Sat, 7 Aug 2021 18:56:59 +1000 Subject: [PATCH 1/2] Made app default to system-defined dark/light mode on first launch --- Session/Meta/AppDelegate.m | 4 ++-- Session/Meta/AppDelegate.swift | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Session/Meta/AppDelegate.m b/Session/Meta/AppDelegate.m index 359320080..29e9e0cda 100644 --- a/Session/Meta/AppDelegate.m +++ b/Session/Meta/AppDelegate.m @@ -194,7 +194,7 @@ static NSTimeInterval launchStartedAt; mainWindow.rootViewController = [LoadingViewController new]; [mainWindow makeKeyAndVisible]; - LKAppMode appMode = [NSUserDefaults.standardUserDefaults integerForKey:@"appMode"]; + LKAppMode appMode = [self getAppModeOrSystemDefault]; [self setCurrentAppMode:appMode]; if (@available(iOS 11, *)) { @@ -245,7 +245,7 @@ static NSTimeInterval launchStartedAt; [self ensureRootViewController]; - LKAppMode appMode = [NSUserDefaults.standardUserDefaults integerForKey:@"appMode"]; + LKAppMode appMode = [self getCurrentAppMode]; [self setCurrentAppMode:appMode]; [AppReadiness runNowOrWhenAppDidBecomeReady:^{ diff --git a/Session/Meta/AppDelegate.swift b/Session/Meta/AppDelegate.swift index 56e4100b2..bb28b0b81 100644 --- a/Session/Meta/AppDelegate.swift +++ b/Session/Meta/AppDelegate.swift @@ -40,4 +40,20 @@ extension AppDelegate { @objc func stopClosedGroupPoller() { 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 + } + } From f0fb4529c83c903d800135df81c12528839d9da5 Mon Sep 17 00:00:00 2001 From: Mark Feaver Date: Sun, 8 Aug 2021 17:57:48 +1000 Subject: [PATCH 2/2] Disabled tableview scroll when swiping to reply in a conversation --- Session/Conversations/ConversationVC+Interaction.swift | 9 +++++++++ Session/Conversations/Message Cells/MessageCell.swift | 7 +++++++ .../Conversations/Message Cells/VisibleMessageCell.swift | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/Session/Conversations/ConversationVC+Interaction.swift b/Session/Conversations/ConversationVC+Interaction.swift index 01d8b320a..1b41def38 100644 --- a/Session/Conversations/ConversationVC+Interaction.swift +++ b/Session/Conversations/ConversationVC+Interaction.swift @@ -468,6 +468,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) { let thread = self.thread diff --git a/Session/Conversations/Message Cells/MessageCell.swift b/Session/Conversations/Message Cells/MessageCell.swift index d013ee3d7..a2d846692 100644 --- a/Session/Conversations/Message Cells/MessageCell.swift +++ b/Session/Conversations/Message Cells/MessageCell.swift @@ -1,5 +1,11 @@ import UIKit +public enum SwipeState { + case began + case ended + case cancelled +} + class MessageCell : UITableViewCell { weak var delegate: MessageCellDelegate? var viewItem: ConversationViewItem? { didSet { update() } } @@ -55,6 +61,7 @@ protocol MessageCellDelegate : AnyObject { func handleViewItemLongPressed(_ viewItem: ConversationViewItem) func handleViewItemTapped(_ viewItem: ConversationViewItem, gestureRecognizer: UITapGestureRecognizer) func handleViewItemDoubleTapped(_ viewItem: ConversationViewItem) + func handleViewItemSwiped(_ viewItem: ConversationViewItem, state: SwipeState) func showFullText(_ viewItem: ConversationViewItem) func openURL(_ url: URL) func handleReplyButtonTapped(for viewItem: ConversationViewItem) diff --git a/Session/Conversations/Message Cells/VisibleMessageCell.swift b/Session/Conversations/Message Cells/VisibleMessageCell.swift index 30cf15727..75f90eb7c 100644 --- a/Session/Conversations/Message Cells/VisibleMessageCell.swift +++ b/Session/Conversations/Message Cells/VisibleMessageCell.swift @@ -466,9 +466,12 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate { } @objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) { + guard let viewItem = viewItem else { return } let viewsToMove = [ bubbleView, profilePictureView, replyButton, timerView, messageStatusImageView ] let translationX = gestureRecognizer.translation(in: self).x.clamp(-CGFloat.greatestFiniteMagnitude, 0) switch gestureRecognizer.state { + case .began: + delegate?.handleViewItemSwiped(viewItem, state: .began) case .changed: // The idea here is to asymptotically approach a maximum drag distance let damping: CGFloat = 20 @@ -486,8 +489,10 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate { previousX = translationX case .ended, .cancelled: if abs(translationX) > VisibleMessageCell.swipeToReplyThreshold { + delegate?.handleViewItemSwiped(viewItem, state: .ended) reply() } else { + delegate?.handleViewItemSwiped(viewItem, state: .cancelled) resetReply() } default: break