Added automatic data update worker

pull/102/head
Arty Bishop 2022-08-21 12:01:21 +01:00 zatwierdzone przez Arty Bishop
rodzic 216f96caef
commit 836fac2bb7
5 zmienionych plików z 41 dodań i 1 usunięć

Wyświetl plik

@ -73,6 +73,7 @@ dependencies {
implementation "androidx.navigation:navigation-runtime-ktx:$navigation_version"
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
implementation "androidx.work:work-runtime-ktx:$work_version"
implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version"

Wyświetl plik

@ -0,0 +1,20 @@
package com.rtbishop.look4sat.framework
import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.rtbishop.look4sat.presentation.MainApplication
import java.text.DateFormat
import java.util.*
class UpdateWorker constructor(private val appContext: Context, workerParams: WorkerParameters) :
Worker(appContext, workerParams) {
override fun doWork(): Result {
val dateTime = DateFormat.getDateTimeInstance().format(Calendar.getInstance().time)
Log.d("UpdateWorker", "Started periodic data update on $dateTime")
(appContext.applicationContext as MainApplication).repository.updateFromWeb()
return Result.success()
}
}

Wyświetl plik

@ -31,8 +31,11 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.navigation.fragment.findNavController
import androidx.work.*
import com.rtbishop.look4sat.databinding.ActivityMainBinding
import com.rtbishop.look4sat.framework.UpdateWorker
import dagger.hilt.android.AndroidEntryPoint
import java.util.concurrent.TimeUnit
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@ -43,6 +46,7 @@ class MainActivity : AppCompatActivity() {
installSplashScreen()
super.onCreate(savedInstanceState)
setContentView(ActivityMainBinding.inflate(layoutInflater).root)
refreshUpdateWorker(this)
}
override fun attachBaseContext(newBase: Context?) {
@ -51,6 +55,14 @@ class MainActivity : AppCompatActivity() {
applyOverrideConfiguration(newConfig)
super.attachBaseContext(newBase)
}
private fun refreshUpdateWorker(context: Context, workerName: String = "UpdateWorker") {
val workPolicy = ExistingPeriodicWorkPolicy.REPLACE
val network = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
val request = PeriodicWorkRequest.Builder(UpdateWorker::class.java, 24, TimeUnit.HOURS)
.setConstraints(network).build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(workerName, workPolicy, request)
}
}
fun <T> Fragment.getNavResult(@IdRes id: Int, key: String, onResult: (result: T) -> Unit) {

Wyświetl plik

@ -18,7 +18,13 @@
package com.rtbishop.look4sat.presentation
import android.app.Application
import com.rtbishop.look4sat.domain.IDataRepository
import dagger.hilt.android.HiltAndroidApp
import javax.inject.Inject
@HiltAndroidApp
class MainApplication : Application()
class MainApplication : Application() {
@Inject
lateinit var repository: IDataRepository
}

Wyświetl plik

@ -10,6 +10,7 @@ buildscript {
constraint_version = '2.1.4'
lifecycle_version = '2.5.1'
navigation_version = '2.5.1'
work_version = '2.7.1'
room_version = '2.4.3'
material_version = '1.6.1'
osmdroid_version = '6.1.13'