src/views/PlaySettingCtxPopup.cpp
src/views/PlayListCtxPopup.cpp
src/views/RemovePopupWindow.cpp
+ src/views/PlaybackController.cpp
+ src/views/SliderWidget.cpp
+ src/views/Timer.cpp
+ src/views/ErrorPopupWindow.cpp
src/playback/playlist-mgr.cpp
src/playback/music-controller.cpp
src/playback/MusicControllerImpl.cpp
--- /dev/null
+/*
+* Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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.
+*/
+
+#ifndef __TIMER_H__
+#define __TIMER_H__
+
+class CTimer {
+private:
+ struct STimer *m;
+
+private:
+ static Eina_Bool sm_CbTimer(void *data);
+
+protected:
+ virtual void t_OnTimer(int id);
+
+public:
+ CTimer() : m(0) {}
+ virtual ~CTimer() {}
+
+ bool Create(void);
+ virtual void Destroy(void);
+
+ bool SetTimer(int id, int ms);
+ void KillTimer(int id);
+};
+
+#endif // __TIMER_H__
\ No newline at end of file
REPEAT_STATUS_ONE
};
+enum EPlayerMode {
+ MODE_PLAYBACK = 0,
+ MODE_PLAYLIST_EDIT
+};
+
+enum EPlayerControlBtns {
+ CTRL_BTN_SETTINGS,
+ CTRL_BTN_SHUFFLE,
+ CTRL_BTN_REPEAT,
+ CTRL_BTN_REWIND,
+ CTRL_BTN_PLAY,
+ CTRL_BTN_FORWARD
+};
+
+enum EPlayerEditBtns {
+ EDIT_BTN_CANCEL,
+ EDIT_BTN_DESELECT,
+ EDIT_BTN_DELETE
+};
+
+enum EPlayerBtnsEvent {
+ EVENT_PRESSED,
+ EVENT_UNPRESSED
+};
+
enum update_type {
E_KEY_PRESS,
E_KEY_RELEASE,
virtual void OnResumePlayback(void) {}
//!
virtual void OnPosition(int milsec) {}
+ //!
+ virtual void OnEmptyPlaylist(void) {}
+ //!
+ virtual void OnPlayerModeChanged(EPlayerMode mode) {}
+ //!
+ virtual void OnEditButtonsPressed(EPlayerEditBtns editBtns) {}
+ //!
+ virtual void OnRemoteButtonEvent(Evas_Object *eoBtn, EPlayerBtnsEvent ev) {}
};
bool SetRepeatState(ERepeatStatus state);
ERepeatStatus RepeatState(void);
+
+ void ChangePlayerMode(EPlayerMode mode);
+ void HandlePlaylistEditButtons(EPlayerEditBtns btnId);
+ void HandleRemoteButtons(Evas_Object *eoBtn, EPlayerBtnsEvent ev);
};
#ifndef __PLAYBACK_VIEW_H__
#define __PLAYBACK_VIEW_H__
-
+#include "Timer.h"
#include "common.h"
struct SItemInfo;
-class CSliderWidget :
- public CListenerMgr,
- public IMusicControllerListener,
- public IMouseMoveListener,
- public IChangedListener {
-private:
- struct SSliderWidget *m;
-
-private:
- static Eina_Bool sm_CbUpdateSlider(void *dt);
- Eina_Bool m_OnUpdateSlider(void);
-
- bool m_AddSlider(void);
- void m_RemoveTimer(void);
-
- void m_UpdateSongInfo(void);
-
-public:
- CSliderWidget() :
- IMouseMoveListener(this),
- IChangedListener(this),
- m(0) {}
- virtual ~CSliderWidget() {}
-
- bool Create(Evas_Object *eoParent);
- virtual void Destroy(void);
-
- Evas_Object* Base(void);
-
- void Init(void);
-
- //! This function is invoked when playback is complete.
- virtual void OnComplete(void);
- //! This function is invoked when new song is played.
- virtual void OnStartPlayback(void);
- //!
- virtual void OnStopPlayback(void);
- //! This function is invoked when playback is paused.
- virtual void OnPausePlayback(void);
- //! This function is invoked when playback is resumed.
- virtual void OnResumePlayback(void);
- //!
- virtual void OnPosition(int milsec);
-
- virtual void OnChanged(int id, Evas_Object *obj);
- virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
-};
-
-
-class CTimer {
-private:
- struct STimer *m;
-
-private:
- static Eina_Bool sm_CbTimer(void *data);
-
-protected:
- virtual void t_OnTimer(int id);
-
-public:
- CTimer() : m(0) {}
- virtual ~CTimer() {}
-
- bool Create(void);
- virtual void Destroy(void);
-
- bool SetTimer(int id, int ms);
- void KillTimer(int id);
-};
-
-
class CPlaybackView : public CBaseView,
- public IMouseClickedListener,
public IMouseMoveListener,
- public IPressedListener,
- public IUnpressedListener,
public IRealizedListener,
public IActivatedListener,
public IMusicControllerListener,
static void sm_CbCtxtClose(void *dt);
void m_OnCtxtClose(void);
- static void sm_CbCtxPopupBtnSelected(void* cookie, CContextPopup* instance, const char* text);
- void m_CbCtxPopupBtnSelected(CContextPopup* instance, const char* text);
+ static int sm_CbCurrentSongCount(void *cookie);
+ int m_CbCurrentSongCount(void);
private:
void m_HandleKeyPress(char *keyname);
void m_KeyNextUnpress(void);
void m_KeyPreviousUnpress(void);
- void m_RemoveTimer(int timer_code);
- void m_PlaybackPause(void);
- void m_PlaybackResume(void);
void m_ChangeEditmodeAll(Eina_List *list, bool flag);
void m_DisableCheckAll(Eina_List *list);
void m_SelectItem(SItemInfo *it_info);
void m_UnselectItem(SItemInfo *it_info);
- void m_UpdateControlBtns(void);
- void m_UpdateCurrentSongProgressbar(void);
void m_UpdateCurrentSongThumbnail(void);
void m_UpdateCurrentSongLabels(void);
void m_UpdateEmptySongInfo(void);
void m_UpdatePlaymodeFocusSequence(void);
void m_UpdateCurrentSongInfo(void);
void m_DisableEditButtons(bool flag);
- void m_CreateErrorPopup(void);
- void m_DestroyErrorPopup(void);
- void m_CreateSettingsPopup(void);
- void m_DestroySettingsPopup(void);
void m_FromEditToPlaybackMode(void);
void m_FromPlaybackToEditMode(void);
- void m_HandleOnRepeated(void);
void m_DeleteSelectedItems(void);
void m_AddAlbumCover(void);
void m_AddCurrentSonginfo(void);
- void m_AddEditPlaylistButtons(void);
- void m_AddControlButtons(void);
- struct SItemInfo *m_FindItemInfoFromSong(Eina_List *list, CSongInfo *sinfo);
- struct SItemInfo *m_FindItemInfoFromItem(Eina_List *list, Elm_Object_Item *item);
+ SItemInfo *m_FindItemInfoFromSong(Eina_List *list, CSongInfo *sinfo);
+ SItemInfo *m_FindItemInfoFromItem(Eina_List *list, Elm_Object_Item *item);
void m_UpdateItemCheck(SItemInfo *itinfo);
Elm_Genlist_Item_Class *m_GetItemClass();
void m_AddGenlist(void);
void m_AddPlaylist(void);
void m_RemovePlaylist(void);
- void m_HandleRewindBtnClicked(Evas_Object *obj);
- void m_HandleForwardBtnClicked(Evas_Object *obj);
- void m_HandleOnPressed(Evas_Object *obj);
- void m_HandleOnUnpressed(Evas_Object *obj);
void m_HandleGenlistItemActivated(Evas_Object *obj, Elm_Object_Item *genListItem);
protected:
- // When button is clicked.
- void t_OnClickedSettings(Evas_Object *obj);
- void t_OnClickedShuffle(Evas_Object *obj);
- void t_OnClickedRepeat(Evas_Object *obj);
- void t_OnClickedPlay(Evas_Object *obj);
-
-protected:
virtual void t_OnShow(void);
virtual void t_OnHide(void);
virtual void t_OnUpdate(void* data);
+ virtual void t_OnTimer(int id);
public:
- CPlaybackView(const char *pViewId) : CBaseView(pViewId),
- IMouseClickedListener(this), IMouseMoveListener(this),
- IPressedListener(this), IUnpressedListener(this),
- IRealizedListener(this), IActivatedListener(this),
+ CPlaybackView(const char *pViewId) :
+ CBaseView(pViewId),
+ IMouseMoveListener(this),
+ IRealizedListener(this),
+ IActivatedListener(this),
m(0) {}
virtual ~CPlaybackView() {}
// Listener virtual function
virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
- virtual void OnPressed(int id, Evas_Object *obj);
- virtual void OnUnpressed(int id, Evas_Object *obj);
virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item);
virtual void OnActivated(int id, Evas_Object *obj, Elm_Object_Item *item);
virtual void OnUpdateContent(void);
virtual void OnStartPlayback(void);
virtual void OnStopPlayback(void);
+ virtual void OnEmptyPlaylist(void);
+ virtual void OnPlayerModeChanged(EPlayerMode mode);
+ virtual void OnEditButtonsPressed(EPlayerEditBtns editBtns);
};
*/
-#include <Eina.h>
#include <media_content.h>
#include <sys/time.h>
#include <stdlib.h>
* limitations under the License.
*/
-
-#include <Eina.h>
#include <media_content.h>
#include <sys/time.h>
#include <stdlib.h>
m->pPlaylist->Destroy();
+ Eina_List *l;
+ IMusicControllerListener *mcListener;
+ void * obj;
+
+ EINA_LIST_FOREACH(m->elListener, l, obj) {
+ mcListener = (IMusicControllerListener *)obj;
+ if (mcListener)
+ mcListener->OnEmptyPlaylist();
+ }
+
return true;
}
}
+void CMusicControllerImpl::ChangePlayerMode(EPlayerMode mode)
+{
+ ASSERT(m);
+
+ Eina_List *l;
+ IMusicControllerListener *mcListener;
+ void * obj;
+
+ EINA_LIST_FOREACH(m->elListener, l, obj) {
+ mcListener = (IMusicControllerListener *)obj;
+ if (mcListener)
+ mcListener->OnPlayerModeChanged(mode);
+ }
+}
+
+
+void CMusicControllerImpl::HandlePlaylistEditButtons(EPlayerEditBtns btnId)
+{
+ ASSERT(m);
+
+ Eina_List *l;
+ IMusicControllerListener *mcListener;
+ void * obj;
+
+ EINA_LIST_FOREACH(m->elListener, l, obj) {
+ mcListener = (IMusicControllerListener *)obj;
+ if (mcListener)
+ mcListener->OnEditButtonsPressed(btnId);
+ }
+}
+
+
+void CMusicControllerImpl::HandleRemoteButtons(Evas_Object *eoBtn, EPlayerBtnsEvent ev)
+{
+ ASSERT(m);
+
+ Eina_List *l;
+ IMusicControllerListener *mcListener;
+ void * obj;
+
+ EINA_LIST_FOREACH(m->elListener, l, obj) {
+ mcListener = (IMusicControllerListener *)obj;
+ if (mcListener)
+ mcListener->OnRemoteButtonEvent(eoBtn, ev);
+ }
+}
+
+
void CMusicControllerImpl::OnStatusChanged(SUsbHostDeviceInfo *changedDevice,
SUsbHostDeviceStatus status)
{
bool SetRepeatState(ERepeatStatus state);
ERepeatStatus RepeatState(void);
+ void ChangePlayerMode(EPlayerMode mode);
+ void HandlePlaylistEditButtons(EPlayerEditBtns btnId);
+ void HandleRemoteButtons(Evas_Object *eoBtn, EPlayerBtnsEvent ev);
+
public:
virtual void OnStatusChanged(SUsbHostDeviceInfo *changedDevice,
SUsbHostDeviceStatus status);
}
+void CMusicController::ChangePlayerMode(EPlayerMode mode)
+{
+ ASSERT(m);
+
+ m->ref.ChangePlayerMode(mode);
+}
+
+
+void CMusicController::HandlePlaylistEditButtons(EPlayerEditBtns editBtn)
+{
+ ASSERT(m);
+
+ m->ref.HandlePlaylistEditButtons(editBtn);
+}
+
+
+void CMusicController::HandleRemoteButtons(Evas_Object *eoBtn, EPlayerBtnsEvent ev)
+{
+ ASSERT(m);
+ m->ref.HandleRemoteButtons(eoBtn, ev);
+}
\ No newline at end of file
*/
#include <stdlib.h>
-#include <app.h>
#include <media/sound_manager.h>
#include <volume-control.h>
#include "dbg.h"
+#include <AppCommon.h>
#define VOLUME_MUTE 1
--- /dev/null
+/*
+* Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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 "i18n.h"
+#include "define.h"
+#include "dbg.h"
+#include <AppCommon.h>
+#include "common.h"
+#include "ErrorPopupWindow.h"
+
+
+#define NUM_BTNS 1
+
+static const char *btnText[NUM_BTNS] = {
+ _(MUSIC_TEXT_OK),
+};
+
+void CErrorPopupWindow::t_OnConfiguration(void)
+{
+ t_SetParams(_("Error"), NULL, _(m_msg), NUM_BTNS, (const char **)btnText);
+}
+
+bool CErrorPopupWindow::Create(Evas_Object* base, const SCallback* callback, const char *msg)
+{
+ m_msg = msg;
+
+ if (!CMessagePopup::Create(base, callback)) {
+ _ERR("Creation of remove popup failed");
+ return false;
+ }
+
+ return true;
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+
+#ifndef __ERROR_POPUP_WINDOW_H__
+#define __ERROR_POPUP_WINDOW_H__
+
+class CErrorPopupWindow : public CMessagePopup {
+private:
+ const char *m_msg;
+
+protected:
+ virtual void t_OnConfiguration(void);
+
+public:
+ bool Create(Evas_Object* base, const SCallback* callback, const char *msg);
+};
+
+
+#endif // __REMOVE_POPUP_WINDOW_H__
\ No newline at end of file
--- /dev/null
+/*
+* Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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 "define.h"
+#include "common.h"
+#include "dbg.h"
+#include <AppCommon.h>
+
+#include "song_info.h"
+#include "music-controller.h"
+#include "i18n.h"
+#include "common-ui.h"
+#include "PlaySettingCtxPopup.h"
+#include "ErrorPopupWindow.h"
+#include "Info.h"
+#include "PlaybackController.h"
+
+
+#define TOTAL_CONTROL_BTNS 6
+#define TOTAL_EDIT_BTNS 3
+#define LP_INTERVAL 0.5 /* seconds */
+#define WAIT_INTERVAL 0.5 /* seconds */
+#define LP_CHANGE 10000 /* milli seconds */
+
+enum EEvasObject {
+ EO_CANCEL,
+ EO_DESELECT,
+ EO_DELETE, // TOTAL_EDIT_BTNS
+
+ EO_BTN_SETTINGS,
+ EO_BTN_SHUFFLE,
+ EO_BTN_REPEAT,
+ EO_BTN_REWIND,
+ EO_BTN_PLAY,
+ EO_BTN_FORWARD, // TOTAL_CONTROL_BTNS
+};
+
+struct SBtnInfo {
+ const char *txt;
+ const char *part;
+ EEvasObject type;
+};
+
+enum ESettingBtns {
+ BTN_EDIT,
+ BTN_CLEAR
+};
+
+enum ETimers {
+ TIMER_WAIT,
+ TIMER_LONGPRESS,
+ TIMER_VOLUME
+};
+
+enum EPressTypes {
+ PRESS_SHORT,
+ PRESS_SHORT_PAUSE,
+ PRESS_LONG,
+ PRESS_LONG_PAUSE,
+};
+
+struct SPlaybackController {
+ Evas_Object *eoBase;
+ CPlaySettingCtxPopup *eoCtxPopup;
+ CErrorPopupWindow *eoErrPopup;
+ Evas_Object *eoPressedObj;
+
+ Evas_Object *eoBtnControl[TOTAL_CONTROL_BTNS];
+ Evas_Object *eoBtnEdit[TOTAL_EDIT_BTNS];
+
+ Ecore_Timer *etWait;
+ Ecore_Timer *etLongPress;
+
+ CMusicController controller;
+ EPressTypes press_status;
+
+ CPlaybackController::SCallback cb;
+
+ CSongInfo *pSongInfo;
+ int duration;
+
+ SPlaybackController() {
+ memset(this, 0, sizeof(SPlaybackController));
+ }
+};
+
+
+void CPlaybackController::sm_CbCtxPopupBtnSelected(void* cookie, CContextPopup* instance, const char* text)
+{
+ CPlaybackController *root = (CPlaybackController *)cookie;
+ if (root)
+ root->m_OnCtxPopupBtnSelected(instance, text);
+}
+
+
+void CPlaybackController::m_OnCtxPopupBtnSelected(CContextPopup* instance, const char* text)
+{
+ int type = CInfo::PlaybackSettingType();
+
+ switch (type) {
+ case BTN_EDIT:
+ m->controller.ChangePlayerMode(MODE_PLAYLIST_EDIT);
+ break;
+
+ case BTN_CLEAR:
+ m->controller.Stop();
+ m->controller.EmptyPlaylist();
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void CPlaybackController::sm_CbErrorPopupBtnSelected(void* cookie, CMessagePopup *instance)
+{
+ CPlaybackController *root = (CPlaybackController *)cookie;
+ if (root)
+ root->m_OnErrorPopupBtnSelected(instance);
+}
+
+
+void CPlaybackController::m_OnErrorPopupBtnSelected(CMessagePopup *instance)
+{
+ m_DestroyErrorPopup();
+ elm_object_focus_set(m->eoBtnControl[CTRL_BTN_PLAY], EINA_TRUE);
+}
+
+
+Eina_Bool CPlaybackController::sm_CbWaitTimer(void *dt)
+{
+ CPlaybackController *root = (CPlaybackController *)dt;
+ if (root)
+ root->m_OnWaitTimer();
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+void CPlaybackController::m_OnWaitTimer(void)
+{
+ m->press_status = PRESS_LONG;
+ if (m->controller.PlayState() == PLAY_STATUS_PLAY) {
+ /* Handle long press */
+ m->controller.Pause();
+ m->etLongPress = ecore_timer_add(LP_INTERVAL, sm_CbLongpressTimer, this);
+ }
+ else {
+ m->press_status = PRESS_LONG_PAUSE;
+ }
+
+ m->etWait = NULL;
+}
+
+
+Eina_Bool CPlaybackController::sm_CbLongpressTimer(void *dt)
+{
+ CPlaybackController *root = (CPlaybackController *)dt;
+ if (root)
+ root->m_OnLongpressTimer();
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+void CPlaybackController::m_OnLongpressTimer(void)
+{
+ m_HandleOnRepeated();
+}
+
+
+void CPlaybackController::m_AddControlButtons(void)
+{
+ Evas_Object *box = NULL;
+ int i;
+ SBtnInfo btninfo[TOTAL_CONTROL_BTNS];
+
+ btninfo[CTRL_BTN_SETTINGS].txt = MUSIC_STYLE_BTN_SETTINGS;
+ btninfo[CTRL_BTN_SETTINGS].type = EO_BTN_SETTINGS;
+
+ btninfo[CTRL_BTN_SHUFFLE].txt = MUSIC_STYLE_BTN_SHUFFLE;
+ btninfo[CTRL_BTN_SHUFFLE].type = EO_BTN_SHUFFLE;
+
+ btninfo[CTRL_BTN_REPEAT].txt = MUSIC_STYLE_BTN_REPEAT;
+ btninfo[CTRL_BTN_REPEAT].type = EO_BTN_REPEAT;
+
+ btninfo[CTRL_BTN_REWIND].txt = MUSIC_STYLE_BTN_REWIND;
+ btninfo[CTRL_BTN_REWIND].type = EO_BTN_REWIND;
+
+ btninfo[CTRL_BTN_PLAY].txt = MUSIC_STYLE_BTN_PLAY;
+ btninfo[CTRL_BTN_PLAY].type = EO_BTN_PLAY;
+
+ btninfo[CTRL_BTN_FORWARD].txt = MUSIC_STYLE_BTN_FORWARD;
+ btninfo[CTRL_BTN_FORWARD].type = EO_BTN_FORWARD;
+
+ box = elm_box_add(m->eoBase);
+ if (!box)
+ return;
+
+ evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0);
+ elm_box_horizontal_set(box, EINA_TRUE);
+ elm_box_padding_set(box,
+ MUSIC_CONTROL_BTNS_PADDING * elm_config_scale_get(), 0);
+
+ for (i = 0; i < TOTAL_CONTROL_BTNS; i++) {
+ m->eoBtnControl[i] = elm_button_add(m->eoBase);
+ if (!m->eoBtnControl[i])
+ continue;
+
+ elm_object_style_set(m->eoBtnControl[i], btninfo[i].txt);
+ evas_object_size_hint_weight_set(m->eoBtnControl[i],
+ EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_box_pack_end(box, m->eoBtnControl[i]);
+
+ if (i == CTRL_BTN_REWIND || i == CTRL_BTN_FORWARD) {
+ Connect(m->eoBtnControl[i], btninfo[i].type, TYPE_PRESSED | TYPE_UNPRESSED | TYPE_MOUSE_MOVE);
+ }
+ else {
+ Connect(m->eoBtnControl[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE);
+ }
+ evas_object_show(m->eoBtnControl[i]);
+ }
+
+ elm_object_part_content_set(m->eoBase, MUSIC_PART_CONTROLBTNS, box);
+}
+
+
+void CPlaybackController::m_AddEditPlaylistButtons(void)
+{
+ Evas_Object *box = NULL;
+ int i;
+ SBtnInfo btninfo[TOTAL_EDIT_BTNS];
+
+ btninfo[EDIT_BTN_CANCEL].txt = MUSIC_TEXT_CANCEL;
+ btninfo[EDIT_BTN_CANCEL].type = EO_CANCEL;
+
+ btninfo[EDIT_BTN_DESELECT].txt = MUSIC_TEXT_DESELECT;
+ btninfo[EDIT_BTN_DESELECT].type = EO_DESELECT;
+
+ btninfo[EDIT_BTN_DELETE].txt = MUSIC_TEXT_DELETE;
+ btninfo[EDIT_BTN_DELETE].type = EO_DELETE;
+
+ box = CCommonUI::AddBox(m->eoBase);
+ if (!box)
+ return;
+
+ elm_box_horizontal_set(box, EINA_TRUE);
+ elm_box_padding_set(box, MUSIC_EDIT_BTNS_PADDING * elm_config_scale_get(), 0);
+
+ for (i = 0; i < TOTAL_EDIT_BTNS; i++) {
+ m->eoBtnEdit[i] = elm_button_add(m->eoBase);
+ if (!m->eoBtnEdit[i])
+ continue;
+
+ elm_object_style_set(m->eoBtnEdit[i], MUSIC_STYLE_EDIT_BTN);
+ evas_object_size_hint_weight_set(m->eoBtnEdit[i], EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_box_pack_end(box, m->eoBtnEdit[i]);
+ elm_object_text_set(m->eoBtnEdit[i], _(btninfo[i].txt));
+
+ Connect(m->eoBtnEdit[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE);
+
+ evas_object_show(m->eoBtnEdit[i]);
+ }
+ elm_object_part_content_set(m->eoBase, MUSIC_PART_EDITBTNS, box);
+ elm_object_signal_emit(m->eoBase, MUSIC_SIGNAL_PLAYBACK_MODE, MUSIC_PLAYBACK_VIEW);
+}
+
+
+void CPlaybackController::m_UpdateForEmptySong(void)
+{
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_PLAY],
+ MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
+ elm_object_focus_set(m->eoBtnControl[CTRL_BTN_SETTINGS], EINA_TRUE);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_REPEAT],
+ m->eoBtnControl[CTRL_BTN_REPEAT], ELM_FOCUS_RIGHT);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_FORWARD], EINA_TRUE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_REWIND], EINA_TRUE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_PLAY], EINA_TRUE);
+}
+
+
+void CPlaybackController::m_CreateErrorPopup(void)
+{
+ CMessagePopup::SCallback cb;
+ cb.cookie = this;
+ cb.onBtn1Pressed = sm_CbErrorPopupBtnSelected;
+
+ m->eoErrPopup = new CErrorPopupWindow;
+ m->eoErrPopup->Create(m->eoBase, &cb, MUSIC_TEXT_PLAYBACK_ERROR);
+
+
+ return;
+}
+
+
+void CPlaybackController::m_DestroyErrorPopup(void)
+{
+ if (!m->eoErrPopup)
+ return;
+
+ if (m->eoErrPopup->FlagCreate())
+ m->eoErrPopup->Destroy();
+
+ delete m->eoErrPopup;
+ m->eoErrPopup = NULL;
+}
+
+
+void CPlaybackController::m_CreateSettingsPopup(void)
+{
+ CContextPopup::SCallback cb;
+ cb.cookie = this;
+ cb.onSelected = sm_CbCtxPopupBtnSelected;
+
+ m->eoCtxPopup = new CPlaySettingCtxPopup;
+ m->eoCtxPopup->Create(m->eoBase, &cb);
+}
+
+
+void CPlaybackController::m_DestroySettingsPopup(void)
+{
+ if (!m->eoCtxPopup)
+ return;
+
+ if (m->eoCtxPopup->FlagCreate())
+ m->eoCtxPopup->Destroy();
+
+ delete m->eoCtxPopup;
+ m->eoCtxPopup = NULL;
+}
+
+
+void CPlaybackController::m_HandleForwardBtnClicked(Evas_Object *obj)
+{
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED,
+ MUSIC_PLAYBACK_VIEW);
+
+ if (m->controller.PlayState() == PLAY_STATUS_STOP)
+ return;
+
+ if (!m->controller.PlayNextSong()) {
+ _ERR(" music play next song failed ");
+ return;
+ }
+}
+
+
+void CPlaybackController::m_HandleRewindBtnClicked(Evas_Object *obj)
+{
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED,
+ MUSIC_PLAYBACK_VIEW);
+
+ if (m->controller.PlayState() == PLAY_STATUS_STOP)
+ return;
+
+ if (!m->controller.PlayPreviousSong()) {
+ _ERR(" music play previous song failed ");
+ return;
+ }
+}
+
+
+void CPlaybackController::m_HandleOnRepeated(void)
+{
+ Evas_Object *obj = NULL;
+ int value;
+ char *timestr = NULL;
+
+ if (!m->eoPressedObj)
+ return;
+
+ obj = m->eoPressedObj;
+
+
+ m->controller.GetPosition(&value);
+
+ if (obj == m->eoBtnControl[CTRL_BTN_REWIND]) {
+ if (value == 0) {
+ m_RemoveTimer(TIMER_LONGPRESS);
+ return;
+ }
+ value = value - LP_CHANGE;
+ if (value <= 0)
+ value = 0;
+ }
+ else {
+ if (value == m->duration) {
+ m->controller.PlayNextSong();
+
+ m->press_status = PRESS_LONG_PAUSE;
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_PLAY], MUSIC_SIGNAL_PAUSE,
+ MUSIC_PLAYBACK_VIEW);
+ m->controller.Pause();
+ m_RemoveTimer(TIMER_LONGPRESS);
+
+ return;
+ }
+ value = value + LP_CHANGE;
+ if (value >= m->duration)
+ value = m->duration;
+ }
+
+ m->controller.SetPosition(value);
+ timestr = CCommonUI::TimeStrFromMilSeconds(value);
+ if (timestr) {
+ elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME,
+ timestr);
+ free(timestr);
+ }
+
+ return;
+}
+
+
+void CPlaybackController::m_RemoveTimer(int timer_code)
+{
+ ETimers timerCode = (ETimers)timer_code;
+
+ switch (timerCode) {
+ case TIMER_WAIT:
+ if (m->etWait) {
+ ecore_timer_del(m->etWait);
+ m->etWait = NULL;
+ }
+ break;
+
+ case TIMER_LONGPRESS:
+ if (m->etLongPress) {
+ ecore_timer_del(m->etLongPress);
+ m->etLongPress = NULL;
+ }
+ break;
+
+ default:
+ _ERR(" invalid value ");
+ break;
+ }
+}
+
+
+void CPlaybackController::m_UpdateSongInfo(void)
+{
+ CSongInfo *sinfo = NULL;
+ int index;
+
+ if (!m->controller.GetCurrentSongIndex(&index)) {
+ _ERR(" music get current song index failed ");
+ return;
+ }
+
+ if (!m->controller.GetSonginfoFromIndex(index, &sinfo)) {
+ _ERR(" music get songinfo failed ");
+ return;
+ }
+ m->pSongInfo = sinfo;
+}
+
+
+void CPlaybackController::m_HandleOnPressed(Evas_Object *obj)
+{
+ m->press_status = PRESS_SHORT;
+ m->eoPressedObj = obj;
+
+ m->etWait = ecore_timer_add(WAIT_INTERVAL, sm_CbWaitTimer, this);
+}
+
+
+void CPlaybackController::m_HandleOnUnpressed(Evas_Object *obj)
+{
+ m_RemoveTimer(TIMER_WAIT);
+ m_RemoveTimer(TIMER_LONGPRESS);
+
+ if (m->press_status == PRESS_SHORT) {
+ /* Handle song change */
+ if (m->controller.PlayState() == PLAY_STATUS_PLAY)
+ m->controller.Pause();
+
+ if (obj == m->eoBtnControl[CTRL_BTN_FORWARD])
+ m_HandleForwardBtnClicked(obj);
+ else
+ m_HandleRewindBtnClicked(obj);
+
+ if (m->controller.PlayState() != PLAY_STATUS_PLAY)
+ m->controller.Resume();
+ }
+ else if (m->press_status == PRESS_LONG) {
+ if (m->controller.PlayState() != PLAY_STATUS_PLAY)
+ m->controller.Resume();
+ }
+
+ m->press_status = PRESS_SHORT;
+}
+
+
+bool CPlaybackController::Create(Evas_Object *eoBase, SCallback *cb)
+{
+ ASSERT(!m);
+
+ _CREATE_BEGIN{
+ _CHECK(m = new SPlaybackController)
+ _COMMAND{ m->eoBase = eoBase; }
+ _CHECK(m->controller.Create())
+ _CHECK(m->controller.AddListener(this))
+
+ _WHEN_SUCCESS{
+ m_AddControlButtons();
+ m_AddEditPlaylistButtons();
+ m->cb = *cb;
+ m->press_status = PRESS_SHORT;
+ }
+
+ _CHECK_FAIL{ m->controller.RemoveListener(this); }
+ _CHECK_FAIL{ m->controller.Destroy(); }
+
+ _CHECK_FAIL{ delete m; m = NULL; }
+ } _CREATE_END_AND_CATCH{ return false; }
+
+ return true;
+}
+
+
+void CPlaybackController::Destroy(void)
+{
+ ASSERT(m);
+
+ m_DestroyErrorPopup();
+ m_DestroySettingsPopup();
+ m->controller.RemoveListener(this);
+
+ delete m;
+ m = NULL;
+}
+
+
+void CPlaybackController::Update(void)
+{
+ int state;
+
+ state = m->controller.PlayState();
+ switch (state) {
+ case PLAY_STATUS_INITIAL:
+ // Initial State, Do nothing
+ break;
+
+ case PLAY_STATUS_STOP:
+ if (!m->eoErrPopup)
+ elm_object_focus_set(m->eoBtnControl[CTRL_BTN_PLAY], EINA_TRUE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_FORWARD], EINA_TRUE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_REWIND], EINA_TRUE);
+ break;
+
+ case PLAY_STATUS_PLAY:
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_FORWARD], EINA_FALSE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_REWIND], EINA_FALSE);
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_PLAY],
+ MUSIC_SIGNAL_PLAY, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ case PLAY_STATUS_PAUSE:
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_FORWARD], EINA_FALSE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_REWIND], EINA_FALSE);
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_PLAY],
+ MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ default:
+ ASSERT(!"Invalid State");
+ break;
+ }
+
+ state = m->controller.ShuffleState();
+ switch (state) {
+ case SHUFFLE_STATUS_OFF:
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_SHUFFLE],
+ MUSIC_SIGNAL_SHUFFLE_OFF, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ case SHUFFLE_STATUS_ON:
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_SHUFFLE],
+ MUSIC_SIGNAL_SHUFFLE_ON, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ default:
+ ASSERT(!"Invalid State");
+ break;
+ }
+
+ state = m->controller.RepeatState();
+ switch (state) {
+ case REPEAT_STATUS_NONE:
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_REPEAT],
+ MUSIC_SIGNAL_REPEAT_OFF, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ case REPEAT_STATUS_ALL:
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_REPEAT],
+ MUSIC_SIGNAL_REPEAT_ALL, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ case REPEAT_STATUS_ONE:
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_REPEAT],
+ MUSIC_SIGNAL_REPEAT_ONE, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ default:
+ ASSERT(!"Invalid State");
+ break;
+ }
+}
+
+
+Evas_Object *CPlaybackController::ControlBtnsObject(EPlayerControlBtns id)
+{
+ ASSERT(m);
+ return m->eoBtnControl[id];
+}
+
+
+Evas_Object *CPlaybackController::EditBtnsObject(EPlayerEditBtns id)
+{
+ ASSERT(m);
+ return m->eoBtnEdit[id];
+}
+
+
+void CPlaybackController::OnComplete(void)
+{
+}
+
+
+void CPlaybackController::OnStartPlayback(void)
+{
+ m_UpdateSongInfo();
+ m->duration = m->pSongInfo->Duration();
+}
+
+
+void CPlaybackController::OnStopPlayback(void)
+{
+}
+
+
+void CPlaybackController::OnPausePlayback(void)
+{
+}
+
+
+void CPlaybackController::OnResumePlayback(void)
+{
+}
+
+
+void CPlaybackController::OnPosition(int milsec)
+{
+}
+
+
+void CPlaybackController::OnError(void)
+{
+ m_CreateErrorPopup();
+}
+
+
+void CPlaybackController::OnEmptyPlaylist(void)
+{
+ m_UpdateForEmptySong();
+}
+
+
+void CPlaybackController::OnRemoteButtonEvent(Evas_Object *eoBtn, EPlayerBtnsEvent ev)
+{
+ switch (ev) {
+ case EVENT_PRESSED:
+ m_HandleOnPressed(eoBtn);
+ break;
+
+ case EVENT_UNPRESSED:
+ m_HandleOnUnpressed(eoBtn);
+ break;
+
+ default:
+ ASSERT(!"Invalid Event.");
+ break;
+ }
+}
+
+
+void CPlaybackController::OnPressed(int id, Evas_Object *obj)
+{
+ switch (id) {
+ case EO_BTN_FORWARD:
+ case EO_BTN_REWIND:
+ m_HandleOnPressed(obj);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void CPlaybackController::OnUnpressed(int id, Evas_Object *obj)
+{
+ switch (id) {
+ case EO_BTN_FORWARD:
+ case EO_BTN_REWIND:
+ m_HandleOnUnpressed(obj);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void CPlaybackController::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+ switch (id) {
+ case EO_CANCEL:
+ case EO_DESELECT:
+ case EO_DELETE:
+ case EO_BTN_FORWARD:
+ case EO_BTN_PLAY:
+ case EO_BTN_REPEAT:
+ case EO_BTN_REWIND:
+ case EO_BTN_SETTINGS:
+ case EO_BTN_SHUFFLE:
+ if (!elm_object_focus_get(obj))
+ elm_object_focus_set(obj, EINA_TRUE);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void CPlaybackController::OnMouseClicked(int id, Evas_Object *obj)
+{
+ switch (id) {
+ case EO_CANCEL:
+ m->controller.HandlePlaylistEditButtons(EDIT_BTN_CANCEL);
+ m->controller.ChangePlayerMode(MODE_PLAYBACK);
+
+ break;
+
+ case EO_DESELECT:
+ m->controller.HandlePlaylistEditButtons(EDIT_BTN_DESELECT);
+ elm_object_focus_set(m->eoBtnEdit[EDIT_BTN_CANCEL], EINA_TRUE);
+ break;
+
+ case EO_DELETE:
+ m->controller.HandlePlaylistEditButtons(EDIT_BTN_DELETE);
+ break;
+
+ case EO_BTN_SETTINGS:
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
+
+ if (m->cb.OnCurrentSongCount &&
+ m->cb.OnCurrentSongCount(m->cb.cookie) == 0)
+ return;
+
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_CONTROL_SELECTED, MUSIC_PLAYBACK_VIEW);
+ m_DestroySettingsPopup();
+ m_CreateSettingsPopup();
+ break;
+
+ case EO_BTN_SHUFFLE:
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
+
+ switch (m->controller.ShuffleState()) {
+ case SHUFFLE_STATUS_OFF:
+ m->controller.SetShuffleState(SHUFFLE_STATUS_ON);
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_SHUFFLE_ON, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ default:
+ m->controller.SetShuffleState(SHUFFLE_STATUS_OFF);
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_SHUFFLE_OFF, MUSIC_PLAYBACK_VIEW);
+ break;
+ }
+ break;
+
+ case EO_BTN_REPEAT:
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
+
+ switch (m->controller.RepeatState()) {
+ case REPEAT_STATUS_NONE:
+ m->controller.SetRepeatState(REPEAT_STATUS_ALL);
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_REPEAT_ALL, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ case REPEAT_STATUS_ALL:
+ m->controller.SetRepeatState(REPEAT_STATUS_ONE);
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_REPEAT_ONE, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ default:
+ m->controller.SetRepeatState(REPEAT_STATUS_NONE);
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_REPEAT_OFF, MUSIC_PLAYBACK_VIEW);
+ break;
+ }
+ break;
+
+ case EO_BTN_PLAY:
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
+
+ switch (m->controller.PlayState()) {
+ case PLAY_STATUS_PAUSE:
+ m->controller.Resume();
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_PLAY, MUSIC_PLAYBACK_VIEW);
+ break;
+
+ case PLAY_STATUS_PLAY:
+ elm_object_signal_emit(obj, MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
+ m->controller.Pause();
+ break;
+
+ default:
+ m->controller.Start();
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+* Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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.
+*/
+
+#ifndef __PLAYBACK_CONTROLLER_H__
+#define __PLAYBACK_CONTROLLER_H__
+
+class CPlaybackController :
+ public CListenerMgr,
+ public IMusicControllerListener,
+ public IPressedListener,
+ public IUnpressedListener,
+ public IMouseMoveListener,
+ public IMouseClickedListener {
+public:
+ struct SCallback {
+ void *cookie;
+ int(*OnCurrentSongCount)(void *cookie);
+ };
+
+private:
+ struct SPlaybackController *m;
+
+private:
+ static void sm_CbCtxPopupBtnSelected(void* cookie, CContextPopup* instance, const char* text);
+ void m_OnCtxPopupBtnSelected(CContextPopup* instance, const char* text);
+
+ static void sm_CbErrorPopupBtnSelected(void* cookie, CMessagePopup *instance);
+ void m_OnErrorPopupBtnSelected(CMessagePopup *instance);
+
+ static Eina_Bool sm_CbWaitTimer(void *dt);
+ void m_OnWaitTimer(void);
+
+ static Eina_Bool sm_CbLongpressTimer(void *dt);
+ void m_OnLongpressTimer(void);
+
+private:
+ void m_AddControlButtons(void);
+ void m_AddEditPlaylistButtons(void);
+ void m_CreateErrorPopup(void);
+ void m_DestroyErrorPopup(void);
+ void m_CreateSettingsPopup(void);
+ void m_DestroySettingsPopup(void);
+ void m_UpdateForEmptySong(void);
+
+ void m_HandleForwardBtnClicked(Evas_Object *obj);
+ void m_HandleRewindBtnClicked(Evas_Object *obj);
+ void m_HandleOnRepeated(void);
+ void m_HandleOnPressed(Evas_Object *obj);
+ void m_HandleOnUnpressed(Evas_Object *obj);
+
+ void m_RemoveTimer(int timer_code);
+ void m_UpdateSongInfo(void);
+
+public:
+ CPlaybackController() :
+ IPressedListener(this),
+ IUnpressedListener(this),
+ IMouseMoveListener(this),
+ IMouseClickedListener(this),
+ m(0) {}
+ virtual ~CPlaybackController() {}
+
+ bool Create(Evas_Object *eoBase, SCallback *cb);
+ virtual void Destroy(void);
+
+ void Update(void);
+
+ Evas_Object *ControlBtnsObject(EPlayerControlBtns id);
+ Evas_Object *EditBtnsObject(EPlayerEditBtns id);
+
+public:
+ virtual void OnComplete(void);
+ virtual void OnStartPlayback(void);
+ virtual void OnStopPlayback(void);
+ virtual void OnPausePlayback(void);
+ virtual void OnResumePlayback(void);
+ virtual void OnPosition(int milsec);
+ virtual void OnError(void);
+ virtual void OnEmptyPlaylist(void);
+ virtual void OnRemoteButtonEvent(Evas_Object *eoBtn, EPlayerBtnsEvent ev);
+
+ virtual void OnPressed(int id, Evas_Object *obj);
+ virtual void OnUnpressed(int id, Evas_Object *obj);
+ virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+ virtual void OnMouseClicked(int id, Evas_Object *obj);
+};
+
+#endif // __PLAYBACK_CONTROLLER_H__
\ No newline at end of file
#define NUM_BTNS 2
-const char *btnText[NUM_BTNS] = {
+static const char *btnText[NUM_BTNS] = {
_(MUSIC_TEXT_REMOVE),
_(MUSIC_TEXT_CANCEL)
};
--- /dev/null
+/*
+* Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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 "define.h"
+#include "common.h"
+#include "dbg.h"
+#include <AppCommon.h>
+
+#include "song_info.h"
+#include "music-controller.h"
+#include "i18n.h"
+#include "common-ui.h"
+#include "SliderWidget.h"
+
+
+#define S_INCREMENT 1000 /* milli seconds */
+#define S_INTERVAL 1 /* seconds */
+#define SLIDER_STEP 5000 /* milli seconds */
+
+
+struct SSliderWidget {
+ Evas_Object *eoSlider;
+ Evas_Object *eoBase;
+
+ Ecore_Timer *etSlider;
+
+ CSongInfo *pSongInfo;
+
+ CMusicController controller;
+
+ SSliderWidget() {
+ eoSlider = NULL;
+ eoBase = NULL;
+ etSlider = NULL;
+ pSongInfo = NULL;
+ }
+};
+
+
+Eina_Bool CSliderWidget::sm_CbUpdateSlider(void *dt)
+{
+ CSliderWidget *root = (CSliderWidget*)dt;
+ Eina_Bool ret = ECORE_CALLBACK_CANCEL;
+
+ if (root)
+ ret = root->m_OnUpdateSlider();
+
+ return ret;
+}
+
+
+Eina_Bool CSliderWidget::m_OnUpdateSlider(void)
+{
+ char *timestr = NULL;
+ int value;
+ int duration;
+
+ if (!m->controller.GetPosition(&value)) {
+ m->etSlider = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ m_UpdateSongInfo();
+
+ duration = m->pSongInfo->Duration();
+
+ value = value + S_INCREMENT;
+ if (value > duration) {
+ m->etSlider = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ elm_slider_value_set(m->eoSlider, value);
+ timestr = CCommonUI::TimeStrFromMilSeconds(value);
+ if (timestr) {
+ elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME,
+ timestr);
+ free(timestr);
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+bool CSliderWidget::m_AddSlider(void)
+{
+ Evas_Object *eoSlider = NULL;
+
+ eoSlider = elm_slider_add(m->eoBase);
+ if (!eoSlider)
+ return false;
+
+ elm_slider_indicator_show_set(eoSlider, EINA_FALSE);
+ elm_slider_indicator_show_on_focus_set(eoSlider, EINA_FALSE);
+ elm_object_style_set(eoSlider, MUSIC_STYLE_SLIDER);
+ elm_slider_horizontal_set(eoSlider, EINA_TRUE);
+ elm_object_part_content_set(m->eoBase, MUSIC_PART_PROGRESSBAR, eoSlider);
+
+ Connect(eoSlider, TYPE_CHANGED | TYPE_MOUSE_MOVE);
+
+ evas_object_show(eoSlider);
+ m->eoSlider = eoSlider;
+
+ return true;
+}
+
+
+void CSliderWidget::m_RemoveTimer(void)
+{
+ if (m->etSlider) {
+ ecore_timer_del(m->etSlider);
+ m->etSlider = NULL;
+ }
+}
+
+
+void CSliderWidget::m_UpdateSongInfo(void)
+{
+ CSongInfo *sinfo = NULL;
+ int index;
+
+ if (!m->controller.GetCurrentSongIndex(&index)) {
+ _ERR(" music get current song index failed ");
+ return;
+ }
+
+ if (!m->controller.GetSonginfoFromIndex(index, &sinfo)) {
+ _ERR(" music get songinfo failed ");
+ return;
+ }
+ m->pSongInfo = sinfo;
+}
+
+
+bool CSliderWidget::Create(Evas_Object *eoBase)
+{
+ ASSERT(!m);
+
+ _CREATE_BEGIN{
+ _CHECK(m = new SSliderWidget)
+ _COMMAND{ m->eoBase = eoBase; }
+ _CHECK(m->controller.Create())
+ _CHECK(m->controller.AddListener(this))
+ _CHECK(m_AddSlider())
+
+ _CHECK_FAIL{}
+ _CHECK_FAIL{ m->controller.RemoveListener(this); }
+ _CHECK_FAIL{ m->controller.Destroy(); }
+ _CHECK_FAIL{ delete m; m = NULL; }
+ } _CREATE_END_AND_CATCH{ return false; }
+
+ return true;
+}
+
+
+void CSliderWidget::Destroy(void)
+{
+ ASSERT(m);
+
+ m->controller.RemoveListener(this);
+ m_RemoveTimer();
+
+ delete m;
+ m = NULL;
+}
+
+
+Evas_Object* CSliderWidget::Base(void)
+{
+ ASSERT(m);
+
+ return m->eoSlider;
+}
+
+
+void CSliderWidget::Init(void)
+{
+ elm_object_disabled_set(m->eoSlider, EINA_TRUE);
+ elm_slider_value_set(m->eoSlider, 0);
+ elm_object_part_text_set(m->eoBase, MUSIC_PART_FULLTIME, "00:00");
+ elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME, "00:00");
+}
+
+
+void CSliderWidget::OnComplete(void)
+{
+}
+
+
+void CSliderWidget::OnStartPlayback(void)
+{
+ int duration;
+ char *timestr = NULL;
+ double step;
+
+ elm_slider_value_set(m->eoSlider, 0);
+ elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME, "00:00");
+
+ elm_object_disabled_set(m->eoSlider, EINA_FALSE);
+
+ m_UpdateSongInfo();
+ duration = m->pSongInfo->Duration();
+
+ m_RemoveTimer();
+ m->etSlider = ecore_timer_add(S_INTERVAL, sm_CbUpdateSlider, this);
+
+ elm_slider_min_max_set(m->eoSlider, 0, duration);
+ timestr = CCommonUI::TimeStrFromMilSeconds(duration);
+ if (timestr) {
+ elm_object_part_text_set(m->eoBase,
+ MUSIC_PART_FULLTIME, timestr);
+ free(timestr);
+ }
+
+ step = (double)SLIDER_STEP / (double)duration;
+ elm_slider_step_set(m->eoSlider, step);
+}
+
+
+void CSliderWidget::OnStopPlayback(void)
+{
+ elm_slider_value_set(m->eoSlider, 0);
+ elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME, "00:00");
+
+ elm_object_disabled_set(m->eoSlider, EINA_TRUE);
+ m_RemoveTimer();
+}
+
+
+void CSliderWidget::OnPausePlayback(void)
+{
+ if (m->etSlider)
+ ecore_timer_freeze(m->etSlider);
+}
+
+
+void CSliderWidget::OnResumePlayback(void)
+{
+ if (m->etSlider)
+ ecore_timer_thaw(m->etSlider);
+}
+
+
+void CSliderWidget::OnPosition(int milsec)
+{
+ elm_slider_value_set(m->eoSlider, milsec);
+}
+
+
+void CSliderWidget::OnChanged(int id, Evas_Object *obj)
+{
+ char *timestr = NULL;
+ int value;
+
+ if (m->controller.PlayState() == PLAY_STATUS_PLAY) {
+ if (m->etSlider)
+ ecore_timer_freeze(m->etSlider);
+ }
+
+ value = elm_slider_value_get(obj);
+ m->controller.SetPosition(value);
+ timestr = CCommonUI::TimeStrFromMilSeconds(value);
+ if (timestr) {
+ elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME,
+ timestr);
+ free(timestr);
+ }
+
+ if (m->controller.PlayState() == PLAY_STATUS_PLAY) {
+ if (m->etSlider)
+ ecore_timer_thaw(m->etSlider);
+ }
+}
+
+
+void CSliderWidget::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+ if (!elm_object_focus_get(obj))
+ elm_object_focus_set(obj, EINA_TRUE);
+}
\ No newline at end of file
--- /dev/null
+/*
+* Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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.
+*/
+
+#ifndef __SLIDER_WIDGET_H__
+#define __SLIDER_WIDGET_H__
+
+class CSliderWidget :
+ public CListenerMgr,
+ public IMusicControllerListener,
+ public IMouseMoveListener,
+ public IChangedListener {
+private:
+ struct SSliderWidget *m;
+
+private:
+ static Eina_Bool sm_CbUpdateSlider(void *dt);
+ Eina_Bool m_OnUpdateSlider(void);
+
+ bool m_AddSlider(void);
+ void m_RemoveTimer(void);
+
+ void m_UpdateSongInfo(void);
+
+public:
+ CSliderWidget() :
+ IMouseMoveListener(this),
+ IChangedListener(this),
+ m(0) {}
+ virtual ~CSliderWidget() {}
+
+ bool Create(Evas_Object *eoParent);
+ virtual void Destroy(void);
+
+ Evas_Object* Base(void);
+
+ void Init(void);
+
+ //! This function is invoked when playback is complete.
+ virtual void OnComplete(void);
+ //! This function is invoked when new song is played.
+ virtual void OnStartPlayback(void);
+ //!
+ virtual void OnStopPlayback(void);
+ //! This function is invoked when playback is paused.
+ virtual void OnPausePlayback(void);
+ //! This function is invoked when playback is resumed.
+ virtual void OnResumePlayback(void);
+ //!
+ virtual void OnPosition(int milsec);
+
+ virtual void OnChanged(int id, Evas_Object *obj);
+ virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+};
+
+#endif // __PLAYBACK_VIEW_H__
\ No newline at end of file
--- /dev/null
+/*
+* Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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 "define.h"
+#include "common.h"
+#include "dbg.h"
+#include <AppCommon.h>
+#include "Timer.h"
+
+
+struct STimer {
+ int count;
+ int s, e;
+ struct SCookie {
+ Ecore_Timer *etTimer;
+ CTimer *root;
+ int id;
+ SCookie(CTimer *timer, int _id) {
+ root = timer;
+ id = _id;
+ }
+ };
+
+ Eina_List *elList;
+};
+
+
+Eina_Bool CTimer::sm_CbTimer(void *data)
+{
+ STimer::SCookie *cookie = (STimer::SCookie*)data;
+
+ if (cookie->root)
+ cookie->root->t_OnTimer(cookie->id);
+
+ cookie->root->m->elList = eina_list_remove(cookie->root->m->elList, cookie);
+
+ delete cookie;
+
+ return EINA_FALSE;
+}
+
+
+void CTimer::t_OnTimer(int id)
+{
+}
+
+
+bool CTimer::Create(void)
+{
+ ASSERT(!m);
+
+ m = new STimer;
+ if (!m)
+ return false;
+
+ m->elList = NULL;
+
+ return true;
+}
+
+
+void CTimer::Destroy(void)
+{
+ ASSERT(m);
+
+ delete m;
+ m = NULL;
+}
+
+
+bool CTimer::SetTimer(int id, int ms)
+{
+ ASSERT(m);
+
+
+ STimer::SCookie *cookie = new STimer::SCookie(this, id);
+ if (!cookie)
+ return false;
+
+ m->elList = eina_list_append(m->elList, cookie);
+ cookie->etTimer = ecore_timer_add(ms, sm_CbTimer, cookie);
+ return true;
+}
+
+
+void CTimer::KillTimer(int id)
+{
+ ASSERT(m);
+}
#include "dbg.h"
#include <AppCommon.h>
+#include "Timer.h"
#include "song_info.h"
#include "album_info.h"
#include "music-controller.h"
#include "HandleVolume.h"
#include "PlaySettingCtxPopup.h"
#include "Info.h"
+#include "SliderWidget.h"
+#include "PlaybackController.h"
#define TOTAL_CONTROL_BTNS 6
#define TOTAL_EDIT_BTNS 3
-#define S_INTERVAL 1 /* seconds */
-#define LP_INTERVAL 0.5 /* seconds */
-#define WAIT_INTERVAL 0.5 /* seconds */
-#define SLIDER_STEP 5000 /* milli seconds */
-#define LP_CHANGE 10000 /* milli seconds */
-#define S_INCREMENT 1000 /* milli seconds */
-// SSliderWidget
-struct SSliderWidget {
- Evas_Object *eoSlider;
- Evas_Object *eoBase;
-
- Ecore_Timer *etSlider;
-
- CSongInfo *pSongInfo;
-
- CMusicController controller;
-
- SSliderWidget() {
- eoSlider = NULL;
- eoBase = NULL;
- etSlider = NULL;
- pSongInfo = NULL;
- }
-};
-
-
-Eina_Bool CSliderWidget::sm_CbUpdateSlider(void *dt)
-{
- CSliderWidget *root = (CSliderWidget*)dt;
- Eina_Bool ret = ECORE_CALLBACK_CANCEL;
-
- if (root)
- ret = root->m_OnUpdateSlider();
-
- return ret;
-}
-
-
-Eina_Bool CSliderWidget::m_OnUpdateSlider(void)
-{
- char *timestr = NULL;
- int value;
- int duration;
-
- if (!m->controller.GetPosition(&value)) {
- m->etSlider = NULL;
- return ECORE_CALLBACK_CANCEL;
- }
-
- m_UpdateSongInfo();
-
- duration = m->pSongInfo->Duration();
-
- value = value + S_INCREMENT;
- if (value > duration) {
- m->etSlider = NULL;
- return ECORE_CALLBACK_CANCEL;
- }
-
- elm_slider_value_set(m->eoSlider, value);
- timestr = CCommonUI::TimeStrFromMilSeconds(value);
- if (timestr) {
- elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME,
- timestr);
- free(timestr);
- }
-
- return ECORE_CALLBACK_RENEW;
-}
-
-
-bool CSliderWidget::m_AddSlider(void)
-{
- Evas_Object *eoSlider = NULL;
-
- eoSlider = elm_slider_add(m->eoBase);
- if (!eoSlider)
- return false;
-
- elm_slider_indicator_show_set(eoSlider, EINA_FALSE);
- elm_slider_indicator_show_on_focus_set(eoSlider, EINA_FALSE);
- elm_object_style_set(eoSlider, MUSIC_STYLE_SLIDER);
- elm_slider_horizontal_set(eoSlider, EINA_TRUE);
- elm_object_part_content_set(m->eoBase, MUSIC_PART_PROGRESSBAR, eoSlider);
-
- Connect(eoSlider, TYPE_CHANGED | TYPE_MOUSE_MOVE);
-
- evas_object_show(eoSlider);
- m->eoSlider = eoSlider;
-
- return true;
-}
-
-
-void CSliderWidget::m_RemoveTimer(void)
-{
- if (m->etSlider) {
- ecore_timer_del(m->etSlider);
- m->etSlider = NULL;
- }
-}
-
-
-void CSliderWidget::m_UpdateSongInfo(void)
-{
- CSongInfo *sinfo = NULL;
- int index;
-
- if (!m->controller.GetCurrentSongIndex(&index)) {
- _ERR(" music get current song index failed ");
- return;
- }
-
- if (!m->controller.GetSonginfoFromIndex(index, &sinfo)) {
- _ERR(" music get songinfo failed ");
- return;
- }
- m->pSongInfo = sinfo;
-}
-
-
-bool CSliderWidget::Create(Evas_Object *eoBase)
-{
- ASSERT(!m);
-
- _CREATE_BEGIN{
- _CHECK(m = new SSliderWidget)
- _COMMAND{ m->eoBase = eoBase; }
- _CHECK(m->controller.Create())
- _CHECK(m->controller.AddListener(this))
- _CHECK(m_AddSlider())
-
- _CHECK_FAIL{}
- _CHECK_FAIL{ m->controller.RemoveListener(this); }
- _CHECK_FAIL{ m->controller.Destroy(); }
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CSliderWidget::Destroy(void)
-{
- ASSERT(m);
-
- m->controller.RemoveListener(this);
- m_RemoveTimer();
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CSliderWidget::Base(void)
-{
- ASSERT(m);
-
- return m->eoSlider;
-}
-
-
-void CSliderWidget::Init(void)
-{
- elm_object_disabled_set(m->eoSlider, EINA_TRUE);
- elm_slider_value_set(m->eoSlider, 0);
-}
-
-
-void CSliderWidget::OnComplete(void)
-{
-}
-
-
-void CSliderWidget::OnStartPlayback(void)
-{
- int duration;
- char *timestr = NULL;
- double step;
-
- elm_slider_value_set(m->eoSlider, 0);
- elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME, "00:00");
-
- elm_object_disabled_set(m->eoSlider, EINA_FALSE);
-
- m_UpdateSongInfo();
- duration = m->pSongInfo->Duration();
-
- m_RemoveTimer();
- m->etSlider = ecore_timer_add(S_INTERVAL, sm_CbUpdateSlider, this);
-
- elm_slider_min_max_set(m->eoSlider, 0, duration);
- timestr = CCommonUI::TimeStrFromMilSeconds(duration);
- if (timestr) {
- elm_object_part_text_set(m->eoBase,
- MUSIC_PART_FULLTIME, timestr);
- free(timestr);
- }
-
- step = (double)SLIDER_STEP / (double)duration;
- elm_slider_step_set(m->eoSlider, step);
-}
-
-
-void CSliderWidget::OnStopPlayback(void)
-{
- elm_slider_value_set(m->eoSlider, 0);
- elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME, "00:00");
-
- elm_object_disabled_set(m->eoSlider, EINA_TRUE);
- m_RemoveTimer();
-}
-
-
-void CSliderWidget::OnPausePlayback(void)
-{
- if (m->etSlider)
- ecore_timer_freeze(m->etSlider);
-}
-
-
-void CSliderWidget::OnResumePlayback(void)
-{
- if (m->etSlider)
- ecore_timer_thaw(m->etSlider);
-}
-
-
-void CSliderWidget::OnPosition(int milsec)
-{
- elm_slider_value_set(m->eoSlider, milsec);
-}
-
-
-void CSliderWidget::OnChanged(int id, Evas_Object *obj)
-{
- char *timestr = NULL;
- int value;
-
- if (m->controller.PlayState() == PLAY_STATUS_PLAY) {
- if (m->etSlider)
- ecore_timer_freeze(m->etSlider);
- }
-
- value = elm_slider_value_get(obj);
- m->controller.SetPosition(value);
- timestr = CCommonUI::TimeStrFromMilSeconds(value);
- if (timestr) {
- elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME,
- timestr);
- free(timestr);
- }
-
- if (m->controller.PlayState() == PLAY_STATUS_PLAY) {
- if (m->etSlider)
- ecore_timer_thaw(m->etSlider);
- }
-}
-
-
-void CSliderWidget::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
-{
- if (!elm_object_focus_get(obj))
- elm_object_focus_set(obj, EINA_TRUE);
-}
-
-
-// STimer
-struct STimer {
- int count;
- int s, e;
- struct SCookie {
- Ecore_Timer *etTimer;
- CTimer *root;
- int id;
- SCookie(CTimer *timer, int _id) {
- root = timer;
- id = _id;
- }
- };
-
- Eina_List *elList;
-};
-
-
-Eina_Bool CTimer::sm_CbTimer(void *data)
-{
- STimer::SCookie *cookie = (STimer::SCookie*)data;
-
- if (cookie->root)
- cookie->root->t_OnTimer(cookie->id);
-
- cookie->root->m->elList = eina_list_remove(cookie->root->m->elList, cookie);
-
- delete cookie;
-
- return EINA_FALSE;
-}
-
-
-void CTimer::t_OnTimer(int id)
-{
-}
-
-
-bool CTimer::Create(void)
-{
- ASSERT(!m);
-
- m = new STimer;
- if (!m)
- return false;
-
- m->elList = NULL;
-
- return true;
-}
-
-
-void CTimer::Destroy(void)
-{
- ASSERT(m);
-
- delete m;
- m = NULL;
-}
-
-
-bool CTimer::SetTimer(int id, int ms)
-{
- ASSERT(m);
-
-
- STimer::SCookie *cookie = new STimer::SCookie(this, id);
- if (!cookie)
- return false;
-
- m->elList = eina_list_append(m->elList, cookie);
- cookie->etTimer = ecore_timer_add(ms, sm_CbTimer, cookie);
- return true;
-}
-
-
-void CTimer::KillTimer(int id)
-{
- ASSERT(m);
-}
-
-
-// CPlaybackView
enum EEvasObject {
EO_BASE,
-
- EO_ERROR_POPUP_BUTTON,
-
- EO_CANCEL,
- EO_DESELECT,
- EO_DELETE, // TOTAL_EDIT_BTNS
-
- EO_BTN_SETTINGS,
- EO_BTN_SHUFFLE,
- EO_BTN_REPEAT,
- EO_BTN_REWIND,
- EO_BTN_PLAY,
- EO_BTN_FORWARD, // TOTAL_CONTROL_BTNS
-
EO_PLAYLIST,
};
-
-enum EControlBtns {
- BTN_SETTINGS,
- BTN_SHUFFLE,
- BTN_REPEAT,
- BTN_REWIND,
- BTN_PLAY,
- BTN_FORWARD
-};
-
-enum ESettingBtns {
- BTN_EDIT,
- BTN_CLEAR
-};
-
-enum EEditBtns {
- BTN_CANCEL,
- BTN_DESELECT,
- BTN_DELETE
-};
-
-enum ETimers {
- TIMER_WAIT,
- TIMER_LONGPRESS,
- TIMER_VOLUME
-};
-
-enum EPressTypes {
- PRESS_SHORT,
- PRESS_SHORT_PAUSE,
- PRESS_LONG,
- PRESS_LONG_PAUSE,
-};
-
struct SItemInfo {
Elm_Object_Item *item;
CSongInfo *sinfo;
Evas_Object *eoWin;
Evas_Object *eoBase;
- CPlaySettingCtxPopup *eoCtxPopup;
- Evas_Object *eoErrPopup;
Evas_Object *eoPlaylist;
Elm_Object_Item *focused_item;
+ CPlaybackController *pPlaybackController;
+ // These are reference values.
Evas_Object *eoBtnControl[TOTAL_CONTROL_BTNS];
Evas_Object *eoBtnEdit[TOTAL_EDIT_BTNS];
Evas_Object *eoAlbumCover;
CSliderWidget *pSliderWidget;
- Evas_Object *eoPressedObj;
- Eina_List *elInfo;
- Ecore_Timer *etLongPress;
- Ecore_Timer *etWait;
+ Eina_List *elInfo;
CMusicController *pController; //! NOT NULL
CSongInfo *csinfo;
CViewMgr *mgr;
SItemInfo *cs_itinfo;
SContentInfo *ctxtinfo;
- EPressTypes press_status;
CHandleVolume *pHandleVolume;
}
};
-struct SBtnInfo {
- const char *txt;
- const char *part;
- EEvasObject type;
-};
-
-
-Eina_Bool CPlaybackView::sm_CbLongpressTimer(void *dt)
-{
- CPlaybackView *root = (CPlaybackView *)dt;
- if (root)
- root->m_OnLongpressTimer();
-
- return ECORE_CALLBACK_RENEW;
-}
-
-
-void CPlaybackView::m_OnLongpressTimer(void)
-{
- m_HandleOnRepeated();
-}
-
-
-Eina_Bool CPlaybackView::sm_CbWaitTimer(void *dt)
-{
- CPlaybackView *root = (CPlaybackView *)dt;
- if (root)
- root->m_OnWaitTimer();
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-void CPlaybackView::m_OnWaitTimer(void)
-{
- m->press_status = PRESS_LONG;
- if (m->pController->PlayState() == PLAY_STATUS_PLAY) {
- /* Handle long press */
- m_PlaybackPause();
- m->etLongPress = ecore_timer_add(LP_INTERVAL, sm_CbLongpressTimer, this);
- }
- else {
- m->press_status = PRESS_LONG_PAUSE;
- }
-
- m->etWait = NULL;
-}
-
void CPlaybackView::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid)
{
}
-void CPlaybackView::sm_CbCtxPopupBtnSelected(void* cookie, CContextPopup* instance, const char* text)
+int CPlaybackView::sm_CbCurrentSongCount(void *cookie)
{
CPlaybackView *root = (CPlaybackView *)cookie;
+ int ret = 0;
if (root)
- root->m_CbCtxPopupBtnSelected(instance, text);
-}
-
-
-void CPlaybackView::m_CbCtxPopupBtnSelected(CContextPopup* instance, const char* text)
-{
- int type = CInfo::PlaybackSettingType();
-
- switch (type) {
- case BTN_EDIT:
- m_FromPlaybackToEditMode();
- break;
-
- case BTN_CLEAR:
- m->pController->Stop();
- m->pController->EmptyPlaylist();
- eina_list_free(m->elInfo);
- m->elInfo = NULL;
- elm_genlist_clear(m->eoPlaylist);
- m_UpdateEmptySongInfo();
- break;
-
- default:
- break;
- }
-}
+ ret = root->m_CbCurrentSongCount();
-
-void CPlaybackView::m_RemoveTimer(int timer_code)
-{
- ETimers timerCode = (ETimers)timer_code;
-
- switch (timerCode) {
- case TIMER_WAIT:
- if (m->etWait) {
- ecore_timer_del(m->etWait);
- m->etWait = NULL;
- }
- break;
-
- case TIMER_LONGPRESS:
- if (m->etLongPress) {
- ecore_timer_del(m->etLongPress);
- m->etLongPress = NULL;
- }
- break;
-
- case TIMER_VOLUME:
- m->pHandleVolume->RemoveTimer();
- break;
-
- default:
- _ERR(" invalid value ");
- break;
- }
-}
-
-
-void CPlaybackView::m_PlaybackPause(void)
-{
- m->pController->Pause();
+ return ret;
}
-void CPlaybackView::m_PlaybackResume(void)
+int CPlaybackView::m_CbCurrentSongCount(void)
{
- m->pController->Resume();
+ return eina_list_count(m->elInfo);
}
}
-void CPlaybackView::m_UpdateControlBtns(void)
-{
- int state;
-
- state = m->pController->PlayState();
- switch (state) {
- case PLAY_STATUS_INITIAL:
- // Initial State, Do nothing
- break;
-
- case PLAY_STATUS_STOP:
- if (!m->eoErrPopup)
- elm_object_focus_set(m->eoBtnControl[BTN_PLAY], EINA_TRUE);
- elm_object_disabled_set(m->eoBtnControl[BTN_FORWARD], EINA_TRUE);
- elm_object_disabled_set(m->eoBtnControl[BTN_REWIND], EINA_TRUE);
- break;
-
- case PLAY_STATUS_PLAY:
- elm_object_disabled_set(m->eoBtnControl[BTN_FORWARD], EINA_FALSE);
- elm_object_disabled_set(m->eoBtnControl[BTN_REWIND], EINA_FALSE);
- elm_object_signal_emit(m->eoBtnControl[BTN_PLAY],
- MUSIC_SIGNAL_PLAY, MUSIC_PLAYBACK_VIEW);
- break;
-
- case PLAY_STATUS_PAUSE:
- elm_object_disabled_set(m->eoBtnControl[BTN_FORWARD], EINA_FALSE);
- elm_object_disabled_set(m->eoBtnControl[BTN_REWIND], EINA_FALSE);
- elm_object_signal_emit(m->eoBtnControl[BTN_PLAY],
- MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
- break;
-
- default:
- ASSERT(!"Invalid State");
- break;
- }
-
- state = m->pController->ShuffleState();
- switch (state) {
- case SHUFFLE_STATUS_OFF:
- elm_object_signal_emit(m->eoBtnControl[BTN_SHUFFLE],
- MUSIC_SIGNAL_SHUFFLE_OFF, MUSIC_PLAYBACK_VIEW);
- break;
-
- case SHUFFLE_STATUS_ON:
- elm_object_signal_emit(m->eoBtnControl[BTN_SHUFFLE],
- MUSIC_SIGNAL_SHUFFLE_ON, MUSIC_PLAYBACK_VIEW);
- break;
-
- default:
- ASSERT(!"Invalid State");
- break;
- }
-
- state = m->pController->RepeatState();
- switch (state) {
- case REPEAT_STATUS_NONE:
- elm_object_signal_emit(m->eoBtnControl[BTN_REPEAT],
- MUSIC_SIGNAL_REPEAT_OFF, MUSIC_PLAYBACK_VIEW);
- break;
-
- case REPEAT_STATUS_ALL:
- elm_object_signal_emit(m->eoBtnControl[BTN_REPEAT],
- MUSIC_SIGNAL_REPEAT_ALL, MUSIC_PLAYBACK_VIEW);
- break;
-
- case REPEAT_STATUS_ONE:
- elm_object_signal_emit(m->eoBtnControl[BTN_REPEAT],
- MUSIC_SIGNAL_REPEAT_ONE, MUSIC_PLAYBACK_VIEW);
- break;
-
- default:
- ASSERT(!"Invalid State");
- break;
- }
-}
-
-
void CPlaybackView::m_UpdateCurrentSongThumbnail(void)
{
char *path = NULL;
{
char buf[MAX_LENGTH];
- elm_object_signal_emit(m->eoBtnControl[BTN_PLAY],
- MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
- elm_object_focus_set(m->eoBtnControl[BTN_SETTINGS], EINA_TRUE);
- elm_object_focus_next_object_set(m->eoBtnControl[BTN_REPEAT],
- m->eoBtnControl[BTN_REPEAT], ELM_FOCUS_RIGHT);
- elm_object_disabled_set(m->eoBtnControl[BTN_FORWARD], EINA_TRUE);
- elm_object_disabled_set(m->eoBtnControl[BTN_REWIND], EINA_TRUE);
- elm_object_disabled_set(m->eoBtnControl[BTN_PLAY], EINA_TRUE);
- elm_object_part_text_set(m->eoBase, MUSIC_PART_FULLTIME, "00:00");
- elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME, "00:00");
-
m->pSliderWidget->Init();
elm_object_part_text_set(m->eoBase, MUSIC_PART_SONG_TITLE,
void CPlaybackView::m_UpdateEditmodeFocusSequence(void)
{
- elm_object_focus_next_object_set(m->eoPlaylist, m->eoBtnEdit[BTN_CANCEL], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->eoBtnEdit[BTN_CANCEL], m->eoPlaylist, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->pSliderWidget->Base(), m->eoBtnEdit[BTN_CANCEL], ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(m->eoPlaylist, m->eoBtnEdit[EDIT_BTN_CANCEL], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(m->eoBtnEdit[EDIT_BTN_CANCEL], m->eoPlaylist, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(m->pSliderWidget->Base(), m->eoBtnEdit[EDIT_BTN_CANCEL], ELM_FOCUS_DOWN);
}
void CPlaybackView::m_UpdatePlaymodeFocusSequence(void)
{
- elm_object_focus_next_object_set(m->pSliderWidget->Base(), m->eoPlaylist, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(m->pSliderWidget->Base(), m->eoBtnControl[BTN_PLAY], ELM_FOCUS_DOWN);
switch (m->pController->PlayState()) {
case PLAY_STATUS_INITIAL:
// Do nothing
break;
case PLAY_STATUS_STOP:
- elm_object_focus_next_object_set(m->eoPlaylist, m->eoBtnControl[BTN_PLAY], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->eoBtnControl[BTN_PLAY], m->eoPlaylist, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->eoBtnControl[BTN_PLAY], m->eoBtnControl[BTN_REPEAT], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->eoBtnControl[BTN_REPEAT], m->eoBtnControl[BTN_PLAY], ELM_FOCUS_RIGHT);
- elm_object_signal_emit(m->eoBtnControl[BTN_PLAY], MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
+ elm_object_focus_next_object_set(m->eoPlaylist, m->eoBtnControl[CTRL_BTN_PLAY], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_PLAY], m->eoPlaylist, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_PLAY], m->eoBtnControl[CTRL_BTN_REPEAT], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_REPEAT], m->eoBtnControl[CTRL_BTN_PLAY], ELM_FOCUS_RIGHT);
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_PLAY], MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
break;
case PLAY_STATUS_PLAY:
case PLAY_STATUS_PAUSE:
elm_object_focus_next_object_set(m->eoPlaylist,
- m->eoBtnControl[BTN_FORWARD], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->eoBtnControl[BTN_FORWARD],
+ m->eoBtnControl[CTRL_BTN_FORWARD], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_FORWARD],
m->eoPlaylist, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->eoBtnControl[BTN_PLAY],
- m->eoBtnControl[BTN_FORWARD], ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_PLAY],
+ m->eoBtnControl[CTRL_BTN_FORWARD], ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_PLAY],
+ m->eoBtnControl[CTRL_BTN_REWIND], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_REPEAT],
+ m->eoBtnControl[CTRL_BTN_REWIND], ELM_FOCUS_RIGHT);
break;
default:
m_UpdateCurrentSongItem(index);
m_UpdateCurrentSongLabels();
- m_UpdateCurrentSongThumbnail();
- m_UpdateControlBtns();
- m_UpdatePlaymodeFocusSequence();
-}
-
-
-void CPlaybackView::m_DisableEditButtons(bool flag)
-{
- /* flag - 1 means disable edit buttons and 0 means enable */
- if (flag)
- elm_object_focus_set(m->eoBtnEdit[BTN_CANCEL], EINA_TRUE);
-
- elm_object_disabled_set(m->eoBtnEdit[BTN_DELETE], (Eina_Bool)flag);
- elm_object_disabled_set(m->eoBtnEdit[BTN_DESELECT], (Eina_Bool)flag);
- if (flag) {
- m_UpdateEditmodeFocusSequence();
- elm_object_focus_set(m->eoBtnEdit[BTN_CANCEL], EINA_TRUE);
- }
- else {
- elm_object_focus_next_object_set(m->eoBtnEdit[BTN_CANCEL], m->eoBtnEdit[BTN_DESELECT], ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->eoBtnEdit[BTN_DELETE], m->eoPlaylist, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->eoPlaylist, m->eoBtnEdit[BTN_DELETE], ELM_FOCUS_LEFT);
- }
-}
-
-
-void CPlaybackView::m_CreateErrorPopup(void)
-{
- Evas_Object *popup = NULL, *btn = NULL, *label = NULL;
-
- popup = elm_popup_add(m->eoBase);
- if (!popup)
- return;
-
- elm_object_style_set(popup, MUSIC_STYLE_ERROR_POPUP);
- evas_object_show(popup);
-
- label = elm_label_add(popup);
- if (!label) {
- evas_object_del(popup);
- return;
- }
-
- elm_object_style_set(label, MUSIC_STYLE_ERROR_LABEL);
- elm_object_text_set(label, MUSIC_TEXT_PLAYBACK_ERROR);
- elm_object_content_set(popup, label);
-
- btn = elm_button_add(popup);
- if (!btn) {
- evas_object_del(popup);
- return;
- }
-
- elm_object_style_set(btn, MUSIC_STYLE_EDIT_BTN);
- elm_object_text_set(btn, MUSIC_TEXT_OK);
- elm_object_part_content_set(popup, MUSIC_PART_POPUP_BUTTON, btn);
-
- m->eoErrPopup = popup;
-
- Connect(btn, EO_ERROR_POPUP_BUTTON, TYPE_CLICKED | TYPE_KEY_DOWN);
-
- elm_object_focus_set(btn, EINA_TRUE);
-
- return;
-}
-
-
-void CPlaybackView::m_DestroyErrorPopup(void)
-{
- if (!m->eoErrPopup)
- return;
-
- evas_object_del(m->eoErrPopup);
- m->eoErrPopup = NULL;
-}
-
-
-void CPlaybackView::m_CreateSettingsPopup(void)
-{
- CContextPopup::SCallback cb;
- cb.cookie = this;
- cb.onSelected = sm_CbCtxPopupBtnSelected;
-
- m->eoCtxPopup = new CPlaySettingCtxPopup;
- m->eoCtxPopup->Create(m->eoWin, &cb);
+ m_UpdateCurrentSongThumbnail();
+ m->pPlaybackController->Update();
+ m_UpdatePlaymodeFocusSequence();
}
-void CPlaybackView::m_DestroySettingsPopup(void)
+void CPlaybackView::m_DisableEditButtons(bool flag)
{
- if (!m->eoCtxPopup)
- return;
-
- if (m->eoCtxPopup->FlagCreate())
- m->eoCtxPopup->Destroy();
+ /* flag - 1 means disable edit buttons and 0 means enable */
+ if (flag)
+ elm_object_focus_set(m->eoBtnEdit[EDIT_BTN_CANCEL], EINA_TRUE);
- delete m->eoCtxPopup;
- m->eoCtxPopup = NULL;
+ elm_object_disabled_set(m->eoBtnEdit[EDIT_BTN_DELETE], (Eina_Bool)flag);
+ elm_object_disabled_set(m->eoBtnEdit[EDIT_BTN_DESELECT], (Eina_Bool)flag);
+ if (flag) {
+ m_UpdateEditmodeFocusSequence();
+ elm_object_focus_set(m->eoBtnEdit[EDIT_BTN_CANCEL], EINA_TRUE);
+ }
+ else {
+ elm_object_focus_next_object_set(m->eoBtnEdit[EDIT_BTN_CANCEL], m->eoBtnEdit[EDIT_BTN_DESELECT], ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(m->eoBtnEdit[EDIT_BTN_DELETE], m->eoPlaylist, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(m->eoPlaylist, m->eoBtnEdit[EDIT_BTN_DELETE], ELM_FOCUS_LEFT);
+ }
}
elm_object_signal_emit(m->eoBase, MUSIC_SIGNAL_PLAYBACK_MODE,
MUSIC_PLAYBACK_VIEW);
- elm_object_focus_set(m->eoBtnControl[BTN_SETTINGS], EINA_TRUE);
+ elm_object_focus_set(m->eoBtnControl[CTRL_BTN_SETTINGS], EINA_TRUE);
m_ChangeEditmodeAll(m->elInfo, false);
m_DisableEditButtons(true);
- elm_object_focus_set(m->eoBtnEdit[BTN_CANCEL], EINA_TRUE);
+ elm_object_focus_set(m->eoBtnEdit[EDIT_BTN_CANCEL], EINA_TRUE);
m_ChangeEditmodeAll(m->elInfo, true);
}
-void CPlaybackView::m_HandleOnRepeated(void)
-{
- Evas_Object *obj = NULL;
- int value;
- int duration;
- char *timestr = NULL;
-
- if (!m->eoPressedObj)
- return;
-
- obj = m->eoPressedObj;
-
-
- m->pController->GetPosition(&value);
- duration = m->cs_itinfo->sinfo->Duration();
-
- if (obj == m->eoBtnControl[BTN_REWIND]) {
- if (value == 0) {
- m_RemoveTimer(TIMER_LONGPRESS);
- return;
- }
- value = value - LP_CHANGE;
- if (value <= 0)
- value = 0;
- }
- else {
- if (value == duration) {
- m->pController->PlayNextSong();
-
- m->press_status = PRESS_LONG_PAUSE;
- elm_object_signal_emit(m->eoBtnControl[BTN_PLAY], MUSIC_SIGNAL_PAUSE,
- MUSIC_PLAYBACK_VIEW);
- m_PlaybackPause();
- m_RemoveTimer(TIMER_LONGPRESS);
-
- return;
- }
- value = value + LP_CHANGE;
- if (value >= duration)
- value = duration;
- }
-
- m->pController->SetPosition(value);
- timestr = CCommonUI::TimeStrFromMilSeconds(value);
- if (timestr) {
- elm_object_part_text_set(m->eoBase, MUSIC_PART_PROGRESSTIME,
- timestr);
- free(timestr);
- }
-
- return;
-}
-
-
void CPlaybackView::m_DeleteSelectedItems(void)
{
Eina_List *l = NULL, *l_next = NULL;
if (eina_list_count(m->elInfo) == 0) {
m_UpdateEmptySongInfo();
elm_genlist_realized_items_update(m->eoPlaylist);
- elm_object_focus_set(m->eoBtnEdit[BTN_CANCEL], EINA_TRUE);
+ elm_object_focus_set(m->eoBtnEdit[EDIT_BTN_CANCEL], EINA_TRUE);
return;
}
m_UpdateCurrentSongInfo();
elm_genlist_realized_items_update(m->eoPlaylist);
- elm_object_focus_set(m->eoBtnEdit[BTN_CANCEL], EINA_TRUE);
+ elm_object_focus_set(m->eoBtnEdit[EDIT_BTN_CANCEL], EINA_TRUE);
}
void CPlaybackView::m_KeyBackPress(void)
{
- if (m->eoCtxPopup) {
- m_DestroySettingsPopup();
- elm_object_focus_set(m->eoBtnControl[BTN_SETTINGS], EINA_TRUE);
- return;
- }
-
t_OnHide();
if (!CViewMgr::GetInstance()->ShowView(MUSIC_BASE_VIEW))
{
int state;
- if (elm_object_disabled_get(m->eoBtnControl[BTN_PLAY]))
+ if (elm_object_disabled_get(m->eoBtnControl[CTRL_BTN_PLAY]))
return;
state = m->pController->PlayState();
if (state == PLAY_STATUS_PAUSE) {
- m_PlaybackResume();
- elm_object_signal_emit(m->eoBtnControl[BTN_PLAY],
+ m->pController->Resume();
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_PLAY],
MUSIC_SIGNAL_PLAY, MUSIC_PLAYBACK_VIEW);
}
else if (state != PLAY_STATUS_PLAY) {
{
int state;
- if (elm_object_disabled_get(m->eoBtnControl[BTN_PLAY]))
+ if (elm_object_disabled_get(m->eoBtnControl[CTRL_BTN_PLAY]))
return;
state = m->pController->PlayState();
if (state == PLAY_STATUS_PLAY) {
- elm_object_signal_emit(m->eoBtnControl[BTN_PLAY],
+ elm_object_signal_emit(m->eoBtnControl[CTRL_BTN_PLAY],
MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
- m_PlaybackPause();
+ m->pController->Pause();
}
}
void CPlaybackView::m_KeyNextPress(void)
{
- if (elm_object_disabled_get(m->eoBtnControl[BTN_FORWARD]))
+ if (elm_object_disabled_get(m->eoBtnControl[CTRL_BTN_FORWARD]))
return;
- m_HandleOnPressed(m->eoBtnControl[BTN_FORWARD]);
+ m->pController->HandleRemoteButtons(m->eoBtnControl[CTRL_BTN_FORWARD], EVENT_PRESSED);
}
void CPlaybackView::m_KeyPreviousPress(void)
{
- if (elm_object_disabled_get(m->eoBtnControl[BTN_REWIND]))
+ if (elm_object_disabled_get(m->eoBtnControl[CTRL_BTN_REWIND]))
return;
- m_HandleOnPressed(m->eoBtnControl[BTN_REWIND]);
+ m->pController->HandleRemoteButtons(m->eoBtnControl[CTRL_BTN_REWIND], EVENT_PRESSED);
}
void CPlaybackView::m_KeyNextUnpress(void)
{
- if (elm_object_disabled_get(m->eoBtnControl[BTN_FORWARD]))
+ if (elm_object_disabled_get(m->eoBtnControl[CTRL_BTN_FORWARD]))
return;
- m_HandleOnUnpressed(m->eoBtnControl[BTN_FORWARD]);
+ m->pController->HandleRemoteButtons(m->eoBtnControl[CTRL_BTN_FORWARD], EVENT_UNPRESSED);
}
void CPlaybackView::m_KeyPreviousUnpress(void)
{
- if (elm_object_disabled_get(m->eoBtnControl[BTN_REWIND]))
+ if (elm_object_disabled_get(m->eoBtnControl[CTRL_BTN_REWIND]))
return;
- m_HandleOnUnpressed(m->eoBtnControl[BTN_REWIND]);
+ m->pController->HandleRemoteButtons(m->eoBtnControl[CTRL_BTN_REWIND], EVENT_UNPRESSED);
}
m_KeyNextPress();
else if (!strcmp(keyname, (char *)KEY_PREVIOUS))
m_KeyPreviousPress();
- else if (!strcmp(keyname, (char *)KEY_VOLUMEUP))
+ else if (!strcmp(keyname, (char *)KEY_VOLUMEUP) ||
+ !strcmp(keyname, (char *)KEY_VOLUMEUP_REMOTE))
m->pHandleVolume->Up();
- else if (!strcmp(keyname, (char *)KEY_VOLUMEDOWN))
+ else if (!strcmp(keyname, (char *)KEY_VOLUMEDOWN) ||
+ !strcmp(keyname, (char *)KEY_VOLUMEDOWN_REMOTE))
m->pHandleVolume->Down();
- else if (!strcmp(keyname, (char *)KEY_MUTE))
+ else if (!strcmp(keyname, (char *)KEY_MUTE) ||
+ !strcmp(keyname, (char *)KEY_MUTE_REMOTE))
m->pHandleVolume->Mute();
}
}
-void CPlaybackView::m_AddEditPlaylistButtons(void)
-{
- Evas_Object *box = NULL;
- int i;
- SBtnInfo btninfo[TOTAL_EDIT_BTNS];
-
- btninfo[BTN_CANCEL].txt = MUSIC_TEXT_CANCEL;
- btninfo[BTN_CANCEL].type = EO_CANCEL;
-
- btninfo[BTN_DESELECT].txt = MUSIC_TEXT_DESELECT;
- btninfo[BTN_DESELECT].type = EO_DESELECT;
-
- btninfo[BTN_DELETE].txt = MUSIC_TEXT_DELETE;
- btninfo[BTN_DELETE].type = EO_DELETE;
-
- box = CCommonUI::AddBox(m->eoBase);
- if (!box)
- return;
-
- elm_box_horizontal_set(box, EINA_TRUE);
- elm_box_padding_set(box, MUSIC_EDIT_BTNS_PADDING * elm_config_scale_get(), 0);
-
- for (i = 0; i < TOTAL_EDIT_BTNS; i++) {
- m->eoBtnEdit[i] = elm_button_add(m->eoBase);
- if (!m->eoBtnEdit[i])
- continue;
-
- elm_object_style_set(m->eoBtnEdit[i], MUSIC_STYLE_EDIT_BTN);
- evas_object_size_hint_weight_set(m->eoBtnEdit[i], EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_box_pack_end(box, m->eoBtnEdit[i]);
- elm_object_text_set(m->eoBtnEdit[i], _(btninfo[i].txt));
-
- Connect(m->eoBtnEdit[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE);
-
- evas_object_show(m->eoBtnEdit[i]);
- }
- elm_object_part_content_set(m->eoBase, MUSIC_PART_EDITBTNS, box);
- elm_object_signal_emit(m->eoBase, MUSIC_SIGNAL_PLAYBACK_MODE, MUSIC_PLAYBACK_VIEW);
-}
-
-
-void CPlaybackView::m_AddControlButtons(void)
-{
- Evas_Object *box = NULL;
- int i;
- SBtnInfo btninfo[TOTAL_CONTROL_BTNS];
-
- btninfo[BTN_SETTINGS].txt = MUSIC_STYLE_BTN_SETTINGS;
- btninfo[BTN_SETTINGS].type = EO_BTN_SETTINGS;
-
- btninfo[BTN_SHUFFLE].txt = MUSIC_STYLE_BTN_SHUFFLE;
- btninfo[BTN_SHUFFLE].type = EO_BTN_SHUFFLE;
-
- btninfo[BTN_REPEAT].txt = MUSIC_STYLE_BTN_REPEAT;
- btninfo[BTN_REPEAT].type = EO_BTN_REPEAT;
-
- btninfo[BTN_REWIND].txt = MUSIC_STYLE_BTN_REWIND;
- btninfo[BTN_REWIND].type = EO_BTN_REWIND;
-
- btninfo[BTN_PLAY].txt = MUSIC_STYLE_BTN_PLAY;
- btninfo[BTN_PLAY].type = EO_BTN_PLAY;
-
- btninfo[BTN_FORWARD].txt = MUSIC_STYLE_BTN_FORWARD;
- btninfo[BTN_FORWARD].type = EO_BTN_FORWARD;
-
- box = elm_box_add(m->eoBase);
- if (!box)
- return;
-
- evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
- evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0);
- elm_box_horizontal_set(box, EINA_TRUE);
- elm_box_padding_set(box,
- MUSIC_CONTROL_BTNS_PADDING * elm_config_scale_get(), 0);
-
- for (i = 0; i < TOTAL_CONTROL_BTNS; i++) {
- m->eoBtnControl[i] = elm_button_add(m->eoBase);
- if (!m->eoBtnControl[i])
- continue;
-
- elm_object_style_set(m->eoBtnControl[i], btninfo[i].txt);
- evas_object_size_hint_weight_set(m->eoBtnControl[i],
- EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_box_pack_end(box, m->eoBtnControl[i]);
-
- if (i == BTN_REWIND || i == BTN_FORWARD) {
- Connect(m->eoBtnControl[i], btninfo[i].type, TYPE_PRESSED | TYPE_UNPRESSED | TYPE_MOUSE_MOVE);
- }
- else {
- Connect(m->eoBtnControl[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE);
- }
- evas_object_show(m->eoBtnControl[i]);
- }
-
- elm_object_part_content_set(m->eoBase, MUSIC_PART_CONTROLBTNS, box);
-}
-
-
SItemInfo *CPlaybackView::m_FindItemInfoFromSong(Eina_List *list, CSongInfo *sinfo)
{
Eina_List *l = NULL;
}
-void CPlaybackView::m_HandleRewindBtnClicked(Evas_Object *obj)
-{
- elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED,
- MUSIC_PLAYBACK_VIEW);
-
- if (m->pController->PlayState() == PLAY_STATUS_STOP)
- return;
-
- if (!m->pController->PlayPreviousSong()){
- _ERR(" music play previous song failed ");
- return;
- }
-}
-
-
-void CPlaybackView::m_HandleForwardBtnClicked(Evas_Object *obj)
-{
- elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED,
- MUSIC_PLAYBACK_VIEW);
-
- if (m->pController->PlayState() == PLAY_STATUS_STOP)
- return;
-
- if (!m->pController->PlayNextSong()) {
- _ERR(" music play next song failed ");
- return;
- }
-}
-
-
-void CPlaybackView::m_HandleOnPressed(Evas_Object *obj)
-{
- m->press_status = PRESS_SHORT;
- m->eoPressedObj = obj;
-
- m->etWait = ecore_timer_add(WAIT_INTERVAL, sm_CbWaitTimer, this);
-}
-
-
-void CPlaybackView::m_HandleOnUnpressed(Evas_Object *obj)
-{
- m_RemoveTimer(TIMER_WAIT);
- m_RemoveTimer(TIMER_LONGPRESS);
-
- if (m->press_status == PRESS_SHORT) {
- /* Handle song change */
- if (m->pController->PlayState() == PLAY_STATUS_PLAY)
- m_PlaybackPause();
-
- if (obj == m->eoBtnControl[BTN_FORWARD])
- m_HandleForwardBtnClicked(obj);
- else
- m_HandleRewindBtnClicked(obj);
-
- if (m->pController->PlayState() != PLAY_STATUS_PLAY)
- m_PlaybackResume();
- }
- else if (m->press_status == PRESS_LONG) {
- if (m->pController->PlayState() != PLAY_STATUS_PLAY)
- m_PlaybackResume();
- }
-
- m->press_status = PRESS_SHORT;
-}
-
-
void CPlaybackView::m_HandleGenlistItemActivated(Evas_Object *obj, Elm_Object_Item *genListItem)
{
int index;
{
ASSERT(!m);
+ CPlaybackController::SCallback cb;
+
_CREATE_BEGIN{
_CHECK(m = new SPlaybackView)
_CHECK(m->mgr = CViewMgr::GetInstance())
_CHECK(CBaseView::Create(data))
_CHECK(CTimer::Create());
_CHECK(m->pController->AddListener(this))
+ _CHECK(m->pPlaybackController = new CPlaybackController)
+ _COMMAND{ cb.cookie = this; cb.OnCurrentSongCount = sm_CbCurrentSongCount; }
+ _CHECK(m->pPlaybackController->Create(m->eoBase, &cb))
_WHEN_SUCCESS{
- m->press_status = PRESS_SHORT;
evas_object_data_set(m->eoBase, PLAYBACK_VIEW_DATA, m);
- m_AddControlButtons();
- m_AddEditPlaylistButtons();
m_AddCurrentSonginfo();
m_AddPlaylist();
+ int i;
+ for (i = 0; i < TOTAL_CONTROL_BTNS; i++)
+ m->eoBtnControl[i] = m->pPlaybackController->ControlBtnsObject((EPlayerControlBtns)i);
+
+ for (i = 0; i < TOTAL_EDIT_BTNS; i++)
+ m->eoBtnEdit[i] = m->pPlaybackController->EditBtnsObject((EPlayerEditBtns)i);
+
m->pHandleVolume = new CHandleVolume;
m->pHandleVolume->Create(m->eoBase);
m_UpdatePlaymodeFocusSequence();
Connect(m->eoBase, EO_BASE, TYPE_KEY_DOWN | TYPE_KEY_UP);
}
+ _CHECK_FAIL{ m->pPlaybackController->Destroy(); }
+ _CHECK_FAIL{ delete m->pPlaybackController; }
_CHECK_FAIL{ m->pController->RemoveListener(this); }
_CHECK_FAIL{ CTimer::Destroy(); }
_CHECK_FAIL{ CBaseView::Destroy(); }
ASSERT(m);
Disconnect(m->eoBase);
- m->pController->RemoveListener(this);
- m_DestroyErrorPopup();
+ m->pPlaybackController->Destroy();
+ delete m->pPlaybackController;
- m->pSliderWidget->Destroy();
+ m->pController->RemoveListener(this);
- m_RemoveTimer(TIMER_WAIT);
- m_RemoveTimer(TIMER_LONGPRESS);
- m_DestroySettingsPopup();
+ m->pSliderWidget->Destroy();
+ delete m->pSliderWidget;
m->pHandleVolume->Destroy();
delete m->pHandleVolume;
}
-void CPlaybackView::t_OnClickedSettings(Evas_Object *obj)
-{
- elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
-
- if (eina_list_count(m->elInfo) == 0)
- return;
-
- elm_object_signal_emit(obj, MUSIC_SIGNAL_CONTROL_SELECTED, MUSIC_PLAYBACK_VIEW);
- m_DestroySettingsPopup();
- m_CreateSettingsPopup();
-}
-
-
-void CPlaybackView::t_OnClickedShuffle(Evas_Object *obj)
-{
- elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
-
- switch (m->pController->ShuffleState()) {
- case SHUFFLE_STATUS_OFF:
- m->pController->SetShuffleState(SHUFFLE_STATUS_ON);
- elm_object_signal_emit(obj, MUSIC_SIGNAL_SHUFFLE_ON, MUSIC_PLAYBACK_VIEW);
- break;
-
- default:
- m->pController->SetShuffleState(SHUFFLE_STATUS_OFF);
- elm_object_signal_emit(obj, MUSIC_SIGNAL_SHUFFLE_OFF, MUSIC_PLAYBACK_VIEW);
- break;
- }
-}
-
-
-void CPlaybackView::t_OnClickedRepeat(Evas_Object *obj)
-{
- elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
-
- switch (m->pController->RepeatState()) {
- case REPEAT_STATUS_NONE:
- m->pController->SetRepeatState(REPEAT_STATUS_ALL);
- elm_object_signal_emit(obj, MUSIC_SIGNAL_REPEAT_ALL, MUSIC_PLAYBACK_VIEW);
- break;
-
- case REPEAT_STATUS_ALL:
- m->pController->SetRepeatState(REPEAT_STATUS_ONE);
- elm_object_signal_emit(obj, MUSIC_SIGNAL_REPEAT_ONE, MUSIC_PLAYBACK_VIEW);
- break;
-
- default:
- m->pController->SetRepeatState(REPEAT_STATUS_NONE);
- elm_object_signal_emit(obj, MUSIC_SIGNAL_REPEAT_OFF, MUSIC_PLAYBACK_VIEW);
- break;
- }
-}
-
-
-void CPlaybackView::t_OnClickedPlay(Evas_Object *obj)
-{
- elm_object_signal_emit(obj, MUSIC_SIGNAL_BTN_CLICKED, MUSIC_PLAYBACK_VIEW);
-
- switch (m->pController->PlayState()) {
- case PLAY_STATUS_PAUSE:
- m_PlaybackResume();
- elm_object_signal_emit(obj, MUSIC_SIGNAL_PLAY, MUSIC_PLAYBACK_VIEW);
- break;
-
- case PLAY_STATUS_PLAY:
- elm_object_signal_emit(obj, MUSIC_SIGNAL_PAUSE, MUSIC_PLAYBACK_VIEW);
- m_PlaybackPause();
- break;
-
- default:
- if (m->pController)
- m->pController->Start();
- break;
- }
-}
-
-
void CPlaybackView::t_OnShow(void)
{
ASSERT(m);
case E_PLAYLIST_UPDATE:
m_RemovePlaylist();
m_AddPlaylist();
- elm_object_disabled_set(m->eoBtnControl[BTN_FORWARD], EINA_FALSE);
- elm_object_disabled_set(m->eoBtnControl[BTN_REWIND], EINA_FALSE);
- elm_object_disabled_set(m->eoBtnControl[BTN_PLAY], EINA_FALSE);
- elm_object_focus_next_object_set(m->eoBtnControl[BTN_REPEAT],
- m->eoBtnControl[BTN_REWIND], ELM_FOCUS_RIGHT);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_FORWARD], EINA_FALSE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_REWIND], EINA_FALSE);
+ elm_object_disabled_set(m->eoBtnControl[CTRL_BTN_PLAY], EINA_FALSE);
+ elm_object_focus_next_object_set(m->eoBtnControl[CTRL_BTN_REPEAT],
+ m->eoBtnControl[CTRL_BTN_REWIND], ELM_FOCUS_RIGHT);
m_FromEditToPlaybackMode();
break;
}
+void CPlaybackView::t_OnTimer(int id)
+{
+}
+
+
void CPlaybackView::t_OnHide(void)
{
ASSERT(m);
m_HandleKeyPress(ev->keyname);
break;
- case EO_ERROR_POPUP_BUTTON:
- if (!strcmp(ev->keyname, KEY_BACK) ||
- !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- m_DestroyErrorPopup();
- elm_object_focus_set(m->eoBtnControl[BTN_PLAY], EINA_TRUE);
- }
- break;
-
case EO_PLAYLIST:
{
Elm_Object_Item *it = NULL;
}
-void CPlaybackView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch (id) {
- case EO_ERROR_POPUP_BUTTON:
- m_DestroyErrorPopup();
- elm_object_focus_set(m->eoBtnControl[BTN_PLAY], EINA_TRUE);
- break;
-
- case EO_CANCEL:
- m_DisableCheckAll(m->elInfo);
- m_DisableEditButtons(true);
- m_FromEditToPlaybackMode();
- break;
-
- case EO_DESELECT:
- m_DisableCheckAll(m->elInfo);
- m_DisableEditButtons(true);
- elm_genlist_realized_items_update(m->eoPlaylist);
- elm_object_focus_set(m->eoBtnEdit[BTN_CANCEL], EINA_TRUE);
- break;
-
- case EO_DELETE:
- m_DeleteSelectedItems();
- break;
-
- case EO_BTN_SETTINGS:
- t_OnClickedSettings(obj);
- break;
-
- case EO_BTN_SHUFFLE:
- t_OnClickedShuffle(obj);
- break;
-
- case EO_BTN_REPEAT:
- t_OnClickedRepeat(obj);
- break;
-
- case EO_BTN_PLAY:
- t_OnClickedPlay(obj);
- break;
-
- default:
- break;
- }
-}
-
-
void CPlaybackView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
{
switch (id) {
- case EO_CANCEL:
- case EO_DESELECT:
- case EO_DELETE:
- case EO_BTN_FORWARD:
- case EO_BTN_PLAY:
- case EO_BTN_REPEAT:
- case EO_BTN_REWIND:
- case EO_BTN_SETTINGS:
- case EO_BTN_SHUFFLE:
- if (!elm_object_focus_get(obj))
- elm_object_focus_set(obj, EINA_TRUE);
- break;
-
case EO_PLAYLIST:
{
Elm_Object_Item *item;
}
-void CPlaybackView::OnPressed(int id, Evas_Object *obj)
-{
- switch (id) {
- case EO_BTN_FORWARD:
- case EO_BTN_REWIND:
- m_HandleOnPressed(obj);
- break;
-
- default:
- break;
- }
-}
-
-
-void CPlaybackView::OnUnpressed(int id, Evas_Object *obj)
-{
- switch (id) {
- case EO_BTN_FORWARD:
- case EO_BTN_REWIND:
- m_HandleOnUnpressed(obj);
- break;
-
- default:
- break;
- }
-}
-
-
void CPlaybackView::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
{
switch (id) {
void CPlaybackView::OnError(void)
{
- m_CreateErrorPopup();
}
void CPlaybackView::OnStopPlayback(void)
{
}
+
+
+void CPlaybackView::OnEmptyPlaylist(void)
+{
+ eina_list_free(m->elInfo);
+ m->elInfo = NULL;
+ elm_genlist_clear(m->eoPlaylist);
+ m_UpdateEmptySongInfo();
+}
+
+
+void CPlaybackView::OnPlayerModeChanged(EPlayerMode mode)
+{
+ switch (mode) {
+ case MODE_PLAYLIST_EDIT:
+ m_FromPlaybackToEditMode();
+ break;
+
+ case MODE_PLAYBACK:
+ m_FromEditToPlaybackMode();
+ break;
+
+ default:
+ ASSERT(!"Invalid Player Mode");
+ break;
+ }
+}
+
+
+void CPlaybackView::OnEditButtonsPressed(EPlayerEditBtns editBtns)
+{
+ switch (editBtns) {
+ case EDIT_BTN_CANCEL:
+ m_DisableCheckAll(m->elInfo);
+ m_DisableEditButtons(true);
+ break;
+
+ case EDIT_BTN_DESELECT:
+ m_DisableCheckAll(m->elInfo);
+ m_DisableEditButtons(true);
+ elm_genlist_realized_items_update(m->eoPlaylist);
+ break;
+
+ case EDIT_BTN_DELETE:
+ m_DeleteSelectedItems();
+ break;
+
+ default:
+ ASSERT(!"Invalid Edit Button");
+ break;
+ }
+}
\ No newline at end of file