mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
LegacyAppDelegate: Add new universal link management methods and handle more precisely spaces not available cases.
This commit is contained in:
parent
62b39c83ea
commit
5909b3b00e
2 changed files with 63 additions and 23 deletions
|
@ -218,6 +218,23 @@ JitsiViewControllerDelegate>
|
|||
*/
|
||||
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment;
|
||||
|
||||
/**
|
||||
Process the fragment part of a vector.im link.
|
||||
|
||||
@param fragment the fragment part of the universal link.
|
||||
@param universalLinkURL the unprocessed the universal link URL (optional).
|
||||
@return YES in case of processing success.
|
||||
*/
|
||||
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment fromURL:(NSURL*)universalLinkURL;
|
||||
|
||||
/**
|
||||
Process the URL of a vector.im link.
|
||||
|
||||
@param universalLinkURL the universal link URL.
|
||||
@return YES in case of processing success.
|
||||
*/
|
||||
- (BOOL)handleUniversalLinkURL:(NSURL*)universalLinkURL;
|
||||
|
||||
#pragma mark - Jitsi call
|
||||
|
||||
/**
|
||||
|
|
|
@ -463,6 +463,8 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
self.pushNotificationStore = [PushNotificationStore new];
|
||||
self.pushNotificationService = [[PushNotificationService alloc] initWithPushNotificationStore:self.pushNotificationStore];
|
||||
self.pushNotificationService.delegate = self;
|
||||
|
||||
self.spaceFeatureUnavailablePresenter = [SpaceFeatureUnavailablePresenter new];
|
||||
|
||||
// Add matrix observers, and initialize matrix sessions if the app is not launched in background.
|
||||
[self initMatrixSessions];
|
||||
|
@ -1214,7 +1216,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
// Continue the registration with the passed nextLink
|
||||
NSLog(@"[AppDelegate] handleUniversalLink. Complete registration with nextLink");
|
||||
NSURL *nextLink = [NSURL URLWithString:queryParams[@"nextLink"]];
|
||||
[self handleUniversalLinkFragment:nextLink.fragment];
|
||||
[self handleUniversalLinkFragment:nextLink.fragment fromURL:nextLink];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1240,10 +1242,15 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
return YES;
|
||||
}
|
||||
|
||||
return [self handleUniversalLinkFragment:webURL.fragment];
|
||||
return [self handleUniversalLinkFragment:webURL.fragment fromURL:webURL];
|
||||
}
|
||||
|
||||
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment
|
||||
{
|
||||
return [self handleUniversalLinkFragment:fragment fromURL:nil];
|
||||
}
|
||||
|
||||
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment fromURL:(NSURL*)universalLinkURL
|
||||
{
|
||||
BOOL continueUserActivity = NO;
|
||||
MXKAccountManager *accountManager = [MXKAccountManager sharedManager];
|
||||
|
@ -1327,19 +1334,32 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
if (account)
|
||||
{
|
||||
NSString *roomId = roomIdOrAlias;
|
||||
MXRoom *room;
|
||||
|
||||
// Translate the alias into the room id
|
||||
if ([roomIdOrAlias hasPrefix:@"#"])
|
||||
{
|
||||
MXRoom *room = [account.mxSession roomWithAlias:roomIdOrAlias];
|
||||
room = [account.mxSession roomWithAlias:roomIdOrAlias];
|
||||
if (room)
|
||||
{
|
||||
roomId = room.roomId;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
room = [account.mxSession roomWithRoomId:roomId];
|
||||
}
|
||||
|
||||
// Open the room page
|
||||
[self showRoom:roomId andEventId:eventId withMatrixSession:account.mxSession];
|
||||
if (room.summary.roomType == MXRoomTypeSpace)
|
||||
{
|
||||
// Indicates that spaces are not supported
|
||||
[self.spaceFeatureUnavailablePresenter presentSpaceLinkUnavailableWith:universalLinkURL from:self.presentedViewController animated:YES];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Open the room page
|
||||
[self showRoom:roomId andEventId:eventId withMatrixSession:account.mxSession];
|
||||
}
|
||||
|
||||
continueUserActivity = YES;
|
||||
}
|
||||
|
@ -1389,7 +1409,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
{
|
||||
universalLinkFragmentPendingRoomAlias = @{roomId: roomIdOrAlias};
|
||||
|
||||
[self handleUniversalLinkFragment:newUniversalLinkFragment];
|
||||
[self handleUniversalLinkFragment:newUniversalLinkFragment fromURL:universalLinkURL];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1427,7 +1447,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
if (notif.object == account.mxSession && account.mxSession.state == MXSessionStateRunning)
|
||||
{
|
||||
NSLog(@"[AppDelegate] Universal link: The session is running. Retry the link");
|
||||
[self handleUniversalLinkFragment:fragment];
|
||||
[self handleUniversalLinkFragment:fragment fromURL:universalLinkURL];
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
@ -1488,7 +1508,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
if ([universalLinkFragmentPending isEqualToString:fragment])
|
||||
{
|
||||
NSLog(@"[AppDelegate] Universal link: The user is now logged in. Retry the link");
|
||||
[self handleUniversalLinkFragment:fragment];
|
||||
[self handleUniversalLinkFragment:fragment fromURL:universalLinkURL];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
@ -1553,7 +1573,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
if ([universalLinkFragmentPending isEqualToString:fragment])
|
||||
{
|
||||
NSLog(@"[AppDelegate] Universal link: The user is now logged in. Retry the link");
|
||||
[self handleUniversalLinkFragment:fragment];
|
||||
[self handleUniversalLinkFragment:fragment fromURL:universalLinkURL];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
@ -1577,6 +1597,14 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
return continueUserActivity;
|
||||
}
|
||||
|
||||
- (BOOL)handleUniversalLinkURL:(NSURL*)universalLinkURL
|
||||
{
|
||||
// iOS Patch: fix vector.im urls before using it
|
||||
NSURL *fixedURL = [Tools fixURLWithSeveralHashKeys:universalLinkURL];
|
||||
|
||||
return [self handleUniversalLinkFragment:fixedURL.fragment fromURL:universalLinkURL];
|
||||
}
|
||||
|
||||
- (void)resetPendingUniversalLink
|
||||
{
|
||||
universalLinkFragmentPending = nil;
|
||||
|
@ -2746,10 +2774,17 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
{
|
||||
MXRoom *room = [mxSession roomWithRoomId:roomId];
|
||||
|
||||
// Indicates that spaces are not supported
|
||||
if (room.summary.roomType == MXRoomTypeSpace)
|
||||
{
|
||||
// Indicates that spaces are not supported
|
||||
[self showSpaceLinkNotAvailable];
|
||||
if (room.summary.membership == MXMembershipInvite)
|
||||
{
|
||||
[self.spaceFeatureUnavailablePresenter presentInvitesUnavailableFrom:self.presentedViewController animated:YES];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.spaceFeatureUnavailablePresenter presentOpenSpaceUnavailableFrom:self.presentedViewController animated:YES];
|
||||
}
|
||||
|
||||
if (completion)
|
||||
{
|
||||
|
@ -4653,16 +4688,4 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
|
|||
return [authVC continueSSOLoginWithToken:loginToken txnId:txnId];
|
||||
}
|
||||
|
||||
#pragma mark - Spaces
|
||||
|
||||
- (void)showSpaceLinkNotAvailable
|
||||
{
|
||||
if (!self.spaceFeatureUnavailablePresenter)
|
||||
{
|
||||
self.spaceFeatureUnavailablePresenter = [SpaceFeatureUnavailablePresenter new];
|
||||
}
|
||||
|
||||
[self.spaceFeatureUnavailablePresenter presentSpaceLinkUnavailableFrom:self animated:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in a new issue