diff --git a/app/build.gradle b/app/build.gradle index 144f098a..a9022d09 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/UpdateWorker.kt b/app/src/main/java/com/rtbishop/look4sat/framework/UpdateWorker.kt new file mode 100644 index 00000000..ea16e0fe --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/UpdateWorker.kt @@ -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() + } +} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/MainActivity.kt index 7bdedb43..fa394993 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/MainActivity.kt @@ -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 Fragment.getNavResult(@IdRes id: Int, key: String, onResult: (result: T) -> Unit) { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt index 5a78ca12..94a346ab 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt @@ -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 +} diff --git a/build.gradle b/build.gradle index 181a10ce..29817ef2 100644 --- a/build.gradle +++ b/build.gradle @@ -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'