Reduce usage of job scheduling to avoid throttling (#3087)

This commit is contained in:
Daniel Shokouhi 2022-11-22 11:04:55 -08:00 committed by GitHub
parent 21d301b3f8
commit f15b192a79
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 33 additions and 19 deletions

View file

@ -135,7 +135,7 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager {
)
// Send the update immediately
SensorWorker.start(context)
SensorReceiver.updateAllSensors(context)
}
}
if (SleepSegmentEvent.hasEvents(intent) && isEnabled(context, sleepSegment.id)) {

View file

@ -350,7 +350,7 @@ class LocationSensorManager : LocationSensorManagerBase() {
highAccuracyUpdateInterval.statelessIcon,
mapOf()
)
SensorWorker.start(latestContext)
SensorReceiver.updateAllSensors(latestContext)
HighAccuracyLocationService.restartService(latestContext, intervalInSeconds)
}
@ -369,7 +369,7 @@ class LocationSensorManager : LocationSensorManagerBase() {
highAccuracyUpdateInterval.statelessIcon,
mapOf()
)
SensorWorker.start(latestContext)
SensorReceiver.updateAllSensors(latestContext)
HighAccuracyLocationService.startService(latestContext, intervalInSeconds)
}
@ -381,7 +381,7 @@ class LocationSensorManager : LocationSensorManagerBase() {
highAccuracyMode.statelessIcon,
mapOf()
)
SensorWorker.start(latestContext)
SensorReceiver.updateAllSensors(latestContext)
HighAccuracyLocationService.stopService(latestContext)
}

View file

@ -99,6 +99,7 @@
<action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED" />
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
<action android:name="io.homeassistant.companion.android.UPDATE_SENSORS" />
</intent-filter>
</receiver>

View file

@ -2,7 +2,7 @@ package io.homeassistant.companion.android.bluetooth.ble
import android.content.Context
import io.homeassistant.companion.android.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.sensors.SensorWorker
import io.homeassistant.companion.android.sensors.SensorReceiver
import org.altbeacon.beacon.Beacon
import kotlin.math.abs
import kotlin.math.round
@ -80,6 +80,6 @@ class IBeaconMonitor {
private fun sendUpdate(context: Context, tmp: List<IBeacon>) {
beacons = tmp
sensorManager.updateBeaconMonitoringSensor(context)
SensorWorker.start(context)
SensorReceiver.updateAllSensors(context)
}
}

View file

