Skip to content

Commit 46d86fb

Browse files
committed
Simplify SensorWorker by keeping only one implementation
1 parent 98b15a4 commit 46d86fb

7 files changed

Lines changed: 35 additions & 79 deletions

File tree

app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ import io.homeassistant.companion.android.authenticator.Authenticator
4242
import io.homeassistant.companion.android.authenticator.Authenticator.Companion.AuthenticationResult
4343
import io.homeassistant.companion.android.common.R as commonR
4444
import io.homeassistant.companion.android.common.compose.theme.HATheme
45+
import io.homeassistant.companion.android.common.sensors.SensorWorker
4546
import io.homeassistant.companion.android.common.util.CheckLocalNetworkPermissionUseCase
4647
import io.homeassistant.companion.android.common.util.SdkVersion
4748
import io.homeassistant.companion.android.launch.applock.HazeLockOverlay
4849
import io.homeassistant.companion.android.sensors.SensorReceiver
49-
import io.homeassistant.companion.android.sensors.SensorWorker
5050
import io.homeassistant.companion.android.util.ChangeLog
5151
import io.homeassistant.companion.android.util.CheckLocationDisabledUseCase
5252
import io.homeassistant.companion.android.util.PLAY_SERVICES_FLAVOR_DOC_URL

app/src/main/kotlin/io/homeassistant/companion/android/sensors/SensorWorker.kt

Lines changed: 0 additions & 32 deletions
This file was deleted.

app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ import io.homeassistant.companion.android.common.data.keychain.KeyChainRepositor
9595
import io.homeassistant.companion.android.common.data.keychain.NamedKeyChain
9696
import io.homeassistant.companion.android.common.data.prefs.NightModeTheme
9797
import io.homeassistant.companion.android.common.data.servers.ServerManager
98+
import io.homeassistant.companion.android.common.sensors.SensorWorker
9899
import io.homeassistant.companion.android.common.util.AppVersionProvider
99100
import io.homeassistant.companion.android.common.util.FailFast
100101
import io.homeassistant.companion.android.common.util.GestureAction
@@ -136,7 +137,6 @@ import io.homeassistant.companion.android.improv.ui.ImprovSetupDialog
136137
import io.homeassistant.companion.android.launch.LaunchActivity
137138
import io.homeassistant.companion.android.nfc.WriteNfcTag
138139
import io.homeassistant.companion.android.sensors.SensorReceiver
139-
import io.homeassistant.companion.android.sensors.SensorWorker
140140
import io.homeassistant.companion.android.settings.ConnectionSecurityLevelFragment
141141
import io.homeassistant.companion.android.settings.SettingsActivity
142142
import io.homeassistant.companion.android.settings.server.ServerChooserFragment

app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchActivityTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import dagger.hilt.android.testing.HiltAndroidTest
1616
import dagger.hilt.android.testing.HiltTestApplication
1717
import dagger.hilt.android.testing.UninstallModules
1818
import io.homeassistant.companion.android.common.data.servers.ServerManager
19+
import io.homeassistant.companion.android.common.sensors.SensorWorker
1920
import io.homeassistant.companion.android.common.util.DisabledLocationHandler
2021
import io.homeassistant.companion.android.di.ServerManagerModule
2122
import io.homeassistant.companion.android.sensors.SensorReceiver
22-
import io.homeassistant.companion.android.sensors.SensorWorker
2323
import io.homeassistant.companion.android.util.ChangeLog
2424
import io.homeassistant.companion.android.websocket.WebsocketManager
2525
import io.mockk.Runs

common/src/main/kotlin/io/homeassistant/companion/android/common/sensors/SensorWorkerBase.kt renamed to common/src/main/kotlin/io/homeassistant/companion/android/common/sensors/SensorWorker.kt

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ import android.content.pm.ServiceInfo
77
import android.os.Build
88
import androidx.core.app.NotificationCompat
99
import androidx.core.content.getSystemService
10+
import androidx.work.Constraints
1011
import androidx.work.CoroutineWorker
12+
import androidx.work.ExistingPeriodicWorkPolicy
1113
import androidx.work.ForegroundInfo
14+
import androidx.work.NetworkType
15+
import androidx.work.PeriodicWorkRequestBuilder
16+
import androidx.work.WorkManager
1217
import androidx.work.WorkerParameters
1318
import dagger.hilt.EntryPoint
1419
import dagger.hilt.InstallIn
@@ -19,13 +24,13 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager
1924
import io.homeassistant.companion.android.common.util.CHANNEL_SENSOR_WORKER
2025
import io.homeassistant.companion.android.common.util.CheckLocalNetworkPermissionUseCase
2126
import io.homeassistant.companion.android.common.util.SdkVersion
27+
import java.util.concurrent.TimeUnit
2228
import kotlinx.coroutines.Dispatchers
2329
import kotlinx.coroutines.withContext
2430
import timber.log.Timber
2531

