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 // Send the update immediately
SensorWorker.start(context) SensorReceiver.updateAllSensors(context)
} }
} }
if (SleepSegmentEvent.hasEvents(intent) && isEnabled(context, sleepSegment.id)) { if (SleepSegmentEvent.hasEvents(intent) && isEnabled(context, sleepSegment.id)) {

View file

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

View file

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

View file

@ -2,7 +2,7 @@ package io.homeassistant.companion.android.bluetooth.ble
import android.content.Context import android.content.Context
import io.homeassistant.companion.android.sensors.BluetoothSensorManager 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 org.altbeacon.beacon.Beacon
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.round import kotlin.math.round
@ -80,6 +80,6 @@ class IBeaconMonitor {
private fun sendUpdate(context: Context, tmp: List<IBeacon>) { private fun sendUpdate(context: Context, tmp: List<IBeacon>) {
beacons = tmp beacons = tmp
sensorManager.updateBeaconMonitoringSensor(context) 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.BluetoothSensorManager
import io.homeassistant.companion.android.sensors.LocationSensorManager import io.homeassistant.companion.android.sensors.LocationSensorManager
import io.homeassistant.companion.android.sensors.NotificationSensorManager 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.settings.SettingsActivity
import io.homeassistant.companion.android.util.UrlHandler import io.homeassistant.companion.android.util.UrlHandler
import io.homeassistant.companion.android.websocket.WebsocketManager 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 -> { COMMAND_LAUNCH_APP -> {
if (!jsonData[PACKAGE_NAME].isNullOrEmpty()) { if (!jsonData[PACKAGE_NAME].isNullOrEmpty()) {
handleDeviceCommands(jsonData) handleDeviceCommands(jsonData)
@ -867,7 +867,7 @@ class MessagingManager @Inject constructor(
) )
} }
BluetoothSensorManager().requestSensorUpdate(context) BluetoothSensorManager().requestSensorUpdate(context)
SensorWorker.start(context) SensorReceiver.updateAllSensors(context)
} }
} }
COMMAND_BEACON_MONITOR -> { COMMAND_BEACON_MONITOR -> {

View file

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

View file

@ -71,6 +71,12 @@ class SensorReceiver : SensorReceiverBase() {
const val ACTION_REQUEST_SENSORS_UPDATE = const val ACTION_REQUEST_SENSORS_UPDATE =
"io.homeassistant.companion.android.background.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 // 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.database.settings.SettingsDao
import io.homeassistant.companion.android.sensors.LastAppSensorManager import io.homeassistant.companion.android.sensors.LastAppSensorManager
import io.homeassistant.companion.android.sensors.SensorReceiver import io.homeassistant.companion.android.sensors.SensorReceiver
import io.homeassistant.companion.android.sensors.SensorWorker
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asSharedFlow
@ -232,7 +231,7 @@ class SensorDetailViewModel @Inject constructor(
} }
private fun refreshSensorData() { private fun refreshSensorData() {
SensorWorker.start(getApplication()) SensorReceiver.updateAllSensors(getApplication())
} }
fun getSettingTranslatedTitle(key: String): String { fun getSettingTranslatedTitle(key: String): String {

View file

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

View file

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

View file

@ -38,6 +38,7 @@
<action android:name="android.intent.action.QUICKBOOT_POWERON" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.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="android.app.action.NEXT_ALARM_CLOCK_CHANGED" />
<action android:name="io.homeassistant.companion.android.UPDATE_SENSORS" />
</intent-filter> </intent-filter>
</receiver> </receiver>
<uses-library <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.home.views.LoadHomePage
import io.homeassistant.companion.android.onboarding.OnboardingActivity import io.homeassistant.companion.android.onboarding.OnboardingActivity
import io.homeassistant.companion.android.onboarding.integration.MobileAppIntegrationActivity import io.homeassistant.companion.android.onboarding.integration.MobileAppIntegrationActivity
import io.homeassistant.companion.android.sensors.SensorReceiver
import io.homeassistant.companion.android.sensors.SensorWorker import io.homeassistant.companion.android.sensors.SensorWorker
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@ -64,7 +65,7 @@ class HomeActivity : ComponentActivity(), HomeView {
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
SensorWorker.start(this) SensorReceiver.updateAllSensors(this)
} }
override fun onDestroy() { 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.FavoritesDao
import io.homeassistant.companion.android.database.wear.getAllFlow import io.homeassistant.companion.android.database.wear.getAllFlow
import io.homeassistant.companion.android.sensors.SensorReceiver import io.homeassistant.companion.android.sensors.SensorReceiver
import io.homeassistant.companion.android.sensors.SensorWorker
import io.homeassistant.companion.android.util.RegistriesDataHandler import io.homeassistant.companion.android.util.RegistriesDataHandler
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
@ -302,7 +301,7 @@ class MainViewModel @Inject constructor(
isEnabled: Boolean isEnabled: Boolean
) { ) {
sensorDao.setSensorsEnabled(listOf(basicSensor.id), isEnabled) sensorDao.setSensorsEnabled(listOf(basicSensor.id), isEnabled)
SensorWorker.start(getApplication()) SensorReceiver.updateAllSensors(getApplication())
} }
fun updateAllSensors(sensorManager: SensorManager) { fun updateAllSensors(sensorManager: SensorManager) {

View file

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

View file

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

View file

@ -59,6 +59,12 @@ class SensorReceiver : SensorReceiverBase() {
const val ACTION_REQUEST_SENSORS_UPDATE = const val ACTION_REQUEST_SENSORS_UPDATE =
"io.homeassistant.companion.android.background.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 // Suppress Lint because we only register for the receiver if the android version matches the intent