|
@@ -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<Manga>()
|
|
|
val failedUpdates = ArrayList<Manga>()
|
|
|
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|