From e4ee03cb61b8e9bf258e14cb6717c0e8ee591e91 Mon Sep 17 00:00:00 2001 From: len Date: Sun, 6 Mar 2016 20:58:15 +0100 Subject: [PATCH] Allow to cancel update. #192. Needs testing --- app/src/main/AndroidManifest.xml | 4 ++ .../data/library/LibraryUpdateService.kt | 37 +++++++++++++++---- app/src/main/res/values/strings.xml | 1 + 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6cefc877f..a6bdb7cdf 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 19d683d40..9a6dc05b0 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 572f26614..a4c231ec3 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