|
@@ -7,10 +7,11 @@
|
|
|
*/
|
|
|
package com.nextcloud.client.jobs.transfer
|
|
|
|
|
|
-import android.app.Service
|
|
|
import android.content.Context
|
|
|
import android.content.Intent
|
|
|
import android.os.IBinder
|
|
|
+import androidx.lifecycle.Lifecycle
|
|
|
+import androidx.lifecycle.LifecycleService
|
|
|
import com.nextcloud.client.account.User
|
|
|
import com.nextcloud.client.core.AsyncRunner
|
|
|
import com.nextcloud.client.core.LocalBinder
|
|
@@ -32,7 +33,7 @@ import dagger.android.AndroidInjection
|
|
|
import javax.inject.Inject
|
|
|
import javax.inject.Named
|
|
|
|
|
|
-class FileTransferService : Service() {
|
|
|
+class FileTransferService : LifecycleService() {
|
|
|
|
|
|
companion object {
|
|
|
const val TAG = "DownloaderService"
|
|
@@ -94,14 +95,16 @@ class FileTransferService : Service() {
|
|
|
|
|
|
override fun onCreate() {
|
|
|
AndroidInjection.inject(this)
|
|
|
+ super.onCreate()
|
|
|
}
|
|
|
|
|
|
- override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
|
|
|
- if (intent.action != ACTION_TRANSFER) {
|
|
|
+ override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
|
|
+ super.onStartCommand(intent, flags, startId)
|
|
|
+ if (intent == null || intent.action != ACTION_TRANSFER) {
|
|
|
return START_NOT_STICKY
|
|
|
}
|
|
|
|
|
|
- if (!isRunning) {
|
|
|
+ if (!isRunning && lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
|
|
|
ForegroundServiceHelper.startService(
|
|
|
this,
|
|
|
AppNotificationManager.TRANSFER_NOTIFICATION_ID,
|
|
@@ -111,16 +114,19 @@ class FileTransferService : Service() {
|
|
|
}
|
|
|
|
|
|
val request: Request = intent.getParcelableArgument(EXTRA_REQUEST, Request::class.java)!!
|
|
|
- val transferManager = getTransferManager(request.user)
|
|
|
- transferManager.enqueue(request)
|
|
|
+
|
|
|
+ getTransferManager(request.user).run {
|
|
|
+ enqueue(request)
|
|
|
+ }
|
|
|
|
|
|
logger.d(TAG, "Enqueued new transfer: ${request.uuid} ${request.file.remotePath}")
|
|
|
|
|
|
return START_NOT_STICKY
|
|
|
}
|
|
|
|
|
|
- override fun onBind(intent: Intent?): IBinder? {
|
|
|
- val user = intent?.getParcelableArgument(EXTRA_USER, User::class.java) ?: return null
|
|
|
+ override fun onBind(intent: Intent): IBinder? {
|
|
|
+ super.onBind(intent)
|
|
|
+ val user = intent.getParcelableArgument(EXTRA_USER, User::class.java) ?: return null
|
|
|
return Binder(getTransferManager(user), this)
|
|
|
}
|
|
|
|
|
@@ -128,7 +134,7 @@ class FileTransferService : Service() {
|
|
|
if (!isRunning) {
|
|
|
logger.d(TAG, "All downloads completed")
|
|
|
notificationsManager.cancelTransferNotification()
|
|
|
- stopForeground(true)
|
|
|
+ stopForeground(STOP_FOREGROUND_DETACH)
|
|
|
stopSelf()
|
|
|
} else if (transfer.direction == Direction.DOWNLOAD) {
|
|
|
notificationsManager.postDownloadTransferProgress(
|