Merge branch 'charlesmchen/conversationPresentation'

pull/1/head
Matthew Chen 8 years ago
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];
if (!thread) {
DDLogWarn(@"We get UILocalNotifications with unknown threadId: %@", threadId);
return;
}
+ (void)presentConversationForRecipientId:(NSString *)recipientId
{
[self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:YES callOnViewAppearing:NO];
}
if ([thread isGroupThread]) {
[self messageGroup:(TSGroupThread *)thread];
} else {
Environment *env = [self getCurrent];
HomeViewController *vc = env.signalsViewController;
UIViewController *topvc = vc.navigationController.topViewController;
if ([topvc isKindOfClass:[ConversationViewController class]]) {
ConversationViewController *mvc = (ConversationViewController *)topvc;
if ([mvc.thread.uniqueId isEqualToString:threadId]) {
[mvc popKeyBoard];
return;
}
}
[self messageIdentifier:((TSContactThread *)thread).contactIdentifier withCompose:YES];
}
+ (void)presentConversationForRecipientId:(NSString *)recipientId withCompose:(BOOL)compose
{
[self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:compose callOnViewAppearing:NO];
}
+ (void)messageIdentifier:(NSString *)identifier withCompose:(BOOL)compose {
Environment *env = [self getCurrent];
HomeViewController *vc = env.signalsViewController;
+ (void)callRecipientId:(NSString *)recipientId
{
[self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:NO callOnViewAppearing:YES];
}
[[TSStorageManager sharedManager].dbReadWriteConnection
asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
TSThread *thread = [TSContactThread getOrCreateThreadWithContactId:identifier transaction:transaction];
[vc presentThread:thread keyboardOnViewAppearing:YES callOnViewAppearing:NO];
}];
+ (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)callUserWithIdentifier:(NSString *)identifier
+ (void)presentConversationForThread:(TSThread *)thread
{
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];
}];
[self presentConversationForThread:thread keyboardOnViewAppearing:YES callOnViewAppearing:NO];
}
+ (void)messageGroup:(TSGroupThread *)groupThread {
Environment *env = [self getCurrent];
HomeViewController *vc = env.signalsViewController;
+ (void)presentConversationForThread:(TSThread *)thread
keyboardOnViewAppearing:(BOOL)keyboardOnViewAppearing
callOnViewAppearing:(BOOL)callOnViewAppearing
{
// At most one.
OWSAssert(!keyboardOnViewAppearing || !callOnViewAppearing);
if (!thread) {
OWSFail(@"%@ Can't present nil thread.", self.tag);
return;
}
DispatchMainThreadSafe(^{
UIViewController *frontmostVC = [[UIApplication sharedApplication] frontmostViewController];
if ([frontmostVC isKindOfClass:[ConversationViewController class]]) {
ConversationViewController *conversationVC = (ConversationViewController *)frontmostVC;
if ([conversationVC.thread.uniqueId isEqualToString:thread.uniqueId]) {
[conversationVC popKeyBoard];
return;
}
}
[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…
Cancel
Save