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 'package:aves/model/image_entry.dart';
import 'package:collection/collection.dart';
import 'package:flutter/foundation.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 {
await platform.invokeMethod('share', <String, dynamic>{
'title': 'Share via:',

View file

@ -64,9 +64,7 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin {
AndroidAppService.setAs(entry.uri, entry.mimeType);
break;
case EntryAction.share:
AndroidAppService.share({
entry.mimeType: [entry.uri]
});
AndroidAppService.share({entry});
break;
case EntryAction.debug:
_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/icons.dart';
import 'package:aves/widgets/filter_grid_page.dart';
import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
@ -38,7 +37,7 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
_showDeleteDialog(context);
break;
case EntryAction.share:
_share();
AndroidAppService.share(collection.selection);
break;
default:
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
OverlayEntry _opReportOverlayEntry;