Skip to content

Commit

Permalink
[tklock] Keep p-sensor active while handling proximity locking
Browse files Browse the repository at this point in the history
Proximity locking occurs when proximity sensor is covered after display is
blanked due to inactivity timers. The locking depends on proximity sensor
state, which might not be available in on-demand proximity mode.

To keep proximity sensor powered on, imply need for it while there is
pending proximity locking timeout scheduled.

Signed-off-by: Simo Piiroinen <simo.piiroinen@jollamobile.com>
  • Loading branch information
spiiroin committed Mar 15, 2019
1 parent d865294 commit 444d7f1
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion tklock.c
Expand Up @@ -791,7 +791,7 @@ static void tklock_datapipe_devicelock_state_cb(gconstpointer data)
return;
}

/** Wait for proximity sensor callback for fingerprint unlock handling
/** Wait for proximity sensor -callback for fingerprint unlock handling
*
* @param aptr unused
*/
Expand Down Expand Up @@ -3191,6 +3191,10 @@ static void tklock_keyboard_slide_opened(void)
return;
}

/** Wait for proximity sensor -callback for keyboard slide handling
*
* @param aptr unused
*/
static void tklock_keyboard_slide_opened_cb(gpointer aptr)
{
(void)aptr;
Expand Down Expand Up @@ -3395,6 +3399,9 @@ tklock_autolock_quit(void)
* 3) we are not handling call/alarm/etc
* ========================================================================= */

/** Proximity sensor on-demand tag for proximity locking purposes */
#define PROXLOC_ON_DEMAND_TAG "proxlock"

/** Delay for enabling tklock from display off when proximity is covered */
#define PROXLOC_DELAY_MS (3000)

Expand Down Expand Up @@ -3441,6 +3448,12 @@ static gboolean tklock_proxlock_cb(gpointer aptr)

mce_log(LL_DEBUG, "proxlock timer triggered");
tklock_proxlock_evaluate();

/* Timer did not get re-activated, ps not needed anymore */
if( !tklock_proxlock_id )
datapipe_exec_full(&proximity_sensor_required_pipe,
PROXIMITY_SENSOR_REQUIRED_REM
PROXLOC_ON_DEMAND_TAG);
}
return false;
}
Expand All @@ -3452,6 +3465,11 @@ static void tklock_proxlock_disable(void)
if( tklock_proxlock_id ) {
g_source_remove(tklock_proxlock_id), tklock_proxlock_id = 0;
mce_log(LL_DEBUG, "proxlock timer stopped");

/* Timer canceled, ps not needed anymore */
datapipe_exec_full(&proximity_sensor_required_pipe,
PROXIMITY_SENSOR_REQUIRED_REM
PROXLOC_ON_DEMAND_TAG);
}
}

Expand All @@ -3463,6 +3481,10 @@ static void tklock_proxlock_enable(void)
tklock_proxlock_tick = mce_lib_get_boot_tick() + delay;
tklock_proxlock_id = g_timeout_add(delay, tklock_proxlock_cb, 0);
mce_log(LL_DEBUG, "proxlock timer started (%d ms)", delay);
/* Timer started, ps is needed */
datapipe_exec_full(&proximity_sensor_required_pipe,
PROXIMITY_SENSOR_REQUIRED_ADD
PROXLOC_ON_DEMAND_TAG);
}
}

Expand Down Expand Up @@ -3490,6 +3512,12 @@ static void tklock_proxlock_resume(void)
tklock_proxlock_id = g_timeout_add(delay, tklock_proxlock_cb, 0);
}

/* Timer canceled, ps not needed anymore */
if( !tklock_proxlock_id )
datapipe_exec_full(&proximity_sensor_required_pipe,
PROXIMITY_SENSOR_REQUIRED_REM
PROXLOC_ON_DEMAND_TAG);

EXIT:
return;
}
Expand Down

0 comments on commit 444d7f1

Please sign in to comment.