diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java index c5fb7eec..bd29a8f7 100644 --- a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java +++ b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java @@ -66,11 +66,11 @@ public class DownloadWorker extends Worker implements MethodChannel.MethodCallHa public static final String ARG_OPEN_FILE_FROM_NOTIFICATION = "open_file_from_notification"; public static final String ARG_CALLBACK_HANDLE = "callback_handle"; public static final String ARG_DEBUG = "debug"; - public static final String ARG_STEP_UPDATE = "step_update"; private static final String TAG = DownloadWorker.class.getSimpleName(); private static final int BUFFER_SIZE = 4096; private static final String CHANNEL_ID = "FLUTTER_DOWNLOADER_NOTIFICATION"; + private static final int STEP_UPDATE = 10; private static final AtomicBoolean isolateStarted = new AtomicBoolean(false); private static final ArrayDeque isolateQueue = new ArrayDeque<>(); @@ -88,7 +88,6 @@ public class DownloadWorker extends Worker implements MethodChannel.MethodCallHa private int lastProgress = 0; private int primaryId; private String msgStarted, msgInProgress, msgCanceled, msgFailed, msgPaused, msgComplete; - private int stepUpdate; public DownloadWorker(@NonNull final Context context, @NonNull WorkerParameters params) { @@ -167,7 +166,6 @@ public Result doWork() { String headers = getInputData().getString(ARG_HEADERS); boolean isResume = getInputData().getBoolean(ARG_IS_RESUME, false); debug = getInputData().getBoolean(ARG_DEBUG, false); - stepUpdate = getInputData().getInt(ARG_STEP_UPDATE, 10); Resources res = getApplicationContext().getResources(); msgStarted = res.getString(R.string.flutter_downloader_notification_started); @@ -339,7 +337,7 @@ private void downloadFile(Context context, String fileURL, String savedDir, Stri int progress = (int) ((count * 100) / (contentLength + downloadedBytes)); outputStream.write(buffer, 0, bytesRead); - if ((lastProgress == 0 || progress > (lastProgress + stepUpdate) || progress == 100) + if ((lastProgress == 0 || progress > lastProgress + STEP_UPDATE || progress == 100) && progress != lastProgress) { lastProgress = progress; updateNotification(context, filename, DownloadStatus.RUNNING, progress, null); diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java b/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java index 416a12b7..650d4e83 100644 --- a/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java +++ b/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java @@ -43,7 +43,6 @@ public class FlutterDownloaderPlugin implements MethodCallHandler, FlutterPlugin private TaskDao taskDao; private Context context; private long callbackHandle; - private int stepUpdate; private int debugMode; private final Object initializationLock = new Object(); @@ -130,7 +129,6 @@ private WorkRequest buildRequest(String url, String savedDir, String filename, S .putBoolean(DownloadWorker.ARG_OPEN_FILE_FROM_NOTIFICATION, openFileFromNotification) .putBoolean(DownloadWorker.ARG_IS_RESUME, isResume) .putLong(DownloadWorker.ARG_CALLBACK_HANDLE, callbackHandle) - .putInt(DownloadWorker.ARG_STEP_UPDATE, stepUpdate) .putBoolean(DownloadWorker.ARG_DEBUG, debugMode == 1) .build() ) @@ -160,7 +158,6 @@ private void initialize(MethodCall call, MethodChannel.Result result) { private void registerCallback(MethodCall call, MethodChannel.Result result) { List args = (List) call.arguments; callbackHandle = Long.parseLong(args.get(0).toString()); - stepUpdate = Integer.parseInt(args.get(1).toString()); result.success(null); } diff --git a/ios/Classes/FlutterDownloaderPlugin.m b/ios/Classes/FlutterDownloaderPlugin.m index 0ff2552c..f61e0d09 100644 --- a/ios/Classes/FlutterDownloaderPlugin.m +++ b/ios/Classes/FlutterDownloaderPlugin.m @@ -29,6 +29,8 @@ #define ERROR_NOT_INITIALIZED [FlutterError errorWithCode:@"not_initialized" message:@"initialize() must called first" details:nil] #define ERROR_INVALID_TASK_ID [FlutterError errorWithCode:@"invalid_task_id" message:@"not found task corresponding to given task id" details:nil] +#define STEP_UPDATE 10 + @interface FlutterDownloaderPlugin() { FlutterEngine *_headlessRunner; @@ -41,7 +43,6 @@ @interface FlutterDownloaderPlugin() ([lastProgress intValue] + _stepUpdate)) || progress == 100) && progress != [lastProgress intValue]) { + if (([lastProgress intValue] == 0 || (progress > [lastProgress intValue] + STEP_UPDATE) || progress == 100) && progress != [lastProgress intValue]) { [self sendUpdateProgressForTaskId:taskId inStatus:@(STATUS_RUNNING) andProgress:@(progress)]; _runningTaskById[taskId][KEY_PROGRESS] = @(progress); } diff --git a/lib/src/downloader.dart b/lib/src/downloader.dart index 6b1f26d2..267cd295 100644 --- a/lib/src/downloader.dart +++ b/lib/src/downloader.dart @@ -383,14 +383,13 @@ class FlutterDownloader { /// /// {@end-tool} /// - static registerCallback(DownloadCallback callback, int stepSize) { + static registerCallback(DownloadCallback callback) { assert(_initialized, 'FlutterDownloader.initialize() must be called first'); final callbackHandle = PluginUtilities.getCallbackHandle(callback); assert(callbackHandle != null, 'callback must be a top-level or a static function'); - assert(stepSize >= 0 && stepSize <= 100, 'Step size should be between 0-100'); _channel.invokeMethod( - 'registerCallback', [callbackHandle.toRawHandle(), stepSize]); + 'registerCallback', [callbackHandle.toRawHandle()]); } }