LegacyAppDelegate: Add new universal link management methods and handle more precisely spaces not available cases.

This commit is contained in:
SBiOSoftWhare 2021-05-04 10:41:02 +02:00
parent 62b39c83ea
commit 5909b3b00e
2 changed files with 63 additions and 23 deletions

View file

@ -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
/**

View file

@ -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