From 068fef8fde7f9a7cc7a165735f4f818b1170b3af Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Wed, 26 Jul 2023 01:41:14 +0800 Subject: [PATCH] Fix cancel button not working in download notification --- .../nc_photos/DownloadEventChannelHandler.kt | 9 ++++--- .../src/main/kotlin/com/nkming/nc_photos/K.kt | 3 --- app/lib/download_handler.dart | 25 +++++++++---------- app/lib/mobile/android/download.dart | 14 +++++------ .../nkming/nc_photos/plugin/NcPhotosPlugin.kt | 4 +++ 5 files changed, 27 insertions(+), 28 deletions(-) diff --git a/app/android/app/src/main/kotlin/com/nkming/nc_photos/DownloadEventChannelHandler.kt b/app/android/app/src/main/kotlin/com/nkming/nc_photos/DownloadEventChannelHandler.kt index f19b0e3a..bbc6fc72 100644 --- a/app/android/app/src/main/kotlin/com/nkming/nc_photos/DownloadEventChannelHandler.kt +++ b/app/android/app/src/main/kotlin/com/nkming/nc_photos/DownloadEventChannelHandler.kt @@ -4,6 +4,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import com.nkming.nc_photos.plugin.NcPhotosPlugin import io.flutter.plugin.common.EventChannel class DownloadEventCancelChannelHandler(context: Context) : BroadcastReceiver(), @@ -15,14 +16,14 @@ class DownloadEventCancelChannelHandler(context: Context) : BroadcastReceiver(), } override fun onReceive(context: Context?, intent: Intent?) { - if (intent?.action != K.ACTION_DOWNLOAD_CANCEL || !intent.hasExtra( - K.EXTRA_NOTIFICATION_ID + if (intent?.action != NcPhotosPlugin.ACTION_DOWNLOAD_CANCEL || !intent.hasExtra( + NcPhotosPlugin.EXTRA_NOTIFICATION_ID ) ) { return } - val id = intent.getIntExtra(K.EXTRA_NOTIFICATION_ID, 0) + val id = intent.getIntExtra(NcPhotosPlugin.EXTRA_NOTIFICATION_ID, 0) _eventSink?.success( mapOf( "notificationId" to id @@ -32,7 +33,7 @@ class DownloadEventCancelChannelHandler(context: Context) : BroadcastReceiver(), override fun onListen(arguments: Any?, events: EventChannel.EventSink) { _context.registerReceiver( - this, IntentFilter(K.ACTION_DOWNLOAD_CANCEL) + this, IntentFilter(NcPhotosPlugin.ACTION_DOWNLOAD_CANCEL) ) _eventSink = events } diff --git a/app/android/app/src/main/kotlin/com/nkming/nc_photos/K.kt b/app/android/app/src/main/kotlin/com/nkming/nc_photos/K.kt index 6bfe5f21..1444b45e 100644 --- a/app/android/app/src/main/kotlin/com/nkming/nc_photos/K.kt +++ b/app/android/app/src/main/kotlin/com/nkming/nc_photos/K.kt @@ -2,8 +2,5 @@ package com.nkming.nc_photos interface K { companion object { - const val ACTION_DOWNLOAD_CANCEL = "com.nkming.nc_photos.ACTION_DOWNLOAD_CANCEL" - - const val EXTRA_NOTIFICATION_ID = "com.nkming.nc_photos.EXTRA_NOTIFICATION_ID" } } diff --git a/app/lib/download_handler.dart b/app/lib/download_handler.dart index 1e8a87a7..abd7b63a 100644 --- a/app/lib/download_handler.dart +++ b/app/lib/download_handler.dart @@ -83,12 +83,11 @@ class _DownlaodHandlerAndroid extends _DownloadHandlerBase { StreamSubscription? subscription; try { bool isCancel = false; - subscription = DownloadEvent.listenDownloadCancel() - ..onData((data) { - if (data.notificationId == id) { - isCancel = true; - } - }); + subscription = DownloadEvent.downloadCancelStream().listen((data) { + if (data.notificationId == id) { + isCancel = true; + } + }); int count = 0; for (final f in files) { @@ -110,13 +109,13 @@ class _DownlaodHandlerAndroid extends _DownloadHandlerBase { parentDir: parentDir, shouldNotify: false, ); - itemSubscription = DownloadEvent.listenDownloadCancel() - ..onData((data) { - if (data.notificationId == id) { - _log.info("[downloadFiles] Cancel requested"); - download.cancel(); - } - }); + itemSubscription = + DownloadEvent.downloadCancelStream().listen((data) { + if (data.notificationId == id) { + _log.info("[downloadFiles] Cancel requested"); + download.cancel(); + } + }); final result = await download(); successes.add(Tuple2(f, result)); } on PermissionException catch (_) { diff --git a/app/lib/mobile/android/download.dart b/app/lib/mobile/android/download.dart index e3bac793..088ed7e4 100644 --- a/app/lib/mobile/android/download.dart +++ b/app/lib/mobile/android/download.dart @@ -3,20 +3,18 @@ import 'dart:async'; import 'package:flutter/services.dart'; class DownloadEvent { - static StreamSubscription listenDownloadCancel() => - _cancelStream.listen(null); + static Stream downloadCancelStream() => + _downloadCancelChannel + .receiveBroadcastStream() + .map((data) => DownloadCancelEvent( + data["notificationId"], + )); /// User canceled the download job static const exceptionCodeUserCanceled = "userCanceled"; static const _downloadCancelChannel = EventChannel( "com.nkming.nc_photos/download_event/action_download_cancel"); - - static final _cancelStream = _downloadCancelChannel - .receiveBroadcastStream() - .map((data) => DownloadCancelEvent( - data["notificationId"], - )); } class DownloadCancelEvent { diff --git a/plugin/android/src/main/kotlin/com/nkming/nc_photos/plugin/NcPhotosPlugin.kt b/plugin/android/src/main/kotlin/com/nkming/nc_photos/plugin/NcPhotosPlugin.kt index 875028f4..3708e18a 100644 --- a/plugin/android/src/main/kotlin/com/nkming/nc_photos/plugin/NcPhotosPlugin.kt +++ b/plugin/android/src/main/kotlin/com/nkming/nc_photos/plugin/NcPhotosPlugin.kt @@ -21,6 +21,10 @@ class NcPhotosPlugin : FlutterPlugin, ActivityAware, K.ACTION_SHOW_IMAGE_PROCESSOR_RESULT const val EXTRA_IMAGE_RESULT_URI = K.EXTRA_IMAGE_RESULT_URI + const val ACTION_DOWNLOAD_CANCEL = + K.ACTION_DOWNLOAD_CANCEL + const val EXTRA_NOTIFICATION_ID = K.EXTRA_NOTIFICATION_ID + private const val TAG = "NcPhotosPlugin" }