From 035c561c758ff5812cc210ada4eed37ac81e802a Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Fri, 20 Mar 2015 07:54:49 +0900 Subject: [PATCH 01/16] Modification to move focus from upper button to contents only by key events Change-Id: I6c12fac989969e618721a0ec3fe69326a788fd03 Signed-off-by: Kim Tae Soo --- src/views/base-view.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/views/base-view.cpp b/src/views/base-view.cpp index 5f4ffc7..f66379a 100644 --- a/src/views/base-view.cpp +++ b/src/views/base-view.cpp @@ -232,11 +232,16 @@ void CMusicBaseView::m_UpdateFocusSequence(void) elm_object_focus_next_object_set(m->group_btn[GROUP_BTN_SONG], m->group_btn[GROUP_BTN_PLAYLIST], ELM_FOCUS_UP); elm_object_focus_next_object_set(m->group_btn[GROUP_BTN_PLAYLIST], m->group_btn[GROUP_BTN_SONG], ELM_FOCUS_DOWN); + if (m->c_grpbtn != NULL) elm_object_focus_next_object_set(m->plbackbtn, m->c_grpbtn, ELM_FOCUS_LEFT); else elm_object_focus_next_object_set(m->plbackbtn, m->group_btn[GROUP_BTN_SONG], ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(m->plbackbtn, m->plbackbtn, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(m->srcbtn, m->srcbtn, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(m->sortbtn, m->sortbtn, ELM_FOCUS_DOWN); + elm_object_part_text_set(m->base, MUSIC_PART_NO_CONTENT, MUSIC_STR_EMPTY); elm_object_part_text_set(m->base, MUSIC_PART_NO_CONTENT_SUB, MUSIC_STR_EMPTY); } -- 2.7.4 From 537b28a7876a3e778316c61df04c3ba4c2c40979 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Fri, 20 Mar 2015 08:50:25 +0900 Subject: [PATCH 02/16] Fix focus error after context view is closed Change-Id: Ic2acf04abe824e2b8e57abe684d519eaf20319b1 Signed-off-by: Kim Tae Soo --- include/album-layout.h | 3 --- include/song-layout.h | 3 --- src/views/album-layout.cpp | 28 ++++------------------------ src/views/album-songs-layout.cpp | 1 - src/views/category-layout.cpp | 35 +++++++++++++++++------------------ src/views/category-songs-layout.cpp | 1 - src/views/folder-layout.cpp | 1 - src/views/song-layout.cpp | 32 ++++++-------------------------- 8 files changed, 27 insertions(+), 77 deletions(-) diff --git a/include/album-layout.h b/include/album-layout.h index 7901cf7..1b983cb 100644 --- a/include/album-layout.h +++ b/include/album-layout.h @@ -28,9 +28,6 @@ private: struct SAlbumLayout *m; private: - static Eina_Bool sm_CbFocusIdler(void *dt); - void m_OnFocusIdler(void); - static char *sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part); static Evas_Object *sm_CbGetGridItemContent(void *data, Evas_Object *obj, const char *part); static void sm_CbRemoveGridItem(void *data, Evas_Object *obj); diff --git a/include/song-layout.h b/include/song-layout.h index 37a5f85..714e1d1 100644 --- a/include/song-layout.h +++ b/include/song-layout.h @@ -26,9 +26,6 @@ private: struct SSongLayout *m; private: - static Eina_Bool sm_CbFocusIdler(void *dt); - void m_OnFocusIdler(void); - static char *sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part); static Evas_Object *sm_CbGetListItemContent(void *data, Evas_Object *obj, const char *part); static void sm_CbRemoveListItem(void *data, Evas_Object *obj); diff --git a/src/views/album-layout.cpp b/src/views/album-layout.cpp index 61eff05..8fe0145 100644 --- a/src/views/album-layout.cpp +++ b/src/views/album-layout.cpp @@ -73,7 +73,6 @@ struct SAlbumLayout { char *album_id; CAlbumSongsLayout *layoutAlbumSongs; SCallback callback; - Ecore_Idler *focusIdler; SAlbumLayout() { memset(this, 0, sizeof(SAlbumLayout)); @@ -84,27 +83,6 @@ struct SAlbumLayout { }; -Eina_Bool CAlbumLayout::sm_CbFocusIdler(void *dt) -{ - CAlbumLayout *root = (CAlbumLayout *)dt; - - if (root) - root->m_OnFocusIdler(); - - return ECORE_CALLBACK_CANCEL; -} - - -void CAlbumLayout::m_OnFocusIdler(void) -{ - m->focusIdler = NULL; - - ASSERT(m->focusedItem); - elm_gengrid_item_show(m->focusedItem, ELM_GENGRID_ITEM_SCROLLTO_IN); - elm_object_item_focus_set(m->focusedItem, EINA_TRUE); -} - - char *CAlbumLayout::sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part) { SAlbumItemInfo *itinfo = (SAlbumItemInfo *)data; @@ -230,7 +208,6 @@ void CAlbumLayout::sm_CbCtxtClose(void *dt) void CAlbumLayout::m_OnCtxtClose(void) { m->vmgr->PopView(); - m->vmgr->PushView(MUSIC_BASE_VIEW, NULL); elm_object_item_focus_set(m->focusedItem, EINA_TRUE); } @@ -586,7 +563,10 @@ void CAlbumLayout::Update(bool focusFlag) void CAlbumLayout::SetFocus(const char *btnStr) { ASSERT(m); - m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); + ASSERT(m->focusedItem); + + elm_gengrid_item_show(m->focusedItem, ELM_GENGRID_ITEM_SCROLLTO_IN); + elm_object_item_focus_set(m->focusedItem, EINA_TRUE); } diff --git a/src/views/album-songs-layout.cpp b/src/views/album-songs-layout.cpp index 188b248..c0ea801 100644 --- a/src/views/album-songs-layout.cpp +++ b/src/views/album-songs-layout.cpp @@ -201,7 +201,6 @@ void CAlbumSongsLayout::sm_CbCtxtClose(void *dt) void CAlbumSongsLayout::m_OnCtxtClose(void) { m->vmgr->PopView(); - m->vmgr->PushView(MUSIC_BASE_VIEW, NULL); elm_object_item_focus_set(m->focused_item, EINA_TRUE); } diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index c7bb8b5..fe23564 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -152,20 +152,14 @@ void CCategoryLayout::m_OnFocusIdler(void) else { Evas_Object *focus = NULL; - if (t.depth == E_DEPTH_CATEGORY) { - elm_gengrid_item_show(t.focused_item, ELM_GENGRID_ITEM_SCROLLTO_IN); - elm_object_item_focus_set(t.focused_item, EINA_TRUE); - } - else if (t.depth == E_DEPTH_ALBUM) { - if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN)) - focus = m->addBtns[ABTN_PLAY]; - else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN)) - focus = m->addBtns[ABTN_NEXT]; - else // MUSIC_THIRD_BTN - focus = m->addBtns[ABTN_LAST]; - - elm_object_focus_set(focus, EINA_TRUE); - } + if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN)) + focus = m->addBtns[ABTN_PLAY]; + else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN)) + focus = m->addBtns[ABTN_NEXT]; + else // MUSIC_THIRD_BTN + focus = m->addBtns[ABTN_LAST]; + + elm_object_focus_set(focus, EINA_TRUE); } } @@ -325,7 +319,6 @@ void CCategoryLayout::sm_CbCtxtClose(void *dt) void CCategoryLayout::m_OnCtxtClose(void) { m->vmgr->PopView(); - m->vmgr->PushView(MUSIC_BASE_VIEW, NULL); elm_object_item_focus_set(t.focused_item, EINA_TRUE); } @@ -1269,9 +1262,15 @@ void CCategoryLayout::SetFocus(const char *btnStr) { ASSERT(m); - m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT; - m->focusBtnStr = btnStr; - m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); + if (t.depth == E_DEPTH_CATEGORY) { + elm_gengrid_item_show(t.focused_item, ELM_GENGRID_ITEM_SCROLLTO_IN); + elm_object_item_focus_set(t.focused_item, EINA_TRUE); + } + else { + m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT; + m->focusBtnStr = btnStr; + m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); + } } diff --git a/src/views/category-songs-layout.cpp b/src/views/category-songs-layout.cpp index 34d116b..27c1b22 100644 --- a/src/views/category-songs-layout.cpp +++ b/src/views/category-songs-layout.cpp @@ -320,7 +320,6 @@ void CCategorySongsLayout::sm_CbCtxtClose(void *dt) void CCategorySongsLayout::m_OnCtxtClose(void) { m->vmgr->PopView(); - m->vmgr->PushView(MUSIC_BASE_VIEW, NULL); elm_object_item_focus_set(m->focused_item, EINA_TRUE); } diff --git a/src/views/folder-layout.cpp b/src/views/folder-layout.cpp index 7a40134..ad6c08b 100644 --- a/src/views/folder-layout.cpp +++ b/src/views/folder-layout.cpp @@ -347,7 +347,6 @@ void CFolderLayout::sm_CbCtxtClose(void *dt) void CFolderLayout::m_OnCtxtClose(void) { m->vmgr->PopView(); - m->vmgr->PushView(MUSIC_BASE_VIEW, NULL); elm_object_item_focus_set(m->focused_item, EINA_TRUE); } diff --git a/src/views/song-layout.cpp b/src/views/song-layout.cpp index 7bd3f0b..3a322a0 100644 --- a/src/views/song-layout.cpp +++ b/src/views/song-layout.cpp @@ -61,7 +61,6 @@ struct SSongLayout { CViewMgr* vmgr; SContentInfo *ctxtinfo; char *uri; - Ecore_Idler *focusIdler; SSongLayout() { memset(this, 0, sizeof(SSongLayout)); @@ -72,29 +71,6 @@ struct SSongLayout { }; -Eina_Bool CSongLayout::sm_CbFocusIdler(void *dt) -{ - CSongLayout *root = (CSongLayout *)dt; - - if (root) - root->m_OnFocusIdler(); - - return ECORE_CALLBACK_CANCEL; -} - - -void CSongLayout::m_OnFocusIdler(void) -{ - m->focusIdler = NULL; - - Elm_Object_Item *item = elm_genlist_first_item_get(m->songlist); - ASSERT(item); - - elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_IN); - elm_object_item_focus_set(item, EINA_TRUE); -} - - char *CSongLayout::sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part) { SSongItemInfo *itinfo = (SSongItemInfo *)data; @@ -238,7 +214,6 @@ void CSongLayout::sm_CbCtxtClose(void *dt) void CSongLayout::m_OnCtxtClose(void) { m->vmgr->PopView(); - m->vmgr->PushView(MUSIC_BASE_VIEW, NULL); elm_object_item_focus_set(m->focused_item, EINA_TRUE); } @@ -613,7 +588,12 @@ void CSongLayout::Update(bool focusFlag) void CSongLayout::SetFocus(const char *btnStr) { ASSERT(m); - m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); + + Elm_Object_Item *item = elm_genlist_first_item_get(m->songlist); + ASSERT(item); + + elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_IN); + elm_object_item_focus_set(item, EINA_TRUE); } -- 2.7.4 From 9a2a4f598743c7525b0bd16d0a38cd988c753351 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Fri, 20 Mar 2015 09:23:59 +0900 Subject: [PATCH 03/16] Set focus after key event handling is finished Change-Id: I5f3cc3ad2a21949bac0c042be495c3de0286839e Signed-off-by: Kim Tae Soo --- include/album-layout.h | 3 +++ include/song-layout.h | 3 +++ src/views/album-layout.cpp | 27 +++++++++++++++++++++++---- src/views/category-layout.cpp | 34 +++++++++++++++++----------------- src/views/song-layout.cpp | 31 +++++++++++++++++++++++++------ 5 files changed, 71 insertions(+), 27 deletions(-) diff --git a/include/album-layout.h b/include/album-layout.h index 1b983cb..7901cf7 100644 --- a/include/album-layout.h +++ b/include/album-layout.h @@ -28,6 +28,9 @@ private: struct SAlbumLayout *m; private: + static Eina_Bool sm_CbFocusIdler(void *dt); + void m_OnFocusIdler(void); + static char *sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part); static Evas_Object *sm_CbGetGridItemContent(void *data, Evas_Object *obj, const char *part); static void sm_CbRemoveGridItem(void *data, Evas_Object *obj); diff --git a/include/song-layout.h b/include/song-layout.h index 714e1d1..37a5f85 100644 --- a/include/song-layout.h +++ b/include/song-layout.h @@ -26,6 +26,9 @@ private: struct SSongLayout *m; private: + static Eina_Bool sm_CbFocusIdler(void *dt); + void m_OnFocusIdler(void); + static char *sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part); static Evas_Object *sm_CbGetListItemContent(void *data, Evas_Object *obj, const char *part); static void sm_CbRemoveListItem(void *data, Evas_Object *obj); diff --git a/src/views/album-layout.cpp b/src/views/album-layout.cpp index 8fe0145..f1dbcb1 100644 --- a/src/views/album-layout.cpp +++ b/src/views/album-layout.cpp @@ -73,6 +73,7 @@ struct SAlbumLayout { char *album_id; CAlbumSongsLayout *layoutAlbumSongs; SCallback callback; + Ecore_Idler *focusIdler; SAlbumLayout() { memset(this, 0, sizeof(SAlbumLayout)); @@ -83,6 +84,27 @@ struct SAlbumLayout { }; +Eina_Bool CAlbumLayout::sm_CbFocusIdler(void *dt) +{ + CAlbumLayout *root = (CAlbumLayout *)dt; + + if (root) + root->m_OnFocusIdler(); + + return ECORE_CALLBACK_CANCEL; +} + + +void CAlbumLayout::m_OnFocusIdler(void) +{ + m->focusIdler = NULL; + + ASSERT(m->focusedItem); + elm_gengrid_item_show(m->focusedItem, ELM_GENGRID_ITEM_SCROLLTO_IN); + elm_object_item_focus_set(m->focusedItem, EINA_TRUE); +} + + char *CAlbumLayout::sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part) { SAlbumItemInfo *itinfo = (SAlbumItemInfo *)data; @@ -563,10 +585,7 @@ void CAlbumLayout::Update(bool focusFlag) void CAlbumLayout::SetFocus(const char *btnStr) { ASSERT(m); - ASSERT(m->focusedItem); - - elm_gengrid_item_show(m->focusedItem, ELM_GENGRID_ITEM_SCROLLTO_IN); - elm_object_item_focus_set(m->focusedItem, EINA_TRUE); + m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); } diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index fe23564..6041718 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -150,16 +150,22 @@ void CCategoryLayout::m_OnFocusIdler(void) elm_object_focus_set(m->def_foc_btn, EINA_TRUE); } else { - Evas_Object *focus = NULL; + if (t.depth == E_DEPTH_CATEGORY) { + elm_gengrid_item_show(t.focused_item, ELM_GENGRID_ITEM_SCROLLTO_IN); + elm_object_item_focus_set(t.focused_item, EINA_TRUE); + } + else { + Evas_Object *focus = NULL; - if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN)) - focus = m->addBtns[ABTN_PLAY]; - else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN)) - focus = m->addBtns[ABTN_NEXT]; - else // MUSIC_THIRD_BTN - focus = m->addBtns[ABTN_LAST]; + if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN)) + focus = m->addBtns[ABTN_PLAY]; + else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN)) + focus = m->addBtns[ABTN_NEXT]; + else // MUSIC_THIRD_BTN + focus = m->addBtns[ABTN_LAST]; - elm_object_focus_set(focus, EINA_TRUE); + elm_object_focus_set(focus, EINA_TRUE); + } } } @@ -1262,15 +1268,9 @@ void CCategoryLayout::SetFocus(const char *btnStr) { ASSERT(m); - if (t.depth == E_DEPTH_CATEGORY) { - elm_gengrid_item_show(t.focused_item, ELM_GENGRID_ITEM_SCROLLTO_IN); - elm_object_item_focus_set(t.focused_item, EINA_TRUE); - } - else { - m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT; - m->focusBtnStr = btnStr; - m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); - } + m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT; + m->focusBtnStr = btnStr; + m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); } diff --git a/src/views/song-layout.cpp b/src/views/song-layout.cpp index 3a322a0..8e776b5 100644 --- a/src/views/song-layout.cpp +++ b/src/views/song-layout.cpp @@ -61,6 +61,7 @@ struct SSongLayout { CViewMgr* vmgr; SContentInfo *ctxtinfo; char *uri; + Ecore_Idler *focusIdler; SSongLayout() { memset(this, 0, sizeof(SSongLayout)); @@ -71,6 +72,29 @@ struct SSongLayout { }; +Eina_Bool CSongLayout::sm_CbFocusIdler(void *dt) +{ + CSongLayout *root = (CSongLayout *)dt; + + if (root) + root->m_OnFocusIdler(); + + return ECORE_CALLBACK_CANCEL; +} + + +void CSongLayout::m_OnFocusIdler(void) +{ + m->focusIdler = NULL; + + Elm_Object_Item *item = elm_genlist_first_item_get(m->songlist); + ASSERT(item); + + elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_IN); + elm_object_item_focus_set(item, EINA_TRUE); +} + + char *CSongLayout::sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part) { SSongItemInfo *itinfo = (SSongItemInfo *)data; @@ -588,12 +612,7 @@ void CSongLayout::Update(bool focusFlag) void CSongLayout::SetFocus(const char *btnStr) { ASSERT(m); - - Elm_Object_Item *item = elm_genlist_first_item_get(m->songlist); - ASSERT(item); - - elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_IN); - elm_object_item_focus_set(item, EINA_TRUE); + m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this); } -- 2.7.4 From 79526173ecd61b05e033df183bdee9221e8f6329 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Fri, 20 Mar 2015 09:44:28 +0900 Subject: [PATCH 04/16] Fix Focus Bug 1. focused_item value should be updated when gengrid is updated. 2. Use CViewMgr::PopView when context view is needed to be hided Change-Id: I04a08f4370d08c316ff50ae839634e849629d593 Signed-off-by: Kim Tae Soo --- src/views/category-layout.cpp | 1 + src/views/playlist-layout.cpp | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index 6041718..0767255 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -939,6 +939,7 @@ void CCategoryLayout::m_CreateCatgrid(bool sort_flag) m_AddCategoryItem(grid_item, t_CategoryType(), info); elm_gengrid_item_class_free(grid_item); + t.focused_item = elm_gengrid_first_item_get(t.grid); elm_object_part_content_set(Layout(), MUSIC_PART_CATEGORY_GRID, t.grid); diff --git a/src/views/playlist-layout.cpp b/src/views/playlist-layout.cpp index 5ba4c7e..cd64474 100644 --- a/src/views/playlist-layout.cpp +++ b/src/views/playlist-layout.cpp @@ -91,8 +91,9 @@ void CPlaylistLayout::m_PlaylistCtxtAction(EActionType type) catinfo = (CCategoryInfo *)t.ctxtinfo->context; - if (!CViewMgr::GetInstance()->PushView(MUSIC_BASE_VIEW, NULL)) { - _ERR(" viewmgr show failed "); + // Show base view + if (!CViewMgr::GetInstance()->PopView()) { + _ERR("CViewMgr::PopView to show BaseView is failed."); return; } -- 2.7.4 From 95456010a43e95cfd9838e944fd60e3428da6e57 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Fri, 20 Mar 2015 10:49:57 +0900 Subject: [PATCH 05/16] Source code re-arranged. Change-Id: I62a92bac157e33c3e875d76372d84e52b25dd444 Signed-off-by: Kim Tae Soo --- include/artist-layout.h | 2 +- include/common.h | 4 +-- src/views/album-layout.cpp | 33 +++++++++++------ src/views/album-songs-layout.cpp | 31 +++++++++++----- src/views/category-layout.cpp | 63 ++++++++++++++++++--------------- src/views/category-songs-layout.cpp | 31 +++++++++++----- src/views/common-ui.cpp | 56 ++++++++++++++++------------- src/views/folder-layout.cpp | 32 +++++++++++------ src/views/playback-view.cpp | 12 +------ src/views/playlist-layout.cpp | 70 +++++++++++++++++++++---------------- src/views/song-layout.cpp | 31 +++++++++++----- 11 files changed, 220 insertions(+), 145 deletions(-) diff --git a/include/artist-layout.h b/include/artist-layout.h index 53ad620..4df42c4 100644 --- a/include/artist-layout.h +++ b/include/artist-layout.h @@ -25,7 +25,7 @@ private: protected: virtual void t_HandleItemSelect(SCatItemInfo *itinfo); virtual bool t_GetMediaList(Eina_List **list); - virtual EContextType t_ContextType(void) { return CONTEXT_TYPE_PLAYLIST; } + virtual EContextType t_ContextType(void) { return CONTEXT_TYPE_ARTIST; } virtual ECategoryType t_CategoryType(void) { return CAT_TYPE_ARTIST; } public: diff --git a/include/common.h b/include/common.h index cb21752..b0f77fa 100644 --- a/include/common.h +++ b/include/common.h @@ -121,8 +121,8 @@ enum EActionType { }; struct SContentInfo { - enum EContextType type; - enum EPlayStatus status; + EContextType type; + EPlayStatus status; void (*update)(void *data, enum EActionType type, int id); void (*close)(void *data); diff --git a/src/views/album-layout.cpp b/src/views/album-layout.cpp index f1dbcb1..b4229d1 100644 --- a/src/views/album-layout.cpp +++ b/src/views/album-layout.cpp @@ -189,20 +189,33 @@ void CAlbumLayout::m_OnCtxtUpdate(EActionType type, int lid) if (!m->ctxtinfo || !m->ctxtinfo->context) return; - if (type == ACTION_TYPE_ADDNEXT) + m->mhandle->MediaGetList(LIST_TYPE_ALBUM_SONG, + m->ctxtinfo->context, &list); + + switch (type) { + case ACTION_TYPE_PLAY: + mode = ADD_TYPE_FRESH; + break; + + case ACTION_TYPE_ADDNEXT: mode = ADD_TYPE_NEXT; - else + break; + + case ACTION_TYPE_ADDLAST: mode = ADD_TYPE_END; + break; - m->mhandle->MediaGetList(LIST_TYPE_ALBUM_SONG, - m->ctxtinfo->context, &list); - if (type == ACTION_TYPE_ADDTO) { - if (!m->mhandle->MediaAddsongsPlaylist(lid, list)) - _ERR(" Adding songs to playlist failed "); - else + case ACTION_TYPE_ADDTO: + if (m->mhandle->MediaAddsongsPlaylist(lid, list)) CCommonUI::CreateMsgBox(m->base, MUSIC_TEXT_ADDTO_MSG); - + else + _ERR(" Adding songs to playlist failed "); return; + + default: + _ERR("Invalid Action Type"); + ASSERT(0); + break; } m->mhandle->UpdatePlaylist(list, mode); @@ -214,7 +227,7 @@ void CAlbumLayout::m_OnCtxtUpdate(EActionType type, int lid) m->mhandle->SetCurrentSong(sinfo->Id()); } - CCommonUI::UpdatePlaybackView((EAddType)type, Layout(), m->focusedItem); + CCommonUI::UpdatePlaybackView(mode, Layout(), m->focusedItem); } diff --git a/src/views/album-songs-layout.cpp b/src/views/album-songs-layout.cpp index c0ea801..f167d2e 100644 --- a/src/views/album-songs-layout.cpp +++ b/src/views/album-songs-layout.cpp @@ -164,19 +164,32 @@ void CAlbumSongsLayout::m_OnCtxtUpdate(EActionType type, int lid) if (!m->ctxtinfo || !m->ctxtinfo->context) return; - if (type == ACTION_TYPE_ADDNEXT) + list = eina_list_append(list, m->ctxtinfo->context); + + switch (type) { + case ACTION_TYPE_PLAY: + mode = ADD_TYPE_FRESH; + break; + + case ACTION_TYPE_ADDNEXT: mode = ADD_TYPE_NEXT; - else + break; + + case ACTION_TYPE_ADDLAST: mode = ADD_TYPE_END; + break; - list = eina_list_append(list, m->ctxtinfo->context); - if (type == ACTION_TYPE_ADDTO) { - if (!m->mhandle->MediaAddsongsPlaylist(lid, list)) - _ERR(" Adding songs to playlist failed "); - else + case ACTION_TYPE_ADDTO: + if (m->mhandle->MediaAddsongsPlaylist(lid, list)) CCommonUI::CreateMsgBox(m->base, MUSIC_TEXT_ADDTO_MSG); - + else + _ERR(" Adding songs to playlist failed "); return; + + default: + _ERR("Invalid Action Type"); + ASSERT(0); + break; } m->mhandle->UpdatePlaylist(list, mode); @@ -187,7 +200,7 @@ void CAlbumSongsLayout::m_OnCtxtUpdate(EActionType type, int lid) m->mhandle->SetCurrentSong(((CSongInfo *)m->ctxtinfo->context)->Id()); } - CCommonUI::UpdatePlaybackView((EAddType)type, Layout(), m->focused_item); + CCommonUI::UpdatePlaybackView(mode, Layout(), m->focused_item); } void CAlbumSongsLayout::sm_CbCtxtClose(void *dt) diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index 0767255..039e6de 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -241,16 +241,7 @@ void CCategoryLayout::t_OnCtxtUpdate(enum EActionType type, int lid) if (!t.ctxtinfo || !t.ctxtinfo->context) return; - if (type == ACTION_TYPE_ADDNEXT) - mode = ADD_TYPE_NEXT; - else - mode = ADD_TYPE_END; - - if (t.depth == E_DEPTH_SONG) { - sinfo = (CSongInfo *)t.ctxtinfo->context; - list = eina_list_append(list, sinfo); - } - else if (t.depth == E_DEPTH_ALBUM) { + if (t.depth == E_DEPTH_ALBUM) { m->pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG, t.ctxtinfo->context, &list); sinfo = (CSongInfo *)eina_list_data_get(list); @@ -276,21 +267,40 @@ void CCategoryLayout::t_OnCtxtUpdate(enum EActionType type, int lid) sinfo = (CSongInfo *)eina_list_data_get(list); } - if (type == ACTION_TYPE_ADDTO) { - if (!m->pMusicController->MediaAddsongsPlaylist(lid, list)) - _ERR(" Adding songs to playlist failed "); - else - CCommonUI::CreateMsgBox(t.base, MUSIC_TEXT_ADDTO_MSG); + switch (type) { + case ACTION_TYPE_PLAY: + mode = ADD_TYPE_FRESH; + break; - if (t.depth == E_DEPTH_CATEGORY) { - EINA_LIST_FREE(list, obj) { - sinfo = (CSongInfo *)obj; - sinfo->Destroy(); - delete sinfo; + case ACTION_TYPE_ADDNEXT: + mode = ADD_TYPE_NEXT; + break; + + case ACTION_TYPE_ADDLAST: + mode = ADD_TYPE_END; + break; + + case ACTION_TYPE_ADDTO: + { + if (m->pMusicController->MediaAddsongsPlaylist(lid, list)) + CCommonUI::CreateMsgBox(t.base, MUSIC_TEXT_ADDTO_MSG); + else + _ERR(" Adding songs to playlist failed "); + + if (t.depth == E_DEPTH_CATEGORY) { + EINA_LIST_FREE(list, obj) { + sinfo = (CSongInfo *)obj; + sinfo->Destroy(); + delete sinfo; + } } } - return; + + default: + _ERR("Invalid Action Type"); + ASSERT(0); + break; } m->pMusicController->UpdatePlaylist(list, mode); @@ -306,11 +316,10 @@ void CCategoryLayout::t_OnCtxtUpdate(enum EActionType type, int lid) delete sinfo; } } - else { + else eina_list_free(list); - } - CCommonUI::UpdatePlaybackView((EAddType)type, Layout(), t.focused_item); + CCommonUI::UpdatePlaybackView(mode, Layout(), t.focused_item); } @@ -1356,11 +1365,7 @@ void CCategoryLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Ke ctxtinfo->cbdata = this; ctxtinfo->update = sm_CbCtxtUpdate; ctxtinfo->close = sm_CbCtxtClose; - if (t.depth == E_DEPTH_SONG) { - ctxtinfo->type = CONTEXT_TYPE_SONG; - ctxtinfo->context = itinfo->sinfo; - } - else if (t.depth == E_DEPTH_ALBUM) { + if (t.depth == E_DEPTH_ALBUM) { ctxtinfo->type = CONTEXT_TYPE_ALBUM; ctxtinfo->context = itinfo->alinfo; } diff --git a/src/views/category-songs-layout.cpp b/src/views/category-songs-layout.cpp index 27c1b22..074684a 100644 --- a/src/views/category-songs-layout.cpp +++ b/src/views/category-songs-layout.cpp @@ -281,19 +281,32 @@ void CCategorySongsLayout::m_OnCtxtUpdate(EActionType type, int lid) if (!m->ctxtinfo || !m->ctxtinfo->context) return; - if (type == ACTION_TYPE_ADDNEXT) + list = eina_list_append(list, m->ctxtinfo->context); + + switch (type) { + case ACTION_TYPE_PLAY: + mode = ADD_TYPE_FRESH; + break; + + case ACTION_TYPE_ADDNEXT: mode = ADD_TYPE_NEXT; - else + break; + + case ACTION_TYPE_ADDLAST: mode = ADD_TYPE_END; + break; - list = eina_list_append(list, m->ctxtinfo->context); - if (type == ACTION_TYPE_ADDTO) { - if (!m->mhandle->MediaAddsongsPlaylist(lid, list)) - _ERR(" Adding songs to playlist failed "); - else + case ACTION_TYPE_ADDTO: + if (m->mhandle->MediaAddsongsPlaylist(lid, list)) CCommonUI::CreateMsgBox(m->base, MUSIC_TEXT_ADDTO_MSG); - + else + _ERR(" Adding songs to playlist failed "); return; + + default: + _ERR("Invalid Action Type"); + ASSERT(0); + break; } m->mhandle->UpdatePlaylist(list, mode); @@ -304,7 +317,7 @@ void CCategorySongsLayout::m_OnCtxtUpdate(EActionType type, int lid) m->mhandle->SetCurrentSong(((CSongInfo *)m->ctxtinfo->context)->Id()); } - CCommonUI::UpdatePlaybackView((EAddType)type, Layout(), m->focused_item); + CCommonUI::UpdatePlaybackView(mode, Layout(), m->focused_item); } diff --git a/src/views/common-ui.cpp b/src/views/common-ui.cpp index 058104b..352056f 100644 --- a/src/views/common-ui.cpp +++ b/src/views/common-ui.cpp @@ -15,6 +15,7 @@ */ #include +#include #include "i18n.h" #include "define.h" #include "dbg.h" @@ -147,46 +148,51 @@ void CCommonUI::CreateMsgBox(Evas_Object *base, const char *msg) void CCommonUI::UpdatePlaybackView(EAddType type, Evas_Object *layout, Elm_Object_Item *focused_item) { - Evas_Object *obj; + ASSERT(layout); + Evas_Object *obj = NULL; CViewMgr* vmgr = CViewMgr::GetInstance(); - if (!vmgr || !layout) - return; + ASSERT(vmgr); - obj = NULL; if (!focused_item) obj = elm_object_focused_object_get(layout); - SParcel parcel; - memset(&parcel, 0, sizeof(SParcel)); - parcel.updateType = E_PLAYLIST_UPDATE; - - if (!vmgr->UpdateView((const char *)MUSIC_PLAYBACK_VIEW, &parcel)) { - if (!vmgr->PushView(MUSIC_PLAYBACK_VIEW, NULL)) - _ERR(" viewmgr push view failed "); + const char *msgStr = NULL; + switch (type) { + case ADD_TYPE_FRESH: + { + SParcel parcel; + memset(&parcel, 0, sizeof(SParcel)); + parcel.updateType = E_PLAYLIST_UPDATE; + if (!vmgr->PushView((const char *)MUSIC_PLAYBACK_VIEW, &parcel)) + _ERR("PushView of PlaybackView Failed"); + } return; - } - if (type == ADD_TYPE_FRESH) { - if (!vmgr->PushView(MUSIC_PLAYBACK_VIEW, NULL)) - _ERR(" viewmgr show failed "); + case ADD_TYPE_NEXT: + msgStr = MUSIC_TEXT_NEXT_MSG; + break; - return; + case ADD_TYPE_END: + msgStr = MUSIC_TEXT_LAST_MSG; + break; + + default: + _ERR("Invalid Add Type!!"); + ASSERT(0); + break; } if (focused_item) { - if (!vmgr->PushView(MUSIC_BASE_VIEW, NULL)) { - _ERR(" viewmgr show failed "); + // Pop ContextView to show BaseView + if (!vmgr->PopView()) { + _ERR("PopView to show BaseView Failed"); return; } elm_object_item_focus_set(focused_item, EINA_TRUE); - } else { - if (obj) - elm_object_focus_set(obj, EINA_TRUE); } + else if (obj) + elm_object_focus_set(obj, EINA_TRUE); - if (type == ADD_TYPE_NEXT) - CreateMsgBox(layout, MUSIC_TEXT_NEXT_MSG); - else - CreateMsgBox(layout, MUSIC_TEXT_LAST_MSG); + CreateMsgBox(layout, msgStr); } diff --git a/src/views/folder-layout.cpp b/src/views/folder-layout.cpp index ad6c08b..6471d2a 100644 --- a/src/views/folder-layout.cpp +++ b/src/views/folder-layout.cpp @@ -301,11 +301,6 @@ void CFolderLayout::m_OnCtxtUpdate(EActionType type, int lid) if (!m->ctxtinfo || !m->ctxtinfo->context) return; - if (type == ACTION_TYPE_ADDNEXT) - mode = ADD_TYPE_NEXT; - else - mode = ADD_TYPE_END; - if (m->depth == E_DEPTH_SONG) { sinfo = (CSongInfo *)m->ctxtinfo->context; list = eina_list_append(list, sinfo); @@ -316,13 +311,30 @@ void CFolderLayout::m_OnCtxtUpdate(EActionType type, int lid) sinfo = (CSongInfo *)eina_list_data_get(list); } - if (type == ACTION_TYPE_ADDTO) { - if (!m->mhandle->MediaAddsongsPlaylist(lid, list)) - _ERR(" Adding songs to playlist failed "); - else - CCommonUI::CreateMsgBox(m->base, MUSIC_TEXT_ADDTO_MSG); + switch (type) { + case ACTION_TYPE_PLAY: + mode = ADD_TYPE_FRESH; + break; + + case ACTION_TYPE_ADDNEXT: + mode = ADD_TYPE_NEXT; + break; + case ACTION_TYPE_ADDLAST: + mode = ADD_TYPE_END; + break; + + case ACTION_TYPE_ADDTO: + if (m->mhandle->MediaAddsongsPlaylist(lid, list)) + CCommonUI::CreateMsgBox(m->base, MUSIC_TEXT_ADDTO_MSG); + else + _ERR(" Adding songs to playlist failed "); return; + + default: + _ERR("Invalid Action Type"); + ASSERT(0); + break; } m->mhandle->UpdatePlaylist(list, mode); diff --git a/src/views/playback-view.cpp b/src/views/playback-view.cpp index bfe5a6b..510098f 100644 --- a/src/views/playback-view.cpp +++ b/src/views/playback-view.cpp @@ -304,11 +304,6 @@ void CPlaybackView::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid) return; } - if (!m->mgr->PushView(MUSIC_PLAYBACK_VIEW, NULL)) { - _ERR("CViewMgr::PushView failed"); - return; - } - elm_object_item_focus_set(m->focused_item, EINA_TRUE); } @@ -325,11 +320,6 @@ void CPlaybackView::sm_CbCtxtClose(void *dt) return; } - if (!m->mgr->PushView(MUSIC_PLAYBACK_VIEW, NULL)) { - _ERR("CViewMgr::PushView failed"); - return; - } - elm_object_item_focus_set(m->focused_item, EINA_TRUE); } @@ -978,7 +968,7 @@ void CPlaybackView::m_KeyBackPress(void) } t_OnHide(); - m->mgr->PushView(MUSIC_BASE_VIEW, NULL); + m->mgr->PopView(); } diff --git a/src/views/playlist-layout.cpp b/src/views/playlist-layout.cpp index cd64474..44cc0a5 100644 --- a/src/views/playlist-layout.cpp +++ b/src/views/playlist-layout.cpp @@ -105,42 +105,52 @@ void CPlaylistLayout::m_PlaylistCtxtAction(EActionType type) t.c_catinfo->Duplicate(catinfo); - if (type == ACTION_TYPE_DELETE) { - id = catinfo->CategoryId(); - if (!CMusicController::GetInstance()->MediaDeletePlaylist(id)) - _ERR(" Delete playlist failed "); - - t_UpdateLayout(false); - elm_object_focus_set(t.grid, EINA_TRUE); - - } - else if (type == ACTION_TYPE_RENAME) { - text = catinfo->Name(); - if (t.epopup->FlagCreate()) - t.epopup->Destroy(); + switch (type) { + case ACTION_TYPE_DELETE: + { + id = catinfo->CategoryId(); + if (!CMusicController::GetInstance()->MediaDeletePlaylist(id)) + _ERR(" Delete playlist failed "); + + t_UpdateLayout(false); + elm_object_focus_set(t.grid, EINA_TRUE); + } + break; - t.epopup->Create(t.base, text, sm_CbEntryRename, this); + case ACTION_TYPE_RENAME: + { + text = catinfo->Name(); + if (t.epopup->FlagCreate()) + t.epopup->Destroy(); - } - else if (type == ACTION_TYPE_ADDSONG) { - t.depth = E_DEPTH_SELECT_LIST; - t.sel_type = SELECT_ADD; - t_UpdateLayoutWithFocus(); + t.epopup->Create(t.base, text, sm_CbEntryRename, this); + } + break; - } - else if (type == ACTION_TYPE_REMOVESONG) { - if (catinfo->SongCount() == 0) { - elm_object_item_focus_set(t.focused_item, EINA_TRUE); - CCommonUI::CreateMsgBox(Layout(), MUSIC_TEXT_NO_SONGS); - return; + case ACTION_TYPE_ADDSONG: + { + t.depth = E_DEPTH_SELECT_LIST; + t.sel_type = SELECT_ADD; + t_UpdateLayoutWithFocus(); } - t.depth = E_DEPTH_SELECT_LIST; - t.sel_type = SELECT_REMOVE; - t_UpdateLayoutWithFocus(); + break; + + case ACTION_TYPE_REMOVESONG: + { + if (catinfo->SongCount() == 0) { + elm_object_item_focus_set(t.focused_item, EINA_TRUE); + CCommonUI::CreateMsgBox(Layout(), MUSIC_TEXT_NO_SONGS); + return; + } + t.depth = E_DEPTH_SELECT_LIST; + t.sel_type = SELECT_REMOVE; + t_UpdateLayoutWithFocus(); + } + break; - } - else { + default: elm_object_item_focus_set(t.focused_item, EINA_TRUE); + break; } } diff --git a/src/views/song-layout.cpp b/src/views/song-layout.cpp index 8e776b5..69a92f1 100644 --- a/src/views/song-layout.cpp +++ b/src/views/song-layout.cpp @@ -199,19 +199,32 @@ void CSongLayout::m_OnCtxtUpdate(EActionType type, int lid) if (!m->ctxtinfo || !m->ctxtinfo->context) return; - if (type == ACTION_TYPE_ADDNEXT) + list = eina_list_append(list, m->ctxtinfo->context); + + switch (type) { + case ACTION_TYPE_PLAY: + mode = ADD_TYPE_FRESH; + break; + + case ACTION_TYPE_ADDNEXT: mode = ADD_TYPE_NEXT; - else + break; + + case ACTION_TYPE_ADDLAST: mode = ADD_TYPE_END; + break; - list = eina_list_append(list, m->ctxtinfo->context); - if (type == ACTION_TYPE_ADDTO) { - if (!m->mhandle->MediaAddsongsPlaylist(lid, list)) - _ERR(" Adding songs to playlist failed "); - else + case ACTION_TYPE_ADDTO: + if (m->mhandle->MediaAddsongsPlaylist(lid, list)) CCommonUI::CreateMsgBox(m->base, MUSIC_TEXT_ADDTO_MSG); - + else + _ERR(" Adding songs to playlist failed "); return; + + default: + _ERR("Invalid Action Type"); + ASSERT(0); + break; } m->mhandle->UpdatePlaylist(list, mode); @@ -222,7 +235,7 @@ void CSongLayout::m_OnCtxtUpdate(EActionType type, int lid) m->mhandle->SetCurrentSong(((CSongInfo *)m->ctxtinfo->context)->Id()); } - CCommonUI::UpdatePlaybackView((EAddType)type, Layout(), m->focused_item); + CCommonUI::UpdatePlaybackView(mode, Layout(), m->focused_item); } -- 2.7.4 From 6175eaffde12435dc30ea6198ef6d1a8a906e66a Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Fri, 20 Mar 2015 17:27:00 +0900 Subject: [PATCH 06/16] Fix focus error: When PlaybackView is popped in case of it was pushed by ContextView. Change-Id: Id2a898368c1b6b02c7986fba0c7c02e40b7e6281 Signed-off-by: Kim Tae Soo --- src/main.cpp | 3 +++ src/views/context-view.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index e6df0a0..a98f343 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -68,6 +68,9 @@ private: static void sm_CbPopView(void* cookie, const char *szDestroyViewId, CBaseView *pShowView) { + const char *viewId = pShowView->ViewId(); + if (!strcmp(viewId, MUSIC_CONTEXT_VIEW)) + CViewMgr::GetInstance()->UpdateView(viewId, NULL); } protected: diff --git a/src/views/context-view.cpp b/src/views/context-view.cpp index 35fb02b..27e0591 100644 --- a/src/views/context-view.cpp +++ b/src/views/context-view.cpp @@ -1329,6 +1329,7 @@ void CContextView::t_OnUpdate(void *data) ASSERT(m); if (!data) + m_CreateFullView(); return; SParcel *parcel = (SParcel *)data; -- 2.7.4 From a6e9a8399700e7de159cf3a95855e4dcb9ce569b Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Fri, 20 Mar 2015 17:53:18 +0900 Subject: [PATCH 07/16] Fix to show "ADD TO PLAYLIST" context popup in ContextView Change-Id: Ic805b5a3b0690b70bbdc95bcca63611dd1f58ba5 Signed-off-by: Kim Tae Soo --- include/define.h | 4 ++-- src/views/PlayListCtxPopup.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/define.h b/include/define.h index 93fb8b4..4b9ce75 100644 --- a/include/define.h +++ b/include/define.h @@ -425,8 +425,8 @@ #define POSITION_SOURCE_POPUP_Y 155 #define POSITION_PLAY_SETTING_POPUP_X 212 #define POSITION_PLAY_SETTING_POPUP_Y 705 -#define POSITION_PLAY_LIST_POPUP_X 1644 -#define POSITION_PLAY_LIST_POPUP_Y 1020 +#define POSITION_PLAY_LIST_POPUP_X 1645 +#define POSITION_PLAY_LIST_POPUP_Y 190 /* TEMP KEY DEFINITION */ #undef KEY_VOLUMEUP diff --git a/src/views/PlayListCtxPopup.cpp b/src/views/PlayListCtxPopup.cpp index 04821d5..9146082 100644 --- a/src/views/PlayListCtxPopup.cpp +++ b/src/views/PlayListCtxPopup.cpp @@ -42,7 +42,7 @@ void CPlayListCtxPopup::t_OnConfiguration(void) t_SetList((const char **)m->settingTexts, m->listSize, 0, CCtxPopup::TOPBTN_BASE, (const char **)m->btnIds, POSITION_PLAY_LIST_POPUP_X, POSITION_PLAY_LIST_POPUP_Y, - NULL, + MUSIC_STYLE_LIST_POPUP, MUSIC_STYLE_TOPTEXT_BTN, MUSIC_STYLE_MIDDLETEXT_BTN, MUSIC_STYLE_BOTTOMTEXT_BTN); } -- 2.7.4 From cf1d694f4be2e357bd50fda055b5f1e3af4ba001 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Mon, 23 Mar 2015 08:26:37 +0900 Subject: [PATCH 08/16] Fix bug: Key event processing for focus move should not be done when there is no contents Change-Id: I404472126341657c319c03e45f1fcd569c2d7fb1 Signed-off-by: Kim Tae Soo --- src/views/base-view.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/views/base-view.cpp b/src/views/base-view.cpp index f66379a..e8804d6 100644 --- a/src/views/base-view.cpp +++ b/src/views/base-view.cpp @@ -999,7 +999,8 @@ void CMusicBaseView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) elm_object_focus_set(m->c_grpbtn, EINA_TRUE); - else if (!strcmp(ev->keyname, KEY_DOWN)) { + else if (!strcmp(ev->keyname, KEY_DOWN) && + !((CExtBaseLayout *)m->lmgr->Layout())->EmptyStatus()) { const char *btnText = NULL; if (id == BASE_VIEW_PLAY_BUTTON) -- 2.7.4 From 6d1f6a234ca73713f72c22cde292cc3c7565de53 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Mon, 23 Mar 2015 11:45:46 +0900 Subject: [PATCH 09/16] Fix callback mechanism for playback complete, usb connection, contents updated. Change-Id: I7199be0361b8cf4d020ee0cc392ae88491448aa8 Signed-off-by: Kim Tae Soo --- include/base-view.h | 9 +- include/music-controller.h | 34 ++- include/playback-view.h | 9 +- src/data/mediadata.cpp | 4 +- src/playback/music-controller.cpp | 491 ++++++++++++++++++-------------------- src/views/base-view.cpp | 8 +- src/views/playback-view.cpp | 8 +- 7 files changed, 268 insertions(+), 295 deletions(-) diff --git a/include/base-view.h b/include/base-view.h index eea02fd..39ecb51 100644 --- a/include/base-view.h +++ b/include/base-view.h @@ -94,11 +94,10 @@ public: virtual void OnMouseClicked(int id, Evas_Object *obj); virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item); -protected: - virtual void t_OnComplete(void); - virtual void t_OnError(void); - virtual void t_OnUsbConnected(void); - virtual void t_OnUpdateContent(void); + virtual void OnComplete(void); + virtual void OnError(void); + virtual void OnUsbConnected(void); + virtual void OnUpdateContent(void); }; diff --git a/include/music-controller.h b/include/music-controller.h index 498017a..4accf5c 100644 --- a/include/music-controller.h +++ b/include/music-controller.h @@ -23,17 +23,16 @@ class IMusicControllerListener { -private: - static void sm_CbComplete(void *cookie); - static void sm_CbError(void *cookie); - static void sm_CbUsbConnected(void *cookie); - static void sm_CbUpdateContent(void *cookie); - -protected: - virtual void t_OnComplete(void) = 0; - virtual void t_OnError(void) = 0; - virtual void t_OnUsbConnected(void) = 0; - virtual void t_OnUpdateContent(void) = 0; +public: + static void s_CbComplete(void *cookie); + static void s_CbError(void *cookie); + static void s_CbUsbConnected(void *cookie); + static void s_CbUpdateContent(void *cookie); + + virtual void OnComplete(void) = 0; + virtual void OnError(void) = 0; + virtual void OnUsbConnected(void) = 0; + virtual void OnUpdateContent(void) = 0; }; @@ -65,6 +64,8 @@ private: static void sm_CbContentUpdated(void *dt); void m_OnContentUpdated(void); + void m_InvokeErrorCallback(SMusicController *m, int type); + protected: bool t_PlayNext(int direction, int playnext_type); SMusicController* t_Create(void); @@ -97,12 +98,10 @@ public: bool UpdatePlaylist(Eina_List *slist, int addmode); bool EmptyPlaylist(void); - bool PlaylistUpdateShuffle(void); bool PlayPreviousSong(void); bool PlayNextSong(void); bool PlayIndexSong(int index); bool RemoveSong(CSongInfo *sinfo, int index); - bool CheckUsb(void); bool MediaGetList(int EListType, void *info, Eina_List **list); bool MediaInsertPlaylist(const char *name, Eina_List *idlist); @@ -116,16 +115,13 @@ public: CSongInfo *MediaSongByUri(char *uri); bool SetPlayState(EPlayStatus state); - EPlayStatus - PlayState(void); + EPlayStatus PlayState(void); bool SetShuffleState(EShuffleStatus state); - EShuffleStatus - ShuffleState(void); + EShuffleStatus ShuffleState(void); bool SetRepeatState(ERepeatStatus state); - ERepeatStatus - RepeatState(void); + ERepeatStatus RepeatState(void); public: virtual void OnConnect(void); diff --git a/include/playback-view.h b/include/playback-view.h index a1e36a3..991e928 100644 --- a/include/playback-view.h +++ b/include/playback-view.h @@ -150,11 +150,10 @@ public: virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item); virtual void OnActivated(int id, Evas_Object *obj, Elm_Object_Item *item); -protected: - virtual void t_OnComplete(void); - virtual void t_OnError(void); - virtual void t_OnUsbConnected(void); - virtual void t_OnUpdateContent(void); + virtual void OnComplete(void); + virtual void OnError(void); + virtual void OnUsbConnected(void); + virtual void OnUpdateContent(void); }; diff --git a/src/data/mediadata.cpp b/src/data/mediadata.cpp index d0d3d99..71ca524 100644 --- a/src/data/mediadata.cpp +++ b/src/data/mediadata.cpp @@ -360,7 +360,7 @@ void CMediadata::Destroy(void) ASSERT(FlagCreate()); int r; - struct SCbInfo *cbinfo; + SCbInfo *cbinfo; void *obj; m->storageSong->Delete(); @@ -379,7 +379,7 @@ void CMediadata::Destroy(void) EINA_LIST_FREE(m->cblist, obj) { cbinfo = (SCbInfo *)obj; - free(cbinfo); + delete cbinfo; } CMediaContentDbUpdateListener::Destroy(); diff --git a/src/playback/music-controller.cpp b/src/playback/music-controller.cpp index 6a231e9..d521f1a 100644 --- a/src/playback/music-controller.cpp +++ b/src/playback/music-controller.cpp @@ -66,51 +66,102 @@ CMusicController *CMusicController::instance = NULL; int CMusicController::refCnt = 0; -void IMusicControllerListener::sm_CbComplete(void *cookie) +// Implementation of IMusicControllerListener +void IMusicControllerListener::s_CbComplete(void *cookie) { IMusicControllerListener *root = (IMusicControllerListener *)cookie; if (root) - root->t_OnComplete(); + root->OnComplete(); } -void IMusicControllerListener::sm_CbError(void *cookie) +void IMusicControllerListener::s_CbError(void *cookie) { IMusicControllerListener *root = (IMusicControllerListener *)cookie; if (root) - root->t_OnError(); + root->OnError(); } -void IMusicControllerListener::sm_CbUsbConnected(void *cookie) +void IMusicControllerListener::s_CbUsbConnected(void *cookie) { IMusicControllerListener *root = (IMusicControllerListener *)cookie; if (root) - root->t_OnUsbConnected(); + root->OnUsbConnected(); } -void IMusicControllerListener::sm_CbUpdateContent(void *cookie) +void IMusicControllerListener::s_CbUpdateContent(void *cookie) { IMusicControllerListener *root = (IMusicControllerListener *)cookie; if (root) - root->t_OnUpdateContent(); + root->OnUpdateContent(); } -static void _run_callback(SMusicController *m, int type) +// Implementation of CMusicController +void CMusicController::sm_CbPlaybackCompletion(void *dt) { + CMusicController* root = (CMusicController*)dt; + if (root) + root->m_OnPlaybackCompletion(); +} + + +void CMusicController::m_OnPlaybackCompletion(void) +{ + bool r; Eina_List *l; - SCbInfo *cbinfo; + IMusicControllerListener *mcListener = NULL; + void *obj; + + r = t_PlayNext(DIR_NEXT, E_ON_COMPLETE); + if (r == false) + _ERR(" music play next song failed "); + + EINA_LIST_FOREACH(m->elListener, l, obj) { + mcListener = (IMusicControllerListener *)obj; + if (mcListener) + mcListener->s_CbComplete(mcListener); + } +} + + +void CMusicController::sm_CbContentUpdated(void *dt) +{ + CMusicController *root = (CMusicController *)dt; + if (root) + root->m_OnContentUpdated(); +} + + +void CMusicController::m_OnContentUpdated(void) +{ + Eina_List *l; + IMusicControllerListener *mcListener = NULL; + void *obj; + + EINA_LIST_FOREACH(m->elListener, l, obj) { + mcListener = (IMusicControllerListener *)obj; + if (mcListener) + mcListener->s_CbUpdateContent(mcListener); + } +} + + +void CMusicController::m_InvokeErrorCallback(SMusicController *m, int type) +{ + Eina_List *l; + IMusicControllerListener *mcListener = NULL; void *obj; if (!m) return; EINA_LIST_FOREACH(m->elListener, l, obj) { - cbinfo = (SCbInfo *)obj; - if (cbinfo->type == type && cbinfo->cb) - cbinfo->cb(cbinfo->data); + mcListener = (IMusicControllerListener *)obj; + if (mcListener) + mcListener->s_CbError(mcListener); } } @@ -126,12 +177,13 @@ bool CMusicController::t_PlayNext(int direction, int playnext_type) Stop(); if (playnext_type == E_ON_COMPLETE && - m->repeatstate == REPEAT_STATUS_ONE) + m->repeatstate == REPEAT_STATUS_ONE) goto finish; if (direction == DIR_NEXT) { r = m->pPlaylist->LoadNextSong(m->stateShuffle); - } else { + } + else { r = m->pPlaylist->LoadPreviousSong(m->stateShuffle); } @@ -141,7 +193,7 @@ bool CMusicController::t_PlayNext(int direction, int playnext_type) } if (playnext_type == E_ON_COMPLETE && - m->repeatstate == REPEAT_STATUS_NONE) { + m->repeatstate == REPEAT_STATUS_NONE) { r = m->pPlaylist->GetCurSongIndex(&index); if (r == false) { _ERR(" get cur song index failed "); @@ -158,54 +210,6 @@ finish: return true; } -void CMusicController::sm_CbPlaybackCompletion(void *dt) -{ - CMusicController* root = (CMusicController*)dt; - if (root) - root->m_OnPlaybackCompletion(); -} - - -void CMusicController::m_OnPlaybackCompletion(void) -{ - bool r; - Eina_List *l; - SCbInfo *cbinfo; - void *obj; - - r = t_PlayNext(DIR_NEXT, E_ON_COMPLETE); - if (r == false) - _ERR(" music play next song failed "); - - EINA_LIST_FOREACH(m->elListener, l, obj) { - cbinfo = (SCbInfo *)obj; - if (cbinfo->type == E_SONG_COMPLETE && cbinfo->cb) - cbinfo->cb(cbinfo->data); - } -} - - -void CMusicController::sm_CbContentUpdated(void *dt) -{ - CMusicController *root = (CMusicController *)dt; - if (root) - root->m_OnContentUpdated(); -} - - -void CMusicController::m_OnContentUpdated(void) -{ - Eina_List *l; - SCbInfo *cbinfo; - void *obj; - - EINA_LIST_FOREACH(m->elListener, l, obj) { - cbinfo = (SCbInfo *)obj; - if (cbinfo->type == E_CONTENT_UPDATE && cbinfo->cb) - cbinfo->cb(cbinfo->data); - } -} - SMusicController *CMusicController::t_Create(void) { @@ -243,33 +247,8 @@ SMusicController *CMusicController::t_Create(void) } -bool CMusicController::Initialize(void) -{ - if (refCnt == 0) { - instance = new CMusicController; - if (instance == NULL) { - return false; - } - instance->m = instance->t_Create(); - if (!instance->m) { - _ERR("music_init failed"); - delete instance; - instance = NULL; - return false; - } - } - - refCnt++; - - return true; -} - - void CMusicController::t_Destroy(void) { - SCbInfo *cbinfo; - void *obj; - CUsbConnectionListener::Destroy(); if (m->pPlayback->FlagCreate()) { @@ -288,13 +267,29 @@ void CMusicController::t_Destroy(void) m->alinfo->Destroy(); delete m->alinfo; + delete m; +} - EINA_LIST_FREE(m->elListener, obj) { - cbinfo = (SCbInfo *)obj; - free(cbinfo); + +bool CMusicController::Initialize(void) +{ + if (refCnt == 0) { + instance = new CMusicController; + if (instance == NULL) { + return false; + } + instance->m = instance->t_Create(); + if (!instance->m) { + _ERR("music_init failed"); + delete instance; + instance = NULL; + return false; + } } - delete m; + refCnt++; + + return true; } @@ -318,123 +313,124 @@ CMusicController* CMusicController::GetInstance(void) } -bool CMusicController::UpdatePlaylist(Eina_List *slist, int addmode) +bool CMusicController::Start(void) { ASSERT(m); - ASSERT(slist); - if (m->pPlaylist->FlagCreate()) - m->pPlaylist->Update(slist, addmode); - else { - if (!m->pPlaylist->Create(slist)) - _ERR(" playlist create failed "); - } - return true; -} + const char *songpath; + int index; + CPlaylist *pPlaylist; + CPlayback *pPlayback; + CSongInfo *sinfo; + char *media_id; + pPlaylist = m->pPlaylist; + pPlayback = m->pPlayback; -bool CMusicController::AddListener(IMusicControllerListener *listener) -{ - ASSERT(m); - ASSERT(listener); + _CREATE_BEGIN{ + _CHECK(pPlaylist && pPlayback) + _CHECK(pPlaylist->GetCurSongIndex(&index)) + _CHECK(songpath = pPlaylist->SongpathFromIndex(index)) + _CHECK(pPlayback->SetUri(songpath)) + _CHECK(pPlayback->Prepare()) + _CHECK(pPlayback->Start()) - m->elListener = eina_list_append(m->elListener, listener); + _WHEN_SUCCESS{ + m->statePlay = PLAY_STATUS_PLAY; + + _CHECK(m->pPlaylist->GetSonginfoFromIndex(index, &sinfo)) + _CHECK(media_id = sinfo->Id()) + _CHECK(m->pMediadata->SetPlayedTime(media_id)) + + _WHEN_SUCCESS{ + bus_send_signal(); + } + + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + } + + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ _ERR("Playback Failed!!"); m_InvokeErrorCallback(m, E_PLAYBACK_ERROR); } + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ _ERR("CMusicController::Start Failed!!"); Stop(); } + } _CREATE_END_AND_CATCH{ return false; } return true; } -bool CMusicController::RemoveListener(IMusicControllerListener *listener) +bool CMusicController::Stop(void) { ASSERT(m); - ASSERT(listener); - m->elListener = eina_list_remove(m->elListener, listener); + if (!m->pPlayback->FlagCreate()) + return false; + + if (!m->pPlayback->Stop()) + _ERR(" playback stop failed "); + + m->statePlay = PLAY_STATUS_STOP; + + if (!m->pPlayback->Unprepare()) + _ERR(" playback unprepare failed"); return true; } -bool CMusicController::Start(void) +bool CMusicController::Resume(void) { ASSERT(m); - const char *songpath; - int index; - CPlaylist *pPlaylist; - CPlayback *pPlayback; - CSongInfo *sinfo; - char *media_id; - - pPlaylist = m->pPlaylist; - pPlayback = m->pPlayback; + if (!m->pPlayback->FlagCreate()) + return false; - if (!pPlaylist || !pPlayback) - goto error; + if (!m->pPlayback->Resume()) + return false; - if (!pPlaylist->GetCurSongIndex(&index)) { - _ERR(" playlist get current song index failed"); - goto error; - } + m->statePlay = PLAY_STATUS_PLAY; - songpath = pPlaylist->SongpathFromIndex(index); - if (!songpath) { - _ERR(" palylist get song path from index failed"); - goto error; - } + return true; +} - if (!pPlayback->SetUri(songpath)) { - _ERR(" playback set uri failed"); - goto playback_error; - } - if (!pPlayback->Prepare()) { - _ERR(" playback prepare failed"); - goto playback_error; - } +bool CMusicController::Pause(void) +{ + ASSERT(m); - if (!pPlayback->Start()) { - _ERR(" playback start failed"); - goto playback_error; - } + if (!m || !m->pPlayback->FlagCreate()) + return false; - m->statePlay = PLAY_STATUS_PLAY; + if (!m->pPlayback->Pause()) + return false; - if (m->pPlaylist->GetSonginfoFromIndex(index, &sinfo)) { - media_id = sinfo->Id(); - if (media_id) { - if (m->pMediadata->SetPlayedTime(media_id)) - bus_send_signal(); - } else - _ERR("song info get media id failed"); - } else - _ERR("playback get songinfo failed"); + m->statePlay = PLAY_STATUS_PAUSE; return true; - -playback_error: - _run_callback(m, E_PLAYBACK_ERROR); -error: - Stop(); - - return false; } -bool CMusicController::Stop(void) +bool CMusicController::AddListener(IMusicControllerListener *listener) { ASSERT(m); + ASSERT(listener); - if (!m->pPlayback->FlagCreate()) - return false; + m->elListener = eina_list_append(m->elListener, listener); - if (!m->pPlayback->Stop()) - _ERR(" playback stop failed "); + return true; +} - m->statePlay = PLAY_STATUS_STOP; - if (!m->pPlayback->Unprepare()) - _ERR(" playback unprepare failed"); +bool CMusicController::RemoveListener(IMusicControllerListener *listener) +{ + ASSERT(m); + ASSERT(listener); + + m->elListener = eina_list_remove(m->elListener, listener); return true; } @@ -522,175 +518,157 @@ bool CMusicController::GetSonginfoFromIndex(int index, CSongInfo **const csinfo) } -bool CMusicController::PlayNextSong(void) +bool CMusicController::SetPosition(int milseconds) { ASSERT(m); - return t_PlayNext(DIR_NEXT, E_BUTTON_CLICK); -} - + if (!m->pPlayback->FlagCreate()) + return false; -bool CMusicController::PlayPreviousSong(void) -{ - ASSERT(m); + if (!m->pPlayback->SetPosition(milseconds)) + return false; - return t_PlayNext(DIR_PREVIOUS, E_BUTTON_CLICK); + return true; } -bool CMusicController::PlayIndexSong(int index) +bool CMusicController::GetPosition(int *const milseconds) { ASSERT(m); - if (!m->pPlaylist->FlagCreate()) + if (!m->pPlayback->FlagCreate()) return false; - Stop(); - - if (!m->pPlaylist->SetCurSongIndex(index)) + if (!m->pPlayback->GetPosition(milseconds)) return false; - Start(); - return true; } -bool CMusicController::Resume(void) +bool CMusicController::SetCurrentSong(char *mediaid) { ASSERT(m); + ASSERT(mediaid); - if (!m->pPlayback->FlagCreate()) - return false; - - if (!m->pPlayback->Resume()) + if (!m->pPlaylist->FlagCreate()) return false; - m->statePlay = PLAY_STATUS_PLAY; + m->pPlaylist->SetCurrentSong(mediaid); return true; } -bool CMusicController::Pause(void) +bool CMusicController::GetCurrentSong(CSongInfo **const sinfo) { ASSERT(m); - if (!m || !m->pPlayback->FlagCreate()) + int index; + + if (!m->pPlaylist->FlagCreate()) return false; - if (!m->pPlayback->Pause()) + if (!m->pPlaylist->GetCurSongIndex(&index)) { + _ERR(" playlist get current song index failed"); return false; + } - m->statePlay = PLAY_STATUS_PAUSE; + if (!m->pPlaylist->GetSonginfoFromIndex(index, sinfo)) { + _ERR(" playlist get current song info failed"); + return false; + } return true; } -bool CMusicController::SetPosition(int milseconds) +bool CMusicController::UpdatePlaylist(Eina_List *slist, int addmode) { ASSERT(m); + ASSERT(slist); - if (!m->pPlayback->FlagCreate()) - return false; - - if (!m->pPlayback->SetPosition(milseconds)) - return false; - + if (m->pPlaylist->FlagCreate()) + m->pPlaylist->Update(slist, addmode); + else { + if (!m->pPlaylist->Create(slist)) + _ERR(" playlist create failed "); + } return true; } -bool CMusicController::GetPosition(int *const milseconds) +bool CMusicController::EmptyPlaylist(void) { ASSERT(m); - if (!m->pPlayback->FlagCreate()) + if (!m->pPlaylist->FlagCreate()) return false; - if (!m->pPlayback->GetPosition(milseconds)) - return false; + m->pPlaylist->Destroy(); return true; } -bool CMusicController::RemoveSong(CSongInfo *sinfo, int index) +bool CMusicController::PlayPreviousSong(void) { ASSERT(m); - ASSERT(sinfo); - - int ind; - - if (!m->pPlaylist->FlagCreate()) - return false; - if (!GetCurrentSongIndex(&ind)) { - _ERR("unable to find current song index"); - return false; - } + return t_PlayNext(DIR_PREVIOUS, E_BUTTON_CLICK); +} - if (!m->pPlaylist->RemoveSong(sinfo, index, m->stateShuffle)) { - _ERR("Song can not be deleted"); - return false; - } - if (ind != 0 && ind == index) - Stop(); +bool CMusicController::PlayNextSong(void) +{ + ASSERT(m); - return true; + return t_PlayNext(DIR_NEXT, E_BUTTON_CLICK); } -bool CMusicController::EmptyPlaylist(void) +bool CMusicController::PlayIndexSong(int index) { ASSERT(m); if (!m->pPlaylist->FlagCreate()) return false; - m->pPlaylist->Destroy(); + Stop(); + + if (!m->pPlaylist->SetCurSongIndex(index)) + return false; + + Start(); return true; } -bool CMusicController::GetCurrentSong(CSongInfo **const sinfo) +bool CMusicController::RemoveSong(CSongInfo *sinfo, int index) { ASSERT(m); + ASSERT(sinfo); - int index; + int ind; if (!m->pPlaylist->FlagCreate()) return false; - if (!m->pPlaylist->GetCurSongIndex(&index)) { - _ERR(" playlist get current song index failed"); + if (!GetCurrentSongIndex(&ind)) { + _ERR("unable to find current song index"); return false; } - if (!m->pPlaylist->GetSonginfoFromIndex(index, sinfo)) { - _ERR(" playlist get current song info failed"); + if (!m->pPlaylist->RemoveSong(sinfo, index, m->stateShuffle)) { + _ERR("Song can not be deleted"); return false; } - return true; -} - - -CSongInfo *CMusicController::MediaSongByUri(char *uri) -{ - ASSERT(m); - ASSERT(uri); - - CSongInfo *sinfo; - - sinfo = m->pMediadata->SongByUri(uri); - if (!sinfo) - return NULL; + if (ind != 0 && ind == index) + Stop(); - return sinfo; + return true; } @@ -791,17 +769,18 @@ bool CMusicController::MediaAddsongsPlaylist(int lid, Eina_List *list) } -bool CMusicController::SetCurrentSong(char *mediaid) +CSongInfo *CMusicController::MediaSongByUri(char *uri) { ASSERT(m); - ASSERT(mediaid); + ASSERT(uri); - if (!m->pPlaylist->FlagCreate()) - return false; + CSongInfo *sinfo; - m->pPlaylist->SetCurrentSong(mediaid); + sinfo = m->pMediadata->SongByUri(uri); + if (!sinfo) + return NULL; - return true; + return sinfo; } @@ -867,7 +846,7 @@ void CMusicController::OnConnect(void) return; Eina_List *l; - SCbInfo *cbinfo; + IMusicControllerListener *mcListener = NULL;; void *obj; if (CInfo::SourceType() == SOURCE_TYPE_USB) { @@ -876,8 +855,8 @@ void CMusicController::OnConnect(void) } EINA_LIST_FOREACH(m->elListener, l, obj) { - cbinfo = (SCbInfo *)obj; - if (cbinfo->type == E_USB_CONNECT && cbinfo->cb) - cbinfo->cb(cbinfo->data); + mcListener = (IMusicControllerListener *)obj; + if (mcListener) + mcListener->s_CbUsbConnected(mcListener); } } \ No newline at end of file diff --git a/src/views/base-view.cpp b/src/views/base-view.cpp index e8804d6..ccec9b2 100644 --- a/src/views/base-view.cpp +++ b/src/views/base-view.cpp @@ -1183,24 +1183,24 @@ void CMusicBaseView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item) } -void CMusicBaseView::t_OnComplete(void) +void CMusicBaseView::OnComplete(void) { m_UpdatePlaysongLabel(); } -void CMusicBaseView::t_OnError(void) +void CMusicBaseView::OnError(void) { } -void CMusicBaseView::t_OnUsbConnected(void) +void CMusicBaseView::OnUsbConnected(void) { m->popup = m_CreateLoadingPopup(); } -void CMusicBaseView::t_OnUpdateContent(void) +void CMusicBaseView::OnUpdateContent(void) { int source; diff --git a/src/views/playback-view.cpp b/src/views/playback-view.cpp index 510098f..aff7a1c 100644 --- a/src/views/playback-view.cpp +++ b/src/views/playback-view.cpp @@ -2134,23 +2134,23 @@ void CPlaybackView::OnActivated(int id, Evas_Object *obj, Elm_Object_Item *item) } -void CPlaybackView::t_OnComplete(void) +void CPlaybackView::OnComplete(void) { m_UpdateCurrentSongInfo(); } -void CPlaybackView::t_OnError(void) +void CPlaybackView::OnError(void) { m_CreateErrorPopup(); } -void CPlaybackView::t_OnUsbConnected(void) +void CPlaybackView::OnUsbConnected(void) { } -void CPlaybackView::t_OnUpdateContent(void) +void CPlaybackView::OnUpdateContent(void) { } -- 2.7.4 From 744d07ad0681de73aac69fae9b67405b582e0207 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Mon, 23 Mar 2015 16:27:13 +0900 Subject: [PATCH 10/16] Remove unnecessary function definition Change-Id: I98e0f3da7f376244c9a2330141fb8a5ffa952dd1 Signed-off-by: Kim Tae Soo --- include/playback-view.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/playback-view.h b/include/playback-view.h index 991e928..104f26a 100644 --- a/include/playback-view.h +++ b/include/playback-view.h @@ -38,7 +38,6 @@ private: static Eina_Bool sm_CbUpdateSlider(void *dt); static Eina_Bool sm_CbLongpressTimer(void *dt); static Eina_Bool sm_CbWaitTimer(void *dt); - static Eina_Bool sm_CbVolumeTimer(void *dt); static void sm_CbItemSelect(void *data, Evas_Object *obj, void *event_info); @@ -65,8 +64,6 @@ private: void m_KeyNextUnpress(void); void m_KeyPreviousUnpress(void); - - void m_RemoveTimer(int timer_code); void m_PlaybackPause(void); void m_PlaybackResume(void); @@ -94,7 +91,6 @@ private: void m_HandleOnRepeated(void); void m_DeleteSelectedItems(void); - void m_AddSlider(void); void m_AddAlbumCover(void); void m_AddCurrentSonginfo(void); -- 2.7.4 From e192f7f7efdd742ed92e519fc54472825d23ac37 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Tue, 24 Mar 2015 11:13:30 +0900 Subject: [PATCH 11/16] Modify volume implementation. Change-Id: Ida9d65a70a7d4f5c8c661b3042d44c55989b3abf Signed-off-by: Kim Tae Soo --- src/playback/volume-control.cpp | 88 +++++++++++++++++++++++------------------ src/views/HandleVolume.cpp | 1 - 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/src/playback/volume-control.cpp b/src/playback/volume-control.cpp index 2f7da36..e45767f 100644 --- a/src/playback/volume-control.cpp +++ b/src/playback/volume-control.cpp @@ -21,8 +21,8 @@ #include "dbg.h" -#define VOLUME_MUTE 1 -#define VOLUME_UNMUTE 0 +#define VOLUME_MUTE 1 +#define VOLUME_UNMUTE 0 static int currentVolume = 0; static bool muteFlag = false; @@ -31,19 +31,21 @@ bool CVolumeController::Mute(void) { int r; - r = sound_manager_get_volume(SOUND_TYPE_MEDIA, ¤tVolume); - if (r != 0) { - _ERR("failed to get volume"); - return false; - } + if (muteFlag == false) { + r = sound_manager_get_volume(SOUND_TYPE_MEDIA, ¤tVolume); + if (r != 0) { + _ERR("failed to get volume"); + return false; + } - r = sound_manager_set_volume(SOUND_TYPE_MEDIA, 0); - if (r != 0) { - _ERR("failed to set volume"); - return false; - } + r = sound_manager_set_volume(SOUND_TYPE_MEDIA, 0); + if (r != 0) { + _ERR("failed to set volume"); + return false; + } - muteFlag = true; + muteFlag = true; + } return true; } @@ -52,23 +54,31 @@ bool CVolumeController::Unmute(void) { int r; - r = sound_manager_set_volume(SOUND_TYPE_MEDIA, currentVolume); - if (r != 0) { - _ERR("failed to set volume"); - return false; - } + if (muteFlag == true) { + r = sound_manager_set_volume(SOUND_TYPE_MEDIA, currentVolume); + if (r != 0) { + _ERR("failed to set volume"); + return false; + } - muteFlag = false; + muteFlag = false; + } return true; } bool CVolumeController::Up(void) { - int r, vol; + int r, vol, maxVol; if (!CVolumeController::Unmute()) { - _ERR("failed to set volume unmute"); + _ERR("failed to unmute"); + return false; + } + + r = sound_manager_get_max_volume(SOUND_TYPE_MEDIA, &maxVol); + if (r != 0) { + _ERR("failed to get max volume"); return false; } @@ -79,6 +89,8 @@ bool CVolumeController::Up(void) } vol++; + if (vol > maxVol) + vol = maxVol; r = sound_manager_set_volume(SOUND_TYPE_MEDIA, vol); if (r != 0) { @@ -86,6 +98,8 @@ bool CVolumeController::Up(void) return false; } + currentVolume = vol; + return true; } @@ -94,7 +108,7 @@ bool CVolumeController::Down(void) int r, vol; if (!CVolumeController::Unmute()) { - _ERR("failed to set volume unmute"); + _ERR("failed to unmute"); return false; } @@ -103,7 +117,10 @@ bool CVolumeController::Down(void) _ERR("failed to get volume"); return false; } + vol--; + if (vol < 0) + vol = 0; r = sound_manager_set_volume(SOUND_TYPE_MEDIA, vol); if (r != 0) { @@ -111,24 +128,13 @@ bool CVolumeController::Down(void) return false; } + currentVolume = vol; + return true; } bool CVolumeController::IsMute(void) { - /*int r; - bool mute; - - r = sound_manager_get_master_mute(&mute); - if (r != 0) { - _ERR("failed to get mute"); - return false; - } - - if (mute) - return true; - - return false;*/ return muteFlag; } @@ -136,11 +142,15 @@ bool CVolumeController::Get(int *vol) { int r; - r = sound_manager_get_volume(SOUND_TYPE_MEDIA, vol); - if (r != 0) { - _ERR("failed to get volume"); - return false; + if (muteFlag == false) { + r = sound_manager_get_volume(SOUND_TYPE_MEDIA, vol); + if (r != 0) { + _ERR("failed to get volume"); + return false; + } } + else + *vol = currentVolume; return true; } diff --git a/src/views/HandleVolume.cpp b/src/views/HandleVolume.cpp index 8db38e3..10c4911 100644 --- a/src/views/HandleVolume.cpp +++ b/src/views/HandleVolume.cpp @@ -66,7 +66,6 @@ void CHandleVolume::m_HandleVolumeKey(int mode) m->etVol = ecore_timer_add(VOLUME_TIMER_INTERVAL, sm_CbVolumeTimer, m); m->flagVolumeMode = true; - evas_object_show(m->eoVolLayout); elm_object_part_content_set(m->eoBase, MUSIC_PART_VOLUME_LAYOUT, m->eoVolLayout); evas_object_show(m->eoVolLayout); -- 2.7.4 From a5a26419b7a9ae8e3577239d6c1e9da9c3ef7056 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Tue, 24 Mar 2015 11:25:22 +0900 Subject: [PATCH 12/16] Modify to destroy ctxpopup when already selected item is selected again. Change-Id: Ic06eb1ffad6adf6929dbb569f3f95afa6b92bf16 Signed-off-by: Kim Tae Soo --- src/views/PlayListCtxPopup.cpp | 1 - src/views/SortCtxPopup.cpp | 8 +++++--- src/views/SourceCtxPopup.cpp | 8 +++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/views/PlayListCtxPopup.cpp b/src/views/PlayListCtxPopup.cpp index 9146082..123c989 100644 --- a/src/views/PlayListCtxPopup.cpp +++ b/src/views/PlayListCtxPopup.cpp @@ -70,7 +70,6 @@ void CPlayListCtxPopup::t_OnBtnClicked(Evas_Object* obj, void* ev) return; CInfo::SetPlayListDbId(m->dbIds[index]); - CCtxPopup::t_OnBtnClicked(obj, ev); Destroy(); diff --git a/src/views/SortCtxPopup.cpp b/src/views/SortCtxPopup.cpp index d72cfd3..8706d59 100644 --- a/src/views/SortCtxPopup.cpp +++ b/src/views/SortCtxPopup.cpp @@ -129,11 +129,13 @@ void CSortCtxPopup::t_OnBtnClicked(Evas_Object* obj, void* ev) } } - if (index == -1 || index == CInfo::SortType()) + if (index == -1) return; - CInfo::SetSortType(index); - CCtxPopup::t_OnBtnClicked(obj, ev); + if (index != CInfo::SortType()) { + CInfo::SetSortType(index); + CCtxPopup::t_OnBtnClicked(obj, ev); + } Destroy(); } diff --git a/src/views/SourceCtxPopup.cpp b/src/views/SourceCtxPopup.cpp index e6cadaa..11eba8d 100644 --- a/src/views/SourceCtxPopup.cpp +++ b/src/views/SourceCtxPopup.cpp @@ -71,11 +71,13 @@ void CSourceCtxPopup::t_OnBtnClicked(Evas_Object* obj, void* ev) break; } } - if (index == -1 || index == CInfo::SourceType()) + if (index == -1) return; - CInfo::SetSourceType(index); - CCtxPopup::t_OnBtnClicked(obj, ev); + if (index != CInfo::SourceType()) { + CInfo::SetSourceType(index); + CCtxPopup::t_OnBtnClicked(obj, ev); + } Destroy(); } -- 2.7.4 From 5583b2a5d86cf06cd78a6bcecf4825c1a61b6a06 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Tue, 24 Mar 2015 19:06:54 +0900 Subject: [PATCH 13/16] Add temp key name macro Change-Id: Ic8696183594dab06cbd2d0286efcd980ae75e446 Signed-off-by: Kim Tae Soo --- include/define.h | 39 ++++++++++++++++++++++----------------- src/views/base-view.cpp | 6 ++++-- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/include/define.h b/include/define.h index 4b9ce75..ac1b648 100644 --- a/include/define.h +++ b/include/define.h @@ -429,6 +429,14 @@ #define POSITION_PLAY_LIST_POPUP_Y 190 /* TEMP KEY DEFINITION */ +#undef KEY_UP +#define KEY_UP "Up" +#undef KEY_DOWN +#define KEY_DOWN "Down" +#undef KEY_LEFT +#define KEY_LEFT "Left" +#undef KEY_RIGHT +#define KEY_RIGHT "Right" #undef KEY_VOLUMEUP #define KEY_VOLUMEUP "F9" #undef KEY_VOLUMEDOWN @@ -439,34 +447,31 @@ #define KEY_BACK "Escape" #undef KEY_MENU #define KEY_MENU "Super_L" +#undef KEY_VOLUMEUP_REMOTE +#define KEY_VOLUMEUP_REMOTE "XF86AudioRaiseVolume" +#undef KEY_VOLUMEDOWN_REMOTE +#define KEY_VOLUMEDOWN_REMOTE "XF86AudioLowerVolume" #undef KEY_ENTER_REMOTE #define KEY_ENTER_REMOTE "KP_Enter" #undef KEY_BACK_REMOTE #define KEY_BACK_REMOTE "XF86Close" #undef KEY_MENU_REMOTE #define KEY_MENU_REMOTE "XF86Send" -#undef KEY_UP -#define KEY_UP "Up" -#undef KEY_DOWN -#define KEY_DOWN "Down" -#undef KEY_LEFT -#define KEY_LEFT "Left" -#undef KEY_RIGHT -#define KEY_RIGHT "Right" - -/* SHOULD BE DEFINED */ #undef KEY_PLAY -#define KEY_PLAY "Play" +#define KEY_PLAY "XF86AudioPlay" +#undef KEY_PAUSE +#define KEY_PAUSE "Pause" #undef KEY_NEXT -#define KEY_NEXT "Next" +#define KEY_NEXT "XF86AudioNext" #undef KEY_PREVIOUS -#define KEY_PREVIOUS "Previous" +#define KEY_PREVIOUS "XF86AudioPrev" +#undef KEY_MUTE +#define KEY_MUTE "XF86AudioMute" + +/* SHOULD BE DEFINED */ #undef KEY_EXIT #define KEY_EXIT "Exit" -#undef KEY_MUTE -#define KEY_MUTE "Mute" -#undef KEY_PAUSE -#define KEY_PAUSE "Pause" + /* SORTING ID */ #define SORT_BY_ARTIST_AZ "SORT_BY_ARTIST_AZ" diff --git a/src/views/base-view.cpp b/src/views/base-view.cpp index ccec9b2..93ff5fb 100644 --- a/src/views/base-view.cpp +++ b/src/views/base-view.cpp @@ -975,9 +975,11 @@ void CMusicBaseView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key m_UpdateCurrentLayout(true); } } - else if (!strcmp(ev->keyname, KEY_VOLUMEUP)) + else if (!strcmp(ev->keyname, KEY_VOLUMEUP) || + !strcmp(ev->keyname, KEY_VOLUMEUP_REMOTE)) m->pHandleVolume->Up(); - else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) + else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN) || + !strcmp(ev->keyname, KEY_VOLUMEDOWN_REMOTE)) m->pHandleVolume->Down(); else if (!strcmp(ev->keyname, KEY_MUTE)) m->pHandleVolume->Mute(); -- 2.7.4 From 3c7059b0d6e39574a78a741cc6daa7ac2e75fd9a Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Wed, 25 Mar 2015 08:12:17 +0900 Subject: [PATCH 14/16] Remove unused function. Change-Id: I51017df2b1010d9e62eeacf1a4105012bb4e9d26 Signed-off-by: Kim Tae Soo --- include/music-controller.h | 1 - src/playback/music-controller.cpp | 22 ++-------------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/include/music-controller.h b/include/music-controller.h index 4accf5c..153d51e 100644 --- a/include/music-controller.h +++ b/include/music-controller.h @@ -86,7 +86,6 @@ public: bool RemoveListener(IMusicControllerListener *listener); bool GetCurrentSongIndex(int *ind); - bool SetCurrentSongIndex(int ind); bool GetTotalSongs(int *ts); bool GetSonginfoFromIndex(int index, CSongInfo **const csinfo); diff --git a/src/playback/music-controller.cpp b/src/playback/music-controller.cpp index d521f1a..e7851c5 100644 --- a/src/playback/music-controller.cpp +++ b/src/playback/music-controller.cpp @@ -458,26 +458,6 @@ bool CMusicController::GetCurrentSongIndex(int *ind) } -bool CMusicController::SetCurrentSongIndex(int index) -{ - ASSERT(m); - - if (!m->pPlaylist->FlagCreate()) { - _ERR("NULL received"); - return false; - } - - if (!m->pPlaylist->SetCurSongIndex(index)) { - _ERR(" playlist get current song index failed"); - return false; - } - - m->initial_index = index; - - return true; -} - - bool CMusicController::GetTotalSongs(int *ts) { ASSERT(m); @@ -641,6 +621,8 @@ bool CMusicController::PlayIndexSong(int index) Start(); + m->initial_index = index; + return true; } -- 2.7.4 From cb748e50663f0ba5aac629c8c078c67e9e008b47 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Wed, 25 Mar 2015 10:10:19 +0900 Subject: [PATCH 15/16] Fix Bug: When a song is removed from the list of playback view, playback view should be updated Change-Id: If562c80f8ba6bfb96d59fea709db08eb57311c2b Signed-off-by: Kim Tae Soo --- src/main.cpp | 3 ++- src/views/playback-view.cpp | 43 ++++++++++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a98f343..28fcf8f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -69,7 +69,8 @@ private: static void sm_CbPopView(void* cookie, const char *szDestroyViewId, CBaseView *pShowView) { const char *viewId = pShowView->ViewId(); - if (!strcmp(viewId, MUSIC_CONTEXT_VIEW)) + if (!strcmp(viewId, MUSIC_CONTEXT_VIEW) || + !strcmp(viewId, MUSIC_PLAYBACK_VIEW)) CViewMgr::GetInstance()->UpdateView(viewId, NULL); } diff --git a/src/views/playback-view.cpp b/src/views/playback-view.cpp index aff7a1c..aba56e8 100644 --- a/src/views/playback-view.cpp +++ b/src/views/playback-view.cpp @@ -266,6 +266,7 @@ void CPlaybackView::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid) { SPlaybackView *m = (SPlaybackView *)dt; SItemInfo *itinfo = NULL; + Elm_Object_Item *focucedItem = NULL; if (!m) return; @@ -283,8 +284,15 @@ void CPlaybackView::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid) if (type == ACTION_TYPE_DELETE) { itinfo->check_status = true; m->parent->m_DeleteSelectedItems(); + + if (!m->mgr->PopView()) { + _ERR("CViewMgr::PopView failed"); + return; + } + + focucedItem = m->cs_itinfo->item; } - else if (type == ACTION_TYPE_PLAY) { + else { // ACTION_TYPE_PLAY if (m->ctxtinfo->status == PLAY_STATUS_PLAY) m->parent->m_KeyPausePress(); else { @@ -293,18 +301,16 @@ void CPlaybackView::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid) else m->parent->m_HandleGenlistItemActivated(m->eoPlaylist, itinfo->item); } - } - else { - _ERR(" Wrong ctxt add type in plaback view "); - ASSERT(0); - } - if (!m->mgr->PopView()) { - _ERR("CViewMgr::PopView failed"); - return; + if (!m->mgr->PopView()) { + _ERR("CViewMgr::PopView failed"); + return; + } + + focucedItem = m->focused_item; } - elm_object_item_focus_set(m->focused_item, EINA_TRUE); + elm_object_item_focus_set(focucedItem, EINA_TRUE); } @@ -1799,12 +1805,15 @@ void CPlaybackView::t_OnUpdate(void *data) { ASSERT(m); - if (!data) - return; + SParcel *parcel; + int updateType; - SParcel *parcel = (SParcel *)data; - int updateType = parcel->updateType; - char *key = (char *)parcel->keyEvent; + if (!data) + updateType = E_PLAYLIST_UPDATE; + else { + parcel = (SParcel *)data; + updateType = parcel->updateType; + } switch (updateType) { case E_PLAYLIST_UPDATE: @@ -1819,11 +1828,11 @@ void CPlaybackView::t_OnUpdate(void *data) break; case E_KEY_PRESS: - m_HandleKeyPress(key); + m_HandleKeyPress((char *)parcel->keyEvent); break; case E_KEY_RELEASE: - m_HandleKeyUnpress(key); + m_HandleKeyUnpress((char *)parcel->keyEvent); break; default: -- 2.7.4 From 96ba3a3858e2855ae6096c5b934b9dae9a5e2f88 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Wed, 25 Mar 2015 14:57:25 +0900 Subject: [PATCH 16/16] Rearrangement of source code Change-Id: I502050b3119f081a7090e05788e6e1284197526d Signed-off-by: Kim Tae Soo --- src/playback/music-controller.cpp | 113 ++++++++++++++++++-------------------- src/playback/volume-control.cpp | 35 +++++++----- src/views/playback-view.cpp | 11 ++-- 3 files changed, 82 insertions(+), 77 deletions(-) diff --git a/src/playback/music-controller.cpp b/src/playback/music-controller.cpp index e7851c5..194f835 100644 --- a/src/playback/music-controller.cpp +++ b/src/playback/music-controller.cpp @@ -47,18 +47,6 @@ struct SMusicController { ERepeatStatus repeatstate; SCbInfo *cbinfo; - - SMusicController() { - memset(this, 0, sizeof(SMusicController)); - pPlayback = new CPlayback; - pPlaylist = new CPlaylist; - pMediadata = new CMediadata; - } - ~SMusicController() { - delete pMediadata; - delete pPlaylist; - delete pPlayback; - } }; @@ -217,29 +205,41 @@ SMusicController *CMusicController::t_Create(void) _CREATE_BEGIN { _CHECK(mhandle = new SMusicController) - _CHECK(mhandle->alinfo = new CAlbumInfo) - _CHECK(mhandle->alinfo->Create() == true) - _CHECK(mhandle->pMediadata->Create() == true) - _CHECK(mhandle->pPlayback->Create() == true) - _CHECK(mhandle->pPlayback->SetCallback(sm_CbPlaybackCompletion, this) == true) - _CHECK(CUsbConnectionListener::Create() == true) _WHEN_SUCCESS{ - mhandle->statePlay = PLAY_STATUS_INITIAL; - mhandle->stateShuffle = SHUFFLE_STATUS_OFF; - mhandle->repeatstate = REPEAT_STATUS_ALL; - mhandle->initial_index = 0; - CInfo::SetSortType(E_SORT_TITLE_A_Z); - CInfo::SetSourceType(SOURCE_TYPE_ALL); - mhandle->cbinfo = mhandle->pMediadata->AddCallback(E_CONTENT_UPDATE, sm_CbContentUpdated, this); + memset(mhandle, 0, sizeof(SMusicController)); + + _CHECK(mhandle->alinfo = new CAlbumInfo) + _CHECK(mhandle->alinfo->Create() == true) + _CHECK(mhandle->pMediadata = new CMediadata) + _CHECK(mhandle->pMediadata->Create() == true) + _CHECK(mhandle->pPlayback = new CPlayback) + _CHECK(mhandle->pPlayback->Create() == true) + _CHECK(mhandle->pPlayback->SetCallback(sm_CbPlaybackCompletion, this) == true) + _CHECK(mhandle->pPlaylist = new CPlaylist) + _CHECK(CUsbConnectionListener::Create() == true) + + _WHEN_SUCCESS{ + mhandle->statePlay = PLAY_STATUS_INITIAL; + mhandle->stateShuffle = SHUFFLE_STATUS_OFF; + mhandle->repeatstate = REPEAT_STATUS_ALL; + mhandle->initial_index = 0; + CInfo::SetSortType(E_SORT_TITLE_A_Z); + CInfo::SetSourceType(SOURCE_TYPE_ALL); + mhandle->cbinfo = mhandle->pMediadata->AddCallback(E_CONTENT_UPDATE, sm_CbContentUpdated, this); + } + + _CHECK_FAIL{ CUsbConnectionListener::Destroy(); } + _CHECK_FAIL{ delete mhandle->pPlaylist; } + _CHECK_FAIL{} + _CHECK_FAIL{ mhandle->pPlayback->Destroy(); } + _CHECK_FAIL{ delete mhandle->pPlayback; } + _CHECK_FAIL{ mhandle->pMediadata->Destroy(); } + _CHECK_FAIL{ delete mhandle->pMediadata; } + _CHECK_FAIL{ mhandle->alinfo->Destroy(); } + _CHECK_FAIL{ delete mhandle->alinfo; } } - _CHECK_FAIL{ CUsbConnectionListener::Destroy(); } - _CHECK_FAIL{} - _CHECK_FAIL{ mhandle->pPlayback->Destroy(); } - _CHECK_FAIL{ mhandle->pMediadata->Destroy(); } - _CHECK_FAIL{ mhandle->alinfo->Destroy(); } - _CHECK_FAIL{ delete mhandle->alinfo; } _CHECK_FAIL{ delete mhandle; mhandle = NULL; } } _CREATE_END_AND_CATCH{ return NULL; } @@ -251,12 +251,10 @@ void CMusicController::t_Destroy(void) { CUsbConnectionListener::Destroy(); - if (m->pPlayback->FlagCreate()) { - if (!m->pPlayback->UnsetCallback()) - _ERR(" playback remove completion callback failed"); + if (!m->pPlayback->UnsetCallback()) + _ERR(" playback remove completion callback failed"); - m->pPlayback->Destroy(); - } + m->pPlayback->Destroy(); if (m->pPlaylist->FlagCreate()) { m->pPlaylist->Destroy(); @@ -328,7 +326,7 @@ bool CMusicController::Start(void) pPlayback = m->pPlayback; _CREATE_BEGIN{ - _CHECK(pPlaylist && pPlayback) + _CHECK(pPlaylist->FlagCreate()) _CHECK(pPlaylist->GetCurSongIndex(&index)) _CHECK(songpath = pPlaylist->SongpathFromIndex(index)) _CHECK(pPlayback->SetUri(songpath)) @@ -367,16 +365,17 @@ bool CMusicController::Stop(void) { ASSERT(m); - if (!m->pPlayback->FlagCreate()) + if (!m->pPlayback->Stop()) { + _ERR("playback stop failed"); return false; - - if (!m->pPlayback->Stop()) - _ERR(" playback stop failed "); + } m->statePlay = PLAY_STATUS_STOP; - if (!m->pPlayback->Unprepare()) - _ERR(" playback unprepare failed"); + if (!m->pPlayback->Unprepare()) { + _ERR("playback unprepare failed"); + return false; + } return true; } @@ -386,11 +385,10 @@ bool CMusicController::Resume(void) { ASSERT(m); - if (!m->pPlayback->FlagCreate()) - return false; - - if (!m->pPlayback->Resume()) + if (!m->pPlayback->Resume()) { + _ERR("playback resume failed"); return false; + } m->statePlay = PLAY_STATUS_PLAY; @@ -402,11 +400,10 @@ bool CMusicController::Pause(void) { ASSERT(m); - if (!m || !m->pPlayback->FlagCreate()) - return false; - - if (!m->pPlayback->Pause()) + if (!m->pPlayback->Pause()) { + _ERR("playback Pause failed"); return false; + } m->statePlay = PLAY_STATUS_PAUSE; @@ -502,11 +499,10 @@ bool CMusicController::SetPosition(int milseconds) { ASSERT(m); - if (!m->pPlayback->FlagCreate()) - return false; - - if (!m->pPlayback->SetPosition(milseconds)) + if (!m->pPlayback->SetPosition(milseconds)) { + _ERR("playback set position failed"); return false; + } return true; } @@ -516,11 +512,10 @@ bool CMusicController::GetPosition(int *const milseconds) { ASSERT(m); - if (!m->pPlayback->FlagCreate()) - return false; - - if (!m->pPlayback->GetPosition(milseconds)) + if (!m->pPlayback->GetPosition(milseconds)) { + _ERR("playback get position failed"); return false; + } return true; } diff --git a/src/playback/volume-control.cpp b/src/playback/volume-control.cpp index e45767f..339f4b8 100644 --- a/src/playback/volume-control.cpp +++ b/src/playback/volume-control.cpp @@ -24,15 +24,24 @@ #define VOLUME_MUTE 1 #define VOLUME_UNMUTE 0 -static int currentVolume = 0; -static bool muteFlag = false; +struct SVolumeController { + int currentVolume; + bool flagMute; + + SVolumeController() { + currentVolume = 0; + flagMute = false; + } + ~SVolumeController() {} +}; +static SVolumeController sM; bool CVolumeController::Mute(void) { int r; - if (muteFlag == false) { - r = sound_manager_get_volume(SOUND_TYPE_MEDIA, ¤tVolume); + if (sM.flagMute == false) { + r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &sM.currentVolume); if (r != 0) { _ERR("failed to get volume"); return false; @@ -44,7 +53,7 @@ bool CVolumeController::Mute(void) return false; } - muteFlag = true; + sM.flagMute = true; } return true; @@ -54,14 +63,14 @@ bool CVolumeController::Unmute(void) { int r; - if (muteFlag == true) { - r = sound_manager_set_volume(SOUND_TYPE_MEDIA, currentVolume); + if (sM.flagMute == true) { + r = sound_manager_set_volume(SOUND_TYPE_MEDIA, sM.currentVolume); if (r != 0) { _ERR("failed to set volume"); return false; } - muteFlag = false; + sM.flagMute = false; } return true; @@ -98,7 +107,7 @@ bool CVolumeController::Up(void) return false; } - currentVolume = vol; + sM.currentVolume = vol; return true; } @@ -128,21 +137,21 @@ bool CVolumeController::Down(void) return false; } - currentVolume = vol; + sM.currentVolume = vol; return true; } bool CVolumeController::IsMute(void) { - return muteFlag; + return sM.flagMute; } bool CVolumeController::Get(int *vol) { int r; - if (muteFlag == false) { + if (sM.flagMute == false) { r = sound_manager_get_volume(SOUND_TYPE_MEDIA, vol); if (r != 0) { _ERR("failed to get volume"); @@ -150,7 +159,7 @@ bool CVolumeController::Get(int *vol) } } else - *vol = currentVolume; + *vol = sM.currentVolume; return true; } diff --git a/src/views/playback-view.cpp b/src/views/playback-view.cpp index aba56e8..bf30235 100644 --- a/src/views/playback-view.cpp +++ b/src/views/playback-view.cpp @@ -1805,14 +1805,15 @@ void CPlaybackView::t_OnUpdate(void *data) { ASSERT(m); - SParcel *parcel; + SParcel *parcel = (SParcel *)data; int updateType; + char *keyEvent = NULL; - if (!data) + if (!parcel) updateType = E_PLAYLIST_UPDATE; else { - parcel = (SParcel *)data; updateType = parcel->updateType; + keyEvent = (char *)parcel->keyEvent; } switch (updateType) { @@ -1828,11 +1829,11 @@ void CPlaybackView::t_OnUpdate(void *data) break; case E_KEY_PRESS: - m_HandleKeyPress((char *)parcel->keyEvent); + m_HandleKeyPress(keyEvent); break; case E_KEY_RELEASE: - m_HandleKeyUnpress((char *)parcel->keyEvent); + m_HandleKeyUnpress(keyEvent); break; default: -- 2.7.4