Merge branch 'charlesmchen/conversationPresentation'
This commit is contained in:
commit
9f803fa440
@ -442,9 +442,9 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
||||
viewController.attachment = attachment;
|
||||
UINavigationController *navigationController =
|
||||
[[UINavigationController alloc] initWithRootViewController:viewController];
|
||||
[[[Environment getCurrent] signalsViewController] presentTopLevelModalViewController:navigationController
|
||||
animateDismissal:NO
|
||||
animatePresentation:YES];
|
||||
[[[Environment getCurrent] homeViewController] presentTopLevelModalViewController:navigationController
|
||||
animateDismissal:NO
|
||||
animatePresentation:YES];
|
||||
}
|
||||
|
||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
||||
@ -529,7 +529,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
||||
// If app has not re-entered active, show screen protection if necessary.
|
||||
[self showScreenProtection];
|
||||
}
|
||||
[[[Environment getCurrent] signalsViewController] updateInboxCountLabel];
|
||||
[[[Environment getCurrent] homeViewController] updateInboxCountLabel];
|
||||
[application endBackgroundTask:bgTask];
|
||||
});
|
||||
}
|
||||
@ -542,7 +542,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
||||
performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem
|
||||
completionHandler:(void (^)(BOOL succeeded))completionHandler {
|
||||
if ([TSAccountManager isRegistered]) {
|
||||
[[Environment getCurrent].signalsViewController showNewConversationView];
|
||||
[[Environment getCurrent].homeViewController showNewConversationView];
|
||||
completionHandler(YES);
|
||||
} else {
|
||||
UIAlertController *controller =
|
||||
@ -555,12 +555,12 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
||||
handler:^(UIAlertAction *_Nonnull action){
|
||||
|
||||
}]];
|
||||
[[Environment getCurrent]
|
||||
.signalsViewController.presentedViewController presentViewController:controller
|
||||
animated:YES
|
||||
completion:^{
|
||||
completionHandler(NO);
|
||||
}];
|
||||
UIViewController *fromViewController = [[UIApplication sharedApplication] frontmostViewController];
|
||||
[fromViewController presentViewController:controller
|
||||
animated:YES
|
||||
completion:^{
|
||||
completionHandler(NO);
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -544,6 +544,9 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
||||
keyboardOnViewAppearing:(BOOL)keyboardOnViewAppearing
|
||||
callOnViewAppearing:(BOOL)callOnViewAppearing
|
||||
{
|
||||
// At most one.
|
||||
OWSAssert(!keyboardOnViewAppearing || !callOnViewAppearing);
|
||||
|
||||
if (callOnViewAppearing) {
|
||||
keyboardOnViewAppearing = NO;
|
||||
}
|
||||
|
||||
@ -743,6 +743,9 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
|
||||
keyboardOnViewAppearing:(BOOL)keyboardOnViewAppearing
|
||||
callOnViewAppearing:(BOOL)callOnViewAppearing
|
||||
{
|
||||
// At most one.
|
||||
OWSAssert(!keyboardOnViewAppearing || !callOnViewAppearing);
|
||||
|
||||
if (thread == nil) {
|
||||
OWSFail(@"Thread unexpectedly nil");
|
||||
return;
|
||||
|
||||
@ -625,7 +625,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
[self dismissViewControllerAnimated:YES
|
||||
completion:^() {
|
||||
[Environment messageIdentifier:recipientId withCompose:YES];
|
||||
[Environment presentConversationForRecipientId:recipientId withCompose:YES];
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
@ -459,7 +459,7 @@ const NSUInteger kNewGroupViewControllerAvatarWidth = 68;
|
||||
[self dismissViewControllerAnimated:YES
|
||||
completion:^{
|
||||
// Pop to new group thread.
|
||||
[Environment messageGroup:thread];
|
||||
[Environment presentConversationForThread:thread];
|
||||
}];
|
||||
|
||||
});
|
||||
@ -478,7 +478,7 @@ const NSUInteger kNewGroupViewControllerAvatarWidth = 68;
|
||||
failedMessageType:TSErrorMessageGroupCreationFailed]
|
||||
save];
|
||||
|
||||
[Environment messageGroup:thread];
|
||||
[Environment presentConversationForThread:thread];
|
||||
}];
|
||||
});
|
||||
};
|
||||
|
||||
@ -67,7 +67,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[ThreadUtil addThreadToProfileWhitelistIfEmptyContactThread:thread];
|
||||
[ThreadUtil sendMessageWithAttachment:self.attachment inThread:thread messageSender:self.messageSender];
|
||||
|
||||
[Environment messageThreadId:thread.uniqueId];
|
||||
[Environment presentConversationForRecipientId:thread.uniqueId];
|
||||
}
|
||||
|
||||
- (BOOL)canSelectBlockedContact
|
||||
|
||||
@ -408,12 +408,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
{
|
||||
OWSAssert(recipientId.length > 0);
|
||||
|
||||
[Environment messageIdentifier:recipientId withCompose:YES];
|
||||
[Environment presentConversationForRecipientId:recipientId withCompose:YES];
|
||||
}
|
||||
|
||||
- (void)callMember:(NSString *)recipientId
|
||||
{
|
||||
[Environment callUserWithIdentifier:recipientId];
|
||||
[Environment callRecipientId:recipientId];
|
||||
}
|
||||
|
||||
- (void)showSafetyNumberView:(NSString *)recipientId
|
||||
|
||||
@ -37,7 +37,7 @@ extension CallUIAdaptee {
|
||||
let callViewController = CallViewController(call: call)
|
||||
callViewController.modalTransitionStyle = .crossDissolve
|
||||
|
||||
guard let presentingViewController = Environment.getCurrent().signalsViewController else {
|
||||
guard let presentingViewController = Environment.getCurrent().homeViewController else {
|
||||
owsFail("in \(#function) view controller unexpectedly nil")
|
||||
return
|
||||
}
|
||||
|
||||
@ -49,7 +49,7 @@
|
||||
@property (nonatomic, readonly) PropertyListPreferences *preferences;
|
||||
|
||||
|
||||
@property (nonatomic, readonly) HomeViewController *signalsViewController;
|
||||
@property (nonatomic, readonly) HomeViewController *homeViewController;
|
||||
@property (nonatomic, readonly, weak) UINavigationController *signUpFlowNavigationController;
|
||||
|
||||
+ (Environment *)getCurrent;
|
||||
@ -59,12 +59,12 @@
|
||||
|
||||
+ (void)resetAppData;
|
||||
|
||||
- (void)setHomeViewController:(HomeViewController *)signalsViewController;
|
||||
- (void)setHomeViewController:(HomeViewController *)homeViewController;
|
||||
- (void)setSignUpFlowNavigationController:(UINavigationController *)signUpFlowNavigationController;
|
||||
|
||||
+ (void)messageThreadId:(NSString *)threadId;
|
||||
+ (void)messageIdentifier:(NSString *)identifier withCompose:(BOOL)compose;
|
||||
+ (void)callUserWithIdentifier:(NSString *)identifier;
|
||||
+ (void)messageGroup:(TSGroupThread *)groupThread;
|
||||
+ (void)presentConversationForRecipientId:(NSString *)recipientId;
|
||||
+ (void)presentConversationForRecipientId:(NSString *)recipientId withCompose:(BOOL)compose;
|
||||
+ (void)callRecipientId:(NSString *)recipientId;
|
||||
+ (void)presentConversationForThread:(TSGroupThread *)groupThread;
|
||||
|
||||
@end
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#import "TSContactThread.h"
|
||||
#import "TSGroupThread.h"
|
||||
#import <SignalServiceKit/ContactsUpdater.h>
|
||||
#import <SignalServiceKit/Threading.h>
|
||||
|
||||
static Environment *environment = nil;
|
||||
|
||||
@ -171,69 +172,82 @@ static Environment *environment = nil;
|
||||
return _preferences;
|
||||
}
|
||||
|
||||
- (void)setHomeViewController:(HomeViewController *)signalsViewController
|
||||
- (void)setHomeViewController:(HomeViewController *)homeViewController
|
||||
{
|
||||
_signalsViewController = signalsViewController;
|
||||
_homeViewController = homeViewController;
|
||||
}
|
||||
|
||||
- (void)setSignUpFlowNavigationController:(UINavigationController *)navigationController {
|
||||
_signUpFlowNavigationController = navigationController;
|
||||
}
|
||||
|
||||
+ (void)messageThreadId:(NSString *)threadId {
|
||||
TSThread *thread = [TSThread fetchObjectWithUniqueID:threadId];
|
||||
+ (void)presentConversationForRecipientId:(NSString *)recipientId
|
||||
{
|
||||
[self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:YES callOnViewAppearing:NO];
|
||||
}
|
||||
|
||||
+ (void)presentConversationForRecipientId:(NSString *)recipientId withCompose:(BOOL)compose
|
||||
{
|
||||
[self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:compose callOnViewAppearing:NO];
|
||||
}
|
||||
|
||||
+ (void)callRecipientId:(NSString *)recipientId
|
||||
{
|
||||
[self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:NO callOnViewAppearing:YES];
|
||||
}
|
||||
|
||||
+ (void)presentConversationForRecipientId:(NSString *)recipientId
|
||||
keyboardOnViewAppearing:(BOOL)keyboardOnViewAppearing
|
||||
callOnViewAppearing:(BOOL)callOnViewAppearing
|
||||
{
|
||||
// At most one.
|
||||
OWSAssert(!keyboardOnViewAppearing || !callOnViewAppearing);
|
||||
|
||||
DispatchMainThreadSafe(^{
|
||||
__block TSThread *thread = nil;
|
||||
[[TSStorageManager sharedManager].dbReadWriteConnection
|
||||
readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
||||
thread = [TSContactThread getOrCreateThreadWithContactId:recipientId transaction:transaction];
|
||||
}];
|
||||
[self presentConversationForThread:thread
|
||||
keyboardOnViewAppearing:keyboardOnViewAppearing
|
||||
callOnViewAppearing:callOnViewAppearing];
|
||||
});
|
||||
}
|
||||
|
||||
+ (void)presentConversationForThread:(TSThread *)thread
|
||||
{
|
||||
[self presentConversationForThread:thread keyboardOnViewAppearing:YES callOnViewAppearing:NO];
|
||||
}
|
||||
|
||||
+ (void)presentConversationForThread:(TSThread *)thread
|
||||
keyboardOnViewAppearing:(BOOL)keyboardOnViewAppearing
|
||||
callOnViewAppearing:(BOOL)callOnViewAppearing
|
||||
{
|
||||
// At most one.
|
||||
OWSAssert(!keyboardOnViewAppearing || !callOnViewAppearing);
|
||||
|
||||
if (!thread) {
|
||||
DDLogWarn(@"We get UILocalNotifications with unknown threadId: %@", threadId);
|
||||
OWSFail(@"%@ Can't present nil thread.", self.tag);
|
||||
return;
|
||||
}
|
||||
|
||||
if ([thread isGroupThread]) {
|
||||
[self messageGroup:(TSGroupThread *)thread];
|
||||
} else {
|
||||
Environment *env = [self getCurrent];
|
||||
HomeViewController *vc = env.signalsViewController;
|
||||
UIViewController *topvc = vc.navigationController.topViewController;
|
||||
DispatchMainThreadSafe(^{
|
||||
UIViewController *frontmostVC = [[UIApplication sharedApplication] frontmostViewController];
|
||||
|
||||
if ([topvc isKindOfClass:[ConversationViewController class]]) {
|
||||
ConversationViewController *mvc = (ConversationViewController *)topvc;
|
||||
if ([mvc.thread.uniqueId isEqualToString:threadId]) {
|
||||
[mvc popKeyBoard];
|
||||
if ([frontmostVC isKindOfClass:[ConversationViewController class]]) {
|
||||
ConversationViewController *conversationVC = (ConversationViewController *)frontmostVC;
|
||||
if ([conversationVC.thread.uniqueId isEqualToString:thread.uniqueId]) {
|
||||
[conversationVC popKeyBoard];
|
||||
return;
|
||||
}
|
||||
}
|
||||
[self messageIdentifier:((TSContactThread *)thread).contactIdentifier withCompose:YES];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)messageIdentifier:(NSString *)identifier withCompose:(BOOL)compose {
|
||||
Environment *env = [self getCurrent];
|
||||
HomeViewController *vc = env.signalsViewController;
|
||||
|
||||
[[TSStorageManager sharedManager].dbReadWriteConnection
|
||||
asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
||||
TSThread *thread = [TSContactThread getOrCreateThreadWithContactId:identifier transaction:transaction];
|
||||
[vc presentThread:thread keyboardOnViewAppearing:YES callOnViewAppearing:NO];
|
||||
}];
|
||||
}
|
||||
|
||||
+ (void)callUserWithIdentifier:(NSString *)identifier
|
||||
{
|
||||
Environment *env = [self getCurrent];
|
||||
HomeViewController *vc = env.signalsViewController;
|
||||
|
||||
[[TSStorageManager sharedManager].dbReadWriteConnection
|
||||
asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
||||
TSThread *thread = [TSContactThread getOrCreateThreadWithContactId:identifier transaction:transaction];
|
||||
[vc presentThread:thread keyboardOnViewAppearing:NO callOnViewAppearing:YES];
|
||||
}];
|
||||
}
|
||||
|
||||
+ (void)messageGroup:(TSGroupThread *)groupThread {
|
||||
Environment *env = [self getCurrent];
|
||||
HomeViewController *vc = env.signalsViewController;
|
||||
|
||||
[vc presentThread:groupThread keyboardOnViewAppearing:YES callOnViewAppearing:NO];
|
||||
Environment *env = [self getCurrent];
|
||||
[env.homeViewController presentThread:thread
|
||||
keyboardOnViewAppearing:keyboardOnViewAppearing
|
||||
callOnViewAppearing:callOnViewAppearing];
|
||||
});
|
||||
}
|
||||
|
||||
+ (void)resetAppData {
|
||||
|
||||
@ -118,7 +118,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
|
||||
NSString *threadId = notification.userInfo[Signal_Thread_UserInfo_Key];
|
||||
if (threadId && [TSThread fetchObjectWithUniqueID:threadId]) {
|
||||
[Environment messageThreadId:threadId];
|
||||
[Environment presentConversationForRecipientId:threadId];
|
||||
}
|
||||
}
|
||||
|
||||
@ -213,12 +213,12 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
completionHandler();
|
||||
} else if ([identifier isEqualToString:PushManagerActionsShowThread]) {
|
||||
NSString *threadId = notification.userInfo[Signal_Thread_UserInfo_Key];
|
||||
[Environment messageThreadId:threadId];
|
||||
[Environment presentConversationForRecipientId:threadId];
|
||||
completionHandler();
|
||||
} else {
|
||||
OWSFail(@"%@ Unhandled action with identifier: %@", self.tag, identifier);
|
||||
NSString *threadId = notification.userInfo[Signal_Thread_UserInfo_Key];
|
||||
[Environment messageThreadId:threadId];
|
||||
[Environment presentConversationForRecipientId:threadId];
|
||||
completionHandler();
|
||||
}
|
||||
}
|
||||
@ -234,7 +234,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
[thread markAllAsReadWithTransaction:transaction];
|
||||
}
|
||||
completionBlock:^{
|
||||
[[[Environment getCurrent] signalsViewController] updateInboxCountLabel];
|
||||
[[[Environment getCurrent] homeViewController] updateInboxCountLabel];
|
||||
[self cancelNotificationsWithThreadId:threadId];
|
||||
|
||||
completionHandler();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user