From 24166a4271c3d1061b34834019e75d21c786bd5d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 1 Mar 2022 21:26:47 +0000 Subject: [PATCH] android: background loading --- .../main/java/chat/simplex/app/SimplexApp.kt | 40 +++--------------- .../java/chat/simplex/app/model/BGManager.kt | 42 +++++++++++-------- 2 files changed, 29 insertions(+), 53 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt index 0afefb1700..aeb4cb0ab7 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt @@ -1,13 +1,13 @@ package chat.simplex.app import android.app.Application -import android.content.Context import android.net.* import android.util.Log import androidx.lifecycle.* import androidx.work.* import chat.simplex.app.model.* import chat.simplex.app.views.helpers.withApi +import kotlinx.datetime.Clock import java.io.BufferedReader import java.io.InputStreamReader import java.util.* @@ -33,22 +33,9 @@ class SimplexApp: Application(), LifecycleEventObserver { lateinit var chatModel: ChatModel private lateinit var ntfManager: NtfManager - fun initiateBackgroundWork() { - val backgroundConstraints = Constraints.Builder() - .setRequiredNetworkType(NetworkType.CONNECTED) - .build() - val request = OneTimeWorkRequestBuilder() - .setInitialDelay(5, TimeUnit.MINUTES) - .setConstraints(backgroundConstraints) - .build() - WorkManager.getInstance(applicationContext) - .enqueue(request) - } - override fun onCreate() { super.onCreate() ProcessLifecycleOwner.get().lifecycle.addObserver(this) - registerNetworkCallback() ntfManager = NtfManager(applicationContext) val ctrl = chatInit(applicationContext.filesDir.toString()) controller = ChatController(ctrl, ntfManager, applicationContext) @@ -61,27 +48,10 @@ class SimplexApp: Application(), LifecycleEventObserver { override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { Log.d(TAG, "onStateChanged: $event") - } - - private fun registerNetworkCallback() { - val connectivityManager = getSystemService(ConnectivityManager::class.java) - connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() { - override fun onAvailable(network: Network) { - Log.e(TAG, "The default network is now: " + network) - } - - override fun onLost(network: Network) { - Log.e(TAG, "The application no longer has a default network. The last default network was " + network) - } - - override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { - Log.e(TAG, "The default network changed capabilities: " + networkCapabilities) - } - - override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) { - Log.e(TAG, "The default network changed link properties: " + linkProperties) - } - }) + if (event == Lifecycle.Event.ON_STOP) { + Log.e(TAG, "BGManager schedule ${Clock.System.now()}") + BGManager.schedule(applicationContext) + } } companion object { diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/BGManager.kt b/apps/android/app/src/main/java/chat/simplex/app/model/BGManager.kt index 3089a5ed0c..d274a98f6d 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/BGManager.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/BGManager.kt @@ -5,36 +5,42 @@ import android.util.Log import androidx.work.* import chat.simplex.app.TAG import chat.simplex.app.chatRecvMsg +import kotlinx.datetime.Clock +import java.time.Duration import java.util.concurrent.TimeUnit -class BackgroundAPIWorker(appContext: Context, workerParams: WorkerParameters, ctrl: ChatCtrl): +class BGManager(appContext: Context, workerParams: WorkerParameters): //, ctrl: ChatCtrl): Worker(appContext, workerParams) { - val controller = ctrl +// val controller = ctrl + + init {} + override fun doWork(): Result { - Log.d("BackgroundAPIWorker", "running") + Log.e(TAG, "BGManager doWork ${Clock.System.now()}") + schedule(applicationContext) getNewItems() - - // Enqueue another request for later to make this periodic - val request = buildRequest() - WorkManager.getInstance(applicationContext) - .enqueue(request) - return Result.success() } private fun getNewItems() { - val json = chatRecvMsg(controller) - val r = APIResponse.decodeStr(json).resp - Log.d(TAG, "chatRecvMsg: ${r.responseType}") + Log.e(TAG, "BGManager getNewItems") +// val json = chatRecvMsg(controller) +// val r = APIResponse.decodeStr(json).resp +// Log.d(TAG, "chatRecvMsg: ${r.responseType}") } - private fun buildRequest(): OneTimeWorkRequest { - val backgroundConstraints = Constraints.Builder() + companion object { + val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() - return OneTimeWorkRequestBuilder() - .setInitialDelay(5, TimeUnit.MINUTES) - .setConstraints(backgroundConstraints) - .build() + + fun schedule(appContext: Context) { + val request = OneTimeWorkRequestBuilder() + .setInitialDelay(Duration.ofMinutes(10)) + .setConstraints(constraints) + .build() + WorkManager.getInstance(appContext) + .enqueue(request) + } } }