Don't go to dead from sleep, doze produces extremely long delays.
This commit is contained in:
parent
9b81b7ea19
commit
4eb67120a5
2 changed files with 18 additions and 22 deletions
|
@ -33,15 +33,13 @@ trkpt has three states of power management. The states transition like this:
|
||||||
|
|
||||||
Location leaves homepoint → Full power (presumably motion sensors will trigger, but just in case)
|
Location leaves homepoint → Full power (presumably motion sensors will trigger, but just in case)
|
||||||
|
|
||||||
Unplugged from charger → Full power (maybe you are getting ready to depart)
|
Plugged/unplugged charger → Full power
|
||||||
|
|
||||||
Unable to receive fix for several minutes and not charging → Dead (time is doubled to accommodate slower sleeping pace)
|
|
||||||
|
|
||||||
3. **DEAD**: disables location updates.
|
3. **DEAD**: disables location updates.
|
||||||
|
|
||||||
Motion sensors → Full power
|
Motion sensors → Full power
|
||||||
|
|
||||||
Plugged in to charger → Full power
|
Plugged/unplugged charger → Full power
|
||||||
|
|
||||||
Although saving battery power is important, capturing trackpoints is the #1 priority. I'd rather have too many wakeups than too few.
|
Although saving battery power is important, capturing trackpoints is the #1 priority. I'd rather have too many wakeups than too few.
|
||||||
|
|
||||||
|
|
|
@ -562,23 +562,15 @@ class TrackerService: Service()
|
||||||
{
|
{
|
||||||
if (intent.action == Intent.ACTION_POWER_CONNECTED)
|
if (intent.action == Intent.ACTION_POWER_CONNECTED)
|
||||||
{
|
{
|
||||||
Log.i("VOUSSOIR", "Power connected")
|
|
||||||
device_is_charging = true
|
device_is_charging = true
|
||||||
if (location_interval == Keys.LOCATION_INTERVAL_DEAD)
|
|
||||||
{
|
|
||||||
reset_location_listeners(interval=Keys.LOCATION_INTERVAL_FULL_POWER)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (intent.action == Intent.ACTION_POWER_DISCONNECTED)
|
else if (intent.action == Intent.ACTION_POWER_DISCONNECTED)
|
||||||
{
|
{
|
||||||
Log.i("VOUSSOIR", "Power disconnected")
|
|
||||||
device_is_charging = false
|
device_is_charging = false
|
||||||
// If the user has just unplugged their device, maybe they're getting ready
|
}
|
||||||
// to go out.
|
if (trackingState == Keys.STATE_TRACKING_ACTIVE)
|
||||||
if (location_interval == Keys.LOCATION_INTERVAL_SLEEP)
|
{
|
||||||
{
|
reset_location_listeners(interval=Keys.LOCATION_INTERVAL_FULL_POWER)
|
||||||
reset_location_listeners(interval=Keys.LOCATION_INTERVAL_FULL_POWER)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -682,7 +674,7 @@ class TrackerService: Service()
|
||||||
Keys.PREF_ALLOW_SLEEP ->
|
Keys.PREF_ALLOW_SLEEP ->
|
||||||
{
|
{
|
||||||
allow_sleep = PreferencesHelper.loadAllowSleep()
|
allow_sleep = PreferencesHelper.loadAllowSleep()
|
||||||
if (! allow_sleep && location_interval != Keys.LOCATION_INTERVAL_FULL_POWER)
|
if (! allow_sleep && trackingState == Keys.STATE_TRACKING_ACTIVE && location_interval != Keys.LOCATION_INTERVAL_FULL_POWER)
|
||||||
{
|
{
|
||||||
reset_location_listeners(interval=Keys.LOCATION_INTERVAL_FULL_POWER)
|
reset_location_listeners(interval=Keys.LOCATION_INTERVAL_FULL_POWER)
|
||||||
}
|
}
|
||||||
|
@ -716,16 +708,22 @@ class TrackerService: Service()
|
||||||
val now = System.currentTimeMillis()
|
val now = System.currentTimeMillis()
|
||||||
last_watchdog = now
|
last_watchdog = now
|
||||||
|
|
||||||
val struggletime = if (location_interval == Keys.LOCATION_INTERVAL_SLEEP) (TIME_UNTIL_DEAD * 2) else TIME_UNTIL_DEAD
|
|
||||||
if (
|
if (
|
||||||
allow_sleep &&
|
allow_sleep &&
|
||||||
has_motion_sensor &&
|
has_motion_sensor &&
|
||||||
!device_is_charging &&
|
!device_is_charging &&
|
||||||
|
// We only go to dead during active tracking because if you are looking at the
|
||||||
|
// device in non-tracking mode you are probably waiting for your signal to recover.
|
||||||
trackingState == Keys.STATE_TRACKING_ACTIVE &&
|
trackingState == Keys.STATE_TRACKING_ACTIVE &&
|
||||||
location_interval != Keys.LOCATION_INTERVAL_DEAD &&
|
// We only go to dead from full power because in the sleep state, the wakelock is
|
||||||
(now - listeners_enabled_at) > struggletime &&
|
// turned off and the device may go into doze. During doze, the device stops
|
||||||
(now - currentBestLocation.time) > struggletime &&
|
// updating the location listeners anyway, so there is no benefit in going to dead.
|
||||||
(now - last_significant_motion) > struggletime
|
// When the user interacts with the device and it leaves doze, it's better to come
|
||||||
|
// from sleep state than dead state.
|
||||||
|
location_interval == Keys.LOCATION_INTERVAL_FULL_POWER &&
|
||||||
|
(now - listeners_enabled_at) > TIME_UNTIL_DEAD &&
|
||||||
|
(now - currentBestLocation.time) > TIME_UNTIL_DEAD &&
|
||||||
|
(now - last_significant_motion) > TIME_UNTIL_DEAD
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
reset_location_listeners(interval=Keys.LOCATION_INTERVAL_DEAD)
|
reset_location_listeners(interval=Keys.LOCATION_INTERVAL_DEAD)
|
||||||
|
|
Loading…
Reference in a new issue