Skip to content

Commit 61ec968

Browse files
committed
activate periodic sync worker when startup
1 parent e60b1c3 commit 61ec968

File tree

12 files changed

+32
-61
lines changed

12 files changed

+32
-61
lines changed

app/build.gradle

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,9 @@ dependencies {
8383

8484
def appCenterSdkVersion = '4.1.0'
8585
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
86-
// implementation "androidx.work:work-runtime:2.5.0"
8786
implementation 'androidx.work:work-runtime-ktx:2.8.1'
88-
implementation("androidx.hilt:hilt-work:1.0.0")
89-
kapt("androidx.hilt:hilt-compiler:1.0.0")
87+
implementation "androidx.hilt:hilt-work:1.0.0"
88+
kapt "androidx.hilt:hilt-compiler:1.0.0"
9089

9190
implementation fileTree(dir: 'libs', include: ['*.jar'])
9291
implementation 'androidx.appcompat:appcompat:1.3.0'
@@ -110,7 +109,7 @@ dependencies {
110109
implementation "androidx.compose.material3:material3:1.0.1"
111110
implementation "androidx.compose.material3:material3-window-size-class:1.0.1"
112111

113-
implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.0-alpha03"
112+
implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.1"
114113

115114
// start up runtime
116115
implementation "androidx.startup:startup-runtime:1.1.1"
@@ -133,13 +132,9 @@ dependencies {
133132

134133

135134
// third-party lib
136-
// implementation "com.squareup.moshi:moshi:1.14.0"
137-
// kapt "com.squareup.moshi:moshi-kotlin-codegen:1.14.0"
138135
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
139-
// implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
140136
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
141137

142-
// TODO: remove okhttp in the future
143138
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
144139
implementation 'com.github.kongzue.DialogX:DialogX:0.0.43.beta13'
145140

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
</intent>
3030
</queries>
3131

32+
<meta-data
33+
android:name="com.google.android.gms.version"
34+
android:value="@integer/google_play_services_version" />
35+
3236
<application
3337
android:allowBackup="true"
3438
android:icon="@mipmap/icon"
@@ -50,29 +54,17 @@
5054
android:resource="@xml/filepaths" />
5155
</provider>
5256

53-
<!-- If you want to disable android.startup completely. -->
54-
<!-- <provider-->
55-
<!-- android:name="androidx.startup.InitializationProvider"-->
56-
<!-- android:authorities="${applicationId}.androidx-startup"-->
57-
<!-- android:exported="false"-->
58-
<!-- tools:node="remove">-->
59-
<!-- </provider>-->
60-
6157
<provider
6258
android:name="androidx.startup.InitializationProvider"
6359
android:authorities="${applicationId}.androidx-startup"
6460
android:exported="false"
6561
tools:node="merge">
6662
<meta-data
67-
android:name="com.lcl.lclmeasurementtool.sync.SyncInitializer"
63+
android:name="androidx.work.WorkManagerInitializer"
6864
android:value="androidx.startup"
6965
tools:node="remove" />
7066
</provider>
7167

72-
<meta-data
73-
android:name="com.google.android.gms.version"
74-
android:value="@integer/google_play_services_version" />
75-
7668
<activity
7769
android:name=".MainActivity2"
7870
android:exported="true"

app/src/main/java/com/lcl/lclmeasurementtool/LCLApplication.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.lcl.lclmeasurementtool
22

33
import android.app.Application
4+
import android.util.Log
45
import androidx.hilt.work.HiltWorkerFactory
56
import androidx.work.Configuration
7+
import com.lcl.lclmeasurementtool.sync.Sync
68
import dagger.hilt.android.HiltAndroidApp
79
import javax.inject.Inject
810

@@ -14,14 +16,14 @@ class LCLApplication : Application(), Configuration.Provider {
1416
@Inject lateinit var workerFactory: HiltWorkerFactory
1517

1618
override fun getWorkManagerConfiguration() = Configuration.Builder()
19+
.setMinimumLoggingLevel(Log.DEBUG)
1720
.setWorkerFactory(workerFactory)
1821
.build()
1922

2023
override fun onCreate() {
2124
super.onCreate()
2225

23-
// TODO: uncomment the sync code below
2426
// Initialize Sync; the system responsible for keeping data in the app up to date.
25-
// Sync.initialize(context = this)
27+
Sync.initialize(context = this)
2628
}
2729
}

app/src/main/java/com/lcl/lclmeasurementtool/MainActivity2.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class MainActivity2 : ComponentActivity() {
4545
@Inject
4646
lateinit var simStateMonitor: SimStateMonitor
4747

48-
val viewModel: MainActivityViewModel by viewModels()
48+
private val viewModel: MainActivityViewModel by viewModels()
4949

5050
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
5151
override fun onCreate(savedInstanceState: Bundle?) {
@@ -104,8 +104,8 @@ class MainActivity2 : ComponentActivity() {
104104
setContent {
105105
if (uiState == MainActivityUiState.Login) {
106106
viewModel.setDeviceId(UUID.randomUUID().toString())
107-
// Login(viewModel = viewModel)
108-
// return@setContent
107+
Login(viewModel = viewModel)
108+
return@setContent
109109
}
110110
LCLApp(windowSizeClass = calculateWindowSizeClass(activity = this), networkMonitor, simStateMonitor)
111111
}

app/src/main/java/com/lcl/lclmeasurementtool/sync/SyncInitializer.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.lcl.lclmeasurementtool.sync
22

33
import android.content.Context
4+
import android.util.Log
45
import androidx.startup.AppInitializer
56
import androidx.startup.Initializer
67
import androidx.work.ExistingPeriodicWorkPolicy
@@ -13,6 +14,7 @@ object Sync {
1314
// automatic initialization with Androidx Startup. It is called from the app module's
1415
// Application.onCreate() and should be only done once.
1516
fun initialize(context: Context) {
17+
Log.d("Sync", "Sync.initialize called")
1618
AppInitializer.getInstance(context)
1719
.initializeComponent(SyncInitializer::class.java)
1820
}
@@ -22,13 +24,12 @@ internal const val SyncWorkName = "LCLDataReportSync"
2224

2325
class SyncInitializer: Initializer<Sync> {
2426
override fun create(context: Context): Sync {
25-
WorkManager.getInstance(context).apply {
26-
enqueueUniquePeriodicWork(
27+
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
2728
SyncWorkName,
2829
ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE,
2930
UploadWorker.periodicSyncWork()
3031
)
31-
}
32+
Log.d("SyncInitializer", "SyncInitializer initialize here!")
3233
return Sync
3334
}
3435

app/src/main/java/com/lcl/lclmeasurementtool/sync/SyncUtil.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import retrofit2.HttpException
55
import kotlin.coroutines.cancellation.CancellationException
66

77
private suspend fun <T> suspendRunCatching(block: suspend () -> T): Result<T> = try {
8+
Log.d("suspendRunCatching", "block ${block.javaClass.name} run successfully")
89
Result.success(block())
910
} catch (cancellationException: CancellationException) {
1011
throw cancellationException

app/src/main/java/com/lcl/lclmeasurementtool/sync/UploadWorker.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.lcl.lclmeasurementtool.sync
22

33
import android.content.Context
4+
import android.util.Log
45
import androidx.hilt.work.HiltWorker
56
import androidx.work.*
67
import com.lcl.lclmeasurementtool.datastore.Dispatcher
@@ -18,7 +19,7 @@ import java.util.concurrent.TimeUnit
1819

1920
@HiltWorker
2021
class UploadWorker @AssistedInject constructor(
21-
@Assisted context: Context,
22+
@Assisted private val context: Context,
2223
@Assisted workerParameters: WorkerParameters,
2324
private val signalStrengthRepository: SignalStrengthRepository,
2425
private val connectivityRepository: ConnectivityRepository,
@@ -33,22 +34,27 @@ class UploadWorker @AssistedInject constructor(
3334
async { connectivityRepository.sync() }
3435
).all { it }
3536
if (syncSuccessfully) {
37+
Log.d(TAG, "upload successfully")
3638
return@withContext Result.success()
3739
} else {
40+
Log.d(TAG, "upload failed. some sync work failed")
3841
return@withContext Result.failure()
3942
}
4043
} catch (e: Exception) {
44+
Log.d(TAG, "upload failed. exception is $e")
4145
Result.failure()
4246
}
4347
}
4448

4549
companion object {
4650
fun periodicSyncWork() =
47-
PeriodicWorkRequest.Builder(UploadWorker::class.java, 8, TimeUnit.HOURS)
48-
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
51+
PeriodicWorkRequest.Builder(UploadWorker::class.java, 15, TimeUnit.MINUTES)
4952
.setConstraints(Constraints(requiredNetworkType = NetworkType.CONNECTED))
53+
.setInitialDelay(5, TimeUnit.MINUTES)
5054
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, Duration.ofMinutes(30))
5155
.build()
56+
57+
const val TAG = "UploadWorker"
5258
}
5359

5460
}

app/src/main/java/com/lcl/lclmeasurementtool/ui/HistoryScreen.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,22 @@
11
package com.lcl.lclmeasurementtool.ui
22

33
import androidx.compose.foundation.layout.Box
4-
import androidx.compose.foundation.layout.BoxWithConstraints
54
import androidx.compose.foundation.layout.Column
65
import androidx.compose.foundation.layout.padding
76
import androidx.compose.foundation.lazy.LazyColumn
8-
import androidx.compose.foundation.lazy.items
97
import androidx.compose.material3.*
108
import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
119
import androidx.compose.runtime.*
1210
import androidx.compose.ui.Modifier
1311
import androidx.compose.ui.graphics.Color
14-
import androidx.compose.ui.res.stringResource
1512
import androidx.compose.ui.text.style.TextAlign
16-
import androidx.compose.ui.tooling.preview.Preview
1713
import androidx.compose.ui.unit.dp
1814
import androidx.hilt.navigation.compose.hiltViewModel
19-
import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
2015
import androidx.lifecycle.compose.collectAsStateWithLifecycle
21-
import com.lcl.lclmeasurementtool.model.datamodel.ConnectivityReportModel
22-
import com.lcl.lclmeasurementtool.model.datamodel.SignalStrengthReportModel
2316
import com.lcl.lclmeasurementtool.model.viewmodels.ConnectivityUiState
2417
import com.lcl.lclmeasurementtool.model.viewmodels.ConnectivityViewModel
2518
import com.lcl.lclmeasurementtool.model.viewmodels.SignalStrengthUiState
2619
import com.lcl.lclmeasurementtool.model.viewmodels.SignalStrengthViewModel
27-
import dagger.hilt.android.lifecycle.HiltViewModel
28-
import kotlinx.coroutines.flow.collect
2920

3021
@Composable
3122
fun HistoryRoute(
@@ -55,7 +46,6 @@ fun HistoryScreen(
5546
}
5647
}
5748

58-
@OptIn(ExperimentalLifecycleComposeApi::class)
5949
@Composable
6050
fun LCLTabContents(
6151
selectedTabIndex: Int,

app/src/main/java/com/lcl/lclmeasurementtool/ui/HomeScreen.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import androidx.compose.ui.text.font.FontWeight
2626
import androidx.compose.ui.tooling.preview.Preview
2727
import androidx.compose.ui.unit.dp
2828
import androidx.compose.ui.unit.sp
29-
import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
3029
import androidx.lifecycle.compose.collectAsStateWithLifecycle
3130
import com.lcl.lclmeasurementtool.ConnectivityTestResult
3231
import com.lcl.lclmeasurementtool.MainActivityViewModel
@@ -41,7 +40,6 @@ fun HomeRoute(isOffline: Boolean, mainActivityViewModel: MainActivityViewModel)
4140
HomeScreen(isOffline = isOffline, mainActivityViewModel = mainActivityViewModel)
4241
}
4342

44-
@OptIn(ExperimentalLifecycleComposeApi::class)
4543
@Composable
4644
fun HomeScreen(modifier: Modifier = Modifier, isOffline: Boolean, mainActivityViewModel: MainActivityViewModel) {
4745

app/src/main/java/com/lcl/lclmeasurementtool/ui/LCLApplication.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import androidx.compose.ui.graphics.vector.ImageVector
1212
import androidx.compose.ui.res.stringResource
1313
import androidx.compose.ui.unit.dp
1414
import androidx.hilt.navigation.compose.hiltViewModel
15-
import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
1615
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1716
import androidx.navigation.NavDestination
1817
import androidx.navigation.NavDestination.Companion.hierarchy
@@ -27,9 +26,7 @@ import com.lcl.lclmeasurementtool.ui.navigation.historyGraph
2726
import com.lcl.lclmeasurementtool.ui.navigation.homeNavigationRoute
2827
import com.lcl.lclmeasurementtool.ui.navigation.homeScreen
2928

30-
@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class,
31-
ExperimentalLifecycleComposeApi::class
32-
)
29+
@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class)
3330
@Composable
3431
fun LCLApp(
3532
windowSizeClass: WindowSizeClass,

0 commit comments

Comments
 (0)