diff --git a/lib/src/services/intent/links.intent.dart b/lib/src/services/intent/links.intent.dart index cf4e7fa..425d60a 100644 --- a/lib/src/services/intent/links.intent.dart +++ b/lib/src/services/intent/links.intent.dart @@ -19,17 +19,17 @@ import 'package:twonly/src/views/components/alert_dialog.dart'; import 'package:twonly/src/views/contact/contact.view.dart'; import 'package:twonly/src/views/public_profile.view.dart'; -Future handleIntentUrl(BuildContext context, Uri uri) async { - if (!uri.scheme.startsWith('http')) return; - if (uri.host != 'me.twonly.eu') return; - if (uri.hasEmptyPath) return; +Future handleIntentUrl(BuildContext context, Uri uri) async { + if (!uri.scheme.startsWith('http')) return false; + if (uri.host != 'me.twonly.eu') return false; + if (uri.hasEmptyPath) return false; final publicKey = uri.hasFragment ? uri.fragment : null; final userPaths = uri.path.split('/'); - if (userPaths.length != 2) return; + if (userPaths.length != 2) return false; final username = userPaths[1]; - if (!context.mounted) return; + if (!context.mounted) return false; if (username == gUser.username) { await Navigator.push( @@ -40,7 +40,7 @@ Future handleIntentUrl(BuildContext context, Uri uri) async { }, ), ); - return; + return true; } Log.info( @@ -48,7 +48,7 @@ Future handleIntentUrl(BuildContext context, Uri uri) async { ); final contacts = await twonlyDB.contactsDao.getContactsByUsername(username); if (contacts.isEmpty) { - if (!context.mounted) return; + if (!context.mounted) return true; Uint8List? publicKeyBytes; if (publicKey != null) { publicKeyBytes = base64Url.decode(publicKey); @@ -72,7 +72,7 @@ Future handleIntentUrl(BuildContext context, Uri uri) async { if (storedPublicKey == null || receivedPublicKey.isEmpty || !context.mounted) { - return; + return true; } if (storedPublicKey.equals(receivedPublicKey)) { if (!contact.verified) { @@ -112,6 +112,7 @@ Future handleIntentUrl(BuildContext context, Uri uri) async { Log.warn(e); } } + return true; } Future handleIntentMediaFile( @@ -160,12 +161,15 @@ Future handleIntentSharedFile( ); continue; } - Log.info('got file via intent ${file.type} ${file.value}'); + + Log.info('got file via intent ${file.type}'); switch (file.type) { case SharedMediaType.URL: if (file.value?.startsWith('http') ?? false) { - onUrlCallBack(Uri.parse(file.value!)); + final uri = Uri.parse(file.value!); + Log.info('Got link via handle intent share file: ${uri.scheme}'); + onUrlCallBack(uri); } case SharedMediaType.IMAGE: var type = MediaType.image; diff --git a/lib/src/views/home.view.dart b/lib/src/views/home.view.dart index f67c335..b4e5069 100644 --- a/lib/src/views/home.view.dart +++ b/lib/src/views/home.view.dart @@ -116,7 +116,14 @@ class HomeViewState extends State { // Subscribe to all events (initial link and further) _deepLinkSub = AppLinks().uriLinkStream.listen((uri) async { - if (mounted) await handleIntentUrl(context, uri); + if (mounted) { + Log.info('Got link via app links: ${uri.scheme}'); + if (!await handleIntentUrl(context, uri)) { + if (uri.scheme.startsWith('http')) { + _mainCameraController.setSharedLinkForPreview(uri); + } + } + } }); _intentStreamSub = FlutterSharingIntent.instance.getMediaStream().listen(