@ -63,7 +63,7 @@ import io.homeassistant.companion.android.database.settings.WebsocketSetting
import io.homeassistant.companion.android.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.sensors.LocationSensorManager
import io.homeassistant.companion.android.sensors.NotificationSensorManager
import io.homeassistant.companion.android.sensors.SensorWorker
import io.homeassistant.companion.android.sensors.SensorReceiver
import io.homeassistant.companion.android.settings.SettingsActivity
import io.homeassistant.companion.android.util.UrlHandler
import io.homeassistant.companion.android.websocket.WebsocketManager
@ -537,7 +537,7 @@ class MessagingManager @Inject constructor(
}
}
}
COMMAND_UPDATE_SENSORS -> SensorWorker.start(context)
COMMAND_UPDATE_SENSORS -> SensorReceiver.updateAllSensors(context)
COMMAND_LAUNCH_APP -> {
if (!jsonData[PACKAGE_NAME].isNullOrEmpty()) {
handleDeviceCommands(jsonData)
@ -867,7 +867,7 @@ class MessagingManager @Inject constructor(
)
}
BluetoothSensorManager().requestSensorUpdate(context)
SensorWorker.start(context)
SensorReceiver.updateAllSensors(context)
}
}
COMMAND_BEACON_MONITOR -> {

View file

@ -159,7 +159,7 @@ class NotificationSensorManager : NotificationListenerService(), SensorManager {
)
// Need to send update!
SensorWorker.start(applicationContext)
SensorReceiver.updateAllSensors(applicationContext)
}
override fun onNotificationRemoved(sbn: StatusBarNotification) {
@ -217,7 +217,7 @@ class NotificationSensorManager : NotificationListenerService(), SensorManager {
)
// Need to send update!
SensorWorker.start(applicationContext)
SensorReceiver.updateAllSensors(applicationContext)
}
private fun updateActiveNotificationCount() {

View file

@ -71,6 +71,12 @@ class SensorReceiver : SensorReceiverBase() {
const val ACTION_REQUEST_SENSORS_UPDATE =
"io.homeassistant.companion.android.background.REQUEST_SENSORS_UPDATE"
fun updateAllSensors(context: Context) {
val intent = Intent(context, SensorReceiver::class.java)
intent.action = ACTION_UPDATE_SENSORS
context.sendBroadcast(intent)
}
}
// Suppress Lint because we only register for the receiver if the android version matches the intent

View file

@ -27,7 +27,6 @@ import io.homeassistant.companion.android.database.settings.SensorUpdateFrequenc
import io.homeassistant.companion.android.database.settings.SettingsDao
import io.homeassistant.companion.android.sensors.LastAppSensorManager
import io.homeassistant.companion.android.sensors.SensorReceiver
import io.homeassistant.companion.android.sensors.SensorWorker
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
@ -232,7 +231,7 @@ class SensorDetailViewModel @Inject constructor(
}
private fun refreshSensorData() {
SensorWorker.start(getApplication())
SensorReceiver.updateAllSensors(getApplication())
}
fun getSettingTranslatedTitle(key: String): String {

View file

@ -713,7 +713,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi
override fun onPause() {
super.onPause()
SensorWorker.start(this)
SensorReceiver.updateAllSensors(this)
presenter.setAppActive(false)
}

View file

@ -31,6 +31,7 @@ import javax.inject.Inject
abstract class SensorReceiverBase : BroadcastReceiver() {
companion object {
const val ACTION_UPDATE_SENSOR = "io.homeassistant.companion.android.UPDATE_SENSOR"
const val ACTION_UPDATE_SENSORS = "io.homeassistant.companion.android.UPDATE_SENSORS"
const val EXTRA_SENSOR_ID = "sensorId"
fun shouldDoFastUpdates(context: Context): Boolean {

View file

@ -38,6 +38,7 @@
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED" />
<action android:name="io.homeassistant.companion.android.UPDATE_SENSORS" />
</intent-filter>
</receiver>
<uses-library

View file

@ -13,6 +13,7 @@ import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.home.views.LoadHomePage
import io.homeassistant.companion.android.onboarding.OnboardingActivity
import io.homeassistant.companion.android.onboarding.integration.MobileAppIntegrationActivity
import io.homeassistant.companion.android.sensors.SensorReceiver
import io.homeassistant.companion.android.sensors.SensorWorker
import kotlinx.coroutines.launch
import javax.inject.Inject
@ -64,7 +65,7 @@ class HomeActivity : ComponentActivity(), HomeView {
override fun onPause() {
super.onPause()
SensorWorker.start(this)
SensorReceiver.updateAllSensors(this)
}
override fun onDestroy() {

View file

@ -25,7 +25,6 @@ import io.homeassistant.companion.android.database.wear.FavoriteCachesDao
import io.homeassistant.companion.android.database.wear.FavoritesDao
import io.homeassistant.companion.android.database.wear.getAllFlow
import io.homeassistant.companion.android.sensors.SensorReceiver
import io.homeassistant.companion.android.sensors.SensorWorker
import io.homeassistant.companion.android.util.RegistriesDataHandler
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.Flow
@ -302,7 +301,7 @@ class MainViewModel @Inject constructor(
isEnabled: Boolean
) {
sensorDao.setSensorsEnabled(listOf(basicSensor.id), isEnabled)
SensorWorker.start(getApplication())
SensorReceiver.updateAllSensors(getApplication())
}
fun updateAllSensors(sensorManager: SensorManager) {

View file

@ -198,7 +198,7 @@ class HealthServicesSensorManager : SensorManager {
forceUpdate = info.userActivityState == UserActivityState.USER_ACTIVITY_EXERCISE
)
SensorWorker.start(latestContext)
SensorReceiver.updateAllSensors(latestContext)
}
override fun onNewDataPointsReceived(dataPoints: DataPointContainer) {

View file

@ -93,6 +93,6 @@ class OnBodySensorManager : SensorManager, SensorEventListener {
}
// Send update immediately
SensorWorker.start(latestContext)
SensorReceiver.updateAllSensors(latestContext)
}
}

View file

@ -59,6 +59,12 @@ class SensorReceiver : SensorReceiverBase() {
const val ACTION_REQUEST_SENSORS_UPDATE =
"io.homeassistant.companion.android.background.REQUEST_SENSORS_UPDATE"
fun updateAllSensors(context: Context) {
val intent = Intent(context, SensorReceiver::class.java)
intent.action = ACTION_UPDATE_SENSORS
context.sendBroadcast(intent)
}
}
// Suppress Lint because we only register for the receiver if the android version matches the intent