From 01ac26e67b39892c97283540cbcf6f28654df82e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Thu, 7 Nov 2019 17:50:12 +0100 Subject: [PATCH] [Sync] Fix background sync on Android O+. --- .../pl/szczodrzynski/edziennik/MainActivity.kt | 14 +++++--------- .../szczodrzynski/edziennik/api/v2/ApiService.kt | 2 ++ .../edziennik/api/v2/events/task/IApiTask.kt | 9 ++++++++- build.gradle | 4 ++-- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt index 11f7155b..a2dbdeb0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt @@ -36,7 +36,6 @@ import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import pl.droidsonroids.gif.GifDrawable import pl.szczodrzynski.edziennik.App.APP_URL -import pl.szczodrzynski.edziennik.api.v2.ApiService import pl.szczodrzynski.edziennik.api.v2.events.* import pl.szczodrzynski.edziennik.api.v2.events.task.EdziennikTask import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.* @@ -524,17 +523,14 @@ class MainActivity : AppCompatActivity() { fun syncCurrentFeature() { swipeRefreshLayout.isRefreshing = true Toast.makeText(this, fragmentToSyncName(navTargetId), Toast.LENGTH_SHORT).show() - ApiService.start(this) val fragmentParam = when (navTargetId) { DRAWER_ITEM_MESSAGES -> MessagesFragment.pageSelection else -> 0 } - EventBus.getDefault().postSticky( - EdziennikTask.syncProfile( - App.profileId, - listOf(navTargetId to fragmentParam) - ) - ) + EdziennikTask.syncProfile( + App.profileId, + listOf(navTargetId to fragmentParam) + ).enqueue(this) } @Subscribe(threadMode = ThreadMode.MAIN) fun onSyncStartedEvent(event: ApiTaskStartedEvent) { @@ -783,7 +779,7 @@ class MainActivity : AppCompatActivity() { fun loadProfile(id: Int) = loadProfile(id, navTargetId) fun loadProfile(id: Int, arguments: Bundle?) = loadProfile(id, navTargetId, arguments) fun loadProfile(id: Int, drawerSelection: Int, arguments: Bundle? = null) { - d("NavDebug", "loadProfile(id = $id, drawerSelection = $drawerSelection)") + //d("NavDebug", "loadProfile(id = $id, drawerSelection = $drawerSelection)") if (app.profile != null && App.profileId == id) { drawer.currentProfile = app.profile.id loadTarget(drawerSelection, arguments) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiService.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiService.kt index 162ecde1..38528a35 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiService.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiService.kt @@ -232,11 +232,13 @@ class ApiService : Service() { ____) | __/ | \ V /| | (_| __/ | (_) \ V / __/ | | | | | (_| | __/\__ \ |_____/ \___|_| \_/ |_|\___\___| \___/ \_/ \___|_| |_| |_|\__,_|\___||__*/ override fun onCreate() { + d(TAG, "Service created") EventBus.getDefault().register(this) notification.setIdle().setCloseAction() } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + d(TAG, "Foreground service onStartCommand") startForeground(EdziennikNotification.NOTIFICATION_ID, notification.notification) return START_NOT_STICKY } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/task/IApiTask.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/task/IApiTask.kt index 0deab23e..df3fa33a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/task/IApiTask.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/task/IApiTask.kt @@ -6,6 +6,8 @@ package pl.szczodrzynski.edziennik.api.v2.events.task import android.content.Context import android.content.Intent +import android.os.Build.VERSION.SDK_INT +import android.os.Build.VERSION_CODES.O import org.greenrobot.eventbus.EventBus import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.api.v2.ApiService @@ -25,7 +27,12 @@ abstract class IApiTask(open val profileId: Int) { abstract fun cancel() fun enqueue(context: Context) { - context.startService(Intent(context, ApiService::class.java)) + Intent(context, ApiService::class.java).let { + if (SDK_INT >= O) + context.startForegroundService(it) + else + context.startService(it) + } EventBus.getDefault().postSticky(this) } diff --git a/build.gradle b/build.gradle index 889ca74a..6be1df23 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { kotlin_version = '1.3.50' release = [ - versionName: "3.9.2-dev", - versionCode: 3090200 + versionName: "3.9.3-dev", + versionCode: 3090300 ] setup = [