share: loosened shared mime types to show more receiving apps

This commit is contained in:
Thibault Deckers 2020-07-12 21:41:13 +09:00
parent 7c867f81bb
commit 760ee681d2
3 changed files with 8 additions and 11 deletions

View file

@ -1,5 +1,7 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:aves/model/image_entry.dart';
import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -86,7 +88,10 @@ class AndroidAppService {
} }
} }
static Future<void> share(Map<String, List<String>> urisByMimeType) async { static Future<void> share(Set<ImageEntry> entries) async {
// loosen mime type to a generic one, so we can share with badly defined apps
// e.g. Google Lens declares receiving "image/jpeg" only, but it can actually handle more formats
final urisByMimeType = groupBy<ImageEntry, String>(entries, (e) => e.mimeTypeAnySubtype).map((k, v) => MapEntry(k, v.map((e) => e.uri).toList()));
try { try {
await platform.invokeMethod('share', <String, dynamic>{ await platform.invokeMethod('share', <String, dynamic>{
'title': 'Share via:', 'title': 'Share via:',

View file

@ -64,9 +64,7 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin {
AndroidAppService.setAs(entry.uri, entry.mimeType); AndroidAppService.setAs(entry.uri, entry.mimeType);
break; break;
case EntryAction.share: case EntryAction.share:
AndroidAppService.share({ AndroidAppService.share({entry});
entry.mimeType: [entry.uri]
});
break; break;
case EntryAction.debug: case EntryAction.debug:
_goToDebug(context, entry); _goToDebug(context, entry);

View file

@ -17,7 +17,6 @@ import 'package:aves/widgets/common/action_delegates/permission_aware.dart';
import 'package:aves/widgets/common/entry_actions.dart'; import 'package:aves/widgets/common/entry_actions.dart';
import 'package:aves/widgets/common/icons.dart'; import 'package:aves/widgets/common/icons.dart';
import 'package:aves/widgets/filter_grid_page.dart'; import 'package:aves/widgets/filter_grid_page.dart';
import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
@ -38,7 +37,7 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
_showDeleteDialog(context); _showDeleteDialog(context);
break; break;
case EntryAction.share: case EntryAction.share:
_share(); AndroidAppService.share(collection.selection);
break; break;
default: default:
break; break;
@ -229,11 +228,6 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
); );
} }
void _share() {
final urisByMimeType = groupBy<ImageEntry, String>(collection.selection, (e) => e.mimeType).map((k, v) => MapEntry(k, v.map((e) => e.uri).toList()));
AndroidAppService.share(urisByMimeType);
}
// selection action report overlay // selection action report overlay
OverlayEntry _opReportOverlayEntry; OverlayEntry _opReportOverlayEntry;