Make restore a foreground service
This commit is contained in:
parent
2b27b40142
commit
6de00b1f21
@ -4,6 +4,7 @@ import android.app.Service
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import com.github.salomonbrys.kotson.fromJson
|
import com.github.salomonbrys.kotson.fromJson
|
||||||
@ -26,8 +27,10 @@ import eu.kanade.tachiyomi.data.database.models.Manga
|
|||||||
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
||||||
import eu.kanade.tachiyomi.data.database.models.Track
|
import eu.kanade.tachiyomi.data.database.models.Track
|
||||||
import eu.kanade.tachiyomi.data.database.models.TrackImpl
|
import eu.kanade.tachiyomi.data.database.models.TrackImpl
|
||||||
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||||
import eu.kanade.tachiyomi.source.Source
|
import eu.kanade.tachiyomi.source.Source
|
||||||
|
import eu.kanade.tachiyomi.ui.setting.backup.BackupNotifier
|
||||||
import eu.kanade.tachiyomi.util.lang.chop
|
import eu.kanade.tachiyomi.util.lang.chop
|
||||||
import eu.kanade.tachiyomi.util.system.isServiceRunning
|
import eu.kanade.tachiyomi.util.system.isServiceRunning
|
||||||
import eu.kanade.tachiyomi.util.system.sendLocalBroadcast
|
import eu.kanade.tachiyomi.util.system.sendLocalBroadcast
|
||||||
@ -70,7 +73,11 @@ class BackupRestoreService : Service() {
|
|||||||
val intent = Intent(context, BackupRestoreService::class.java).apply {
|
val intent = Intent(context, BackupRestoreService::class.java).apply {
|
||||||
putExtra(BackupConst.EXTRA_URI, uri)
|
putExtra(BackupConst.EXTRA_URI, uri)
|
||||||
}
|
}
|
||||||
context.startService(intent)
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||||
|
context.startService(intent)
|
||||||
|
} else {
|
||||||
|
context.startForegroundService(intent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,20 +122,13 @@ class BackupRestoreService : Service() {
|
|||||||
*/
|
*/
|
||||||
private val errors = mutableListOf<Pair<Date, String>>()
|
private val errors = mutableListOf<Pair<Date, String>>()
|
||||||
|
|
||||||
/**
|
|
||||||
* Backup manager
|
|
||||||
*/
|
|
||||||
private lateinit var backupManager: BackupManager
|
private lateinit var backupManager: BackupManager
|
||||||
|
|
||||||
/**
|
|
||||||
* Database
|
|
||||||
*/
|
|
||||||
private val db: DatabaseHelper by injectLazy()
|
private val db: DatabaseHelper by injectLazy()
|
||||||
|
|
||||||
/**
|
private val trackManager: TrackManager by injectLazy()
|
||||||
* Tracking manager
|
|
||||||
*/
|
private lateinit var notifier: BackupNotifier
|
||||||
internal val trackManager: TrackManager by injectLazy()
|
|
||||||
|
|
||||||
private lateinit var executor: ExecutorService
|
private lateinit var executor: ExecutorService
|
||||||
|
|
||||||
@ -137,10 +137,14 @@ class BackupRestoreService : Service() {
|
|||||||
*/
|
*/
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
notifier = BackupNotifier(this)
|
||||||
|
executor = Executors.newSingleThreadExecutor()
|
||||||
|
|
||||||
|
startForeground(Notifications.ID_RESTORE, notifier.showRestoreProgress().build())
|
||||||
|
|
||||||
wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock(
|
wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock(
|
||||||
PowerManager.PARTIAL_WAKE_LOCK, "BackupRestoreService:WakeLock")
|
PowerManager.PARTIAL_WAKE_LOCK, "BackupRestoreService:WakeLock")
|
||||||
wakeLock.acquire()
|
wakeLock.acquire()
|
||||||
executor = Executors.newSingleThreadExecutor()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -218,7 +222,7 @@ class BackupRestoreService : Service() {
|
|||||||
json.get(CATEGORIES)?.let {
|
json.get(CATEGORIES)?.let {
|
||||||
backupManager.restoreCategories(it.asJsonArray)
|
backupManager.restoreCategories(it.asJsonArray)
|
||||||
restoreProgress += 1
|
restoreProgress += 1
|
||||||
showRestoreProgress(restoreProgress, restoreAmount, "Categories added", errors.size)
|
showRestoreProgress(restoreProgress, restoreAmount, "Categories added")
|
||||||
}
|
}
|
||||||
|
|
||||||
mangasJson
|
mangasJson
|
||||||
@ -243,7 +247,7 @@ class BackupRestoreService : Service() {
|
|||||||
errors.add(Date() to "${manga.title} - ${getString(R.string.source_not_found)}")
|
errors.add(Date() to "${manga.title} - ${getString(R.string.source_not_found)}")
|
||||||
restoreProgress += 1
|
restoreProgress += 1
|
||||||
val content = getString(R.string.dialog_restoring_source_not_found, manga.title.chop(15))
|
val content = getString(R.string.dialog_restoring_source_not_found, manga.title.chop(15))
|
||||||
showRestoreProgress(restoreProgress, restoreAmount, manga.title, errors.size, content)
|
showRestoreProgress(restoreProgress, restoreAmount, manga.title, content)
|
||||||
Observable.just(manga)
|
Observable.just(manga)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -363,7 +367,7 @@ class BackupRestoreService : Service() {
|
|||||||
}
|
}
|
||||||
.doOnCompleted {
|
.doOnCompleted {
|
||||||
restoreProgress += 1
|
restoreProgress += 1
|
||||||
showRestoreProgress(restoreProgress, restoreAmount, manga.title, errors.size)
|
showRestoreProgress(restoreProgress, restoreAmount, manga.title)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -395,7 +399,7 @@ class BackupRestoreService : Service() {
|
|||||||
}
|
}
|
||||||
.doOnCompleted {
|
.doOnCompleted {
|
||||||
restoreProgress += 1
|
restoreProgress += 1
|
||||||
showRestoreProgress(restoreProgress, restoreAmount, backupManga.title, errors.size)
|
showRestoreProgress(restoreProgress, restoreAmount, backupManga.title)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,16 +465,8 @@ class BackupRestoreService : Service() {
|
|||||||
progress: Int,
|
progress: Int,
|
||||||
amount: Int,
|
amount: Int,
|
||||||
title: String,
|
title: String,
|
||||||
errors: Int,
|
|
||||||
content: String = title.chop(30)
|
content: String = title.chop(30)
|
||||||
) {
|
) {
|
||||||
val intent = Intent(BackupConst.INTENT_FILTER).apply {
|
notifier.showRestoreProgress(content, progress, amount)
|
||||||
putExtra(BackupConst.EXTRA_PROGRESS, progress)
|
|
||||||
putExtra(BackupConst.EXTRA_AMOUNT, amount)
|
|
||||||
putExtra(BackupConst.EXTRA_CONTENT, content)
|
|
||||||
putExtra(BackupConst.EXTRA_ERRORS, errors)
|
|
||||||
putExtra(BackupConst.ACTION, BackupConst.ACTION_RESTORE_PROGRESS)
|
|
||||||
}
|
|
||||||
sendLocalBroadcast(intent)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ object Notifications {
|
|||||||
NotificationChannel(CHANNEL_UPDATES_TO_EXTS, context.getString(R.string.channel_ext_updates),
|
NotificationChannel(CHANNEL_UPDATES_TO_EXTS, context.getString(R.string.channel_ext_updates),
|
||||||
NotificationManager.IMPORTANCE_DEFAULT),
|
NotificationManager.IMPORTANCE_DEFAULT),
|
||||||
NotificationChannel(CHANNEL_BACKUP_RESTORE, context.getString(R.string.channel_backup_restore),
|
NotificationChannel(CHANNEL_BACKUP_RESTORE, context.getString(R.string.channel_backup_restore),
|
||||||
NotificationManager.IMPORTANCE_LOW).apply {
|
NotificationManager.IMPORTANCE_HIGH).apply {
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -269,7 +269,6 @@ class SettingsBackupController : SettingsController() {
|
|||||||
.positiveButton(R.string.action_restore) {
|
.positiveButton(R.string.action_restore) {
|
||||||
val context = applicationContext
|
val context = applicationContext
|
||||||
if (context != null) {
|
if (context != null) {
|
||||||
(targetController as SettingsBackupController).notifier.showRestoreProgress()
|
|
||||||
BackupRestoreService.start(context, args.getParcelable(KEY_URI)!!)
|
BackupRestoreService.start(context, args.getParcelable(KEY_URI)!!)
|
||||||
isRestoreStarted = true
|
isRestoreStarted = true
|
||||||
}
|
}
|
||||||
@ -296,12 +295,6 @@ class SettingsBackupController : SettingsController() {
|
|||||||
|
|
||||||
notifier.showBackupError(intent.getStringExtra(BackupConst.EXTRA_ERROR_MESSAGE))
|
notifier.showBackupError(intent.getStringExtra(BackupConst.EXTRA_ERROR_MESSAGE))
|
||||||
}
|
}
|
||||||
BackupConst.ACTION_RESTORE_PROGRESS -> {
|
|
||||||
val progress = intent.getIntExtra(BackupConst.EXTRA_PROGRESS, 0)
|
|
||||||
val amount = intent.getIntExtra(BackupConst.EXTRA_AMOUNT, 0)
|
|
||||||
val content = intent.getStringExtra(BackupConst.EXTRA_CONTENT)
|
|
||||||
notifier.showRestoreProgress(content, progress, amount)
|
|
||||||
}
|
|
||||||
BackupConst.ACTION_RESTORE_COMPLETED -> {
|
BackupConst.ACTION_RESTORE_COMPLETED -> {
|
||||||
isRestoreStarted = false
|
isRestoreStarted = false
|
||||||
|
|
||||||
|
@ -72,8 +72,8 @@ internal class BackupNotifier(private val context: Context) {
|
|||||||
notificationBuilder.show(Notifications.ID_BACKUP)
|
notificationBuilder.show(Notifications.ID_BACKUP)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showRestoreProgress(content: String = "", progress: Int = 0, maxAmount: Int = 100) {
|
fun showRestoreProgress(content: String = "", progress: Int = 0, maxAmount: Int = 100): NotificationCompat.Builder {
|
||||||
with(notificationBuilder) {
|
val builder = with(notificationBuilder) {
|
||||||
setContentTitle(context.getString(R.string.restoring_backup))
|
setContentTitle(context.getString(R.string.restoring_backup))
|
||||||
setContentText(content)
|
setContentText(content)
|
||||||
|
|
||||||
@ -89,7 +89,9 @@ internal class BackupNotifier(private val context: Context) {
|
|||||||
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE))
|
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE))
|
||||||
}
|
}
|
||||||
|
|
||||||
notificationBuilder.show(Notifications.ID_RESTORE)
|
builder.show(Notifications.ID_RESTORE)
|
||||||
|
|
||||||
|
return builder
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showRestoreError(error: String?) {
|
fun showRestoreError(error: String?) {
|
||||||
|
Loading…
Reference in New Issue
Block a user