From ca4439ff65bdc93fc44f4cc1be52aab50217ce78 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Sat, 7 Aug 2010 21:30:22 +0000 Subject: Android port: handle incoming calls. Stop explicitely if a call comes in, and resume playback (if it was playing before the call) upon hang up. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27746 a1c6a512-1295-4272-9138-f99709370657 --- apps/menu.c | 13 +++++++++++-- apps/misc.c | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'apps') diff --git a/apps/menu.c b/apps/menu.c index a88d725774..e6afec2d14 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -341,6 +341,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, const struct menu_item_ex *temp, *menu; int ret = 0, i; bool redraw_lists; + int old_audio_status = audio_status(); FOR_NB_SCREENS(i) viewportmanager_theme_enable(i, !hide_theme, NULL); @@ -380,6 +381,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, #endif while (!done) { + int new_old_audio_statusus; redraw_lists = false; if (!hide_theme) { @@ -389,6 +391,15 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, } action = get_action(CONTEXT_MAINMENU, list_do_action_timeout(&lists, HZ)); + + /* query audio status to see if it changed */ + new_old_audio_statusus = audio_status(); + if (old_audio_status != new_old_audio_statusus) + { /* force a redraw if anything changed the audio status + * from outside */ + redraw_lists = true; + old_audio_status = new_old_audio_statusus; + } /* HZ so the status bar redraws corectly */ if (menu_callback) @@ -410,8 +421,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, if (gui_synclist_do_button(&lists, &action, LIST_WRAP_UNLESS_HELD)) continue; - if (action == ACTION_NONE) - continue; #ifdef HAVE_QUICKSCREEN else if (action == ACTION_STD_QUICKSCREEN) { diff --git a/apps/misc.c b/apps/misc.c index ed6986180a..9fbdd433ef 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -517,6 +517,9 @@ static void unplug_change(bool inserted) long default_event_handler_ex(long event, void (*callback)(void *), void *parameter) { +#if CONFIG_PLATFORM & PLATFORM_ANDROID + static bool resume = false; +#endif switch(event) { case SYS_BATTERY_UPDATE: @@ -605,6 +608,22 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame case SYS_IAP_HANDLEPKT: iap_handlepkt(); return SYS_IAP_HANDLEPKT; +#endif +#if CONFIG_PLATFORM & PLATFORM_ANDROID + /* stop playback if we receive a call */ + case SYS_CALL_INCOMING: + resume = (audio_status() & AUDIO_STATUS_PLAY) != 0; + list_stop_handler(); + return SYS_CALL_INCOMING; + /* resume playback if needed */ + case SYS_CALL_HUNG_UP: + if (resume && playlist_resume() != -1) + { + playlist_start(global_status.resume_index, + global_status.resume_offset); + } + resume = false; + return SYS_CALL_HUNG_UP; #endif } return 0; -- cgit v1.2.3