26-
abstract class SensorWorkerBase(val appContext: Context, workerParams: WorkerParameters) :
27-
CoroutineWorker(appContext, workerParams) {
28-
protected abstract val sensorReceiver: SensorReceiverBase
32+
class SensorWorker(private val context: Context, workerParams: WorkerParameters) :
33+
CoroutineWorker(context, workerParams) {
2934

3035
@EntryPoint
3136
@InstallIn(SingletonComponent::class)
@@ -34,21 +39,36 @@ abstract class SensorWorkerBase(val appContext: Context, workerParams: WorkerPar
3439
fun checkLocalNetworkPermission(): CheckLocalNetworkPermissionUseCase
3540
fun lastUpdateManager(): LastUpdateManager
3641
fun sensorRepository(): SensorRepository
42+
fun sensorUpdater(): SensorUpdater
3743
}
3844

3945
companion object {
40-
const val TAG = "SensorWorker"
41-
const val NOTIFICATION_ID = 42
46+
private const val TAG = "SensorWorker"
47+
private const val NOTIFICATION_ID = 42
48+
49+
fun start(context: Context) {
50+
val constraints = Constraints.Builder()
51+
.setRequiredNetworkType(NetworkType.CONNECTED).build()
52+
53+
val sensorWorker =
54+
PeriodicWorkRequestBuilder<SensorWorker>(15, TimeUnit.MINUTES)
55+
.setConstraints(constraints)
56+
.build()
57+
58+
WorkManager.getInstance(context)
59+
.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, sensorWorker)
60+
}
4261
}
4362

44-
private val notificationManager = appContext.getSystemService<NotificationManager>()!!
63+
private val notificationManager = context.getSystemService<NotificationManager>()!!
4564

4665
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
47-
val entryPoint = EntryPointAccessors.fromApplication(appContext, SensorWorkerEntryPoint::class.java)
66+
val entryPoint = EntryPointAccessors.fromApplication(context, SensorWorkerEntryPoint::class.java)
4867
val sensorRepository = entryPoint.sensorRepository()
4968
val serverManager = entryPoint.serverManager()
5069
val checkLocalNetworkPermission = entryPoint.checkLocalNetworkPermission()
5170
val lastUpdateManager = entryPoint.lastUpdateManager()
71+
val sensorUpdater = entryPoint.sensorUpdater()
5272

5373
val enabledSensorCount = sensorRepository.getEnabledCount()
5474
if (
@@ -64,7 +84,7 @@ abstract class SensorWorkerBase(val appContext: Context, workerParams: WorkerPar
6484
createNotificationChannel()
6585
val notification = NotificationCompat.Builder(applicationContext, CHANNEL_SENSOR_WORKER)
6686
.setSmallIcon(commonR.drawable.ic_stat_ic_notification)
67-
.setContentTitle(appContext.getString(commonR.string.updating_sensors))
87+
.setContentTitle(context.getString(commonR.string.updating_sensors))
6888
.setPriority(NotificationCompat.PRIORITY_LOW)
6989
.build()
7090

@@ -91,7 +111,7 @@ abstract class SensorWorkerBase(val appContext: Context, workerParams: WorkerPar
91111
if (lastUpdateSensor.any { it.enabled }) {
92112
lastUpdateManager.sendLastUpdate(TAG)
93113
}
94-
sensorReceiver.updateSensors(appContext, serverManager, sensorRepository, null)
114+
sensorUpdater.updateSensors()
95115
}
96116

97117
// Cleanup orphaned sensors that may have been created by a slow or long running update
@@ -102,11 +122,11 @@ abstract class SensorWorkerBase(val appContext: Context, workerParams: WorkerPar
102122
Result.success()
103123
}
104124

105-
protected fun createNotificationChannel() {
125+
private fun createNotificationChannel() {
106126
if (SdkVersion.isAtLeast(Build.VERSION_CODES.O)) {
107127
val notificationChannel = NotificationChannel(
108128
CHANNEL_SENSOR_WORKER,
109-
appContext.getString(commonR.string.sensor_updates),
129+
context.getString(commonR.string.sensor_updates),
110130
NotificationManager.IMPORTANCE_LOW,
111131
)
112132
notificationManager.createNotificationChannel(notificationChannel)

wear/src/main/kotlin/io/homeassistant/companion/android/home/HomeActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import androidx.lifecycle.lifecycleScope
1616
import androidx.lifecycle.repeatOnLifecycle
1717
import androidx.wear.protolayout.ActionBuilders
1818
import dagger.hilt.android.AndroidEntryPoint
19+
import io.homeassistant.companion.android.common.sensors.SensorWorker
1920
import io.homeassistant.companion.android.common.util.SdkVersion
2021
import io.homeassistant.companion.android.home.views.DEEPLINK_PREFIX_SET_CAMERA_TILE
2122
import io.homeassistant.companion.android.home.views.DEEPLINK_PREFIX_SET_SHORTCUT_TILE
@@ -24,7 +25,6 @@ import io.homeassistant.companion.android.home.views.DEEPLINK_PREFIX_SET_THERMOS
2425
import io.homeassistant.companion.android.home.views.LoadHomePage
2526
import io.homeassistant.companion.android.onboarding.OnboardingActivity
2627
import io.homeassistant.companion.android.sensors.SensorReceiver
27-
import io.homeassistant.companion.android.sensors.SensorWorker
2828
import io.homeassistant.companion.android.tiles.OpenTileSettingsActivity
2929
import javax.inject.Inject
3030
import kotlinx.coroutines.CancellationException

wear/src/main/kotlin/io/homeassistant/companion/android/sensors/SensorWorker.kt

Lines changed: 0 additions & 32 deletions
This file was deleted.

0 commit comments

Comments
 (0)