async image operations on Android
This commit is contained in:
parent
0c30bfd19e
commit
aee8756c5c
3 changed files with 17 additions and 16 deletions
|
@ -35,29 +35,29 @@ public class ImageFileHandler implements MethodChannel.MethodCallHandler {
|
|||
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
|
||||
switch (call.method) {
|
||||
case "getImageEntries":
|
||||
mediaStoreStreamHandler.fetchAll(activity);
|
||||
new Thread(() -> mediaStoreStreamHandler.fetchAll(activity)).start();
|
||||
result.success(null);
|
||||
break;
|
||||
case "getImageEntry":
|
||||
getImageEntry(call, result);
|
||||
new Thread(() -> getImageEntry(call, new MethodResultWrapper(result))).start();
|
||||
break;
|
||||
case "readAsBytes":
|
||||
readAsBytes(call, result);
|
||||
new Thread(() -> readAsBytes(call, new MethodResultWrapper(result))).start();
|
||||
break;
|
||||
case "getImageBytes":
|
||||
getImageBytes(call, result);
|
||||
new Thread(() -> getImageBytes(call, new MethodResultWrapper(result))).start();
|
||||
break;
|
||||
case "cancelGetImageBytes":
|
||||
cancelGetImageBytes(call, result);
|
||||
new Thread(() -> cancelGetImageBytes(call, new MethodResultWrapper(result))).start();
|
||||
break;
|
||||
case "delete":
|
||||
delete(call, result);
|
||||
new Thread(() -> delete(call, new MethodResultWrapper(result))).start();
|
||||
break;
|
||||
case "rename":
|
||||
rename(call, result);
|
||||
new Thread(() -> rename(call, new MethodResultWrapper(result))).start();
|
||||
break;
|
||||
case "rotate":
|
||||
rotate(call, result);
|
||||
new Thread(() -> rotate(call, new MethodResultWrapper(result))).start();
|
||||
break;
|
||||
default:
|
||||
result.notImplemented();
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package deckers.thibault.aves.channelhandlers;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
|
||||
import deckers.thibault.aves.model.provider.MediaStoreImageProvider;
|
||||
|
@ -27,8 +29,9 @@ public class MediaStoreStreamHandler implements EventChannel.StreamHandler {
|
|||
void fetchAll(Activity activity) {
|
||||
Log.d(LOG_TAG, "fetchAll start");
|
||||
// Instant start = Instant.now();
|
||||
new MediaStoreImageProvider().fetchAll(activity, eventSink); // 350ms
|
||||
eventSink.endOfStream();
|
||||
Handler handler = new Handler(Looper.getMainLooper());
|
||||
new MediaStoreImageProvider().fetchAll(activity, (entry) -> handler.post(() -> eventSink.success(entry))); // 350ms
|
||||
handler.post(() -> eventSink.endOfStream());
|
||||
// Log.d(LOG_TAG, "fetchAll complete in " + Duration.between(start, Instant.now()).toMillis() + "ms");
|
||||
}
|
||||
}
|
|
@ -22,7 +22,6 @@ import deckers.thibault.aves.utils.MimeTypes;
|
|||
import deckers.thibault.aves.utils.PermissionManager;
|
||||
import deckers.thibault.aves.utils.StorageUtils;
|
||||
import deckers.thibault.aves.utils.Utils;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
|
||||
public class MediaStoreImageProvider extends ImageProvider {
|
||||
private static final String LOG_TAG = Utils.createLogTag(MediaStoreImageProvider.class);
|
||||
|
@ -57,10 +56,9 @@ public class MediaStoreImageProvider extends ImageProvider {
|
|||
MediaStore.Video.Media.ORIENTATION,
|
||||
} : new String[0]).flatMap(Stream::of).toArray(String[]::new);
|
||||
|
||||
public void fetchAll(Activity activity, EventChannel.EventSink entrySink) {
|
||||
NewEntryHandler success = entrySink::success;
|
||||
fetchFrom(activity, success, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_PROJECTION);
|
||||
fetchFrom(activity, success, MediaStore.Video.Media.EXTERNAL_CONTENT_URI, VIDEO_PROJECTION);
|
||||
public void fetchAll(Activity activity, NewEntryHandler newEntryHandler) {
|
||||
fetchFrom(activity, newEntryHandler, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_PROJECTION);
|
||||
fetchFrom(activity, newEntryHandler, MediaStore.Video.Media.EXTERNAL_CONTENT_URI, VIDEO_PROJECTION);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -191,7 +189,7 @@ public class MediaStoreImageProvider extends ImageProvider {
|
|||
callback.onFailure();
|
||||
}
|
||||
|
||||
private interface NewEntryHandler {
|
||||
public interface NewEntryHandler {
|
||||
void handleEntry(Map<String, Object> entry);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue