mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	Make restore a foreground service
This commit is contained in:
		| @@ -4,6 +4,7 @@ import android.app.Service | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.net.Uri | ||||
| import android.os.Build | ||||
| import android.os.IBinder | ||||
| import android.os.PowerManager | ||||
| 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.Track | ||||
| 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.source.Source | ||||
| import eu.kanade.tachiyomi.ui.setting.backup.BackupNotifier | ||||
| import eu.kanade.tachiyomi.util.lang.chop | ||||
| import eu.kanade.tachiyomi.util.system.isServiceRunning | ||||
| import eu.kanade.tachiyomi.util.system.sendLocalBroadcast | ||||
| @@ -70,7 +73,11 @@ class BackupRestoreService : Service() { | ||||
|                 val intent = Intent(context, BackupRestoreService::class.java).apply { | ||||
|                     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>>() | ||||
|  | ||||
|     /** | ||||
|      * Backup manager | ||||
|      */ | ||||
|     private lateinit var backupManager: BackupManager | ||||
|  | ||||
|     /** | ||||
|      * Database | ||||
|      */ | ||||
|     private val db: DatabaseHelper by injectLazy() | ||||
|  | ||||
|     /** | ||||
|      * Tracking manager | ||||
|      */ | ||||
|     internal val trackManager: TrackManager by injectLazy() | ||||
|     private val trackManager: TrackManager by injectLazy() | ||||
|  | ||||
|     private lateinit var notifier: BackupNotifier | ||||
|  | ||||
|     private lateinit var executor: ExecutorService | ||||
|  | ||||
| @@ -137,10 +137,14 @@ class BackupRestoreService : Service() { | ||||
|      */ | ||||
|     override fun onCreate() { | ||||
|         super.onCreate() | ||||
|         notifier = BackupNotifier(this) | ||||
|         executor = Executors.newSingleThreadExecutor() | ||||
|  | ||||
|         startForeground(Notifications.ID_RESTORE, notifier.showRestoreProgress().build()) | ||||
|  | ||||
|         wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock( | ||||
|                 PowerManager.PARTIAL_WAKE_LOCK, "BackupRestoreService:WakeLock") | ||||
|         wakeLock.acquire() | ||||
|         executor = Executors.newSingleThreadExecutor() | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -218,7 +222,7 @@ class BackupRestoreService : Service() { | ||||
|                     json.get(CATEGORIES)?.let { | ||||
|                         backupManager.restoreCategories(it.asJsonArray) | ||||
|                         restoreProgress += 1 | ||||
|                         showRestoreProgress(restoreProgress, restoreAmount, "Categories added", errors.size) | ||||
|                         showRestoreProgress(restoreProgress, restoreAmount, "Categories added") | ||||
|                     } | ||||
|  | ||||
|                     mangasJson | ||||
| @@ -243,7 +247,7 @@ class BackupRestoreService : Service() { | ||||
|                         errors.add(Date() to "${manga.title} - ${getString(R.string.source_not_found)}") | ||||
|                         restoreProgress += 1 | ||||
|                         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) | ||||
|                     } | ||||
|                 } | ||||
| @@ -363,7 +367,7 @@ class BackupRestoreService : Service() { | ||||
|                 } | ||||
|                 .doOnCompleted { | ||||
|                     restoreProgress += 1 | ||||
|                     showRestoreProgress(restoreProgress, restoreAmount, manga.title, errors.size) | ||||
|                     showRestoreProgress(restoreProgress, restoreAmount, manga.title) | ||||
|                 } | ||||
|     } | ||||
|  | ||||
| @@ -395,7 +399,7 @@ class BackupRestoreService : Service() { | ||||
|                 } | ||||
|                 .doOnCompleted { | ||||
|                     restoreProgress += 1 | ||||
|                     showRestoreProgress(restoreProgress, restoreAmount, backupManga.title, errors.size) | ||||
|                     showRestoreProgress(restoreProgress, restoreAmount, backupManga.title) | ||||
|                 } | ||||
|     } | ||||
|  | ||||
| @@ -461,16 +465,8 @@ class BackupRestoreService : Service() { | ||||
|         progress: Int, | ||||
|         amount: Int, | ||||
|         title: String, | ||||
|         errors: Int, | ||||
|         content: String = title.chop(30) | ||||
|     ) { | ||||
|         val intent = Intent(BackupConst.INTENT_FILTER).apply { | ||||
|             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) | ||||
|         notifier.showRestoreProgress(content, progress, amount) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -76,7 +76,7 @@ object Notifications { | ||||
|                 NotificationChannel(CHANNEL_UPDATES_TO_EXTS, context.getString(R.string.channel_ext_updates), | ||||
|                         NotificationManager.IMPORTANCE_DEFAULT), | ||||
|                 NotificationChannel(CHANNEL_BACKUP_RESTORE, context.getString(R.string.channel_backup_restore), | ||||
|                     NotificationManager.IMPORTANCE_LOW).apply { | ||||
|                     NotificationManager.IMPORTANCE_HIGH).apply { | ||||
|                     setShowBadge(false) | ||||
|                 } | ||||
|         ) | ||||
|   | ||||
| @@ -269,7 +269,6 @@ class SettingsBackupController : SettingsController() { | ||||
|                     .positiveButton(R.string.action_restore) { | ||||
|                         val context = applicationContext | ||||
|                         if (context != null) { | ||||
|                             (targetController as SettingsBackupController).notifier.showRestoreProgress() | ||||
|                             BackupRestoreService.start(context, args.getParcelable(KEY_URI)!!) | ||||
|                             isRestoreStarted = true | ||||
|                         } | ||||
| @@ -296,12 +295,6 @@ class SettingsBackupController : SettingsController() { | ||||
|  | ||||
|                     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 -> { | ||||
|                     isRestoreStarted = false | ||||
|  | ||||
|   | ||||
| @@ -72,8 +72,8 @@ internal class BackupNotifier(private val context: Context) { | ||||
|         notificationBuilder.show(Notifications.ID_BACKUP) | ||||
|     } | ||||
|  | ||||
|     fun showRestoreProgress(content: String = "", progress: Int = 0, maxAmount: Int = 100) { | ||||
|         with(notificationBuilder) { | ||||
|     fun showRestoreProgress(content: String = "", progress: Int = 0, maxAmount: Int = 100): NotificationCompat.Builder { | ||||
|         val builder = with(notificationBuilder) { | ||||
|             setContentTitle(context.getString(R.string.restoring_backup)) | ||||
|             setContentText(content) | ||||
|  | ||||
| @@ -89,7 +89,9 @@ internal class BackupNotifier(private val context: Context) { | ||||
|                 NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE)) | ||||
|         } | ||||
|  | ||||
|         notificationBuilder.show(Notifications.ID_RESTORE) | ||||
|         builder.show(Notifications.ID_RESTORE) | ||||
|  | ||||
|         return builder | ||||
|     } | ||||
|  | ||||
|     fun showRestoreError(error: String?) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user