android: background loading

This commit is contained in:
Evgeny Poberezkin
2022-03-01 21:26:47 +00:00
parent 232149817e
commit 24166a4271
2 changed files with 29 additions and 53 deletions
@@ -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<BackgroundAPIWorker>()
.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 {
@@ -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<BackgroundAPIWorker>()
.setInitialDelay(5, TimeUnit.MINUTES)
.setConstraints(backgroundConstraints)
.build()
fun schedule(appContext: Context) {
val request = OneTimeWorkRequestBuilder<BGManager>()
.setInitialDelay(Duration.ofMinutes(10))
.setConstraints(constraints)
.build()
WorkManager.getInstance(appContext)
.enqueue(request)
}
}
}