diff --git a/mobile/android/app/src/main/AndroidManifest.xml b/mobile/android/app/src/main/AndroidManifest.xml
index da8f8bd22..c3b7f1c92 100644
--- a/mobile/android/app/src/main/AndroidManifest.xml
+++ b/mobile/android/app/src/main/AndroidManifest.xml
@@ -70,5 +70,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart b/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart
index 1a20ea35e..6bace49af 100644
--- a/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart
+++ b/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart
@@ -1,3 +1,5 @@
+import 'dart:io';
+
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
@@ -17,6 +19,33 @@ class ExifBottomSheet extends HookConsumerWidget {
bool get showMap =>
asset.exifInfo?.latitude != null && asset.exifInfo?.longitude != null;
+ Future _createCoordinatesUri(double latitude, double longitude) async {
+ const zoomLevel = 5;
+ if (Platform.isAndroid) {
+ Uri uri = Uri(
+ scheme: 'geo',
+ host: '$latitude,$longitude',
+ queryParameters: {'z': '$zoomLevel', 'q': '$latitude,$longitude'},
+ );
+ if (await canLaunchUrl(uri)) {
+ return uri;
+ }
+ } else if (Platform.isIOS) {
+ var params = {
+ 'll': '$latitude,$longitude',
+ 'q': '$latitude, $longitude',
+ };
+ Uri uri = Uri.https('maps.apple.com', '/', params);
+ if (!await canLaunchUrl(uri)) {
+ return uri;
+ }
+ }
+ return Uri.https(
+ 'www.google.com',
+ '/maps/place/$latitude,$longitude/@$latitude,$longitude,${zoomLevel}z',
+ );
+ }
+
@override
Widget build(BuildContext context, WidgetRef ref) {
final exifInfo = asset.exifInfo;
@@ -42,6 +71,18 @@ class ExifBottomSheet extends HookConsumerWidget {
exifInfo?.longitude ?? 0,
),
zoom: 16.0,
+ onTap: (tapPosition, latLong) async {
+ if (exifInfo != null &&
+ exifInfo.latitude != null &&
+ exifInfo.longitude != null) {
+ launchUrl(
+ await _createCoordinatesUri(
+ exifInfo.latitude!,
+ exifInfo.longitude!,
+ ),
+ );
+ }
+ },
),
nonRotatedChildren: [
RichAttributionWidget(