diff --git a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/AppAdapterHandler.java b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/AppAdapterHandler.java index 5305bad5e..ec98ee4a9 100644 --- a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/AppAdapterHandler.java +++ b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/AppAdapterHandler.java @@ -29,6 +29,20 @@ public class AppAdapterHandler implements MethodChannel.MethodCallHandler { result.success(null); break; } + case "open": { + String title = call.argument("title"); + Uri uri = Uri.parse(call.argument("uri")); + String mimeType = call.argument("mimeType"); + open(title, uri, mimeType); + result.success(null); + break; + } + case "openMap": { + Uri geoUri = Uri.parse(call.argument("geoUri")); + openMap(geoUri); + result.success(null); + break; + } case "setAs": { String title = call.argument("title"); Uri uri = Uri.parse(call.argument("uri")); @@ -45,12 +59,6 @@ public class AppAdapterHandler implements MethodChannel.MethodCallHandler { result.success(null); break; } - case "showOnMap": { - Uri geoUri = Uri.parse(call.argument("geoUri")); - showOnMap(geoUri); - result.success(null); - break; - } default: result.notImplemented(); break; @@ -63,6 +71,19 @@ public class AppAdapterHandler implements MethodChannel.MethodCallHandler { context.startActivity(Intent.createChooser(intent, title)); } + private void open(String title, Uri uri, String mimeType) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(uri, mimeType); + context.startActivity(Intent.createChooser(intent, title)); + } + + private void openMap(Uri geoUri) { + Intent intent = new Intent(Intent.ACTION_VIEW, geoUri); + if (intent.resolveActivity(context.getPackageManager()) != null) { + context.startActivity(intent); + } + } + private void setAs(String title, Uri uri, String mimeType) { Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); intent.setDataAndType(uri, mimeType); @@ -75,11 +96,4 @@ public class AppAdapterHandler implements MethodChannel.MethodCallHandler { intent.setType(mimeType); context.startActivity(Intent.createChooser(intent, title)); } - - private void showOnMap(Uri geoUri) { - Intent intent = new Intent(Intent.ACTION_VIEW, geoUri); - if (intent.resolveActivity(context.getPackageManager()) != null) { - context.startActivity(intent); - } - } } diff --git a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MediaStoreStreamHandler.java b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MediaStoreStreamHandler.java index 8f03c95a7..b8bc56a39 100644 --- a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MediaStoreStreamHandler.java +++ b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MediaStoreStreamHandler.java @@ -19,13 +19,12 @@ public class MediaStoreStreamHandler implements EventChannel.StreamHandler { @Override public void onListen(Object args, final EventChannel.EventSink events) { - Log.w(LOG_TAG, "onListen with args=" + args); eventSink = events; } @Override public void onCancel(Object args) { - Log.w(LOG_TAG, "onCancel with args=" + args); + // nothing } void fetchAll(Activity activity) { diff --git a/lib/utils/android_app_service.dart b/lib/utils/android_app_service.dart index 8144fc420..8fa1b5b49 100644 --- a/lib/utils/android_app_service.dart +++ b/lib/utils/android_app_service.dart @@ -7,7 +7,7 @@ class AndroidAppService { static edit(String uri, String mimeType) async { try { await platform.invokeMethod('edit', { - 'title': 'Edit', + 'title': 'Edit with:', 'uri': uri, 'mimeType': mimeType, }); @@ -16,10 +16,33 @@ class AndroidAppService { } } + static open(String uri, String mimeType) async { + try { + await platform.invokeMethod('open', { + 'title': 'Open with:', + 'uri': uri, + 'mimeType': mimeType, + }); + } on PlatformException catch (e) { + debugPrint('open failed with exception=${e.message}'); + } + } + + static openMap(String geoUri) async { + if (geoUri == null) return; + try { + await platform.invokeMethod('openMap', { + 'geoUri': geoUri, + }); + } on PlatformException catch (e) { + debugPrint('openMap failed with exception=${e.message}'); + } + } + static setAs(String uri, String mimeType) async { try { await platform.invokeMethod('setAs', { - 'title': 'Set as', + 'title': 'Set as:', 'uri': uri, 'mimeType': mimeType, }); @@ -39,15 +62,4 @@ class AndroidAppService { debugPrint('share failed with exception=${e.message}'); } } - - static showOnMap(String geoUri) async { - if (geoUri == null) return; - try { - await platform.invokeMethod('showOnMap', { - 'geoUri': geoUri, - }); - } on PlatformException catch (e) { - debugPrint('share failed with exception=${e.message}'); - } - } } diff --git a/lib/widgets/fullscreen/image_page.dart b/lib/widgets/fullscreen/image_page.dart index aa4f66476..9f98ed8f8 100644 --- a/lib/widgets/fullscreen/image_page.dart +++ b/lib/widgets/fullscreen/image_page.dart @@ -261,20 +261,23 @@ class FullscreenBodyState extends State with SingleTickerProvide case FullscreenAction.rename: showRenameDialog(entry); break; + case FullscreenAction.open: + AndroidAppService.open(entry.uri, entry.mimeType); + break; + case FullscreenAction.openMap: + AndroidAppService.openMap(entry.geoUri); + break; case FullscreenAction.setAs: AndroidAppService.setAs(entry.uri, entry.mimeType); break; case FullscreenAction.share: AndroidAppService.share(entry.uri, entry.mimeType); break; - case FullscreenAction.showOnMap: - AndroidAppService.showOnMap(entry.geoUri); - break; } } } -enum FullscreenAction { edit, info, rename, setAs, share, showOnMap } +enum FullscreenAction { edit, info, open, openMap, rename, setAs, share } class ImagePage extends StatefulWidget { final List entries; diff --git a/lib/widgets/fullscreen/overlay_top.dart b/lib/widgets/fullscreen/overlay_top.dart index cda124805..ba134e3fb 100644 --- a/lib/widgets/fullscreen/overlay_top.dart +++ b/lib/widgets/fullscreen/overlay_top.dart @@ -52,22 +52,27 @@ class FullscreenTopOverlay extends StatelessWidget { value: FullscreenAction.info, child: Text("Info"), ), - PopupMenuItem( - value: FullscreenAction.edit, - child: Text("Edit"), - ), PopupMenuItem( value: FullscreenAction.rename, child: Text("Rename"), ), + PopupMenuDivider(), + PopupMenuItem( + value: FullscreenAction.edit, + child: Text("Edit with…"), + ), + PopupMenuItem( + value: FullscreenAction.open, + child: Text("Open with…"), + ), PopupMenuItem( value: FullscreenAction.setAs, - child: Text("Set as"), + child: Text("Set as…"), ), if (entry.hasGps) PopupMenuItem( - value: FullscreenAction.showOnMap, - child: Text("Show on map"), + value: FullscreenAction.openMap, + child: Text("Show on map…"), ), ], onSelected: onActionSelected,