diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6cefc877f4..a6bdb7cdfd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -68,6 +68,10 @@
+
+
+
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
index 19d683d40e..9a6dc05b0f 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
@@ -33,7 +33,7 @@ import javax.inject.Inject
* @param context the application context.
* @return the intent of the service.
*/
-fun getStartIntent(context: Context): Intent {
+fun getIntent(context: Context): Intent {
return Intent(context, LibraryUpdateService::class.java)
}
@@ -78,10 +78,14 @@ class LibraryUpdateService : Service() {
@JvmStatic
fun start(context: Context) {
if (!isRunning(context)) {
- context.startService(getStartIntent(context))
+ context.startService(getIntent(context))
}
}
+ fun stop(context: Context) {
+ context.stopService(getIntent(context))
+ }
+
}
/**
@@ -160,6 +164,9 @@ class LibraryUpdateService : Service() {
val newUpdates = ArrayList()
val failedUpdates = ArrayList()
+ val cancelIntent = PendingIntent.getBroadcast(this, 0,
+ Intent(this, CancelUpdateReceiver::class.java), 0)
+
// Get the manga list that is going to be updated.
val allLibraryMangas = db.favoriteMangas.executeAsBlocking()
val toUpdate = if (!preferences.updateOnlyNonCompleted())
@@ -170,7 +177,7 @@ class LibraryUpdateService : Service() {
// Emit each manga and update it sequentially.
return Observable.from(toUpdate)
// Notify manga that will update.
- .doOnNext { showProgressNotification(it, count.andIncrement, toUpdate.size) }
+ .doOnNext { showProgressNotification(it, count.andIncrement, toUpdate.size, cancelIntent) }
// Update the chapters of the manga.
.concatMap { manga -> updateManga(manga)
// If there's any error, return empty update and continue.
@@ -262,7 +269,7 @@ class LibraryUpdateService : Service() {
*/
private fun showNotification(title: String, body: String) {
val n = notification() {
- setSmallIcon(R.drawable.ic_action_refresh)
+ setSmallIcon(R.drawable.ic_refresh_white_24dp)
setContentTitle(title)
setContentText(body)
}
@@ -275,12 +282,13 @@ class LibraryUpdateService : Service() {
* @param current the current progress.
* @param total the total progress.
*/
- private fun showProgressNotification(manga: Manga, current: Int, total: Int) {
+ private fun showProgressNotification(manga: Manga, current: Int, total: Int, cancelIntent: PendingIntent) {
val n = notification() {
- setSmallIcon(R.drawable.ic_action_refresh)
+ setSmallIcon(R.drawable.ic_refresh_white_24dp)
setContentTitle(manga.title)
setProgress(total, current, false)
setOngoing(true)
+ addAction(R.drawable.ic_clear, getString(R.string.action_cancel), cancelIntent)
}
notificationManager.notify(UPDATE_NOTIFICATION_ID, n)
}
@@ -295,7 +303,7 @@ class LibraryUpdateService : Service() {
val body = getUpdatedMangasBody(updates, failed)
val n = notification() {
- setSmallIcon(R.drawable.ic_action_refresh)
+ setSmallIcon(R.drawable.ic_refresh_white_24dp)
setContentTitle(title)
setStyle(NotificationCompat.BigTextStyle().bigText(body))
setContentIntent(notificationIntent)
@@ -335,9 +343,22 @@ class LibraryUpdateService : Service() {
override fun onReceive(context: Context, intent: Intent) {
if (NetworkUtil.isNetworkConnected(context)) {
AndroidComponentUtil.toggleComponent(context, this.javaClass, false)
- context.startService(getStartIntent(context))
+ context.startService(getIntent(context))
}
}
}
+ class CancelUpdateReceiver : BroadcastReceiver() {
+
+ /**
+ * Method called when user stops the update.
+ * @param context the application context.
+ * @param intent the intent received.
+ */
+ override fun onReceive(context: Context, intent: Intent) {
+ LibraryUpdateService.stop(context)
+ context.notificationManager.cancel(UPDATE_NOTIFICATION_ID)
+ }
+ }
+
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 572f266149..a4c231ec3a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -43,6 +43,7 @@
Retry
Open in browser
Change display mode
+ Cancel
OK