mirror of
https://github.com/google/pebble.git
synced 2025-11-23 07:50:55 -05:00
Import of the watch repository from Pebble
This commit is contained in:
92
src/fw/shell/normal/app_idle_timeout.c
Normal file
92
src/fw/shell/normal/app_idle_timeout.c
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright 2024 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "app_idle_timeout.h"
|
||||
|
||||
#include "kernel/event_loop.h"
|
||||
#include "os/tick.h"
|
||||
#include "services/common/new_timer/new_timer.h"
|
||||
#include "shell/normal/watchface.h"
|
||||
#include "shell/shell.h"
|
||||
#include "system/logging.h"
|
||||
#include "system/passert.h"
|
||||
|
||||
|
||||
static const int WATCHFACE_TIMEOUT_MS = 30000;
|
||||
|
||||
TimerID s_timer;
|
||||
bool s_app_paused = false;
|
||||
bool s_app_started = false;
|
||||
|
||||
#ifndef NO_WATCH_TIMEOUT
|
||||
static void prv_kernel_callback_watchface_launch(void* data) {
|
||||
watchface_launch_default(shell_get_watchface_compositor_animation(true /* watchface_is_dest */));
|
||||
}
|
||||
|
||||
static void prv_timeout_expired(void *cb_data) {
|
||||
PBL_LOG(LOG_LEVEL_DEBUG, "App idle timeout hit! launching watchface");
|
||||
launcher_task_add_callback(prv_kernel_callback_watchface_launch, NULL);
|
||||
}
|
||||
|
||||
static void prv_start_timer(bool create) {
|
||||
if (create) {
|
||||
s_timer = new_timer_create();
|
||||
}
|
||||
|
||||
if (s_timer != TIMER_INVALID_ID && !s_app_paused && s_app_started) {
|
||||
bool success = new_timer_start(s_timer, WATCHFACE_TIMEOUT_MS, prv_timeout_expired,
|
||||
NULL, 0 /* flags */);
|
||||
PBL_ASSERTN(success);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void app_idle_timeout_start(void) {
|
||||
PBL_ASSERTN(s_timer == TIMER_INVALID_ID);
|
||||
|
||||
s_app_started = true;
|
||||
#ifndef NO_WATCH_TIMEOUT
|
||||
prv_start_timer(true /* create a timer */);
|
||||
#endif
|
||||
}
|
||||
|
||||
void app_idle_timeout_stop(void) {
|
||||
if (s_timer != TIMER_INVALID_ID) {
|
||||
new_timer_delete(s_timer);
|
||||
s_timer = TIMER_INVALID_ID;
|
||||
s_app_started = false;
|
||||
}
|
||||
}
|
||||
|
||||
void app_idle_timeout_pause(void) {
|
||||
if (s_timer != TIMER_INVALID_ID) {
|
||||
new_timer_stop(s_timer);
|
||||
}
|
||||
s_app_paused = true;
|
||||
}
|
||||
|
||||
void app_idle_timeout_resume(void) {
|
||||
s_app_paused = false;
|
||||
#ifndef NO_WATCH_TIMEOUT
|
||||
prv_start_timer(false /* do not create a timer */);
|
||||
#endif
|
||||
}
|
||||
|
||||
void app_idle_timeout_refresh(void) {
|
||||
#ifndef NO_WATCH_TIMEOUT
|
||||
prv_start_timer(false /* do not create a timer */);
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user