diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateService.kt index a212db9de4..8b000f0cf0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateService.kt @@ -9,6 +9,7 @@ import android.os.IBinder import android.os.PowerManager import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.data.notification.Notifications +import eu.kanade.tachiyomi.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.isServiceRunning /** @@ -73,10 +74,7 @@ class BackupCreateService : Service() { startForeground(Notifications.ID_BACKUP_PROGRESS, notifier.showBackupProgress().build()) - wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, "${javaClass.name}:WakeLock" - ) - wakeLock.acquire() + wakeLock = acquireWakeLock(javaClass.name) } override fun stopService(name: Intent?): Boolean { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt index f90a91832d..f2aa054c36 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt @@ -46,6 +46,7 @@ import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.TrackImpl import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.track.TrackManager +import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource @@ -131,8 +132,10 @@ class BackupManager(val context: Context, version: Int = CURRENT_VERSION) { mangaEntries.add(backupMangaObject(manga, flags)) // Maintain set of extensions/sources used (excludes local source) - if (manga.source != 0L && sourceManager.get(manga.source) != null) { - extensions.add("${manga.source}:${sourceManager.get(manga.source)!!.name}") + if (manga.source != LocalSource.ID) { + sourceManager.get(manga.source)?.let { + extensions.add("${manga.source}:${it.name}") + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt index ed2aba4dd3..e5adbcfbb5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt @@ -32,6 +32,7 @@ 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.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.isServiceRunning import java.io.File import java.text.SimpleDateFormat @@ -127,10 +128,7 @@ class BackupRestoreService : Service() { startForeground(Notifications.ID_RESTORE_PROGRESS, notifier.showRestoreProgress().build()) - wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, "${javaClass.name}:WakeLock" - ) - wakeLock.acquire() + wakeLock = acquireWakeLock(javaClass.name) } override fun stopService(name: Intent?): Boolean { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt index 332ac1ea8e..6b3dda2995 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt @@ -16,9 +16,9 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.util.lang.plusAssign +import eu.kanade.tachiyomi.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.connectivityManager import eu.kanade.tachiyomi.util.system.notification -import eu.kanade.tachiyomi.util.system.powerManager import eu.kanade.tachiyomi.util.system.toast import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers @@ -70,9 +70,7 @@ class DownloadService : Service() { /** * Wake lock to prevent the device to enter sleep mode. */ - private val wakeLock by lazy { - powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DownloadService:WakeLock") - } + private lateinit var wakeLock: PowerManager.WakeLock /** * Subscriptions to store while the service is running. @@ -85,6 +83,7 @@ class DownloadService : Service() { override fun onCreate() { super.onCreate() startForeground(Notifications.ID_DOWNLOAD_CHAPTER, getPlaceholderNotification()) + wakeLock = acquireWakeLock(javaClass.name) runningRelay.call(true) subscriptions = CompositeSubscription() listenDownloaderState() 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 5d33d56db3..39f36b4045 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 @@ -35,6 +35,7 @@ import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource import eu.kanade.tachiyomi.util.lang.chop +import eu.kanade.tachiyomi.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.isServiceRunning import eu.kanade.tachiyomi.util.system.notification import eu.kanade.tachiyomi.util.system.notificationBuilder @@ -182,11 +183,10 @@ class LibraryUpdateService( */ override fun onCreate() { super.onCreate() + startForeground(Notifications.ID_LIBRARY_PROGRESS, progressNotificationBuilder.build()) - wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, "LibraryUpdateService:WakeLock" - ) - wakeLock.acquire() + + wakeLock = acquireWakeLock(javaClass.name) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt index 4cfec811bc..23e0154388 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt @@ -18,6 +18,7 @@ import eu.kanade.tachiyomi.network.newCallWithProgress import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.storage.saveTo +import eu.kanade.tachiyomi.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.isServiceRunning import java.io.File import timber.log.Timber @@ -40,10 +41,7 @@ class UpdaterService : Service() { startForeground(Notifications.ID_UPDATER, notifier.onDownloadStarted().build()) - wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, "${javaClass.name}:WakeLock" - ) - wakeLock.acquire() + wakeLock = acquireWakeLock(javaClass.name) } /** @@ -143,11 +141,10 @@ class UpdaterService : Service() { context.isServiceRunning(UpdaterService::class.java) /** - * Make a backup from library + * Downloads a new update and let the user install the new version from a notification. * - * @param context context of application - * @param uri path of Uri - * @param flags determines what to backup + * @param context the application context. + * @param url the url to the new update. */ fun start(context: Context, url: String, title: String = context.getString(R.string.app_name)) { if (!isRunning(context)) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 8af6e3028c..f4ffd794d5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -3,12 +3,10 @@ package eu.kanade.tachiyomi.ui.setting import android.annotation.SuppressLint import android.app.Dialog import android.content.ActivityNotFoundException -import android.content.Context.POWER_SERVICE import android.content.Intent import android.net.Uri import android.os.Build import android.os.Bundle -import android.os.PowerManager import android.provider.Settings import androidx.preference.PreferenceScreen import com.afollestad.materialdialogs.MaterialDialog @@ -28,6 +26,7 @@ import eu.kanade.tachiyomi.util.preference.preference import eu.kanade.tachiyomi.util.preference.summaryRes import eu.kanade.tachiyomi.util.preference.switchPreference import eu.kanade.tachiyomi.util.preference.titleRes +import eu.kanade.tachiyomi.util.system.powerManager import eu.kanade.tachiyomi.util.system.toast import rx.Observable import rx.android.schedulers.AndroidSchedulers @@ -96,8 +95,7 @@ class SettingsAdvancedController : SettingsController() { onClick { val packageName: String = context.packageName - val pm = context.getSystemService(POWER_SERVICE) as PowerManager? - if (!pm!!.isIgnoringBatteryOptimizations(packageName)) { + if (!context.powerManager.isIgnoringBatteryOptimizations(packageName)) { try { val intent = Intent().apply { action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt index 8b1be08716..76c747a515 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt @@ -147,6 +147,15 @@ val Context.connectivityManager: ConnectivityManager val Context.powerManager: PowerManager get() = getSystemService(Context.POWER_SERVICE) as PowerManager +/** + * Convenience method to acquire a partial wake lock. + */ +fun Context.acquireWakeLock(tag: String): PowerManager.WakeLock { + val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "$tag:WakeLock") + wakeLock.acquire() + return wakeLock +} + /** * Function used to send a local broadcast asynchronous *