diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 18e9b3bf..7c8baae3 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -130,9 +130,9 @@ class ChatListController extends State { void _processIncomingUris(String text) async { if (text == null) return; VRouter.of(context).to('/rooms'); - text = text.replaceFirst('im.fluffychat://', 'matrix:'); - UrlLauncher(context, text).openMatrixToUrl(); - return; + WidgetsBinding.instance.addPostFrameCallback((_) { + UrlLauncher(context, text).openMatrixToUrl(); + }); } void _initReceiveSharingIntent() { diff --git a/lib/pages/new_private_chat/new_private_chat_view.dart b/lib/pages/new_private_chat/new_private_chat_view.dart index 09102dbe..3f79d46e 100644 --- a/lib/pages/new_private_chat/new_private_chat_view.dart +++ b/lib/pages/new_private_chat/new_private_chat_view.dart @@ -83,7 +83,7 @@ class NewPrivateChatView extends StatelessWidget { decoration: InputDecoration( labelText: L10n.of(context).typeInInviteLinkManually, hintText: '@username', - prefixText: 'https://matrix.to/#/', + prefixText: 'matrix.to/#/', suffixIcon: IconButton( icon: const Icon(Icons.send_outlined), onPressed: controller.submitAction, diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 05f81e94..bc2e6dff 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -87,6 +87,11 @@ class UrlLauncher { void openMatrixToUrl() async { final matrix = Matrix.of(context); + final url = this.url.replaceFirst( + AppConfig.deepLinkPrefix, + AppConfig.inviteLinkPrefix, + ); + // The identifier might be a matrix.to url and needs escaping. Or, it might have multiple // identifiers (room id & event id), or it might also have a query part. // All this needs parsing. @@ -135,6 +140,14 @@ class UrlLauncher { VRouter.of(context).toSegments(['rooms', room.id]); } return; + } else { + await showModalBottomSheet( + context: context, + builder: (c) => PublicRoomBottomSheet( + roomAlias: identityParts.primaryIdentifier, + outerContext: context, + ), + ); } if (roomIdOrAlias.sigil == '!') { if (await showOkCancelAlertDialog( @@ -163,14 +176,6 @@ class UrlLauncher { VRouter.of(context).toSegments(['rooms', response.result]); } } - } else { - await showModalBottomSheet( - context: context, - builder: (c) => PublicRoomBottomSheet( - roomAlias: identityParts.primaryIdentifier, - outerContext: context, - ), - ); } } else if (identityParts.primaryIdentifier.sigil == '@') { await showModalBottomSheet(