mirror of
https://github.com/google/pebble.git
synced 2025-05-24 20:24:53 +00:00
92 lines
2.4 KiB
C
92 lines
2.4 KiB
C
/*
|
|
* 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
|
|
}
|