Option to restart running sleep timer on keypress.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31437 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index c2db1e6..627fda8 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -12979,3 +12979,17 @@
     *: "Startup/Shutdown"
   </voice>
 </phrase>
+<phrase>
+  id: LANG_KEYPRESS_RESTARTS_SLEEP_TIMER
+  desc: whether to restart running sleep timer on keypress
+  user: core
+  <source>
+    *: "Restart Sleep Timer On Keypress"
+  </source>
+  <dest>
+    *: "Restart Sleep Timer On Keypress"
+  </dest>
+  <voice>
+    *: "Restart Sleep Timer On Keypress"
+  </voice>
+</phrase>
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index cce5dd7..659a7f2 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -439,13 +439,16 @@
                           /* make it look like a setting to the user */
 MENUITEM_SETTING(sleeptimer_on_startup,
                  &global_settings.sleeptimer_on_startup, NULL);
+MENUITEM_SETTING(keypress_restarts_sleeptimer,
+                 &global_settings.keypress_restarts_sleeptimer, NULL);
 
 MAKE_MENU(startup_shutdown_menu, ID2P(LANG_STARTUP_SHUTDOWN),
           0, Icon_System_menu,
             &start_screen,
             &poweroff,
             &sleep_timer_call,
-            &sleeptimer_on_startup
+            &sleeptimer_on_startup,
+            &keypress_restarts_sleeptimer
          );
 
 /*    STARTUP/SHUTDOWN MENU      */
diff --git a/apps/settings.c b/apps/settings.c
index 408e377..39390f4 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -844,6 +844,8 @@
     dac_line_in(global_settings.line_in);
 #endif
     set_poweroff_timeout(global_settings.poweroff);
+    set_keypress_restarts_sleep_timer(
+        global_settings.keypress_restarts_sleeptimer);
 
 #if defined(BATTERY_CAPACITY_INC) && BATTERY_CAPACITY_INC > 0
     /* only call if it's really exchangable */
diff --git a/apps/settings.h b/apps/settings.h
index 7047b93..65abcc5 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -800,6 +800,7 @@
 
     int sleeptimer_duration;
     bool sleeptimer_on_startup;
+    bool keypress_restarts_sleeptimer;
 
 #ifdef HAVE_MORSE_INPUT
     bool morse_input; /* text input method setting */
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 54c0917..614ac50 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -1808,6 +1808,8 @@
                 UNIT_MIN, 5, 300, 5, sleeptimer_formatter, NULL, NULL),
     OFFON_SETTING(0, sleeptimer_on_startup, LANG_SLEEP_TIMER_ON_POWER_UP, false,
                   "sleeptimer on startup", NULL),
+    OFFON_SETTING(0, keypress_restarts_sleeptimer, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER, false,
+                  "keypress restarts sleeptimer", set_keypress_restarts_sleep_timer),
 #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
     CHOICE_SETTING(0, touchpad_sensitivity, LANG_TOUCHPAD_SENSITIVITY, 0,
                    "touchpad sensitivity", "normal,high", touchpad_set_sensitivity, 2,
diff --git a/firmware/export/powermgmt.h b/firmware/export/powermgmt.h
index 808c858..d54f1d5 100644
--- a/firmware/export/powermgmt.h
+++ b/firmware/export/powermgmt.h
@@ -164,6 +164,7 @@
 
 void set_sleep_timer(int seconds);
 int get_sleep_timer(void);
+void set_keypress_restarts_sleep_timer(bool enable);
 void handle_auto_poweroff(void);
 void set_car_adapter_mode(bool setting);
 void reset_poweroff_timer(void);
diff --git a/firmware/powermgmt.c b/firmware/powermgmt.c
index 76322d6..4d554d6 100644
--- a/firmware/powermgmt.c
+++ b/firmware/powermgmt.c
@@ -64,6 +64,10 @@
 
 static bool sleeptimer_active = false;
 static long sleeptimer_endtick;
+/* Whether an active sleep timer should be restarted when a key is pressed */
+static bool sleeptimer_key_restarts = false;
+/* The number of seconds the sleep timer was last set to */
+static unsigned int sleeptimer_duration = 0;
 
 #if CONFIG_CHARGING
 /* State of the charger input as seen by the power thread */
@@ -707,6 +711,8 @@
 void reset_poweroff_timer(void)
 {
     last_event_tick = current_tick;
+    if (sleeptimer_active && sleeptimer_key_restarts)
+        set_sleep_timer(sleeptimer_duration);
 }
 
 void sys_poweroff(void)
@@ -777,6 +783,7 @@
         sleeptimer_active  = false;
         sleeptimer_endtick = 0;
     }
+    sleeptimer_duration = seconds;
 }
 
 int get_sleep_timer(void)
@@ -787,6 +794,11 @@
         return 0;
 }
 
+void set_keypress_restarts_sleep_timer(bool enable)
+{
+    sleeptimer_key_restarts = enable;
+}
+
 static void handle_sleep_timer(void)
 {
 #ifndef BOOTLOADER
diff --git a/manual/appendix/config_file_options.tex b/manual/appendix/config_file_options.tex
index d237182..3db416e 100644
--- a/manual/appendix/config_file_options.tex
+++ b/manual/appendix/config_file_options.tex
@@ -107,6 +107,7 @@
     sleeptimer duration   & 5 to 300 (in steps of 5)
                                         & min\\
     sleeptimer on startup & off, on     & N/A\\
+    keypress restarts sleeptimer & off, on & N/A\\
     max files in playlist & 1000 - 32000 & N/A\\
     max files in dir & 50 - 10000       & N/A\\
     lang            & /path/filename.lng & N/A\\
diff --git a/manual/configure_rockbox/startup_shutdown_options.tex b/manual/configure_rockbox/startup_shutdown_options.tex
index 2fb4c48..ef84358 100644
--- a/manual/configure_rockbox/startup_shutdown_options.tex
+++ b/manual/configure_rockbox/startup_shutdown_options.tex
@@ -54,4 +54,7 @@
     \item[Start Sleep Timer On Boot:]
       If set, a \setting{Sleep Timer} will be initiated when the device
       starts.
+    \item[Restart Sleep Timer On Keypress:]
+      If set, when a \setting{Sleep Timer} is active and a key is pressed, the
+      \setting{Sleep Timer} will be restarted with the initial duration.
   \end{description}