INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
ADD_EXECUTABLE(${PROJECT_NAME}
- src/main.cpp
- src/settingviewmgr.cpp
- src/parser.cpp
- src/data_wrapper.cpp
- src/utils.cpp
- src/view_maincatalog.cpp
- src/view_uigadget.cpp
- src/view_sublist.cpp
- src/settings_provider.cpp
- src/view_pwd_popup.cpp
- src/view_system_clock.cpp
- src/view_need_pwd.cpp
- src/timeout_handler.cpp
+ src/main.c
+ src/parser.c
+ src/data_wrapper.c
+ src/utils.c
+ src/viewmgr.c
+ src/view_maincatalog.c
+ src/view_uigadget.c
+ src/view_sublist.c
+ src/view_bottomsublist.c
+ src/view_bottomslider.c
+ src/settings_provider.c
+ src/view_pwd_popup.c
+ src/view_device_manager.c
+ src/view_resetpopup.c
+ src/view_upgrade_popup.c
+ src/view_system_clock.c
+ src/view_need_pwd.c
+ src/timeout_handler.c
)
FOREACH (flag ${HOMEPANEL_PKGS_CFLAGS})
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#include "../include/common_defs.h"
+#include "../include/def.h"
collections {
#include "widget/button.edc"
#include "widget/progressbar.edc"
* limitations under the License.
*/
-#include "../include/common_defs.h"
+#include "../include/def.h"
collections {
#include "viewer/maincatalog.edc"
rel2 {
to: "cancel_btn_swallow_padding";
}
- fixed: 1 1;
align: 0.0 0.0;
}
}
rel2 {
to: "service_content_area_padding";
}
- fixed: 1 1;
align: 0.0 0.0;
visible: 0;
}
rel2 {
to: "service_content_area_swallow_padding";
}
- fixed: 1 1;
align: 0.0 0.0;
}
}
target: "bg";
}
}
-}
+}
\ No newline at end of file
target: "icon";
}
}
-}
-
-group {
- name: "accessibility";
- images {
- image: "ico_settings_accessibility.png" COMP;
- }
- parts {
- part {
- name: "icon";
- type: IMAGE;
- scale: 1;
- description {
- state: "default" 0.0;
- image.normal: "ico_settings_accessibility.png";
- color: 255 255 255 153;
- }
- description {
- state: "focused" 0.0;
- image.normal: "ico_settings_accessibility.png";
- }
- description {
- state: "highlight" 0.0;
- inherit: "focused" 0.0;
- color: 255 255 255 255;
- }
- }
- }
- programs {
- program {
- name: MAIN_BTN_NORMAL;
- signal: MAIN_BTN_NORMAL;
- source: MAIN_BTN;
- action: STATE_SET "default" 0.0;
- target: "icon";
- }
- program {
- name: MAIN_BTN_FOCUSED;
- signal: MAIN_BTN_FOCUSED;
- source: MAIN_BTN;
- action: STATE_SET "focused" 0.0;
- target: "icon";
- }
- program {
- name: MAIN_BTN_UNFOCUSED;
- signal: MAIN_BTN_UNFOCUSED;
- source: MAIN_BTN;
- action: STATE_SET "default" 0.0;
- target: "icon";
- }
- program {
- name: MAIN_BTN_HIGHLIGHT;
- signal: MAIN_BTN_HIGHLIGHT;
- source: MAIN_BTN;
- action: STATE_SET "highlight" 0.0;
- target: "icon";
- }
- }
-}
+}
\ No newline at end of file
to: MAIN_VIEW_PADDING_ICON;
}
align: 0.0 0.0;
- fixed: 1 1;
}
}
part {
size: 18*2;
min: 1 0;
text_class: "tizen";
- ellipsis: -1;
}
fixed: 1 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.
+ */
+
+#ifndef __DBG_H__
+#define __DBG_H__
+
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "org.tizen.settings-tv-ref"
+
+#ifndef _ERR
+#define _ERR(fmt, args...) (LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#ifndef _DBG
+#define _DBG(fmt, args...) (LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#ifndef _INFO
+#define _INFO(fmt, args...) \
+ (LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#endif /* __DBG_H__ */
* limitations under the License.
*/
-#ifndef __COMMON_DEFS_H__
-#define __COMMON_DEFS_H__
+#ifndef __DEF_H__
+#define __DEF_H__
#define WIN_WIDTH 1920
#define WIN_HEIGHT 1080
#define TEXT_STYLE_MEDIUM "Tizen Sans:style=Medium"
#define TEXT_STYLE_BOLD "Tizen Sans:style=Bold"
-/* VCONF KEYS */
-
-/* Proxy */
-#define VCONF_NETWORK_TYPE "db/menu/network/network_type"
-#define VCONF_PROXY_METHOD "db/menu/proxy/method"
-#define VCONF_PROXY_IP "db/menu/proxy/ip"
-#define VCONF_PROXY_URL "db/menu/proxy/url"
-
-/* Network */
-#define WIRED_DNS_KEY "db/menu/network/wired_dns"
-#define WIRED_GATEWAY_KEY "db/menu/network/wired_gateway"
-#define WIRED_IP_LAST_MODE "db/menu/network/wired_ip_mode"
-#define WIRED_DNS_LAST_MODE "db/menu/network/wired_dns_mode"
-#define WIRED_IP_KEY "db/menu/network/wired_ip"
-#define WIRED_SUBMASK_KEY "db/menu/network/wired_subnet"
-
-#define WIRELESS_DNS_KEY "db/menu/network/wireless_dns"
-#define WIRELESS_GATEWAY_KEY "db/menu/network/wireless_gateway"
-#define WIRELESS_IP_LAST_MODE "db/menu/network/wireless_ip_mode"
-#define WIRELESS_DNS_LAST_MODE "db/menu/network/wireless_dns_mode"
-#define WIRELESS_IP_KEY "db/menu/network/wireless_ip"
-#define WIRELESS_SUBMASK_KEY "db/menu/network/wireless_subnet"
-
-/* Time */
-#define KEY_SYSTEM_CLOCK_MODE "db/menu/system/time/clock/clock_mode"
-#define KEY_SLEEPTIMER "db/menu/system/time/sleeptimer/value"
-#define KEY_SLEEPTIMER_TIMERID "db/menu/system/time/sleeptimer/timer_id"
-#define KEY_WAKEUP_TIMER_SETUP "db/menu/system/time/ontimer1/setup"
-
-#define VCONF_KEY_24HOUR_MODE "db/menu/system/clock/24hour_mode"
-#define KEY_CHANGE_PASSCODE "db/menu/system/change_pin"
-#define KEY_SUBTITLE_LANGUAGE "db/menu/subtitle/subtitlelanguage"
-
-/* Broadcasting */
-#define KEY_CHANNEL_LOCK "db/menu/broadcasting/channel_lock"
-
-/* Lang and Region */
-#define KEY_SYSTEM_LANGUAGE "db/menu_widget/language"
-#define KEY_SYSTEM_COUNTRY "db/menu_widget/regionformat"
-
-#endif /* __COMMON_DEFS_H__ */
+/* Key defines */
+#define KEY_UP "Up"
+#define KEY_DOWN "Down"
+#define KEY_LEFT "Left"
+#define KEY_RIGHT "Right"
+#define KEY_ENTER "Return"
+#define KEY_EXIT "XF86Close"
+
+#define KEY_0 "0"
+#define KEY_1 "1"
+#define KEY_2 "2"
+#define KEY_3 "3"
+#define KEY_4 "4"
+#define KEY_5 "5"
+#define KEY_6 "6"
+#define KEY_7 "7"
+#define KEY_8 "8"
+#define KEY_9 "9"
+
+#endif /* __DEF_H__ */
+++ /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 __SETTING_VIEW_MGR_H__
-#define __SETTING_VIEW_MGR_H__
-
-
-#include <Elementary.h>
-#include "data_wrapper.h"
-//#include "viewmgr.h"
-
-
-#define SELECTED_ITEM_ID "bottomslider_selected_item"
-
-#define VCLASS_TITLE_MAIN_VIEW "Main View"
-#define VCLASS_TITLE_BOTTOM_SLIDER "Bottom Slider"
-#define VCLASS_TITLE_BOTTOM_SUBLIST "Bottom Sublist"
-#define VCLASS_TITLE_DEVICE_MANAGER "Device Manager"
-#define VCLASS_TITLE_CHANGE_PASSCODE "Change Passcode"
-#define VCLASS_TITLE_RESET_POPUP "Reset Popup"
-#define VCLASS_TITLE_SUBLIST "Sublist"
-#define VCLASS_TITLE_SYSTEM_CLOCK "System Clock"
-#define VCLASS_TITLE_UG "UI Gadget"
-#define VCLASS_TITLE_UPGRADE "Upgrade Software"
-#define VCLASS_TITLE_NEED_PASSCODE "Need Passcode"
-
-
-struct evas_obj_data {
- Evas_Object *subitem_box;
- Evas_Object *cur_btn;
-
- const char *display_name;
-};
-
-struct obj_geometry_data {
- int width;
- int height;
- int x;
- int y;
-};
-
-class CSettingMgr;
-
-
-class CSettingBaseView {
-private:
- char *m_title;
-
-public:
- CSettingBaseView(const char *pViewId);
- virtual ~CSettingBaseView();
- const char *ViewId(void) { return m_title; }
-
- virtual bool Create(struct settingview_data *view, void *prev) { return false; }
- virtual void Show(void) {}
- virtual void Pause(void) {}
- virtual void Resume(void) {}
- virtual void Refresh(void) {}
- virtual void Update(void) {}
- virtual void Hide(void) {}
- virtual void Destroy(void) {}
- virtual void LangChanged(void) {}
- virtual void Frozen(void) {}
- virtual void Active(void) {}
-
- const char *Title(void) { return m_title; }
- virtual Evas_Object *Base(void);
-
- int hide_view;
-
-
- /*void(*show)(Evas_Object *base);
- void(*pause)(Evas_Object *base);
- void(*resume)(Evas_Object *base);
- void(*refresh)(Evas_Object *base);
- void(*update)(Evas_Object *base);
- void(*hide)(Evas_Object *base);
- void(*destroy)(Evas_Object *base);
- void(*lang_changed)(Evas_Object *base);
- void(*frozen)(Evas_Object *base);
- void(*active)(Evas_Object *base);
- int hide_view;*/
-};
-
-/*
-struct setting_class {
- const char *title;
- Evas_Object * (*create)(CSettingMgr *mgr,
- struct settingview_data *view, void *prev);
- void (*show)(Evas_Object *base);
- void (*pause)(Evas_Object *base);
- void (*resume)(Evas_Object *base);
- void (*refresh)(Evas_Object *base);
- void (*update)(Evas_Object *base);
- void (*hide)(Evas_Object *base);
- void (*destroy)(Evas_Object *base);
- void (*lang_changed)(Evas_Object *base);
- void (*frozen)(Evas_Object *base);
- void (*active)(Evas_Object *base);
- int hide_view;
-};*/
-
-
-class CSettingMgr {
-private:
- static CSettingMgr *instance;
- struct SSettingMgr *m;
-
-protected:
- CSettingMgr() : m(0) {}
- virtual ~CSettingMgr() {}
-
-public:
- static bool Initialize(Evas_Object *win);
- static void Finalize(void);
-
- static CSettingMgr *GetInstance(void);
-
- bool ViewPush(const char *name, void *data);
- void ViewPop(void);
- Evas_Object *Window(void);
-
- settingview_data *GetView(const char *name);
- settingmgr_data *GetData(void);
- Eina_List *GetViewList(void);
-
- bool LaunchItem(const char *name);
- Eina_Array *GetItemPath(void);
- void ViewRefresh(void);
- void SetRefreshFlag(unsigned int val);
- unsigned int GetRefreshFlag(void);
- void SetRelaunchFlag(unsigned int val);
- unsigned int GetRelaunchFlag(void);
- void FreezeTimeout(void);
- void ThawTimeout(void);
- Eina_Bool GetTimeoutFreezeState(void);
- void LangChanged(void);
-};
-
-
-#endif /* __SETTING_VIEW_MGR_H__ */
#ifndef __TIMEOUT_HANDLER_H__
#define __TIMEOUT_HANDLER_H__
-
#define TIMEOUT_SECS 60
-
-class CTimeoutHandler {
-private:
- struct STimeoutHandler *m;
-
-public:
- CTimeoutHandler() : m(0) {}
- virtual ~CTimeoutHandler() {}
-
- bool Create(double val);
- virtual void Destroy(void);
-
- void FreezeTimer(void);
- void ThawTimer(void);
- void ChangeInterval(double val);
-};
-/*struct timeout_handler;
+struct timeout_handler;
void timeout_handler_freeze_timer(struct timeout_handler *data);
void timeout_handler_thaw_timer(struct timeout_handler *data);
-void timeout_handler_change_interval(struct timeout_handler *data, double val);
-
+void timeout_handler_change_interval(struct timeout_handler *data,
+ double val);
struct timeout_handler *timeout_handler_init(double val);
-void timeout_handler_fini(struct timeout_handler *data);*/
-
+void timeout_handler_fini(struct timeout_handler *data);
#endif /* __TIMEOUT_HANDLER_H__ */
#define i18n_init() bindtextdomain(PACKAGE, LOCALEDIR)
char *utils_get_translation_str(const char *msgid);
-Evas_Object *utils_add_btn(Evas_Object *parent, const char *style, const char *text, Eina_Bool event);
+Evas_Object *utils_add_btn(Evas_Object *parent,
+ char *style, const char *text, Eina_Bool event);
Evas_Object *utils_add_scroller(Evas_Object *base);
Evas_Object *utils_add_box(Evas_Object *base);
Evas_Object *utils_add_ctxpopup(Evas_Object *base, char *style);
--- /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 __VIEW_BOTTOMSLIDER_H__
+#define __VIEW_BOTTOMSLIDER_H__
+
+#include "viewmgr.h"
+
+struct setting_class *view_bottomslider_get_vclass(void);
+
+#endif /* __VIEW_BOTTOMSLIDER_H__ */
--- /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 __VIEW_BOTTOMSUBLIST_H__
+#define __VIEW_BOTTOMSUBLIST_H__
+
+#include "viewmgr.h"
+
+struct setting_class *view_bottomsublist_get_vclass(void);
+
+#endif /* __VIEW_BOTTOMSUBLIST_H__ */
--- /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 __VIEW_DEVICE_MANAGER_H__
+#define __VIEW_DEVICE_MANAGER_H__
+
+#include "viewmgr.h"
+
+struct setting_class *view_device_manager_get_vclass(void);
+
+#endif /* __VIEW_DEVICE_MANAGER_H__ */
#ifndef __VIEW_MAINMENU_H__
#define __VIEW_MAINMENU_H__
+#include "viewmgr.h"
-#include "settingviewmgr.h"
-
-
-class CMainCatalogView :
- public CSettingBaseView,
- public CListenerMgr,
- public IMouseClickedListener,
- public IKeyUpListener,
- public IKeyDownListener
-{
-private:
- struct SMainCatalog *m;
-
- static void sm_CbViewAniFinish(void *data, Evas_Object *obj, const char *emission, const char *source);
- void m_OnViewAniFinish(Evas_Object *obj, const char *emission, const char *source);
-
- static void sm_CbMainItemBtnMouseIN(void *data, Evas *e, Evas_Object *obj, void *ei);
- void m_OnMainItemMouseIN(Evas *e, Evas_Object *obj, void *ei);
-
- void m_SubItemClicked(Evas_Object *obj);
- bool m_DrawSubItems(const char *name);
- void m_MoveFromMainitemToSubitem(Evas_Object *mainbtn);
- void m_MoveFromSubitemToMainitem(Evas_Object *btn);
- bool m_AddIconBtns(Eina_List *list);
- void m_DrawMainItems(void);
-
-public:
- CMainCatalogView(const char *pViewId) :
- CSettingBaseView(pViewId),
- IMouseClickedListener(this),
- IKeyUpListener(this),
- IKeyDownListener(this),
- m(0) {}
- virtual ~CMainCatalogView() {}
-
- Evas_Object *Base(void);
-
- virtual bool Create(struct settingview_data *view, void *prev);
- virtual void Show(void);
- virtual void Refresh(void);
- virtual void Hide(void);
- virtual void Destroy(void);
- virtual void LangChanged(void);
- virtual void Frozen(void);
- virtual void Active(void);
-
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev);
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
-};
-
+struct setting_class *view_maincatalog_get_vclass(void);
#endif /* __VIEW_MAINMENU_H__ */
#ifndef __VIEW_NEED_PASSCODE_H__
#define __VIEW_NEED_PASSCODE_H__
+#include "viewmgr.h"
-#include "settingviewmgr.h"
-
-
-class CNeedPasscodeView :
- public CSettingBaseView {
-private:
- struct SNeedPasscodeView *m;
-
-private:
- static void sm_CbCtxpopupDismissed(void *priv, Evas_Object *obj, void *ev);
- void m_OnCtxpopupDismissed(Evas_Object *obj, void *ev);
-
- static void sm_CbKeyDown(void *priv, Evas *e, Evas_Object *obj, void *ei);
- void m_OnKeyDown(Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
-
- int m_AddViewEntries(void);
-
-public:
- CNeedPasscodeView(const char *pViewId) : CSettingBaseView(pViewId), m(0) {}
- virtual ~CNeedPasscodeView() {}
-
- Evas_Object *Base(void);
-
- virtual bool Create(struct settingview_data *view, void *prev);
- virtual void Show(void);
- virtual void Refresh(void);
- virtual void Hide(void);
- virtual void Destroy(void);
-};
+struct setting_class *view_need_passcode_get_vclass(void);
#endif /* __VIEW_NEED_PASSCODE_H__ */
#ifndef __VIEW_PASSCODE_POPUP_H__
#define __VIEW_PASSCODE_POPUP_H__
+#include "viewmgr.h"
-#include "settingviewmgr.h"
-
-
-//struct setting_class *view_passcode_popup_get_vclass(void);
-class CPasscodePopupView :
- public CSettingBaseView {
-private:
- struct SPasscodePopupView *m;
-
-private:
- static void sm_CbCtxpopupDismissed(void *priv, Evas_Object *obj, void *ev);
- void m_OnCtxpopupDismissed(Evas_Object *obj, void *ev);
-
-public:
- CPasscodePopupView(const char *pViewId) : CSettingBaseView(pViewId), m(0) {}
- virtual ~CPasscodePopupView() {}
-
- Evas_Object *Base(void);
-
- virtual bool Create(struct settingview_data *view, void *prev);
- virtual void Show(void);
- virtual void Hide(void);
- virtual void Destroy(void);
-};
-
+struct setting_class *view_passcode_popup_get_vclass(void);
#endif /* __VIEW_PASSCODE_POPUP_H__ */
--- /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 __VIEW_RESETPOPUP_H__
+#define __VIEW_RESETPOPUP_H__
+
+#include "viewmgr.h"
+
+struct setting_class *view_resetpopup_get_vclass(void);
+
+#endif /* __VIEW_RESETPOPUP_H__ */
#ifndef __VIEW_SUBLIST_H__
#define __VIEW_SUBLIST_H__
+#include "viewmgr.h"
-#include "settingviewmgr.h"
-
-
-class CSublistView :
- public CSettingBaseView,
- public CListenerMgr,
- public IFocusedListener,
- public IUnfocusedListener,
- public IMouseClickedListener,
- public IKeyDownListener
-{
-private:
- struct SSublistView *m;
-
-private:
- static void sm_CbCtxpopupDismissed(void *data, Evas_Object *obj, void *ev);
- void m_OnCtxpopupDismissed(Evas_Object *obj, void *ev);
-
- bool m_DrawCtxpopupLayout(void);
- bool m_DrawSublist(void);
- void m_ExitView(void);
- void m_SetSelectedValue(Evas_Object *obj);
- bool m_DrawListItems(Eina_List *list);
-
-public:
- CSublistView(const char *pViewId) :
- CSettingBaseView(pViewId),
- IFocusedListener(this),
- IUnfocusedListener(this),
- IMouseClickedListener(this),
- IKeyDownListener(this),
- m(0) {}
- virtual ~CSublistView() {}
-
- Evas_Object *Base(void);
-
- virtual bool Create(struct settingview_data *view, void *prev);
- virtual void Show(void);
- virtual void Hide(void);
- virtual void Destroy(void);
-
-public:
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
-};
-
+struct setting_class *view_sublist_get_vclass(void);
#endif /* __VIEW_SUBLIST_H__ */
#ifndef _VIEW_SYSTEM_CLOCK_H__
#define _VIEW_SYSTEM_CLOCK_H__
+#include "viewmgr.h"
-#include "settingviewmgr.h"
-
-
-class CSystemClockView :
- public CSettingBaseView,
- public CListenerMgr,
- public IFocusedListener,
- public IUnfocusedListener,
- public IMouseClickedListener,
- public IKeyDownListener
-{
-private:
- struct SSystemClockView *m;
-
-private:
- static void sm_CbCtxpopupDismissed(void *priv, Evas_Object *obj, void *ev);
- void m_OnCtxpopupDismissed(Evas_Object *obj, void *ev);
-
- void m_ExitView(void);
-
- bool m_DrawSysclkSublist(void);
- bool m_AddSysclkSublistItem(Eina_List *list, const char *selval);
-
-public:
- CSystemClockView(const char *pViewId) :
- CSettingBaseView(pViewId),
- IFocusedListener(this),
- IUnfocusedListener(this),
- IMouseClickedListener(this),
- IKeyDownListener(this),
- m(0) {}
- virtual ~CSystemClockView() {}
-
- Evas_Object *Base(void);
-
- virtual bool Create(struct settingview_data *view, void *prev);
- virtual void Show(void);
- virtual void Refresh(void);
- virtual void Hide(void);
- virtual void Destroy(void);
-
-public:
- // If buttons are clicked
- virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
-};
-
+struct setting_class *view_system_clock_get_vclass(void);
#endif /* _VIEW_SYSTEM_CLOCK_H__ */
#ifndef __VIEW_UIGADGET_H__
#define __VIEW_UIGADGET_H__
+#include "viewmgr.h"
-#include <ui-gadget.h>
-#include "settingviewmgr.h"
-
-
-class CUiGadget {
-private:
- ui_gadget_h m_handler;
-private:
- static void sm_CbLayout(ui_gadget_h ug, enum ug_mode mode, void *priv);
- static void sm_CbResult(ui_gadget_h ug, service_h result, void *priv);
- static void sm_CbDestroy(ui_gadget_h ug, void *priv);
- static void sm_CbEnd(ui_gadget_h ug, void *priv);
-
-protected:
-
- virtual void t_OnLayout(ui_gadget_h ug, ug_mode mode) {}
- virtual void t_OnResult(ui_gadget_h ug, service_h result) {}
- virtual void t_OnDestroy(ui_gadget_h ug) {}
- virtual void t_OnEnd(ui_gadget_h ug) {}
-
-public:
- CUiGadget() : m_handler(0) {}
-
- bool Create(ui_gadget_h parent, const char *name, ug_mode mode, service_h service);
- virtual void Destroy(void);
-};
-
-class CUiGadgetView :
- public CSettingBaseView,
- public CUiGadget {
-private:
- struct SUiGadgetView *m;
-
-protected:
- virtual void t_OnDestroy(ui_gadget_h ug);
-
-private:
- bool m_Load(void);
- void m_BackToMainview(void);
-
-public:
- CUiGadgetView(const char *pViewId) : CSettingBaseView(pViewId), m(0) {}
- virtual ~CUiGadgetView() {}
-
- Evas_Object *Base(void);
-
- virtual bool Create(struct settingview_data *view, void *prev);
- virtual void Show(void);
- virtual void Hide(void);
- virtual void Destroy(void);
-};
-
+struct setting_class *view_uigadget_get_vclass(void);
#endif /* __VIEW_UIGADGET_H__ */
--- /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 __VIEW_UPGRADE_POPUP_H__
+#define __VIEW_UPGRADE_POPUP_H__
+
+#include "viewmgr.h"
+
+#define UPGRADE_SW_TITLE "Software upgrade"
+#define UPGRADE_SW_NOW "Update now"
+#define UPGRADE_SW_AVAIL_TEXT "A new software update is available.\
+ <br>Upgrade from version A to version B?"
+#define UPGRADE_SW_UNAVAIL_TEXT "There are no new updates\
+ <br>for you at the moment."
+#define NETWORK_DISCONNECTED_TEXT "Please check that your network \
+ <br>has been configured."
+#define INTERNET_DISCONNECTED_TEXT "Fail to connect.\
+ <br>Please contact your Internet Service Provider."
+#define UPDATE_UP_TEXT "Checking for updates..."
+#define UPDATE_MIDDLE_TEXT "Last checked for updates<br>"
+#define DYNAMIC_TEXT "Checking for network..."
+
+#define UPGRADE_BTN_BOX_PADDING 20
+
+enum {
+ UPGRADE_BTN_0,
+ UPGRADE_BTN_1,
+ UPGRADE_BTN_MAX
+};
+struct setting_class *view_upgrade_popup_get_vclass(void);
+
+#endif /* __VIEW_UPGRADE_POPUP_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.
+ */
+
+#ifndef __VIEWMGR_H__
+#define __VIEWMGR_H__
+
+#include <Elementary.h>
+#include "data_wrapper.h"
+
+#define SELECTED_ITEM_ID "bottomslider_selected_item"
+
+#define VCLASS_TITLE_MAIN_VIEW "Main View"
+#define VCLASS_TITLE_BOTTOM_SLIDER "Bottom Slider"
+#define VCLASS_TITLE_BOTTOM_SUBLIST "Bottom Sublist"
+#define VCLASS_TITLE_DEVICE_MANAGER "Device Manager"
+#define VCLASS_TITLE_CHANGE_PASSCODE "Change Passcode"
+#define VCLASS_TITLE_RESET_POPUP "Reset Popup"
+#define VCLASS_TITLE_SUBLIST "Sublist"
+#define VCLASS_TITLE_SYSTEM_CLOCK "System Clock"
+#define VCLASS_TITLE_UG "UI Gadget"
+#define VCLASS_TITLE_UPGRADE "Upgrade Software"
+#define VCLASS_TITLE_NEED_PASSCODE "Need Passcode"
+
+struct setting_mgr;
+
+struct evas_obj_data {
+ Evas_Object *subitem_box;
+ Evas_Object *cur_btn;
+
+ const char *display_name;
+};
+
+struct obj_geometry_data {
+ int width;
+ int height;
+ int x;
+ int y;
+};
+
+struct setting_class {
+ const char *title;
+ Evas_Object * (*create)(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev);
+ void (*show)(Evas_Object *base);
+ void (*pause)(Evas_Object *base);
+ void (*resume)(Evas_Object *base);
+ void (*refresh)(Evas_Object *base);
+ void (*update)(Evas_Object *base);
+ void (*hide)(Evas_Object *base);
+ void (*destroy)(Evas_Object *base);
+ void (*lang_changed)(Evas_Object *base);
+ void (*frozen)(Evas_Object *base);
+ void (*active)(Evas_Object *base);
+ int hide_view;
+};
+
+struct setting_mgr *settingmgr_init(Evas_Object *win);
+void settingmgr_fini(struct setting_mgr *mgr);
+int settingmgr_view_push(struct setting_mgr *mgr,
+ const char *name, void *data);
+void settingmgr_view_pop(struct setting_mgr *mgr);
+Evas_Object *settingmgr_get_win(struct setting_mgr *mgr);
+struct settingview_data *settingmgr_get_view(struct setting_mgr *mgr,
+ const char *name);
+struct settingmgr_data *settingmgr_get_data(struct setting_mgr *mgr);
+Eina_List *settingmgr_get_view_list(struct setting_mgr *mgr);
+int settingmgr_launch_item(struct setting_mgr *mgr,
+ const char *name);
+Eina_Array *settingmgr_get_item_path(struct setting_mgr *mgr);
+void settingmgr_view_refresh(struct setting_mgr *mgr);
+void settingmgr_set_refresh_flag(struct setting_mgr *mgr,
+ unsigned int val);
+unsigned int settingmgr_get_refresh_flag(struct setting_mgr *mgr);
+void settingmgr_set_relaunch_flag(struct setting_mgr *mgr,
+ unsigned int val);
+unsigned int settingmgr_get_relaunch_flag(struct setting_mgr *mgr);
+void settingmgr_freeze_timeout(struct setting_mgr *mgr);
+void settingmgr_thaw_timeout(struct setting_mgr *mgr);
+Eina_Bool settingmgr_get_timeout_freeze_state(struct setting_mgr *mgr);
+void settingmgr_lang_changed(struct setting_mgr *mgr);
+
+#endif /* __VIEWMGR_H__ */
+++ /dev/null
-{
- "settingitems": {
- "screen-reader": {
- "display-name": "Screen Reader",
- "style": "title.value",
- "setting-ui": {
- "style": "ctxpopup"
- },
- "data": {
- "key": "settings/accessibility/screen_reader",
- "type": "bool",
- "list": [
- {
- "display-value": "OFF",
- "value": "0"
- },
- {
- "display-value": "ON",
- "value": "1"
- }
- ]
- }
- },
- "magnifier": {
- "display-name": "Magnifier",
- "style": "title.value",
- "status": "disabled",
- "setting-ui": {
- "style": "ctxpopup"
- },
- "data": {
- "key": "settings/accessibility/magnifier",
- "type": "bool",
- "list": [
- {
- "display-value": "OFF",
- "value": "0"
- },
- {
- "display-value": "ON",
- "value": "1"
- }
- ]
- }
- }
- },
- "settingtree": {
- "accessibility": {
- "subsettingitems": [
- "screen-reader",
- "magnifier"
- ],
- "parentitem": "maincatalog"
- }
- }
-}
-
"display-name": "SUPPORT",
"style": "animicon",
"resource-file": "support.edj"
- },
- "accessibility": {
- "display-name": "ACCESSIBILITY",
- "style": "animicon",
- "resource-file": "accessibility.edj"
}
},
"settingtree": {
"network",
"device-manager",
"system",
- "support",
- "accessibility"
+ "support"
],
"parentitem": "maincatalog"
}
* limitations under the License.
*/
-#include <cstring>
#include <Eina.h>
#include <glib-object.h>
#include <json-glib/json-glib.h>
#include "data_wrapper.h"
-#include <MacroDefine.h>
+#include "dbg.h"
struct settingui_args {
char *keyname;
static void _free_list_item(Eina_List *list)
{
struct listitem *litem;
- void* obj;
if (!list) {
_ERR("Invalid argument");
return;
}
- EINA_LIST_FREE(list, obj) {
- litem = (struct listitem *) obj;
+ EINA_LIST_FREE(list, litem) {
free(litem->display_name);
free(litem->value);
free(litem);
static void _free_ui_args(Eina_List *list)
{
struct settingui_args *args;
- void* obj;
if (!list) {
_ERR("Invalid argument");
return;
}
- EINA_LIST_FREE(list, obj) {
- args = (struct settingui_args *) obj;
+ EINA_LIST_FREE(list, args) {
free(args->keyname);
free(args->value);
free(args);
*/
static void _free_str_list(Eina_List *list)
{
- void* obj;
- char* item;
+ char *item;
if (!list) {
_ERR("Invalid argument");
return;
}
- EINA_LIST_FREE(list, obj)
- {
- item = (char *) obj;
+ EINA_LIST_FREE(list, item)
free(item);
- }
}
/**
return;
}
- item = (struct settingitem *)data;
+ item = data;
free(item->display_name);
free(item->style);
return NULL;
}
- item = (struct slideritem *) calloc(1, sizeof(struct slideritem));
+ item = calloc(1, sizeof(struct slideritem));
if (!item)
return NULL;
list = NULL;
for (i = 0; i < length; i++) {
- item = (struct listitem *) calloc(1, sizeof(struct listitem));
+ item = calloc(1, sizeof(struct listitem));
if (!item) {
_free_list_item(list);
return NULL;
goto error;
}
- data = (struct settingui_args *) calloc(1, sizeof(*data));
+ data = calloc(1, sizeof(*data));
if (!data) {
_ERR("Allocate memory failed");
goto error;
}
- data->keyname = (char *) calloc(1, sizeof(char) * ARRAY_SIZE);
+ data->keyname = calloc(1, sizeof(char) * ARRAY_SIZE);
if (!data->keyname) {
_ERR("Allocate memory failed");
free(data);
return NULL;
}
- data = (struct uidata *) calloc(1, sizeof(struct uidata));
+ data = calloc(1, sizeof(struct uidata));
if (!data)
return NULL;
jparser, buf);
} else if (!strncmp(list[i], JSONSTR_SETTINGUI,
strlen(list[i]))) {
- item->setting_ui = (struct setting_ui *) calloc(1, sizeof(struct setting_ui));
+ item->setting_ui = calloc(1, sizeof(struct setting_ui));
if (!item->setting_ui)
continue;
return NULL;
}
- item = (struct settingitem *) calloc(1, sizeof(*item));
+ item = calloc(1, sizeof(*item));
if (!item)
return NULL;
_ERR("parser_init failed!\n");
return -1;
}
- _DBG("CREATED Parser [Path = %s]",path);
reader = parser_get_json_reader(jparser);
if (!reader) {
if (!newer)
continue;
- existed = (struct settingitem *) eina_hash_find(hash, list[i]);
+ existed = eina_hash_find(hash, list[i]);
if (!existed)
eina_hash_add(hash, list[i], newer);
else
}
newer = _get_settingitem_from_json(jparser, name);
- existed = (struct settingitem *) eina_hash_find(hash, name);
+ existed = eina_hash_find(hash, name);
if (!existed)
eina_hash_add(hash, name, newer);
else
{
struct settingmgr_data *data;
- data = (struct settingmgr_data *) calloc(1, sizeof(struct settingmgr_data));
+ data = calloc(1, sizeof(struct settingmgr_data));
if (!data) {
_ERR("calloc data failed\n");
return NULL;
*/
void viewmgr_data_fini(struct settingmgr_data *data)
{
- char* node;
- void* obj;
+ char *node;
if (!data) {
_ERR("Parameter error!");
_hash_fini(data->jsonhash);
if (data->parsed_json_file) {
- EINA_LIST_FREE(data->parsed_json_file, obj)
- {
- node = (char *) obj;
+ EINA_LIST_FREE(data->parsed_json_file, node)
free(node);
- }
}
free(data);
if (!name || !data)
return NULL;
- item = (struct settingitem *) eina_hash_find(data->jsonhash, name);
+ item = eina_hash_find(data->jsonhash, name);
return item;
}
int viewmgr_data_read_jsonfile_into_hash(
struct settingmgr_data *data, const char *name)
{
- char* tmp;
- void* obj;
+ char *tmp;
const char *style, *ui_name;
struct settingitem *item;
Eina_Hash *hash;
if (style && ui_name && !strncmp(style, STYLE_UIGADGET, strlen(style)))
return 0;
- EINA_LIST_FOREACH(list, l, obj) {
- tmp = (char *) obj;
+ EINA_LIST_FOREACH(list, l, tmp) {
if (!strncmp(tmp, name, BUF_SIZE))
flag = 0;
}
Eina_List *list, *l;
struct settingitem *item;
const char *node;
- void* obj;
struct settingview_data *vdata;
if (!sdata || !name) {
list = settingitem_get_subitems(vdata->parentitem);
if (list) {
vdata->childitems = eina_array_new(1);
- EINA_LIST_FOREACH(list, l, obj) {
- node = (const char *) obj;
+ EINA_LIST_FOREACH(list, l, node) {
item = viewmgr_data_get_settingitem(sdata, node);
if (!item) {
_ERR("childitem not found, continuing");
list = NULL;
cnt = eina_list_count(subitems);
for (i = 0; i < cnt; i++) {
- subitem = (struct settingitem *) eina_array_data_get(view->childitems, i);
+ subitem = eina_array_data_get(view->childitems, i);
list = eina_list_append(list, subitem);
}
{
struct settingview_data *vdata;
- vdata = (struct settingview_data *) calloc(1, sizeof(*vdata));
+ vdata = calloc(1, sizeof(*vdata));
if (!vdata) {
_ERR("Allocate memory failed\n");
return NULL;
Eina_List *l, *group, *result;
struct settingitem *sitem;
const char *node;
- void* obj;
int found;
if (!item || !sdata || !name) {
found = 0;
- EINA_LIST_FOREACH(group, l, obj) {
- node = (const char *) obj;
+ EINA_LIST_FOREACH(group, l, node) {
if (!strncmp(name, node, strlen(name))) {
found = 1;
break;
result = NULL;
- EINA_LIST_FOREACH(group, l, obj) {
- node = (const char *) obj;
+ EINA_LIST_FOREACH(group, l, node) {
sitem = viewmgr_data_get_settingitem(sdata, node);
if (_check_slider_item(sitem))
result = eina_list_append(result, node);
--- /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 <app.h>
+#include <Elementary.h>
+#include <dlog.h>
+#include <ui-gadget.h>
+#include "dbg.h"
+#include "def.h"
+#include "viewmgr.h"
+#include "utils.h"
+#include "json_marco.h"
+#include "settings_provider.h"
+
+#define PARAM_SETTINGS_ITEM "settings-item"
+#define MAIN_CATALOG "maincatalog"
+
+struct _appdata {
+ Evas_Object *win;
+ struct setting_mgr *mgr;
+ const char *name;
+ char *item;
+ unsigned int service;
+};
+
+/**
+* Refresh first view stored in view list.
+*
+* Get first _settinginfo from view_list of setting_mgr, then call vclass->refresh
+* and vclass-update to refresh.
+*
+* @param priv [in] The function specific data which holds _appdata pointer.
+* @return void.
+*/
+static void _refresh(void *priv)
+{
+ struct _appdata *data;
+
+ if (!priv)
+ return;
+
+ data = priv;
+
+ if (!data->mgr)
+ return;
+
+ settingmgr_view_refresh(data->mgr);
+}
+
+/**
+* Add a basic win for settings app.
+*
+* @param name [in] Window name.
+* @return Window evas object, NULL on error.
+*/
+static Evas_Object *_add_win(const char *name)
+{
+ Evas_Object *win;
+
+ win = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (!win) {
+ _ERR("failed to create window!");
+ return NULL;
+ }
+
+ elm_win_title_set(win, name);
+ elm_win_alpha_set(win, EINA_TRUE);
+
+ elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
+ elm_win_focus_highlight_style_set(win, DEFAULT_FOCUS_INVISIBLE);
+
+ evas_object_show(win);
+
+ return win;
+}
+
+/**
+* An app event callback for app_efl_main.
+*
+* This callback is invoked once as app is launched, this function will
+* initialize app.
+*
+* @param data [in] The function specific data passed by app_efl_main.
+* @return true if success, false if fail.
+*/
+static bool _create(void *data)
+{
+ struct _appdata *ad;
+ Evas_Object *win;
+ int r;
+
+ ad = data;
+ if (!ad)
+ return false;
+
+ elm_theme_overlay_add(NULL, EDJ_THEME);
+
+ win = _add_win(ad->name);
+ if (!win)
+ return false;
+
+ r = UG_INIT_EFL(win, UG_OPT_INDICATOR_ENABLE);
+ if (r == -1) {
+ _ERR("ug init efl failed.");
+ evas_object_del(win);
+ return false;
+ }
+
+ r = provider_init();
+ if (r != 0) {
+ _ERR("Fail to init provider module");
+ evas_object_del(win);
+ return false;
+ }
+
+ ad->win = win;
+ ad->service = 0;
+
+ return true;
+}
+
+/**
+* An app event callback for app_efl_main.
+*
+* This callback is invoked once just before app is terminated,
+* this functions will release all resources.
+*
+* @param data [in] The function specific data passed by app_efl_main.
+* @return void.
+*/
+static void _terminate(void *data)
+{
+ struct _appdata *ad;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ ad = data;
+
+ settingmgr_fini(ad->mgr);
+
+ provider_fini();
+
+ if (ad->win)
+ evas_object_del(ad->win);
+
+ free(ad->item);
+}
+
+/**
+* An app event callback for app_efl_main.
+*
+* This callback is invoked when the window of app become invisible.
+*
+* @param data [in] The function specific data passed by app_efl_main.
+* @return void.
+*/
+static void _pause(void *data)
+{
+}
+
+/**
+* An app event callback for app_efl_main.
+*
+* This callback is invoked when the window of app become visible.
+*
+* @param data [in] The function specific data passed by app_efl_main.
+* @return void.
+*/
+static void _resume(void *data)
+{
+}
+
+/**
+* An app event callback for app_efl_main.
+*
+* This callback is invoked after _create callback (just after app enters main loop)
+* or after "re-launch".
+*
+* @param service [in] The launching arguments.
+* @param data [in] The function specific data passed by app_efl_main.
+* @return void.
+*/
+static void _service(service_h service, void *data)
+{
+ struct _appdata *ad;
+ struct setting_mgr *mgr;
+ int r;
+ char *param;
+ unsigned int relaunch, refresh;
+
+ if (!data)
+ return;
+
+ ad = data;
+ param = NULL;
+
+ if (ad->service) {
+ service_get_extra_data(service, PARAM_SETTINGS_ITEM, ¶m);
+ if ((!param && !ad->item) ||
+ (param && ad->item &&
+ !strcmp(ad->item, param))) {
+ refresh = 1;
+ relaunch = 0;
+ } else {
+ refresh = 0;
+ relaunch = 1;
+ }
+
+ if (relaunch) {
+ settingmgr_fini(ad->mgr);
+ } else {
+ if (refresh)
+ _refresh(ad);
+
+ return;
+ }
+ }
+
+ mgr = settingmgr_init(ad->win);
+ if (!mgr)
+ app_efl_exit();
+
+ r = service_get_extra_data(service, PARAM_SETTINGS_ITEM, ¶m);
+ if (r == SERVICE_ERROR_NONE && param) {
+ r = settingmgr_launch_item(mgr, param);
+ if (r != 0) {
+ _ERR("the item is not exist.");
+ app_efl_exit();
+ }
+ } else {
+ settingmgr_view_push(mgr, MAIN_CATALOG, NULL);
+ }
+
+ ad->mgr = mgr;
+ ad->service = 1;
+
+ free(ad->item);
+ ad->item = param;
+}
+
+/**
+* An app event callback for app_efl_main.
+*
+* This callback is invoked when system language is changed.
+*
+* @param data [in] The function specific data passed by app_efl_main.
+* @return void.
+*/
+static void _lang_changed(void *data)
+{
+ struct _appdata *ad;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ ad = data;
+ if (!ad->mgr)
+ return;
+
+ settingmgr_lang_changed(ad->mgr);
+}
+
+/**
+* An app event callback for app_efl_main.
+*
+* This callback is invoked when system region is changed.
+*
+* @param data [in] The function specific data passed by app_efl_main.
+* @return void.
+*/
+static void _region_changed(void *data)
+{
+}
+
+/**
+* App launching entry.
+*
+* @param argc [in] The launching argument numbers.
+* @param argv [in] The launching argument array.
+* @return 0 if success.
+*/
+int main(int argc, char **argv)
+{
+ struct _appdata ad;
+ app_event_callback_s cbs = {
+ .create = _create,
+ .terminate = _terminate,
+ .pause = _pause,
+ .resume = _resume,
+ .service = _service,
+ .low_memory = NULL,
+ .low_battery = NULL,
+ .device_orientation = NULL,
+ .language_changed = _lang_changed,
+ .region_format_changed = _region_changed,
+ };
+
+ memset(&ad, 0x00, sizeof(ad));
+ ad.name = PACKAGE;
+
+ i18n_init();
+
+ app_efl_main(&argc, &argv, &cbs, &ad);
+
+ return 0;
+}
+++ /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 <ui-gadget.h>
-#include <vconf.h>
-#include <AppCommon.h>
-
-#include "common_defs.h"
-#include "json_marco.h"
-#include "settings_provider.h"
-#include "settingviewmgr.h"
-#include "utils.h"
-
-
-#define PARAM_SETTINGS_ITEM "settings-item"
-#define MAIN_CATALOG "maincatalog"
-
-SET_TAG("org.tizen.settings-tv-ref");
-
-Evas_Object *_add_win(const char *name)
-{
- Evas_Object *win;
-
- win = elm_win_add(NULL, name, ELM_WIN_BASIC);
- if (!win) {
- _ERR("failed to create window!");
- return NULL;
- }
-
- elm_win_title_set(win, name);
- elm_win_alpha_set(win, EINA_TRUE);
-
- elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
- elm_win_focus_highlight_style_set(win, DEFAULT_FOCUS_INVISIBLE);
-
- evas_object_show(win);
-
- return win;
-}
-
-class CApp : public CBaseApp {
- struct _appdata {
- Evas_Object *win;
- CSettingMgr *mgr;
- const char *name;
- char *item;
- unsigned int app_control;
- } ad;
-
-protected:
- virtual bool OnCreate(void) {
- Evas_Object *win;
- int r;
-
- elm_theme_overlay_add(NULL, EDJ_THEME);
-
- win = _add_win(ad.name);
- if (!win)
- return false;
-
- r = UG_INIT_EFL(win, UG_OPT_INDICATOR_ENABLE);
- if (r == -1) {
- _ERR("ug init efl failed.");
- evas_object_del(win);
- return false;
- }
-
- r = provider_init();
- if (r != 0) {
- _ERR("Fail to init provider module");
- evas_object_del(win);
- return false;
- }
-
- ad.win = win;
- ad.item = NULL;
- ad.app_control = 0;
-
- /* Set default vconf values */
-
- /* Proxy */
- if (vconf_set_int(VCONF_PROXY_METHOD, 0))
- _DBG("Fail to set vconf");
- if (vconf_set_str(VCONF_PROXY_IP, "0.0.0.0"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(VCONF_PROXY_URL, ""))
- _DBG("Fail to set vconf");
-
- /* Network */
- if (vconf_set_str(WIRED_DNS_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRED_GATEWAY_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRED_IP_LAST_MODE, "Obtain automatically"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRED_DNS_LAST_MODE, "Obtain automatically"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRED_IP_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRED_SUBMASK_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
-
- if (vconf_set_str(WIRELESS_DNS_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRELESS_GATEWAY_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRELESS_IP_LAST_MODE, "Obtain automatically"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRELESS_DNS_LAST_MODE, "Obtain automatically"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRELESS_IP_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(WIRELESS_SUBMASK_KEY, "0.0.0.0"))
- _DBG("Fail to set vconf");
-
- /* Time */
- if (vconf_set_int(KEY_SYSTEM_CLOCK_MODE, 0))
- _DBG("Fail to set vconf");
- if (vconf_set_int(KEY_SLEEPTIMER, 0))
- _DBG("Fail to set vconf");
- if (vconf_set_int(KEY_SLEEPTIMER_TIMERID, 0))
- _DBG("Fail to set vconf");
- if (vconf_set_str(KEY_WAKEUP_TIMER_SETUP, "OFF"))
- _DBG("Fail to set vconf");
-
- if (vconf_set_int(VCONF_KEY_24HOUR_MODE, 0))
- _DBG("Fail to set vconf");
- if (vconf_set_str(KEY_CHANGE_PASSCODE, "0000"))
- _DBG("Fail to set vconf");
- if (vconf_set_int(KEY_SUBTITLE_LANGUAGE, 0))
- _DBG("Fail to set vconf");
-
- /* Broadcasting */
- if (vconf_set_bool(KEY_CHANNEL_LOCK, false))
- _DBG("Fail to set vconf");
-
- /* Lang and Region */
- if (vconf_set_str(KEY_SYSTEM_LANGUAGE, "en_US.UTF-8"))
- _DBG("Fail to set vconf");
- if (vconf_set_str(KEY_SYSTEM_COUNTRY, "en_US.UTF-8"))
- _DBG("Fail to set vconf");
-
- return true;
- }
-
- virtual void OnTerminate(void) {
- CSettingMgr::Finalize();
- ad.mgr = NULL;
-
- provider_fini();
-
- if (ad.win)
- evas_object_del(ad.win);
-
- if(ad.item)
- free(ad.item);
- }
-
- virtual void OnAppControl(app_control_h app_control) {
- _DBG(" ******************* OnAppControl *********************");
- CSettingMgr *mgr;
- int r;
- char *param;
- unsigned int relaunch, refresh;
-
- param = NULL;
-
- if (ad.app_control) {
- app_control_get_extra_data(app_control, PARAM_SETTINGS_ITEM, ¶m);
- if ((!param && !ad.item) ||
- (param && ad.item && !strcmp(ad.item, param))) {
- refresh = 1;
- relaunch = 0;
- } else {
- refresh = 0;
- relaunch = 1;
- }
-
- if (relaunch) {
- CSettingMgr::Finalize();
- } else {
- if (refresh) {
- if (!ad.mgr)
- return;
-
- ad.mgr->ViewRefresh();
- }
- }
- }
-
- if (!CSettingMgr::Initialize(ad.win))
- app_efl_exit();
- mgr = CSettingMgr::GetInstance();
-
- r = app_control_get_extra_data(app_control, PARAM_SETTINGS_ITEM, ¶m);
- if (r == APP_CONTROL_ERROR_NONE && param) {
- if (!mgr->LaunchItem(param)) {
- _ERR("the item is not exist.");
- app_efl_exit();
- }
- } else {
- mgr->ViewPush(MAIN_CATALOG, NULL);
- }
-
- ad.mgr = mgr;
- ad.app_control = 1;
-
- free(ad.item);
- ad.item = param;
- }
-
-public:
- virtual int Run(int argc, char **argv) {
- memset(&ad, 0x00, sizeof(_appdata));
- ad.name = PACKAGE;
-
- return CBaseApp::Run(argc, argv);
- }
-
- virtual ~CApp(void){}
-};
-
-int main(int argc, char **argv)
-{
- CApp app;
- app.Run(argc, argv);
-
- return 0;
-}
-
* limitations under the License.
*/
-#include <cstring>
#include <Eina.h>
#include "parser.h"
-#include <MacroDefine.h>
+#include "dbg.h"
#include "stdlib.h"
struct json_parser {
return NULL;
}
- jparser = (struct json_parser *) calloc(1, sizeof(*jparser));
+ jparser = calloc(1, sizeof(*jparser));
if (!jparser)
return NULL;
cursor = 0;
- // For Debugging
- //_DBG("[START][ name = %s ][Parser = %x][Reader = %x]",name, jparser, jparser->reader);
- //_DBG("Member cnt = %d", json_reader_count_members(jparser->reader));
- //_DBG("Current Member = %s", json_reader_get_member_name(jparser->reader));
if (flag == DRAWING_INFO) {
- if (!json_reader_read_member(jparser->reader, JSONSTR_SETTING_ITEMS))
- {
- cursor++;
+ if (!json_reader_read_member(jparser->reader,
+ JSONSTR_SETTING_ITEMS))
goto error;
- }
} else if (flag == SUBMENU_INFO) {
- if (!json_reader_read_member(jparser->reader, JSONSTR_SETTING_TREE))
- {
- cursor++;
+ if (!json_reader_read_member(jparser->reader,
+ JSONSTR_SETTING_TREE))
goto error;
- }
} else {
goto error;
}
cursor++;
if (!json_reader_read_member(jparser->reader, name))
- {
- cursor++;
goto error;
- }
cursor++;
return list;
error:
+ cursor++;
_restore_json_reader_location(jparser, cursor);
*cnt = 0;
cursor = 0;
if (!json_reader_read_member(jparser->reader, JSONSTR_SETTING_ITEMS))
- {
- cursor++;
- _DBG("[%s] Fail to read member from json", JSONSTR_SETTING_ITEMS);
goto error;
- }
cursor++;
if (!json_reader_read_member(jparser->reader, name))
- {
- cursor++;
- _DBG("[%s] Fail to read member from json", name);
goto error;
- }
cursor++;
if (!json_reader_read_member(jparser->reader, pnode))
- {
- cursor++;
- _DBG("[%s] Fail to read member from json", pnode);
goto error;
- }
cursor++;
if (!json_reader_read_member(jparser->reader, JSONSTR_SETTINGUI_ARGS))
- {
- cursor++;
- _DBG("[%s] Fail to read member from json", JSONSTR_SETTINGUI_ARGS);
goto error;
- }
cursor++;
return list;
error:
+ cursor++;
_restore_json_reader_location(jparser, cursor);
*cnt = 0;
cursor = 0;
if (!json_reader_read_member(jparser->reader, JSONSTR_SETTING_ITEMS))
- {
- cursor++;
- _DBG("[%s] Fail to read member from json", JSONSTR_SETTING_ITEMS);
goto error;
- }
+
cursor++;
if (!json_reader_read_member(jparser->reader, name))
- {
- cursor++;
- _DBG("[%s] Fail to read member from json", name);
goto error;
- }
+
cursor++;
if (!json_reader_read_member(jparser->reader, JSONSTR_DATA))
- {
- cursor++;
- _DBG("[%s] Fail to read member from json", JSONSTR_DATA);
goto error;
- }
+
cursor++;
*cnt = json_reader_count_members(jparser->reader);
return list;
error:
+ cursor++;
_restore_json_reader_location(jparser, cursor);
*cnt = 0;
return NULL;
}
- result = (char *) calloc(1, sizeof(char) * ARRAY_SIZE);
+ result = calloc(1, sizeof(char) * ARRAY_SIZE);
if (!result) {
g_free(output);
return NULL;
list = NULL;
for (i = 0; i < cnt; i++) {
- result = (char *) calloc(1, sizeof(char) * ARRAY_SIZE);
+ result = calloc(1, sizeof(char) * ARRAY_SIZE);
if (!result) {
free(arr[0]);
free(arr);
for (i = 1; i < cnt; i++) {
if (!json_reader_read_member(jparser->reader, arr[i])) {
- while(i){
+ while(i) {
json_reader_end_member(jparser->reader);
i--;
}
-
free(arr[0]);
free(arr);
return 0;
* limitations under the License.
*/
-#include <cstring>
-#include <MacroDefine.h>
+#include "dbg.h"
#include "settings_provider.h"
#include <vconf.h>
//#include "tvtimer.h"
#define KEY_SUBTITLE_LANGUAGE "db/menu/subtitle/subtitlelanguage"
#define KEY_SYSTEM_LANGUAGE "db/menu_widget/language"
#define KEY_SYSTEM_COUNTRY "db/menu_widget/regionformat"
-#define KEY_ACCESSIBILITY_SCREEN_READER "db/menu/accessibility/screen_reader"
-#define KEY_ACCESSIBILITY_MAGNIFIER "db/menu/accessibility/magnifier"
#define SYSTEM_LANGUAGE_DEFAULT_VALUE "en_US.utf8"
#define WAKEUP_TIMER_SETUP_DEFAULT_VALUE "OFF"
SYSTEM_RESET,
SYSTEM_PASSCODE,
SYSTEM_CLOCK_MODE,
- CHANNEL_LOCK,
- SCREEN_READER,
- MAGNIFIER,
+ CHANNEL_LOCK
};
struct keymap {
static struct keymap item_keymap[] = {
{
- "settings/picture/picturemode",
- PICTURE_MODE
+ .key = "settings/picture/picturemode",
+ .type = PICTURE_MODE
},
{
- "settings/picture/contrast",
- PICTURE_CONTRAST
+ .key = "settings/picture/contrast",
+ .type = PICTURE_CONTRAST
},
{
- "settings/picture/brightness",
- PICTURE_BRIGHTNESS
+ .key = "settings/picture/brightness",
+ .type = PICTURE_BRIGHTNESS
},
{
- "settings/picture/sharpness",
- PICTURE_SHARPNESS
+ .key = "settings/picture/sharpness",
+ .type = PICTURE_SHARPNESS
},
{
- "settings/picture/color",
- PICTURE_COLOR
+ .key = "settings/picture/color",
+ .type = PICTURE_COLOR
},
{
- "settings/picture/tint",
- PICTURE_TINT
+ .key = "settings/picture/tint",
+ .type = PICTURE_TINT
},
{
- "settings/picture/homebaropacity",
- PICTURE_HOMEBAR_OPACITY
+ .key = "settings/picture/homebaropacity",
+ .type = PICTURE_HOMEBAR_OPACITY
},
{
- "settings/picture/screenadjustment",
- PICTURE_SCREEN_ADJUSTMENT
+ .key = "settings/picture/screenadjustment",
+ .type = PICTURE_SCREEN_ADJUSTMENT
},
{
- "settings/sound/soundmode",
- SOUND_MODE
+ .key = "settings/sound/soundmode",
+ .type = SOUND_MODE
},
{
- "settings/sound/speakersettings",
- SPEAKER_SETTINGS
+ .key = "settings/sound/speakersettings",
+ .type = SPEAKER_SETTINGS
},
{
- "settings/system/sleeptimer",
- SYSTEM_SLEEPTIMER
+ .key = "settings/system/sleeptimer",
+ .type = SYSTEM_SLEEPTIMER
},
{
- "settings/system/wakeup_timer_setup",
- SYSTEM_WAKEUPTIMER
+ .key = "settings/system/wakeup_timer_setup",
+ .type = SYSTEM_WAKEUPTIMER
},
{
- "settings/system/subtitle",
- SYSTEM_SUBTITLE
+ .key = "settings/system/subtitle",
+ .type = SYSTEM_SUBTITLE
},
{
- "settings/system/country",
- SYSTEM_COUNTRY
+ .key = "settings/system/country",
+ .type = SYSTEM_COUNTRY
},
{
- "settings/system/language",
- SYSTEM_LANGUAGE
+ .key = "settings/system/language",
+ .type = SYSTEM_LANGUAGE
},
{
- "settings/system/reset",
- SYSTEM_RESET
+ .key = "settings/system/reset",
+ .type = SYSTEM_RESET
},
{
- "settings/system/change_passcode",
- SYSTEM_PASSCODE
+ .key = "settings/system/change_passcode",
+ .type = SYSTEM_PASSCODE
},
{
- "settings/system/clock_mode",
- SYSTEM_CLOCK_MODE
+ .key = "settings/system/clock_mode",
+ .type = SYSTEM_CLOCK_MODE
},
{
- "settings/channel/channel_lock",
- CHANNEL_LOCK
- },
- {
- "settings/accessibility/screen_reader",
- SCREEN_READER
- },
- {
- "settings/accessibility/magnifier",
- MAGNIFIER
+ .key = "settings/channel/channel_lock",
+ .type = CHANNEL_LOCK
}
};
//tvtimer_h timer;
};
-#if 0
static unsigned int sleeptimer_value[] = {
0,
30,
150,
180
};
-#endif
/**
* An timer foreach iteration callback for tvtimer_foreach_item.
return result;
}
-#if 0
/**
* Find array index according to given array value and size.
*
return -1;
}
-#endif
/**
* Set data with integer value.
static int _get_int(const char *key, int *val)
{
enum item_type type;
- int status;
+ int status, size, index;
if (!key || !val) {
_ERR("Invalid argument");
break;
#if 0
- int size, idex;
size = _ARRAY_SIZE(speakersettings_item);
if (_find_index(speakersettings_item,
size, *val, &index) == -1) {
switch (type) {
case SYSTEM_LANGUAGE:
- status = vconf_set_str(KEY_SYSTEM_LANGUAGE, (char *) val);
+ status = vconf_set_str(KEY_SYSTEM_LANGUAGE, val);
break;
case SYSTEM_COUNTRY:
- status = vconf_set_str(KEY_SYSTEM_COUNTRY, (char *)val);
+ status = vconf_set_str(KEY_SYSTEM_COUNTRY, val);
break;
case SYSTEM_PASSCODE:
- status = vconf_set_str(KEY_CHANGE_PASSCODE, (char *)val);
+ status = vconf_set_str(KEY_CHANGE_PASSCODE, val);
break;
default:
break;
case CHANNEL_LOCK:
r = vconf_set_bool(KEY_CHANNEL_LOCK, val);
break;
- case SCREEN_READER:
- r = vconf_set_bool(KEY_ACCESSIBILITY_SCREEN_READER, val);
- break;
- case MAGNIFIER:
- r = vconf_set_bool(KEY_ACCESSIBILITY_MAGNIFIER, val);
- break;
default:
break;
}
case CHANNEL_LOCK:
r = vconf_get_bool(KEY_CHANNEL_LOCK, val);
break;
- case SCREEN_READER:
- r = vconf_get_bool(KEY_ACCESSIBILITY_SCREEN_READER, val);
- break;
- case MAGNIFIER:
- r = vconf_get_bool(KEY_ACCESSIBILITY_MAGNIFIER, val);
- break;
default:
break;
}
return NULL;
}
- result = (char *) calloc(1, ARRAY_SIZE);
+ result = calloc(1, ARRAY_SIZE);
if (!result) {
_ERR("Fail to allocate memory");
return NULL;
const char *val, *disp;
Eina_List *list, *tmp;
struct listitem *litem;
- void* obj;
if (!item) {
_ERR("Invalid argument");
disp = NULL;
- EINA_LIST_FOREACH(list, tmp, obj) {
- litem = (struct listitem *) obj;
+ EINA_LIST_FOREACH(list, tmp, litem) {
val = listitem_get_value(litem);
if (val && !strncmp(sel, val, strlen(sel))) {
disp = listitem_get_display_name(litem);
}
if (!disp)
- disp = listitem_get_display_name((struct listitem *) eina_list_nth(list, 0));
+ disp = listitem_get_display_name(eina_list_nth(list, 0));
provider_release_list_value(sel);
* limitations under the License.
*/
-#include <AppCommon.h>
+#include <app.h>
+#include <Elementary.h>
+#include "dbg.h"
#include "stdlib.h"
#include "stdbool.h"
#include "timeout_handler.h"
-
#define EVENT_HANDLER_NUM 6
-
-struct STimeoutHandler {
+struct timeout_handler {
Ecore_Event_Handler * event_handler[EVENT_HANDLER_NUM];
Ecore_Timer *timer;
};
*/
static Eina_Bool _event_occrued_cb(void *data, int type, void *event)
{
- struct STimeoutHandler *handler;
+ struct timeout_handler *handler;
if (!data) {
_ERR("Invalid argument");
return EINA_FALSE;
}
- handler = (struct STimeoutHandler *) data;
+ handler = data;
ecore_timer_reset(handler->timer);
/**
* Freeze given ecore timer.
*
-* @param data [in] The STimeoutHandler data pointer, it include given ecore timer pointer.
+* @param data [in] The timeout_handler data pointer, it include given ecore timer pointer.
* @return void.
*/
-void CTimeoutHandler::FreezeTimer(void)
+void timeout_handler_freeze_timer(struct timeout_handler *data)
{
- ASSERT(m);
-
- if (!m->timer) {
+ if (!data || !data->timer) {
_ERR("Invalid argument");
return;
}
- ecore_timer_freeze(m->timer);
+ ecore_timer_freeze(data->timer);
}
/**
* Thaw given ecore timer.
*
-* @param data [in] The STimeoutHandler data pointer, it include given ecore timer pointer.
+* @param data [in] The timeout_handler data pointer, it include given ecore timer pointer.
* @return void.
*/
-void CTimeoutHandler::ThawTimer(void)
+void timeout_handler_thaw_timer(struct timeout_handler *data)
{
- ASSERT(m);
-
- if (!m->timer) {
+ if (!data || !data->timer) {
_ERR("Invalid argument");
return;
}
- ecore_timer_thaw(m->timer);
- ecore_timer_reset(m->timer);
+ ecore_timer_thaw(data->timer);
+ ecore_timer_reset(data->timer);
}
/**
* Change timer interval value.
*
-* @param data [in] The STimeoutHandler data pointer, it include given ecore timer pointer.
+* @param data [in] The timeout_handler data pointer, it include given ecore timer pointer.
* @param val [in] New interval value to be set.
* @return void.
*/
-void CTimeoutHandler::ChangeInterval(double val)
+void timeout_handler_change_interval(struct timeout_handler *data,
+ double val)
{
- ASSERT(m);
-
- if (!m->timer) {
+ if (!data || !data->timer) {
_ERR("Invalid argument");
return;
}
if (val == 0.0) {
- ecore_timer_freeze(m->timer);
+ ecore_timer_freeze(data->timer);
} else if (val > 0.0) {
- ecore_timer_interval_set(m->timer, val);
- ecore_timer_reset(m->timer);
- ecore_timer_thaw(m->timer);
+ ecore_timer_interval_set(data->timer, val);
+ ecore_timer_reset(data->timer);
+ ecore_timer_thaw(data->timer);
}
}
/**
-* Create and init STimeoutHandler data.
+* Create and init timeout_handler data.
*
* @param val [in] Timer interval value.
-* @return The STimeoutHandler data pointer, NULL if error.
+* @return The timeout_handler data pointer, NULL if error.
*/
-bool CTimeoutHandler::Create(double val)
+struct timeout_handler *timeout_handler_init(double val)
{
- ASSERT(!m);
+ struct timeout_handler *data;
- m = new STimeoutHandler;
- if (!m) {
+ data = calloc(1, sizeof(*data));
+ if (!data) {
_ERR("Fail to allocate memory for timeout handler");
- return false;
+ return NULL;
}
- m->event_handler[0] = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _event_occrued_cb, m);
- m->event_handler[1] = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _event_occrued_cb, m);
- m->event_handler[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,_event_occrued_cb, m);
- m->event_handler[3] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _event_occrued_cb, m);
- m->event_handler[4] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _event_occrued_cb, m);
- m->event_handler[5] = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, _event_occrued_cb, m);
-
- m->timer = ecore_timer_add(val, _timer_expired_cb, NULL);
-
- return true;
+ data->event_handler[0] = ecore_event_handler_add(
+ ECORE_EVENT_KEY_DOWN, _event_occrued_cb, data);
+ data->event_handler[1] = ecore_event_handler_add(
+ ECORE_EVENT_KEY_UP, _event_occrued_cb, data);
+ data->event_handler[2] = ecore_event_handler_add(
+ ECORE_EVENT_MOUSE_BUTTON_DOWN,
+ _event_occrued_cb, data);
+ data->event_handler[3] = ecore_event_handler_add(
+ ECORE_EVENT_MOUSE_BUTTON_UP,
+ _event_occrued_cb, data);
+ data->event_handler[4] = ecore_event_handler_add(
+ ECORE_EVENT_MOUSE_MOVE, _event_occrued_cb, data);
+ data->event_handler[5] = ecore_event_handler_add(
+ ECORE_EVENT_MOUSE_WHEEL, _event_occrued_cb, data);
+
+ data->timer = ecore_timer_add(val, _timer_expired_cb, NULL);
+
+ return data;
}
-
-void CTimeoutHandler::Destroy(void)
+/**
+* Release given timeout_handler data.
+*
+* @param data [in] The timeout_handler data pointer.
+* @return void.
+*/
+void timeout_handler_fini(struct timeout_handler *data)
{
- ASSERT(m);
-
int i;
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
for (i = 0; i < EVENT_HANDLER_NUM; i++)
- ecore_event_handler_del(m->event_handler[i]);
+ ecore_event_handler_del(data->event_handler[i]);
- ecore_timer_del(m->timer);
- delete m;
- m = NULL;
+ ecore_timer_del(data->timer);
+ free(data);
}
#include <Elementary.h>
#include <libintl.h>
#include <glib-object.h>
-#include <MacroDefine.h>
+#include "dbg.h"
#include "utils.h"
#include "data_wrapper.h"
if (!btns)
return;
- cur = (Evas_Object *) eina_array_data_get(btns, p);
- next = (Evas_Object *) eina_array_data_get(btns, n);
+ cur = eina_array_data_get(btns, p);
+ next = eina_array_data_get(btns, n);
if (!cur || !next)
return;
if (!btns)
return;
- cur = (Evas_Object *) eina_array_data_get(btns, p);
- next = (Evas_Object *) eina_array_data_get(btns, n);
+ cur = eina_array_data_get(btns, p);
+ next = eina_array_data_get(btns, n);
if (!cur || !next)
return;
* callback or not.
* @return The button's evas object, NULL on error.
*/
-Evas_Object *utils_add_btn(Evas_Object *base, const char *style, const char *text, Eina_Bool event)
+Evas_Object *utils_add_btn(Evas_Object *base,
+ char *style, const char *text, Eina_Bool event)
{
Evas_Object *btn;
if (!btn)
return NULL;
- evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(btn, EVAS_HINT_FILL,
+ EVAS_HINT_FILL);
if (style)
elm_object_style_set(btn, style);
elm_object_text_set(btn, utils_get_translation_str(text));
if (event == EINA_TRUE) {
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN, _btn_mouse_in_cb, NULL);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT, _btn_mouse_out_cb, NULL);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN,
+ _btn_mouse_in_cb, NULL);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT,
+ _btn_mouse_out_cb, NULL);
}
evas_object_show(btn);
if (!scroller)
return NULL;
- evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(scroller,
+ EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(scroller,
+ EVAS_HINT_FILL, EVAS_HINT_FILL);
-#if 0
elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE);
- elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF,
+ ELM_SCROLLER_POLICY_OFF);
elm_object_focus_allow_set(scroller, EINA_FALSE);
evas_object_show(scroller);
-#endif
return scroller;
}
if (!box)
return NULL;
- evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(box,
+ EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(box,
+ EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_focus_allow_set(box, EINA_FALSE);
evas_object_show(box);
return NULL;
}
+ if (style)
+ elm_object_style_set(ctxpopup, style);
+
return ctxpopup;
}
return;
if (cnt == 1) {
- btn = (Evas_Object *) eina_array_data_get(btns, 0);
+ btn = eina_array_data_get(btns, 0);
if (!btn)
return;
--- /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 "dbg.h"
+#include "def.h"
+#include "stdbool.h"
+#include "viewmgr.h"
+#include "utils.h"
+#include "data_wrapper.h"
+#include "settings_provider.h"
+#include "view_bottomslider.h"
+
+/**
+* This function is invoked to create view layout.
+*
+* @param mgr [in] The setting_mgr data pointer passed by @settingmgr_view_push.
+* @param view [in] The settingview_data data pointer passed by @settingmgr_view_push.
+* @param prev [in] The parameter data which passed by prev view or NULL.
+* @return View layout evas object, NULL on error.
+*/
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ /*TODO:Implement this function*/
+ return NULL;
+}
+
+/**
+* This function is invoked to show view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _show(Evas_Object *base)
+{
+}
+
+/**
+* This function is invoked to destroy view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _destroy(Evas_Object *base)
+{
+}
+
+/**
+* This function is invoked to hide view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _hide(Evas_Object *base)
+{
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_BOTTOM_SLIDER,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .hide_view = 1
+};
+
+/**
+* This function is invoked to get bottom slider view class object.
+*
+* @return The setting_class data static pointer, NULL on error.
+*/
+struct setting_class *view_bottomslider_get_vclass(void)
+{
+ return &_vclass;
+}
--- /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 "dbg.h"
+#include "def.h"
+#include "stdbool.h"
+#include "viewmgr.h"
+#include "utils.h"
+#include "data_wrapper.h"
+#include "settings_provider.h"
+#include "view_bottomsublist.h"
+
+/**
+* This function is invoked to create view layout.
+*
+* @param mgr [in] The setting_mgr data pointer passed by @settingmgr_view_push.
+* @param view [in] The settingview_data data pointer passed by @settingmgr_view_push.
+* @param prev [in] The parameter data which passed by prev view or NULL.
+* @return View layout evas object, NULL on error.
+*/
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ /*TODO:Implement this function*/
+ return NULL;
+}
+
+/**
+* This function is invoked to show view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _show(Evas_Object *base)
+{
+}
+
+/**
+* This function is invoked to destroy view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _destroy(Evas_Object *base)
+{
+}
+
+/**
+* This function is invoked to destroy view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _hide(Evas_Object *base)
+{
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_BOTTOM_SUBLIST,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .hide_view = 1
+};
+
+/**
+* This function is invoked to get bottom sublist view class object.
+*
+* @return The setting_class data static pointer, NULL on error.
+*/
+struct setting_class *view_bottomsublist_get_vclass(void)
+{
+ return &_vclass;
+}
--- /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 "dbg.h"
+#include "def.h"
+#include "stdbool.h"
+#include "viewmgr.h"
+#include "utils.h"
+#include "data_wrapper.h"
+#include "settings_provider.h"
+#include "view_maincatalog.h"
+#include "view_device_manager.h"
+
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ /*TODO:Implement this function*/
+ return NULL;
+}
+
+static void _show(Evas_Object *base)
+{
+}
+
+static void _destroy(Evas_Object *base)
+{
+}
+
+static void _hide(Evas_Object *base)
+{
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_DEVICE_MANAGER,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .hide_view = 0
+};
+
+struct setting_class *view_device_manager_get_vclass(void)
+{
+ return &_vclass;
+}
--- /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 <app.h>
+
+#include <KeyDefine.h>
+
+#include "dbg.h"
+#include "def.h"
+#include "stdbool.h"
+#include "viewmgr.h"
+#include "utils.h"
+#include "view_maincatalog.h"
+#include "data_wrapper.h"
+#include "settings_provider.h"
+
+#define DATA_ID "main_setting_data"
+#define SUBITEM_DATA_ID "subitem_data_id"
+#define SYSTEM_CLOCK_DATA "system_clock_data"
+#define ICON_PART "iconpart"
+#define PROGRESS_BAR_DATA "progressbar"
+
+#define SETTING_ID "setting_id"
+#define E_CREATE_ITEMS 0
+
+#define MAX_PROGRESS_VALUE 100.0
+#define MIN_PROGRESS_VALUE 0.0
+#define ICON_BUTTON_NO_DISP_NAME "No Display Name"
+#define CHANGE_PASSCODE_NAME "change-passcode"
+#define PASSCODE_MASK "****"
+#define DISABLED "disabled"
+#define ENABLED "enabled"
+#define SIG_CLICKED "clicked"
+
+enum focused_state {
+ FOCUS_MAIN_ITEM = 1,
+ FOCUS_SUB_ITEM
+};
+
+struct _view_data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Eina_Array *sub_item_btn;
+ Eina_Array *main_item_btn;
+ Eina_Array *main_icon_base;
+ Eina_Array *item_path;
+ Evas_Object *focused_sub_item_btn;
+ Evas_Object *focused_main_item_btn;
+ Evas_Object *subitem_box;
+ Evas_Object *mainitem_box;
+
+ int focus_status;
+ int main_item_count;
+ int sub_item_count;
+
+ struct setting_mgr *mgr;
+ struct settingview_data *main_setting_view;
+ struct settingview_data *subsetting_view;
+};
+
+/**
+* This function will be invoked when focus moves from subitem to main item.
+*
+* @param[in]: data : the user data.
+* @param[in]: btn : subitem which focus is on.
+*
+* @return: void.
+*/
+static void _move_from_subitem_to_main_item(struct _view_data *data,
+ Evas_Object *btn)
+{
+ if (!data || !btn)
+ return;
+
+ data->focus_status = FOCUS_MAIN_ITEM;
+ data->focused_sub_item_btn = btn;
+
+ elm_object_focus_set(data->focused_main_item_btn, EINA_TRUE);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling key press event.
+*
+* @param[in]: data : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the corresponding object which the key press event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _subitem_key_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _view_data *priv;
+ Evas_Object *pb;
+ Evas_Object *next;
+
+ if (!data || !ei || !obj)
+ return;
+
+ ev = ei;
+ if (!ev->keyname)
+ return;
+
+ priv = data;
+
+ if (!strcmp(ev->keyname, KEY_LEFT) ||
+ !strcmp(ev->keyname, KEY_BACK)) {
+ pb = evas_object_data_get(obj, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
+
+ _move_from_subitem_to_main_item(priv, obj);
+ } else if (!strncmp(ev->keyname, KEY_DOWN, strlen(ev->keyname))) {
+ pb = evas_object_data_get(obj, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
+
+ next = elm_object_focus_next_object_get(obj,
+ ELM_FOCUS_DOWN);
+ if (!next) {
+ _ERR("focus next object get failed.");
+ return;
+ }
+
+ pb = evas_object_data_get(next, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
+ } else if (!strncmp(ev->keyname, KEY_UP, strlen(ev->keyname))) {
+ pb = evas_object_data_get(obj, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
+
+ next = elm_object_focus_next_object_get(obj, ELM_FOCUS_UP);
+ if (!next) {
+ _ERR("focus next object get failed.");
+ return;
+ }
+
+ pb = evas_object_data_get(next, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
+ } else if (!strncmp(ev->keyname, KEY_EXIT, strlen(ev->keyname))) {
+ app_efl_exit();
+ }
+}
+
+/**
+* Get geometry data of object such as width, height.
+*
+* @param[in]: obj : the object which you want to get geometry data from.
+* @param[out]: param : the geometry data.
+*
+* @return: void.
+*/
+static void _get_geometry_data(Evas_Object *obj,
+ struct obj_geometry_data *param)
+{
+ int x, y, w, h;
+
+ if (!param || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ x = y = w = h = 0;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+ param->x = x;
+ param->y = y;
+ param->width = w;
+ param->height = h;
+}
+
+/**
+* Entry of showing UI gadget views.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data.
+* param[in]: obj : object whose next view is UI gadget.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_ug_view(struct _view_data *data,
+ struct settingitem *item, Evas_Object *obj)
+{
+ const char *id;
+ struct evas_obj_data param;
+ int r;
+
+ if (!data || !item || !obj) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ param.subitem_box = data->subitem_box;
+ param.display_name = settingitem_get_display_name(item);
+ param.cur_btn = obj;
+
+ r = settingmgr_view_push(data->mgr, id, (void *)¶m);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Entry of showing sublist views.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data.
+* param[in]: obj : object whose next view is sublist.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_sublist_view(struct _view_data *data,
+ struct settingitem *item, Evas_Object *obj)
+{
+ const char *id;
+ int r;
+ struct obj_geometry_data ogd;
+
+ if (!data || !item || !obj) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ _get_geometry_data(obj, &ogd);
+
+ r = settingmgr_view_push(data->mgr, id, (void *)&ogd);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ elm_object_signal_emit(obj, SUBITEMBTN_BUTTON_CLICKED,
+ SUBITEMBTN_BUTTON_SOURCE);
+
+ return 0;
+}
+
+/**
+* Entry of showing bottom sublist views.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_bottom_sublist_view(struct _view_data *data,
+ struct settingitem *item)
+{
+ const char *id;
+ int r;
+
+ if (!data || !item) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ r = settingmgr_view_push(data->mgr, id, NULL);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Entry of showing bottom slider views.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data.
+* param[in]: obj : object whose next view bottom slider.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_bottom_slider_view(struct _view_data *data,
+ struct settingitem *item, Evas_Object *obj)
+{
+ const char *id;
+ int r;
+ Eina_List *list;
+ Evas_Object *pb;
+
+ if (!data || !item || !obj) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ pb = evas_object_data_get(obj, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
+
+ list = settingitem_get_slider_group_list(
+ viewdata_get_parentitem(data->subsetting_view),
+ settingmgr_get_data(data->mgr), id);
+
+ r = settingmgr_view_push(data->mgr, id, list);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Entry of showing passcode popup views.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_passcode_popup_view(struct _view_data *data,
+ struct settingitem *item)
+{
+ const char *id;
+ int r;
+
+ if (!data || !item) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ r = settingmgr_view_push(data->mgr, id, NULL);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Entry of showing device manager view.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data read from json file.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_device_manager_view(struct _view_data *data,
+ struct settingitem *item)
+{
+ const char *id;
+ struct evas_obj_data param;
+ int r;
+
+ if (!data || !item) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ param.display_name = settingitem_get_display_name(item);
+ param.subitem_box = data->subitem_box;
+
+ r = settingmgr_view_push(data->mgr, id, ¶m);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Entry of showing reset popup view.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data read from json file.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_reset_popup_view(struct _view_data *data,
+ struct settingitem *item)
+{
+ const char *id;
+ int r;
+
+ if (!data || !item) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ r = settingmgr_view_push(data->mgr, id, NULL);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Entry of showing software upgrade popup view.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data read from json file.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_upgrade_popup_view(struct _view_data *data,
+ struct settingitem *item)
+{
+ const char *id;
+ int r;
+
+ if (!data || !item) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ r = settingmgr_view_push(data->mgr, id, NULL);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Entry of showing clock sublist view.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data read from json file.
+* param[in]: obj : object whose next view is clock sublist view.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_clock_sublist_view(struct _view_data *data,
+ struct settingitem *item, Evas_Object *obj)
+{
+ const char *id;
+ struct evas_obj_data param;
+ struct obj_geometry_data ogd;
+ int r;
+
+ if (!data || !item || !obj) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ _get_geometry_data(obj, &ogd);
+
+ param.display_name = settingitem_get_display_name(item);
+ param.subitem_box = data->subitem_box;
+ param.cur_btn = obj;
+
+ evas_object_data_set(obj, SYSTEM_CLOCK_DATA, (void *)&ogd);
+
+ r = settingmgr_view_push(data->mgr, id, ¶m);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ elm_object_signal_emit(obj,
+ SUBITEMBTN_BUTTON_CLICKED, SUBITEMBTN_BUTTON_SOURCE);
+
+ return 0;
+}
+/**
+* Entry of showing channel lock view.
+*
+* param[in]: data : the user data.
+* param[in]: item : item data read from json file.
+* param[in]: obj : the channel lock object.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _push_need_passcode_view(struct _view_data *data,
+ struct settingitem *item, Evas_Object *obj)
+{
+ const char *id;
+ int r;
+ struct obj_geometry_data ogd;
+
+ if (!data || !item || !obj) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("Fail to get item id");
+ return -1;
+ }
+
+ _get_geometry_data(obj, &ogd);
+
+ r = settingmgr_view_push(data->mgr, id, &ogd);
+ if (r != 0) {
+ _ERR("Fail to push view");
+ return -1;
+ }
+
+ elm_object_signal_emit(obj, SUBITEMBTN_BUTTON_CLICKED,
+ SUBITEMBTN_BUTTON_SOURCE);
+
+ return 0;
+}
+
+/**
+* This function will be invoked when subitem is clicked.
+*
+* @param[in]: data : the user data.
+* @param[in]: obj : the subitem object.
+*
+* @return: void.
+*/
+static void _submenu_item_clicked(void *data, Evas_Object *obj)
+{
+ struct _view_data *priv;
+ const char *style;
+ struct settingitem *item;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->focus_status != FOCUS_SUB_ITEM)
+ return;
+
+ item = evas_object_data_get(obj, SUBITEM_DATA_ID);
+ if (!item) {
+ _ERR("Get sub item failed");
+ return;
+ }
+
+ style = settingitem_get_settingui_style(item);
+ if (!style) {
+ _ERR("setting-ui style is null.");
+ return;
+ }
+
+ if (!strncmp(style, STYLE_UIGADGET, strlen(style))) {
+ if (_push_ug_view(priv, item, obj) != 0)
+ _ERR("Fail to push ug");
+ } else if (!strncmp(style, STYLE_CTXPOPUP,
+ strlen(style))) {
+ if (_push_sublist_view(priv, item, obj) != 0)
+ _ERR("Fail to push sublist");
+ } else if (!strncmp(style, STYLE_BOTTOM_CTXPOPUP,
+ strlen(style))) {
+ if (_push_bottom_sublist_view(priv, item) != 0)
+ _ERR("Fail to push bottom sublist");
+ } else if (!strncmp(style, STYLE_BOTTOMSLIDER,
+ strlen(style)) || !strncmp(style,
+ STYLE_BOTTOM2WAYSLIDER,
+ strlen(style))) {
+ if (_push_bottom_slider_view(priv,
+ item, obj) != 0)
+ _ERR("Fail to push bottom slider");
+ } else if (!strncmp(style, STYLE_PASSCODE_POPUP,
+ strlen(style))) {
+ if (_push_passcode_popup_view(priv, item) != 0)
+ _ERR("Fail to push passcode popup");
+ } else if (!strncmp(style, STYLE_DEVICE_MANAGER,
+ strlen(style))) {
+ if (_push_device_manager_view(priv, item) != 0)
+ _ERR("Fail to push device mgr view");
+ } else if (!strncmp(style, STYLE_RESET_POPUP,
+ strlen(style))) {
+ if (_push_reset_popup_view(priv, item) != 0)
+ _ERR("Fail to push reset popup");
+ } else if (!strncmp(style, STYLE_UPGRADE_POPUP,
+ strlen(style))) {
+ if (_push_upgrade_popup_view(priv, item) != 0)
+ _ERR("Fail to push upgrade popup");
+ } else if (!strncmp(style, STYLE_CLOCK_CTXPOPUP,
+ strlen(style))) {
+ if (_push_clock_sublist_view(
+ priv, item, obj) != 0)
+ _ERR("Fail to push clock sublist");
+ } else if (!strncmp(style, STYLE_NEED_PASSCODE,
+ strlen(style))) {
+ if (_push_need_passcode_view(
+ priv, item, obj) != 0)
+ _ERR("Fail to push need passcode view");
+ }
+
+ priv->focused_sub_item_btn = obj;
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: data : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ev : event info.
+*
+* @return: void.
+*/
+static void _subitem_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _view_data *priv;
+ Evas_Object *icon;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ _submenu_item_clicked(priv, obj);
+
+ elm_object_signal_emit(priv->focused_main_item_btn,
+ MAINICONBTN_FOCUSED_ON_SUBITEM,
+ MAINICONBTN_MAIN_ITEM_SOURCE);
+
+ icon = elm_object_part_content_get(priv->focused_main_item_btn,
+ MAINICONBTN_ICON_SWALLOW);
+ if (icon)
+ elm_object_signal_emit(icon, MAIN_BTN_HIGHLIGHT, MAIN_BTN);
+}
+
+/**
+* Get item value from item.
+*
+* @param[in]: item : the item data read from json file.
+*
+* @return: the value of item or null if error occurred.
+*/
+static char *_settingitems_get_value(struct settingitem *item)
+{
+ char *result;
+ const char *name, *style;
+
+ if (!item) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ result = NULL;
+
+ name = settingitem_get_id(item);
+ if (name && !strncmp(name, CHANGE_PASSCODE_NAME, strlen(name))) {
+ result = strdup(PASSCODE_MASK);
+ return result;
+ }
+
+ style = settingitem_get_settingui_style(item);
+ if (!style) {
+ _ERR("Fail to get setting ui style");
+ return NULL;
+ }
+
+ if (!strncmp(style, STYLE_UIGADGET, strlen(style)))
+ return provider_get_list_value(item);
+ else
+ return provider_get_selected_display_name(item);
+}
+
+/**
+* Get percentage value of progress from item data.
+*
+* @param[in]: item : item data read from json file.
+*
+* @return: the percentage value or -1.0 if error occurred.
+*/
+static double _get_progress_percentage(struct settingitem *item)
+{
+ struct slideritem *sitem;
+ double val, persent;
+
+ if (!item) {
+ _ERR("Invalid argument");
+ return -1.0;
+ }
+
+ sitem = settingitem_get_data_slideritem(item);
+ if (!sitem) {
+ _ERR("Get slider item failed");
+ return -1.0;
+ }
+
+ val = provider_get_slider_value(item);
+ persent = slideritem_find_slider_value(val, sitem);
+
+ return persent;
+}
+
+/**
+* Get displaying value of item.
+*
+* @param[in]: item : item data read from json file.
+* @param[in]: value : the percentage value.
+*
+* @return: the display value.
+*/
+static double _get_display_value(struct settingitem *item, double value)
+{
+ struct slideritem *sitem;
+ double disp;
+
+ if (!item) {
+ _ERR("Invalid argument");
+ return -1.0;
+ }
+
+ sitem = settingitem_get_data_slideritem(item);
+ if (!sitem) {
+ _ERR("Get slider item failed");
+ return -1.0;
+ }
+
+ disp = slideritem_find_slider_display_value(value, sitem);
+
+ return disp;
+}
+
+/**
+* Create slider of subitem.
+*
+* @param[in]: item : the item data read from json file.
+* @param[in]: base : the base layout of subitems.
+* @param[in]: btn : the subitem the slider will be created on.
+*
+* @return: void.
+*/
+static void _set_subitem_btn_slider(struct settingitem *item,
+ Evas_Object *base, Evas_Object *btn)
+{
+ Evas_Object *pb;
+ double val, percent;
+ char buf[BUF_SIZE];
+
+ if (!item || !base || !btn) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ elm_object_style_set(btn, SUBITEMBTN_TITLE_SLIDER_VALUE);
+
+ pb = elm_progressbar_add(base);
+ if (!pb) {
+ _ERR("Add progress bar failed.");
+ return;
+ }
+
+ elm_object_style_set(pb, SUBITEMBTN_TITILE_SLIDER);
+
+ percent = _get_progress_percentage(item);
+ val = _get_display_value(item, percent);
+ elm_progressbar_value_set(pb, percent);
+
+ snprintf(buf, sizeof(buf), "%d", (int)val);
+ elm_object_part_text_set(btn, SUBITEMBTN_VALUE, buf);
+ elm_object_part_content_set(btn, SUBITEMBTN_SLIDER_SWALLOW, pb);
+
+ evas_object_data_set(btn, PROGRESS_BAR_DATA, pb);
+}
+
+/**
+* Get tint g-value.
+*
+* @param[in]: item : the item data read from json file.
+* @param[in]: tint_r : the tint r-value.
+*
+* @return: the tint g-value.
+*/
+static double _get_disp_tint_g_val(struct settingitem *item, double tint_r)
+{
+ const char *strval;
+ struct slideritem *sitem;
+ double val;
+
+ if (!item) {
+ _ERR("Invalid argument");
+ return -1.0;
+ }
+
+ sitem = settingitem_get_data_slideritem(item);
+ if (!sitem) {
+ _ERR("Get slider item failed");
+ return -1.0;
+ }
+
+ strval = slideritem_get_max_display_value(sitem);
+ if (strval)
+ val = atof(strval);
+ else
+ val = 100;
+
+ return val - tint_r;
+}
+
+/**
+* Create two way slider.
+*
+* @param[in]: item : the item data read from json file.
+* @param[in]: base : the base layout of subitems.
+* @param[in]: btn : the subitem which the two way slider will be created on.
+*
+* @return: void.
+*/
+static void _set_subitem_btn_value_slider(struct settingitem *item,
+ Evas_Object *base, Evas_Object *btn)
+{
+ Evas_Object *pb;
+ double tint_r, tint_g, percent;
+ char buf[BUF_SIZE];
+
+ if (!item || !base || !btn) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ elm_object_style_set(btn, SUBITEMBTN_TITLE_SLIDER_VALUE);
+
+ pb = elm_progressbar_add(base);
+ if (!pb) {
+ _ERR("Add progress bar failed.");
+ return;
+ }
+
+ elm_object_style_set(pb, SUBITEMBTN_TITILE_SLIDER);
+ percent = _get_progress_percentage(item);
+ elm_progressbar_value_set(pb, percent);
+
+ tint_r = _get_display_value(item, percent);
+ tint_g = _get_disp_tint_g_val(item, tint_r);
+
+ snprintf(buf, sizeof(buf), "R%d", (int)tint_r);
+ elm_object_part_text_set(btn, SUBITEMBTN_VALUE,
+ utils_get_translation_str(buf));
+ snprintf(buf, sizeof(buf), "G%d", (int)tint_g);
+ elm_object_part_text_set(btn, SUBITEMBTN_G_VALUE,
+ utils_get_translation_str(buf));
+
+ elm_object_part_content_set(btn, SUBITEMBTN_SLIDER_SWALLOW, pb);
+
+ evas_object_data_set(btn, PROGRESS_BAR_DATA, pb);
+}
+
+/**
+* Create style for subitem.
+*
+* @param[in]: base : the base layout of subitems.
+* @param[in]: obj : the subitem which the style will be created on.
+* @param[in]: style : the style read from json file.
+* @param[in]: item : the item data read from json file.
+*
+* @return: void.
+*/
+static void _draw_subitem_with_style(Evas_Object *base, Evas_Object *obj,
+ const char *style, struct settingitem *item)
+{
+ char *val;
+
+ if (!style || !base || !obj || !item)
+ return;
+
+ if (!strncmp(style, STYLE_SUBBUTTON_TITLE_VALUE, strlen(style))) {
+ val = _settingitems_get_value(item);
+ elm_object_part_text_set(obj, SUBITEMBTN_VALUE,
+ utils_get_translation_str(val));
+ free(val);
+ } else if (!strncmp(style, STYLE_SUBBUTTON_TITLE_ICON, strlen(style))) {
+ elm_object_style_set(obj, SUBITEMBTN_TITLE_ICON);
+ } else if (!strncmp(style, STYLE_SUBBUTTON_TITLE_SLIDER_VALUE,
+ strlen(style))) {
+ _set_subitem_btn_slider(item, base, obj);
+ } else if (!strncmp(style, STYLE_SUBBUTTON_TITLE_2WAYSLIDER_VALUE,
+ strlen(style))) {
+ _set_subitem_btn_value_slider(item, base, obj);
+ }
+}
+
+/**
+* Release resources of subitems.
+*
+* @param[in]: data : the user data.
+*
+* @return: void.
+*/
+static void _release_subitems(struct _view_data *data)
+{
+ Evas_Object *btn;
+ Eina_Array_Iterator a;
+ unsigned int i;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ if (data->sub_item_btn) {
+ EINA_ARRAY_ITER_NEXT(data->sub_item_btn, i, btn, a)
+ evas_object_del(btn);
+ eina_array_free(data->sub_item_btn);
+ }
+
+ if (data->subsetting_view)
+ viewdata_release(data->subsetting_view);
+
+ if (data->subitem_box)
+ evas_object_del(data->subitem_box);
+}
+
+/**
+* Refresh subitems when subitems are changed.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _refresh_subitems(struct _view_data *data)
+{
+ Evas_Object *btn;
+ Eina_Array_Iterator a;
+ unsigned int i;
+ struct settingitem *item;
+ const char *style;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ EINA_ARRAY_ITER_NEXT(data->sub_item_btn, i, btn, a) {
+ item = evas_object_data_get(btn, SUBITEM_DATA_ID);
+ style = settingitem_get_style(item);
+ if (style)
+ _draw_subitem_with_style(data->base, btn, style, item);
+ }
+
+ return 0;
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse out event.
+*
+* @param[in]: data : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse out event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _subitem_btn_mouse_out_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ /* TODO: Add necessary operations if needed. */
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse in event.
+*
+* @param[in]: data : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse in event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _subitem_btn_mouse_in_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ struct _view_data *priv;
+ Evas_Object *icon, *pb;
+
+ if (!obj || !data)
+ return;
+
+ priv = data;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+
+ if (priv->focus_status == FOCUS_MAIN_ITEM) {
+ priv->focus_status = FOCUS_SUB_ITEM;
+ elm_object_signal_emit(priv->focused_main_item_btn,
+ MAINICONBTN_FOCUSED_ON_SUBITEM,
+ MAINICONBTN_MAIN_ITEM_SOURCE);
+
+ icon = elm_object_part_content_get(priv->focused_main_item_btn,
+ MAINICONBTN_ICON_SWALLOW);
+ if (icon)
+ elm_object_signal_emit(icon,
+ MAIN_BTN_HIGHLIGHT, MAIN_BTN);
+ }
+
+ pb = evas_object_data_get(priv->focused_sub_item_btn,
+ PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb, SIG_UNCTRL_PB_UNFOCUSED,
+ SRC_PB_PROG);
+
+ pb = evas_object_data_get(obj, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb, SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
+
+ priv->focused_sub_item_btn = obj;
+}
+
+/**
+* Create subitems of settings.
+*
+* @param[in]: data : the user data.
+* @param[in]: name : the name of subitem.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _draw_subitems(struct _view_data *data, const char *name)
+{
+ Evas_Object *box, *btn, *tmp;
+ struct settingview_data *view;
+ struct settingitem *item;
+ Eina_List *list, *l;
+ int cnt;
+ Eina_Array_Iterator a;
+ unsigned int i;
+ const char *style, *status;
+ Eina_Array *enabled;
+
+ if (!data || !name || !data->base) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ view = settingmgr_get_view(data->mgr, name);
+ if (!view) {
+ _ERR("get subview failed\n");
+ return -1;
+ }
+
+ list = viewdata_get_childitems_list(view);
+ if (!list) {
+ _ERR("childitem list is empty!");
+ if (view)
+ viewdata_release(view);
+ return -1;
+ }
+
+ cnt = eina_list_count(list);
+
+ data->sub_item_btn = eina_array_new(1);
+ enabled = eina_array_new(1);
+ if (!data->sub_item_btn || !enabled) {
+ _ERR("Create Eina Array failed\n");
+ EINA_LIST_FREE(list, item);
+ if (view)
+ viewdata_release(view);
+ return -1;
+ }
+
+ box = utils_add_box(data->base);
+ if (!box) {
+ _ERR("Add box failed\n");
+ EINA_LIST_FREE(list, item);
+ eina_array_free(data->sub_item_btn);
+ if (view)
+ viewdata_release(view);
+ return -1;
+ }
+
+ EINA_LIST_FOREACH(list, l, item) {
+ btn = utils_add_btn(data->base, SUBITEMBTN_STYLE,
+ settingitem_get_display_name(item), EINA_FALSE);
+ if (!btn) {
+ _ERR("Add btn failed");
+ evas_object_del(box);
+ EINA_LIST_FREE(list, item);
+ EINA_ARRAY_ITER_NEXT(data->sub_item_btn, i, tmp, a)
+ evas_object_del(tmp);
+ eina_array_free(data->sub_item_btn);
+ if (view)
+ viewdata_release(view);
+ return -1;
+ }
+
+ style = settingitem_get_style(item);
+ if (style)
+ _draw_subitem_with_style(data->base, btn, style, item);
+
+ evas_object_smart_callback_add(btn, "clicked",
+ _subitem_btn_clicked_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _subitem_key_pressed_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN,
+ _subitem_btn_mouse_in_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT,
+ _subitem_btn_mouse_out_cb, data);
+
+ elm_box_pack_end(box, btn);
+ eina_array_push(data->sub_item_btn, btn);
+
+ evas_object_data_set(btn, SUBITEM_DATA_ID, item);
+
+ status = settingitem_get_status(item);
+ if (status && !strncmp(status, DISABLED, strlen(status))) {
+ elm_object_disabled_set(btn, EINA_TRUE);
+ evas_object_freeze_events_set(btn, EINA_TRUE);
+ } else {
+ eina_array_push(enabled, btn);
+ }
+ }
+
+ data->subsetting_view = view;
+ data->sub_item_count = cnt;
+ data->subitem_box = box;
+
+ elm_object_part_content_set(data->base, MAIN_VIEW_SUBITEM_SWALLOW, box);
+
+ utils_set_focus_directions(enabled, eina_array_count(enabled));
+
+ EINA_LIST_FREE(list, item);
+ eina_array_free(enabled);
+
+ return 0;
+}
+
+/**
+* This function will be invoked when the main item is clicked.
+*
+* @param[in]: data : the user data.
+* @param[in]: mainbtn : the main item which the clicked event is occurred.
+*
+* @return: void.
+*/
+static void _move_from_main_item_to_subitem(struct _view_data *data,
+ Evas_Object *mainbtn)
+{
+ Evas_Object *btn, *pb, *icon;
+ int i;
+
+ if (!data || !mainbtn)
+ return;
+
+ data->focus_status = FOCUS_SUB_ITEM;
+
+ for (i = 0; i < data->sub_item_count; i++) {
+ btn = eina_array_data_get(data->sub_item_btn, i);
+ if (!btn) {
+ _ERR("Get subitem btn failed\n");
+ data->focus_status = FOCUS_MAIN_ITEM;
+ return;
+ }
+
+ if (elm_object_disabled_get(btn) != EINA_TRUE)
+ break;
+ }
+
+ if (i >= data->sub_item_count) {
+ data->focus_status = FOCUS_MAIN_ITEM;
+ return;
+ }
+
+ pb = evas_object_data_get(btn, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb, SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
+
+ elm_object_focus_set(btn, EINA_TRUE);
+
+ data->focused_main_item_btn = mainbtn;
+ elm_object_signal_emit(mainbtn, MAINICONBTN_FOCUSED_ON_SUBITEM,
+ MAINICONBTN_MAIN_ITEM_SOURCE);
+
+ icon = elm_object_part_content_get(mainbtn, MAINICONBTN_ICON_SWALLOW);
+ if (icon)
+ elm_object_signal_emit(icon, MAIN_BTN_HIGHLIGHT, MAIN_BTN);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling key press event.
+*
+* @param[in]: data : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the key press event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _main_setting_key_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _view_data *priv;
+ Evas_Object *next, *icon;
+ const char *name;
+
+ if (!data || !ei || !obj)
+ return;
+
+ ev = ei;
+ if (!ev->keyname)
+ return;
+
+ priv = data;
+
+ if (!strcmp(ev->keyname, KEY_DOWN)) {
+ icon = elm_object_part_content_get(obj,
+ MAINICONBTN_ICON_SWALLOW);
+ if (!icon) {
+ _ERR("part %s content get failed.",
+ MAINICONBTN_ICON_SWALLOW);
+ return;
+ }
+
+ elm_object_signal_emit(icon, MAIN_BTN_UNFOCUSED, MAIN_BTN);
+
+ next = elm_object_focus_next_object_get(obj, ELM_FOCUS_DOWN);
+ if (!next) {
+ _ERR("next object get failed.");
+ return;
+ }
+
+ priv->focused_main_item_btn = next;
+
+ icon = elm_object_part_content_get(next,
+ MAINICONBTN_ICON_SWALLOW);
+ if (!icon) {
+ _ERR("part %s content get failed.",
+ MAINICONBTN_ICON_SWALLOW);
+ return;
+ }
+
+ elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
+
+ _release_subitems(priv);
+
+ name = evas_object_data_get(next, SETTING_ID);
+ if (name)
+ _draw_subitems(priv, name);
+ } else if (!strcmp(ev->keyname, KEY_UP)) {
+ icon = elm_object_part_content_get(obj,
+ MAINICONBTN_ICON_SWALLOW);
+ if (!icon) {
+ _ERR("part %s content get failed.",
+ MAINICONBTN_ICON_SWALLOW);
+ return;
+ }
+
+ elm_object_signal_emit(icon, MAIN_BTN_UNFOCUSED, MAIN_BTN);
+
+ next = elm_object_focus_next_object_get(obj, ELM_FOCUS_UP);
+ if (!next) {
+ _ERR("next object get failed.");
+ return;
+ }
+
+ priv->focused_main_item_btn = next;
+
+ icon = elm_object_part_content_get(next,
+ MAINICONBTN_ICON_SWALLOW);
+ if (!icon) {
+ _ERR("part %s content get failed.",
+ MAINICONBTN_ICON_SWALLOW);
+ return;
+ }
+
+ elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
+
+ _release_subitems(priv);
+
+ name = evas_object_data_get(next, SETTING_ID);
+ if (name)
+ _draw_subitems(priv, name);
+ } else if (!strcmp(ev->keyname, KEY_RIGHT)) {
+ _move_from_main_item_to_subitem(priv, obj);
+ } else if (!strcmp(ev->keyname, KEY_EXIT) ||
+ !strcmp(ev->keyname, KEY_BACK)) {
+ app_efl_exit();
+ }
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse in event.
+*
+* @param[in]: data : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse in event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _mainitem_btn_mouse_in_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ struct _view_data *priv;
+ const char *name;
+ Evas_Object *icon;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->focus_status == FOCUS_SUB_ITEM)
+ _move_from_subitem_to_main_item(priv,
+ priv->focused_sub_item_btn);
+
+ icon = elm_object_part_content_get(priv->focused_main_item_btn,
+ MAINICONBTN_ICON_SWALLOW);
+ if (icon)
+ elm_object_signal_emit(icon, MAIN_BTN_UNFOCUSED, MAIN_BTN);
+
+ icon = elm_object_part_content_get(obj, MAINICONBTN_ICON_SWALLOW);
+ if (icon)
+ elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
+
+ _release_subitems(priv);
+
+ name = evas_object_data_get(obj, SETTING_ID);
+ if (name)
+ _draw_subitems(priv, name);
+
+ elm_object_focus_set(obj, EINA_TRUE);
+ priv->focused_main_item_btn = obj;
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse out event.
+*
+* @param[in]: data : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse out event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _mainitem_btn_mouse_out_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ /* TODO: Add necessary operations if needed. */
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: data : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ev : event info.
+*
+* @return: void.
+*/
+static void _mainitem_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _view_data *priv;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+ _move_from_main_item_to_subitem(priv, obj);
+}
+
+/**
+* Create main items of settings.
+*
+* @param[in]: data : the user data.
+* @param[in]: list : the eina list containing data of main items.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _add_icon_btns(struct _view_data *data, Eina_List *list)
+{
+ Evas_Object *btn, *icon;
+ const char *id, *name;
+ struct settingitem *item;
+ char buf[BUF_SIZE];
+ int i;
+
+ if (!data || !list || !data->base) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ for (i = 0; i < data->main_item_count; i++) {
+ btn = utils_add_btn(data->base, MAINICONBTN_STYLE,
+ NULL, EINA_FALSE);
+ if (!btn) {
+ _ERR("Add btn failed\n");
+ return -1;
+ }
+
+ item = eina_list_nth(list, i);
+ if (item) {
+ name = settingitem_get_display_name(item);
+ elm_object_text_set(btn,
+ utils_get_translation_str(name));
+ } else {
+ elm_object_text_set(btn, ICON_BUTTON_NO_DISP_NAME);
+ }
+
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _main_setting_key_pressed_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN,
+ _mainitem_btn_mouse_in_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT,
+ _mainitem_btn_mouse_out_cb, data);
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _mainitem_btn_clicked_cb, data);
+
+ icon = elm_layout_add(btn);
+ if (icon) {
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("get item name failed.");
+ evas_object_del(btn);
+ return -1;
+ }
+
+ snprintf(buf, sizeof(buf), "%s/%s.edj",
+ EDJEDIR, PACKAGE);
+ elm_layout_file_set(icon, buf, id);
+ elm_object_part_content_set(btn,
+ MAINICONBTN_ICON_SWALLOW, icon);
+ elm_object_signal_emit(icon, MAIN_BTN_NORMAL, MAIN_BTN);
+ eina_array_push(data->main_icon_base, icon);
+ }
+
+ elm_box_pack_end(data->mainitem_box, btn);
+ evas_object_data_set(btn, SETTING_ID, settingitem_get_id(item));
+ eina_array_push(data->main_item_btn, btn);
+ }
+
+ return 0;
+}
+
+/**
+* Create all the UI components of settings.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - success, -1 - fail.
+*/
+static int _draw_main_items(struct _view_data *data)
+{
+ Evas_Object *box, *btn, *tmp, *icon;
+ Eina_Array *btns, *icons;
+ Eina_List *list;
+ int cnt, i;
+ Eina_Array_Iterator a;
+
+ if (!data || !data->base)
+ return -1;
+
+ box = utils_add_box(data->base);
+ if (!box)
+ return -1;
+
+ data->mainitem_box = box;
+
+ cnt = 0;
+ list = viewdata_get_childitems_list(data->main_setting_view);
+ if (list)
+ cnt = eina_list_count(list);
+
+ if (cnt == 0) {
+ _ERR("There is no child item");
+ evas_object_del(box);
+ viewdata_free_childitems_list(list);
+ return -1;
+ }
+
+ data->main_item_count = cnt;
+
+ btns = eina_array_new(1);
+ if (!btns) {
+ _ERR("Create Eina Array failed\n");
+ evas_object_del(box);
+ viewdata_free_childitems_list(list);
+ return -1;
+ }
+
+ data->main_item_btn = btns;
+
+ icons = eina_array_new(1);
+ if (!icons) {
+ _ERR("new array for icon base failed.");
+ evas_object_del(box);
+ viewdata_free_childitems_list(list);
+ eina_array_free(btns);
+ return -1;
+ }
+
+ data->main_icon_base = icons;
+
+ if (_add_icon_btns(data, list) == -1) {
+ _ERR("Fail to add icon buttons");
+ goto error;
+ }
+
+ elm_object_part_content_set(data->base, MAIN_VIEW_ICON_SWALLOW, box);
+
+ if (!data->item_path) {
+ btn = eina_array_data_get(btns, 0);
+ if (!btn)
+ goto error;
+
+ if (_draw_subitems(data,
+ evas_object_data_get(btn, SETTING_ID)) == -1)
+ goto error;
+
+ icon = eina_array_data_get(icons, 0);
+ if (!icon) {
+ if (data->subsetting_view)
+ viewdata_release(data->subsetting_view);
+ goto error;
+ }
+
+ elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
+
+ data->focus_status = FOCUS_MAIN_ITEM;
+
+ elm_object_focus_set(btn, EINA_TRUE);
+ data->focused_main_item_btn = btn;
+ }
+
+ utils_set_focus_directions(data->main_item_btn, cnt);
+
+ viewdata_free_childitems_list(list);
+
+ return 0;
+
+error:
+ evas_object_del(box);
+ viewdata_free_childitems_list(list);
+ EINA_ARRAY_ITER_NEXT(btns, i, tmp, a)
+ evas_object_del(tmp);
+ eina_array_free(btns);
+
+ EINA_ARRAY_ITER_NEXT(icons, i, tmp, a)
+ evas_object_del(tmp);
+ eina_array_free(icons);
+
+ return -1;
+}
+
+/**
+* Edje_Signal_Cb type callback for handling signal.
+*
+* @param[in]: data : the user data.
+* @param[in]: obj : the object signal occurred on.
+* @param[in]: emission : the signal name.
+* @param[in]: source : the source name.
+*
+* @return: void.
+*/
+static void _view_anim_finish(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ struct _view_data *priv;
+
+ if (!data)
+ return;
+
+ priv = data;
+
+ _draw_main_items(priv);
+}
+
+/**
+* This function moves focus from main item to subitem and
+* does corresponding operations.
+*
+* @param[in]: data : the user data.
+*
+* @return: void.
+*/
+void _move_focus_on_subitem(struct _view_data *data)
+{
+ const char *path, *id;
+ unsigned int i;
+ Evas_Object *icon, *subbtn, *pb;
+ Eina_Array *subbtns;
+ Eina_Array_Iterator a;
+ struct settingitem *item;
+
+ if (!data)
+ return;
+
+ subbtns = data->sub_item_btn;
+
+ path = eina_array_data_get(data->item_path, 0);
+
+ EINA_ARRAY_ITER_NEXT(subbtns, i, subbtn, a) {
+ item = evas_object_data_get(subbtn, SUBITEM_DATA_ID);
+ id = settingitem_get_id(item);
+ if (!id)
+ return;
+
+ if (!strncmp(id, path, ARRAY_SIZE)) {
+ icon = elm_object_part_content_get(
+ data->focused_main_item_btn,
+ MAINICONBTN_ICON_SWALLOW);
+ if (icon)
+ elm_object_signal_emit(icon,
+ MAIN_BTN_HIGHLIGHT, MAIN_BTN);
+
+ data->focus_status = FOCUS_SUB_ITEM;
+ data->focused_sub_item_btn = subbtn;
+
+ elm_object_focus_set(subbtn, EINA_TRUE);
+ elm_object_signal_emit(data->focused_main_item_btn,
+ MAINICONBTN_FOCUSED_ON_SUBITEM,
+ MAINICONBTN_MAIN_ITEM_SOURCE);
+
+ pb = evas_object_data_get(subbtn, PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_FOCUSED,
+ SRC_PB_PROG);
+ }
+ }
+}
+
+/**
+* Change the language of names of buttons.
+*
+* @param[in]: list : eina list of item data.
+* @param[in]: btns : eina array containing buttons.
+* @param[in]: cnt : number of buttons.
+*
+* @return: void.
+*/
+static void _change_buttons_name(Eina_List *list,
+ Eina_Array *btns, int cnt)
+{
+ struct settingitem *item;
+ Evas_Object *btn;
+ const char *name;
+ int i;
+
+ if (!list || !btns || !cnt) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ for (i = 0; i < cnt; i++) {
+ item = eina_list_nth(list, i);
+ btn = eina_array_data_get(btns, i);
+ if (!item || !btn)
+ return;
+
+ name = settingitem_get_display_name(item);
+ if (name)
+ elm_object_text_set(btn,
+ utils_get_translation_str(name));
+ }
+}
+
+/**
+* Create all UI components of settings view.
+*
+* @param[in]: mgr : the view manager of settings.
+* @param[in]: view : the view data.
+* @param[in]: prev : the user data.
+*
+* @return: the base layout of settings or null if error occurred.
+*/
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ Evas_Object *base, *win;
+ struct _view_data *data;
+
+ if (!mgr || !view) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ win = settingmgr_get_win(mgr);
+ if (!win) {
+ _ERR("Fail to get win");
+ return NULL;
+ }
+
+ data = calloc(1, sizeof(*data));
+ if (!data)
+ return NULL;
+
+ base = elm_layout_add(win);
+ if (!base) {
+ free(data);
+ return NULL;
+ }
+
+ if (!elm_layout_file_set(base, EDJ_FILE, MAIN_VIEW_PAGE))
+ goto error;
+
+ data->mgr = mgr;
+ data->win = win;
+ data->base = base;
+ data->main_setting_view = view;
+ data->subsetting_view = NULL;
+ data->item_path = settingmgr_get_item_path(mgr);
+
+ evas_object_data_set(base, DATA_ID, data);
+
+ elm_object_signal_callback_add(base, MAIN_VIEW_ANIM_FINISH,
+ MAIN_VIEW_SOURCE, _view_anim_finish, data);
+
+ if (!data->item_path)
+ elm_object_signal_emit(data->base, MAIN_VIEW_LOAD, "");
+ else
+ _view_anim_finish(data, NULL, NULL, NULL);
+
+ return base;
+
+error:
+ evas_object_del(base);
+ free(data);
+
+ return NULL;
+}
+
+/**
+* Show the view of settings.
+*
+* @param[in]: base : the base layout of settings.
+*
+* @return: void.
+*/
+static void _show(Evas_Object *base)
+{
+ struct _view_data *data;
+ unsigned int cnt, i;
+ const char *name, *path;
+ Evas_Object *btn, *icon;
+ Eina_Array *btns;
+ Eina_Array_Iterator a;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("evas object data get failed. id: %s", DATA_ID);
+ return;
+ }
+
+ path = NULL;
+
+ if (data->item_path) {
+ btns = data->main_item_btn;
+
+ cnt = eina_array_count(data->item_path);
+ if (cnt > 1) {
+ path = eina_array_data_get(data->item_path, cnt - 2);
+ if (!path)
+ return;
+ }
+
+ EINA_ARRAY_ITER_NEXT(btns, i, btn, a) {
+ name = evas_object_data_get(btn, SETTING_ID);
+ if (!name)
+ return;
+
+ if (!strncmp(name, path, ARRAY_SIZE)) {
+ _draw_subitems(data, name);
+
+ icon = eina_array_data_get(
+ data->main_icon_base, i);
+ if (icon)
+ elm_object_signal_emit(icon,
+ MAIN_BTN_FOCUSED,
+ MAIN_BTN);
+
+ elm_object_focus_set(btn, EINA_TRUE);
+
+ data->focus_status = FOCUS_MAIN_ITEM;
+ data->focused_main_item_btn = btn;
+
+ _move_focus_on_subitem(data);
+ }
+ }
+ }
+
+ evas_object_show(base);
+}
+
+/**
+* Hide the view of settings.
+*
+* @param[in]: base : the base layout of settings.
+*
+* @return: void.
+*/
+static void _hide(Evas_Object *base)
+{
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ evas_object_hide(base);
+}
+
+/**
+* Refresh the view of settings.
+*
+* @param[in]: base : the base layout of settings.
+*
+* @return: void.
+*/
+static void _refresh(Evas_Object *base)
+{
+ struct _view_data *data;
+ char *sld;
+ const char *id;
+ int i;
+ struct settingitem *item;
+ Eina_Array_Iterator a;
+ Evas_Object *btn, *pb, *icon;
+
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data)
+ return;
+
+ sld = evas_object_data_del(base, SELECTED_ITEM_ID);
+ if (sld) {
+ EINA_ARRAY_ITER_NEXT(data->sub_item_btn, i, btn, a) {
+ item = evas_object_data_get(btn, SUBITEM_DATA_ID);
+ id = settingitem_get_id(item);
+ if (!id)
+ continue;
+
+ if (item && !strncmp(sld, id, strlen(sld))) {
+ data->focused_sub_item_btn = btn;
+ break;
+ }
+ }
+ }
+
+ if (data->focus_status == FOCUS_SUB_ITEM) {
+ elm_object_focus_set(data->focused_sub_item_btn, EINA_TRUE);
+
+ elm_object_signal_emit(data->focused_main_item_btn,
+ MAINICONBTN_FOCUSED_ON_SUBITEM,
+ MAINICONBTN_MAIN_ITEM_SOURCE);
+
+ icon = elm_object_part_content_get(data->focused_main_item_btn,
+ MAINICONBTN_ICON_SWALLOW);
+ if (icon)
+ elm_object_signal_emit(icon,
+ MAIN_BTN_HIGHLIGHT, MAIN_BTN);
+
+ if (_refresh_subitems(data) == -1)
+ _ERR("Refresh subitems failed");
+
+ pb = evas_object_data_get(data->focused_sub_item_btn,
+ PROGRESS_BAR_DATA);
+ if (pb)
+ elm_object_signal_emit(pb,
+ SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
+ }
+
+ if (settingmgr_get_timeout_freeze_state(data->mgr) == EINA_TRUE)
+ settingmgr_thaw_timeout(data->mgr);
+}
+
+/**
+* Destroy the view of settings.
+*
+* @param[in]: base : the base layout of settings.
+*
+* @return: void.
+*/
+static void _destroy(Evas_Object *base)
+{
+ struct _view_data *data;
+ Eina_Array_Iterator a;
+ Evas_Object *tmp;
+ unsigned int i;
+
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATA_ID);
+
+ if (data->sub_item_btn) {
+ EINA_ARRAY_ITER_NEXT(data->sub_item_btn, i, tmp, a)
+ evas_object_del(tmp);
+ eina_array_free(data->sub_item_btn);
+ }
+
+ if (data->main_item_btn) {
+ EINA_ARRAY_ITER_NEXT(data->main_item_btn, i, tmp, a)
+ evas_object_del(tmp);
+ eina_array_free(data->main_item_btn);
+ }
+
+ if (data->main_icon_base) {
+ EINA_ARRAY_ITER_NEXT(data->main_icon_base, i, tmp, a)
+ evas_object_del(tmp);
+ eina_array_free(data->main_icon_base);
+ }
+
+ if (data->main_setting_view)
+ viewdata_release(data->main_setting_view);
+
+ if (data->subsetting_view)
+ viewdata_release(data->subsetting_view);
+
+ free(data);
+ evas_object_del(base);
+}
+
+/**
+* Change the language of view of settings.
+*
+* @param[in]: base : the base layout of settings.
+*
+* @return: void.
+*/
+static void _lang_changed(Evas_Object *base)
+{
+ struct _view_data *data;
+ Eina_List *l;
+ int cnt;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data)
+ return;
+
+ cnt = 0;
+ l = viewdata_get_childitems_list(data->main_setting_view);
+ if (l)
+ cnt = eina_list_count(l);
+
+ _change_buttons_name(l, data->main_item_btn, cnt);
+
+ cnt = 0;
+ l = viewdata_get_childitems_list(data->subsetting_view);
+ if (l)
+ cnt = eina_list_count(l);
+
+ _change_buttons_name(l, data->sub_item_btn, cnt);
+}
+
+/**
+* Froze the view of settings.
+*
+* @param[in]: base : the base layout of settings.
+*
+* @return: void.
+*/
+static void _frozen(Evas_Object *base)
+{
+ struct _view_data *data;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Fail to get mainview data");
+ return;
+ }
+
+ evas_object_freeze_events_set(data->mainitem_box, EINA_TRUE);
+ evas_object_freeze_events_set(data->subitem_box, EINA_TRUE);
+}
+
+/**
+* Activate the view of settings.
+*
+* @param[in]: base : the base layout of settings.
+*
+* @return: void.
+*/
+static void _active(Evas_Object *base)
+{
+ struct _view_data *data;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Fail to get mainview data");
+ return;
+ }
+
+ evas_object_freeze_events_set(data->mainitem_box, EINA_FALSE);
+ evas_object_freeze_events_set(data->subitem_box, EINA_FALSE);
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_MAIN_VIEW,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .refresh = _refresh,
+ .frozen = _frozen,
+ .active = _active,
+ .lang_changed = _lang_changed,
+ .hide_view = 0
+};
+
+/**
+* Return view class of settings view.
+*
+* @param: void.
+*
+* @return: the view class of settings view.
+*/
+struct setting_class *view_maincatalog_get_vclass(void)
+{
+ return &_vclass;
+}
+++ /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 <AppCommon.h>
-#include "common_defs.h"
-#include "stdbool.h"
-#include "settingviewmgr.h"
-#include "utils.h"
-#include "view_maincatalog.h"
-#include "data_wrapper.h"
-#include "settings_provider.h"
-#include "settingviewmgr.h"
-
-#define DATA_ID "main_setting_data"
-#define SUBITEM_DATA_ID "subitem_data_id"
-#define SYSTEM_CLOCK_DATA "system_clock_data"
-#define ICON_PART "iconpart"
-#define PROGRESS_BAR_DATA "progressbar"
-
-#define SETTING_ID "setting_id"
-#define E_CREATE_ITEMS 0
-
-#define MAX_PROGRESS_VALUE 100.0
-#define MIN_PROGRESS_VALUE 0.0
-#define ICON_BUTTON_NO_DISP_NAME "No Display Name"
-#define CHANGE_PASSCODE_NAME "change-passcode"
-#define PASSCODE_MASK "****"
-#define DISABLED "disabled"
-#define ENABLED "enabled"
-#define SIG_CLICKED "clicked"
-
-enum KeyID {
- MAIN_ITEM_BTNS,
- SUB_ITEM_BTNS
-};
-
-enum focused_state {
- FOCUS_MAIN_ITEM = 1,
- FOCUS_SUB_ITEM
-};
-
-struct SMainCatalog {
- Evas_Object *win;
- Evas_Object *base;
- Eina_Array *sub_item_btn;
- Eina_Array *main_item_btn;
- Eina_Array *main_icon_base;
- Eina_Array *item_path;
- Evas_Object *focused_sub_item_btn;
- Evas_Object *focused_main_item_btn;
- Evas_Object *subitem_box;
- Evas_Object *mainitem_box;
-
- int focus_status;
- int main_item_count;
- int sub_item_count;
-
- CSettingMgr *mgr;
- struct settingview_data *main_setting_view;
- struct settingview_data *subsetting_view;
-
- SMainCatalog() {
- memset(this, 0, sizeof(*this));
- }
-};
-
-/**
-* This function will be invoked when focus moves from subitem to main item.
-*
-* @param[in]: data : the user data.
-* @param[in]: btn : subitem which focus is on.
-*
-* @return: void.
-*/
-void CMainCatalogView::m_MoveFromSubitemToMainitem(Evas_Object *btn)
-{
- if(!btn) return;
- m->focus_status = FOCUS_MAIN_ITEM;
- m->focused_sub_item_btn = btn;
-
- elm_object_focus_set(m->focused_main_item_btn, EINA_TRUE);
-}
-
-
-static void _get_geometry_data(Evas_Object *obj,
- struct obj_geometry_data *param)
-{
- int x, y, w, h;
-
- if (!param || !obj) {
- _ERR("Invalid argument");
- return;
- }
-
- x = y = w = h = 0;
-
- evas_object_geometry_get(obj, &x, &y, &w, &h);
-
- param->x = x;
- param->y = y;
- param->width = w;
- param->height = h;
-}
-
-
-void CMainCatalogView::m_SubItemClicked(Evas_Object *obj)
-{
- const char *style;
- struct settingitem *item;
-
- if (m->focus_status != FOCUS_SUB_ITEM)
- return;
-
- item =(struct settingitem *) evas_object_data_get(obj, SUBITEM_DATA_ID);
- if (!item) {
- _ERR("Get sub item failed");
- return;
- }
-
- style = settingitem_get_settingui_style(item);
- if (!style) {
- _ERR("setting-ui style is null.");
- return;
- }
-
- const char *id;
- id = settingitem_get_id(item);
- if (!id) {
- _ERR("Fail to get item id");
- return ;
- }
-
- if (!strncmp(style, STYLE_UIGADGET, strlen(style))) {
-
- struct evas_obj_data param;
- param.subitem_box = m->subitem_box;
- param.display_name = settingitem_get_display_name(item);
- param.cur_btn = obj;
-
- if (!m->mgr->ViewPush(id, (void *)¶m))
- _ERR("Fail to push ug view");
-
- } else if (!strncmp(style, STYLE_CTXPOPUP, strlen(style))) {
-
- struct obj_geometry_data ogd;
- _get_geometry_data(obj, &ogd);
-
- if (!m->mgr->ViewPush(id, (void *)&ogd))
- _ERR("Fail to push sublist");
- else
- elm_object_signal_emit(obj, SUBITEMBTN_BUTTON_CLICKED, SUBITEMBTN_BUTTON_SOURCE);
-
- } else if (!strncmp(style, STYLE_BOTTOM_CTXPOPUP, strlen(style))) {
-
- if (!m->mgr->ViewPush(id, NULL))
- _ERR("Fail to push view");
-
- } else if (!strncmp(style, STYLE_BOTTOMSLIDER, strlen(style)) || !strncmp(style, STYLE_BOTTOM2WAYSLIDER, strlen(style))) {
-
- Eina_List *list;
- Evas_Object *pb;
- pb = (Evas_Object *)evas_object_data_get(obj, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
- list = settingitem_get_slider_group_list(viewdata_get_parentitem(m->subsetting_view), m->mgr->GetData(), id);
- if (!m->mgr->ViewPush(id, list))
- _ERR("Fail to push bottom slider view");
-
- } else if (!strncmp(style, STYLE_PASSCODE_POPUP, strlen(style))) {
-
- if (!m->mgr->ViewPush(id, NULL))
- _ERR("Fail to push passcode view");
-
- } else if (!strncmp(style, STYLE_DEVICE_MANAGER, strlen(style))) {
-
- struct evas_obj_data param;
- param.display_name = settingitem_get_display_name(item);
- param.subitem_box = m->subitem_box;
-
- if (!m->mgr->ViewPush(id, ¶m))
- _ERR("Fail to push device_manager view");
-
- } else if (!strncmp(style, STYLE_RESET_POPUP, strlen(style))) {
-
- if (!m->mgr->ViewPush(id, NULL))
- _ERR("Fail to push reset_popup view");
-
- } else if (!strncmp(style, STYLE_UPGRADE_POPUP, strlen(style))) {
-
- if (!m->mgr->ViewPush(id, NULL))
- _ERR("Fail to push reset_popup view");
-
- } else if (!strncmp(style, STYLE_CLOCK_CTXPOPUP, strlen(style))) {
-
- struct evas_obj_data param;
- struct obj_geometry_data ogd;
-
- _get_geometry_data(obj, &ogd);
-
- param.display_name = settingitem_get_display_name(item);
- param.subitem_box = m->subitem_box;
- param.cur_btn = obj;
-
- evas_object_data_set(obj, SYSTEM_CLOCK_DATA, (void *)&ogd);
-
- if (!m->mgr->ViewPush(id, ¶m))
- _ERR("Fail to push view");
- else
- elm_object_signal_emit(obj, SUBITEMBTN_BUTTON_CLICKED, SUBITEMBTN_BUTTON_SOURCE);
-
- } else if (!strncmp(style, STYLE_NEED_PASSCODE, strlen(style))) {
-
- struct obj_geometry_data ogd;
- _get_geometry_data(obj, &ogd);
-
- if (!m->mgr->ViewPush(id, &ogd))
- _ERR("Fail to push view");
- else
- elm_object_signal_emit(obj, SUBITEMBTN_BUTTON_CLICKED, SUBITEMBTN_BUTTON_SOURCE);
-
- }
-
- m->focused_sub_item_btn = obj;
-}
-
-static char *_settingitems_get_value(struct settingitem *item)
-{
- char *result;
- const char *name, *style;
-
- if (!item) {
- _ERR("Invalid argument");
- return NULL;
- }
-
- result = NULL;
-
- name = settingitem_get_id(item);
- if (name && !strncmp(name, CHANGE_PASSCODE_NAME, strlen(name))) {
- result = strdup(PASSCODE_MASK);
- return result;
- }
-
- style = settingitem_get_settingui_style(item);
- if (!style) {
- _ERR("Fail to get setting ui style");
- return NULL;
- }
-
- if (!strncmp(style, STYLE_UIGADGET, strlen(style)))
- return provider_get_list_value(item);
- else
- return provider_get_selected_display_name(item);
-}
-
-/**
-* Get percentage value of progress from item data.
-*
-* @param[in]: item : item data read from json file.
-*
-* @return: the percentage value or -1.0 if error occurred.
-*/
-static double _get_progress_percentage(struct settingitem *item)
-{
- struct slideritem *sitem;
- double val, persent;
-
- if (!item) {
- _ERR("Invalid argument");
- return -1.0;
- }
-
- sitem = settingitem_get_data_slideritem(item);
- if (!sitem) {
- _ERR("Get slider item failed");
- return -1.0;
- }
-
- val = provider_get_slider_value(item);
- persent = slideritem_find_slider_value(val, sitem);
-
- return persent;
-}
-
-/**
-* Get displaying value of item.
-*
-* @param[in]: item : item data read from json file.
-* @param[in]: value : the percentage value.
-*
-* @return: the display value.
-*/
-static double _get_display_value(struct settingitem *item, double value)
-{
- struct slideritem *sitem;
- double disp;
-
- if (!item) {
- _ERR("Invalid argument");
- return -1.0;
- }
-
- sitem = settingitem_get_data_slideritem(item);
- if (!sitem) {
- _ERR("Get slider item failed");
- return -1.0;
- }
-
- disp = slideritem_find_slider_display_value(value, sitem);
-
- return disp;
-}
-
-/**
-* Create slider of subitem.
-*
-* @param[in]: item : the item data read from json file.
-* @param[in]: base : the base layout of subitems.
-* @param[in]: btn : the subitem the slider will be created on.
-*
-* @return: void.
-*/
-static void _set_subitem_btn_slider(struct settingitem *item,
- Evas_Object *base, Evas_Object *btn)
-{
- Evas_Object *pb;
- double val, percent;
- char buf[BUF_SIZE];
-
- if (!item || !base || !btn) {
- _ERR("Invalid argument");
- return;
- }
-
- elm_object_style_set(btn, SUBITEMBTN_TITLE_SLIDER_VALUE);
-
- pb = elm_progressbar_add(base);
- if (!pb) {
- _ERR("Add progress bar failed.");
- return;
- }
-
- elm_object_style_set(pb, SUBITEMBTN_TITILE_SLIDER);
-
- percent = _get_progress_percentage(item);
- val = _get_display_value(item, percent);
- elm_progressbar_value_set(pb, percent);
-
- snprintf(buf, sizeof(buf), "%d", (int)val);
- elm_object_part_text_set(btn, SUBITEMBTN_VALUE, buf);
- elm_object_part_content_set(btn, SUBITEMBTN_SLIDER_SWALLOW, pb);
-
- evas_object_data_set(btn, PROGRESS_BAR_DATA, pb);
-}
-
-/**
-* Get tint g-value.
-*
-* @param[in]: item : the item data read from json file.
-* @param[in]: tint_r : the tint r-value.
-*
-* @return: the tint g-value.
-*/
-static double _get_disp_tint_g_val(struct settingitem *item, double tint_r)
-{
- const char *strval;
- struct slideritem *sitem;
- double val;
-
- if (!item) {
- _ERR("Invalid argument");
- return -1.0;
- }
-
- sitem = settingitem_get_data_slideritem(item);
- if (!sitem) {
- _ERR("Get slider item failed");
- return -1.0;
- }
-
- strval = slideritem_get_max_display_value(sitem);
- if (strval)
- val = atof(strval);
- else
- val = 100;
-
- return val - tint_r;
-}
-
-/**
-* Create two way slider.
-*
-* @param[in]: item : the item data read from json file.
-* @param[in]: base : the base layout of subitems.
-* @param[in]: btn : the subitem which the two way slider will be created on.
-*
-* @return: void.
-*/
-static void _set_subitem_btn_value_slider(struct settingitem *item,
- Evas_Object *base, Evas_Object *btn)
-{
- Evas_Object *pb;
- double tint_r, tint_g, percent;
- char buf[BUF_SIZE];
-
- if (!item || !base || !btn) {
- _ERR("Invalid argument");
- return;
- }
-
- elm_object_style_set(btn, SUBITEMBTN_TITLE_SLIDER_VALUE);
-
- pb = elm_progressbar_add(base);
- if (!pb) {
- _ERR("Add progress bar failed.");
- return;
- }
-
- elm_object_style_set(pb, SUBITEMBTN_TITILE_SLIDER);
- percent = _get_progress_percentage(item);
- elm_progressbar_value_set(pb, percent);
-
- tint_r = _get_display_value(item, percent);
- tint_g = _get_disp_tint_g_val(item, tint_r);
-
- snprintf(buf, sizeof(buf), "R%d", (int)tint_r);
- elm_object_part_text_set(btn, SUBITEMBTN_VALUE,
- utils_get_translation_str(buf));
- snprintf(buf, sizeof(buf), "G%d", (int)tint_g);
- elm_object_part_text_set(btn, SUBITEMBTN_G_VALUE,
- utils_get_translation_str(buf));
-
- elm_object_part_content_set(btn, SUBITEMBTN_SLIDER_SWALLOW, pb);
-
- evas_object_data_set(btn, PROGRESS_BAR_DATA, pb);
-}
-
-/**
-* Create style for subitem.
-*
-* @param[in]: base : the base layout of subitems.
-* @param[in]: obj : the subitem which the style will be created on.
-* @param[in]: style : the style read from json file.
-* @param[in]: item : the item data read from json file.
-*
-* @return: void.
-*/
-static void _draw_subitem_with_style(Evas_Object *base, Evas_Object *obj,
- const char *style, struct settingitem *item)
-{
- char *val;
-
- if (!style || !base || !obj || !item)
- return;
-
- if (!strncmp(style, STYLE_SUBBUTTON_TITLE_VALUE, strlen(style))) {
- val = _settingitems_get_value(item);
- elm_object_part_text_set(obj, SUBITEMBTN_VALUE,
- utils_get_translation_str(val));
- free(val);
- } else if (!strncmp(style, STYLE_SUBBUTTON_TITLE_ICON, strlen(style))) {
- elm_object_style_set(obj, SUBITEMBTN_TITLE_ICON);
- } else if (!strncmp(style, STYLE_SUBBUTTON_TITLE_SLIDER_VALUE,
- strlen(style))) {
- _set_subitem_btn_slider(item, base, obj);
- } else if (!strncmp(style, STYLE_SUBBUTTON_TITLE_2WAYSLIDER_VALUE,
- strlen(style))) {
- _set_subitem_btn_value_slider(item, base, obj);
- }
-}
-
-/**
-* Release resources of subitems.
-*
-* @param[in]: data : the user data.
-*
-* @return: void.
-*/
-static void _release_subitems(SMainCatalog *data)
-{
- Evas_Object *btn;
- void* obj;
- Eina_Array_Iterator a;
- unsigned int i;
-
- if (!data) {
- _ERR("Invalid argument");
- return;
- }
-
- if (data->sub_item_btn) {
- EINA_ARRAY_ITER_NEXT(data->sub_item_btn, i, obj, a)
- {
- btn = (Evas_Object *) obj;
- evas_object_del(btn);
- }
- eina_array_free(data->sub_item_btn);
- }
-
- if (data->subsetting_view)
- viewdata_release(data->subsetting_view);
-
- if (data->subitem_box)
- evas_object_del(data->subitem_box);
-}
-
-/**
-* Refresh subitems when subitems are changed.
-*
-* @param[in]: data : the user data.
-*
-* @return: 0 - success, -1 - fail.
-*/
-static int _refresh_subitems(SMainCatalog *data)
-{
- Evas_Object *btn;
- void* obj;
- Eina_Array_Iterator a;
- unsigned int i;
- struct settingitem *item;
- const char *style;
-
- if (!data) {
- _ERR("Invalid argument");
- return -1;
- }
-
- EINA_ARRAY_ITER_NEXT(data->sub_item_btn, i, obj, a) {
- btn = (Evas_Object *) obj;
- item = (struct settingitem *)evas_object_data_get(btn, SUBITEM_DATA_ID);
- style = settingitem_get_style(item);
- if (style)
- _draw_subitem_with_style(data->base, btn, style, item);
- }
-
- return 0;
-}
-
-static void _subitem_btn_mouse_in_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
-{
- SMainCatalog *priv;
- Evas_Object *icon, *pb;
-
- if (!obj || !data)
- return;
-
- priv = (SMainCatalog *)data;
-
- elm_object_focus_set(obj, EINA_TRUE);
-
- if (priv->focus_status == FOCUS_MAIN_ITEM) {
- priv->focus_status = FOCUS_SUB_ITEM;
- elm_object_signal_emit(priv->focused_main_item_btn,
- MAINICONBTN_FOCUSED_ON_SUBITEM,
- MAINICONBTN_MAIN_ITEM_SOURCE);
-
- icon = elm_object_part_content_get(priv->focused_main_item_btn,
- MAINICONBTN_ICON_SWALLOW);
- if (icon)
- elm_object_signal_emit(icon,
- MAIN_BTN_HIGHLIGHT, MAIN_BTN);
- }
-
- pb =(Evas_Object *) evas_object_data_get(priv->focused_sub_item_btn,
- PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_UNFOCUSED,
- SRC_PB_PROG);
-
- pb = (Evas_Object *)evas_object_data_get(obj, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
-
- priv->focused_sub_item_btn = obj;
-}
-
-/**
-* Create subitems of settings.
-*
-* @param[in]: data : the user data.
-* @param[in]: name : the name of subitem.
-*
-* @return: 0 - success, -1 - fail.
-*/
-bool CMainCatalogView::m_DrawSubItems(const char *name)
-{
- struct settingview_data *view;
- Eina_List *list, *l;
- void* obj;
-
- Evas_Object *btn, *tmp;
- struct settingitem *item;
- Eina_Array_Iterator a;
- unsigned int i;
- const char *style, *status;
- Eina_Array *enabled;
-
- if (!name) {
- _ERR("Invalid argument");
- return false;
- }
-
- view = m->mgr->GetView(name);
- if (!view) {
- _ERR("get subview failed");
- return false;
- }
-
- list = viewdata_get_childitems_list(view);
- if (!list) {
- _ERR("childitem list is empty!");
- if (view)
- viewdata_release(view);
- return false;
- }
-
- m->sub_item_count = eina_list_count(list);
-
- m->sub_item_btn = eina_array_new(1);
- enabled = eina_array_new(1);
- if (!m->sub_item_btn || !enabled) {
- _ERR("Create Eina Array failed");
- EINA_LIST_FREE(list, obj);
- {
- item = (struct settingitem *) obj;
- free(item);
- }
- if (view)
- viewdata_release(view);
- return false;
- }
-
- m->subitem_box = utils_add_box(m->base);
- if (!m->subitem_box) {
- _ERR("Add m->subitem_box failed");
- EINA_LIST_FREE(list, obj);
- {
- item = (struct settingitem *) obj;
- free(item);
- }
- eina_array_free(m->sub_item_btn);
- if (view)
- viewdata_release(view);
- return false;
- }
-
- EINA_LIST_FOREACH(list, l, obj) {
- item = (struct settingitem *) obj;
- btn = utils_add_btn(m->base, SUBITEMBTN_STYLE, settingitem_get_display_name(item), EINA_FALSE);
- if (!btn) {
- _ERR("Add btn failed");
- evas_object_del(m->subitem_box);
- EINA_LIST_FREE(list, obj);
- {
- item = (struct settingitem *) obj;
- free(item);
- }
- EINA_ARRAY_ITER_NEXT(m->sub_item_btn, i, obj, a)
- {
- tmp = (Evas_Object *) obj;
- evas_object_del(tmp);
- }
- eina_array_free(m->sub_item_btn);
- if (view)
- viewdata_release(view);
- return false;
- }
-
- style = settingitem_get_style(item);
- if (style)
- _draw_subitem_with_style(m->base, btn, style, item);
-
- Connect(btn, SUB_ITEM_BTNS, TYPE_CLICKED | TYPE_KEY_DOWN);
- //evas_object_smart_callback_add(btn, "clicked", _subitem_btn_clicked_cb, data);
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _subitem_key_pressed_cb, data);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN, _subitem_btn_mouse_in_cb, m);
-
- elm_box_pack_end(m->subitem_box, btn);
- eina_array_push(m->sub_item_btn, btn);
-
- evas_object_data_set(btn, SUBITEM_DATA_ID, item);
-
- status = settingitem_get_status(item);
- if (status && !strncmp(status, DISABLED, strlen(status))) {
- elm_object_disabled_set(btn, EINA_TRUE);
- evas_object_freeze_events_set(btn, EINA_TRUE);
- } else {
- eina_array_push(enabled, btn);
- }
- }
-
- m->subsetting_view = view;
-
- elm_object_part_content_set(m->base, MAIN_VIEW_SUBITEM_SWALLOW, m->subitem_box);
- utils_set_focus_directions(enabled, eina_array_count(enabled));
-
- EINA_LIST_FREE(list, obj);
- {
- item = (struct settingitem *) obj;
- free(item);
- }
- eina_array_free(enabled);
-
- return true;
-}
-
-void CMainCatalogView::m_MoveFromMainitemToSubitem(Evas_Object *mainbtn)
-{
- Evas_Object *btn = NULL, *pb, *icon;
- int i;
-
- if (!mainbtn)
- return;
-
- m->focus_status = FOCUS_SUB_ITEM;
-
- for (i = 0; i < m->sub_item_count; i++) {
- btn = (Evas_Object *) eina_array_data_get(m->sub_item_btn, i);
- if (!btn) {
- _ERR("Get subitem btn failed");
- m->focus_status = FOCUS_MAIN_ITEM;
- return;
- }
-
- if (elm_object_disabled_get(btn) != EINA_TRUE)
- break;
- }
-
- if (i >= m->sub_item_count) {
- m->focus_status = FOCUS_MAIN_ITEM;
- return;
- }
-
- pb = (Evas_Object *)evas_object_data_get(btn, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
-
- elm_object_focus_set(btn, EINA_TRUE);
-
- m->focused_main_item_btn = mainbtn;
- elm_object_signal_emit(mainbtn, MAINICONBTN_FOCUSED_ON_SUBITEM, MAINICONBTN_MAIN_ITEM_SOURCE);
-
- icon = elm_object_part_content_get(mainbtn, MAINICONBTN_ICON_SWALLOW);
- if (icon)
- elm_object_signal_emit(icon, MAIN_BTN_HIGHLIGHT, MAIN_BTN);
-}
-
-void CMainCatalogView::sm_CbMainItemBtnMouseIN(void *data, Evas *e, Evas_Object *obj, void *ei)
-{
- CMainCatalogView *instance;
-
- if(!data){_ERR("Invaild Parameter"); return;}
- instance = (CMainCatalogView *)data;
- instance->m_OnMainItemMouseIN(e, obj, ei);
-}
-
-void CMainCatalogView::m_OnMainItemMouseIN(Evas *e, Evas_Object *obj, void *ei)
-{
- const char *name;
- Evas_Object *icon;
-
- if (!obj) {
- _ERR("Invalid argument");
- return;
- }
-
- if (m->focus_status == FOCUS_SUB_ITEM)
- m_MoveFromSubitemToMainitem(m->focused_sub_item_btn);
-
- icon = elm_object_part_content_get(m->focused_main_item_btn, MAINICONBTN_ICON_SWALLOW);
- if (icon)
- elm_object_signal_emit(icon, MAIN_BTN_UNFOCUSED, MAIN_BTN);
-
- icon = elm_object_part_content_get(obj, MAINICONBTN_ICON_SWALLOW);
- if (icon)
- elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
-
- _release_subitems(m);
-
- name =(const char *) evas_object_data_get(obj, SETTING_ID);
- if (name)
- m_DrawSubItems(name);
-
- elm_object_focus_set(obj, EINA_TRUE);
- m->focused_main_item_btn = obj;
-}
-
-
-bool CMainCatalogView::m_AddIconBtns(Eina_List *list)
-{
- Evas_Object *btn, *icon;
- const char *id, *name;
- struct settingitem *item;
- char buf[BUF_SIZE];
-
- if (!list) {
- _ERR("Invalid argument");
- return false;
- }
-
- for (int i = 0; i < m->main_item_count; i++) {
- btn = utils_add_btn(m->base, MAINICONBTN_STYLE, NULL, EINA_FALSE);
- if (!btn) {
- _ERR("Add btn failed");
- return false;
- }
-
- item = (struct settingitem *) eina_list_nth(list, i);
- if (item) {
- name = settingitem_get_display_name(item);
- elm_object_text_set(btn, utils_get_translation_str(name));
- } else {
- elm_object_text_set(btn, ICON_BUTTON_NO_DISP_NAME);
- }
-
- Connect(btn, MAIN_ITEM_BTNS, TYPE_CLICKED | TYPE_KEY_DOWN);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN, sm_CbMainItemBtnMouseIN, this);
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _mainitem_btn_clicked_cb, data);
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _main_setting_key_pressed_cb, data);
-
- icon = elm_layout_add(btn);
- if (icon) {
- id = settingitem_get_id(item);
- if (!id) {
- _ERR("get item name failed.");
- evas_object_del(btn);
- return false;
- }
-
- snprintf(buf, sizeof(buf), "%s/%s.edj", EDJEDIR, PACKAGE);
- elm_layout_file_set(icon, buf, id);
- elm_object_part_content_set(btn, MAINICONBTN_ICON_SWALLOW, icon);
- elm_object_signal_emit(icon, MAIN_BTN_NORMAL, MAIN_BTN);
- eina_array_push(m->main_icon_base, icon);
- }
-
- elm_box_pack_end(m->mainitem_box, btn);
- evas_object_data_set(btn, SETTING_ID, settingitem_get_id(item));
- eina_array_push(m->main_item_btn, btn);
- }
-
- return true;
-}
-
-/**
-* Create all the UI components of settings.
-*
-* @param[in]: data : the user data.
-*
-* @return: 0 - success, -1 - fail.
-*/
-void CMainCatalogView::m_DrawMainItems(void)
-{
- Evas_Object *btn, *icon;
- Eina_List *list = NULL;
- bool ret = true;
-
- _CREATE_BEGIN {
- _CHECK(m->mainitem_box = utils_add_box(m->base))
- _CHECK(list = viewdata_get_childitems_list(m->main_setting_view))
- _COMMAND{
- m->main_item_count = 0;
- m->main_item_count = eina_list_count(list);
- }
- _CHECK(m->main_item_count)
- _CHECK(m->main_item_btn = eina_array_new(1))
- _CHECK(m->main_icon_base = eina_array_new(1))
- _CHECK(m_AddIconBtns(list))
- _COMMAND {
- elm_object_part_content_set(m->base, MAIN_VIEW_ICON_SWALLOW, m->mainitem_box);
-
- if (!m->item_path) {
- btn = (Evas_Object *)eina_array_data_get(m->main_item_btn, 0);
- if (btn) {
- if (m_DrawSubItems((const char *) evas_object_data_get(btn, SETTING_ID))) {
- icon = (Evas_Object *)eina_array_data_get(m->main_icon_base, 0);
- if (icon) {
- elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
-
- m->focus_status = FOCUS_MAIN_ITEM;
- elm_object_focus_set(btn, EINA_TRUE);
- m->focused_main_item_btn = btn;
- }
- else {
- if (m->subsetting_view)
- viewdata_release(m->subsetting_view);
- ret = false;
- }
- }
- else
- ret = false;
- }
- else
- ret = false;
- }
-
- utils_set_focus_directions(m->main_item_btn, m->main_item_count);
- viewdata_free_childitems_list(list);
- }
- _CHECK(ret)
- _WHEN_SUCCESS { }
- _CHECK_FAIL{/* ret */}
- _CHECK_FAIL{/*_add_icon_btns(m, list) != -1*/}
- _CHECK_FAIL{if(m->main_icon_base) eina_array_free(m->main_icon_base);}
- _CHECK_FAIL{if(m->main_item_btn) eina_array_free(m->main_item_btn);}
- _CHECK_FAIL{/* m->main_item_count */}
- _CHECK_FAIL{if(list) viewdata_free_childitems_list(list);}
- _CHECK_FAIL{if(m->mainitem_box) evas_object_del(m->mainitem_box);}
- } _CREATE_END_AND_CATCH { return; }
-}
-
-/**
-* Edje_Signal_Cb type callback for handling signal.
-*
-* @param[in]: data : the user data.
-* @param[in]: obj : the object signal occurred on.
-* @param[in]: emission : the signal name.
-* @param[in]: source : the source name.
-*
-* @return: void.
-*/
-void CMainCatalogView::sm_CbViewAniFinish(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- if(!data){ _ERR("Invalid Param"); return;}
- CMainCatalogView *root;
- root = (CMainCatalogView *) data;
- root->m_OnViewAniFinish(obj, emission, source);
-}
-
-
-void CMainCatalogView::m_OnViewAniFinish(Evas_Object *obj, const char *emission, const char *source)
-{
- m_DrawMainItems();
-}
-
-
-/**
-* This function moves focus from main item to subitem and
-* does corresponding operations.
-*
-* @param[in]: data : the user data.
-*
-* @return: void.
-*/
-void _move_focus_on_subitem(SMainCatalog *data)
-{
- const char *path, *id;
- unsigned int i;
- Evas_Object *icon, *subbtn, *pb;
- Eina_Array *subbtns;
- void* obj;
- Eina_Array_Iterator a;
- struct settingitem *item;
-
- if (!data)
- return;
-
- subbtns = data->sub_item_btn;
-
- path = (const char*) eina_array_data_get(data->item_path, 0);
-
- EINA_ARRAY_ITER_NEXT(subbtns, i, obj, a) {
- subbtn = (Evas_Object *) obj;
- item = (struct settingitem *) evas_object_data_get(subbtn, SUBITEM_DATA_ID);
- id = settingitem_get_id(item);
- if (!id)
- return;
-
- if (!strncmp(id, path, ARRAY_SIZE)) {
- icon = elm_object_part_content_get(
- data->focused_main_item_btn,
- MAINICONBTN_ICON_SWALLOW);
- if (icon)
- elm_object_signal_emit(icon,
- MAIN_BTN_HIGHLIGHT, MAIN_BTN);
-
- data->focus_status = FOCUS_SUB_ITEM;
- data->focused_sub_item_btn = subbtn;
-
- elm_object_focus_set(subbtn, EINA_TRUE);
- elm_object_signal_emit(data->focused_main_item_btn,
- MAINICONBTN_FOCUSED_ON_SUBITEM,
- MAINICONBTN_MAIN_ITEM_SOURCE);
-
- pb = (Evas_Object *) evas_object_data_get(subbtn, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb,
- SIG_UNCTRL_PB_FOCUSED,
- SRC_PB_PROG);
- }
- }
-}
-
-/**
-* Change the language of names of buttons.
-*
-* @param[in]: list : eina list of item data.
-* @param[in]: btns : eina array containing buttons.
-* @param[in]: cnt : number of buttons.
-*
-* @return: void.
-*/
-static void _change_buttons_name(Eina_List *list,
- Eina_Array *btns, int cnt)
-{
- struct settingitem *item;
- Evas_Object *btn;
- const char *name;
- int i;
-
- if (!list || !btns || !cnt) {
- _ERR("Invalid argument");
- return;
- }
-
- for (i = 0; i < cnt; i++) {
- item = (struct settingitem *)eina_list_nth(list, i);
- btn = (Evas_Object *)eina_array_data_get(btns, i);
- if (!item || !btn)
- return;
-
- name = settingitem_get_display_name(item);
- if (name)
- elm_object_text_set(btn,
- utils_get_translation_str(name));
- }
-}
-
-
-Evas_Object* CMainCatalogView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-/**
-* Create all UI components of settings view.
-*
-* @param[in]: mgr : the view manager of settings.
-* @param[in]: view : the view data.
-* @param[in]: prev : the user data.
-*
-* @return: the base layout of settings or null if error occurred.
-*/
-bool CMainCatalogView::Create(struct settingview_data *view, void *prev)
-{
- ASSERT(!m);
- ASSERT(view);
-
- _CREATE_BEGIN{
- _CHECK(m = new SMainCatalog)
- _CHECK(m->mgr = CSettingMgr::GetInstance())
- _CHECK(m->win = m->mgr->Window())
- _CHECK(m->base = elm_layout_add(m->win))
- _COMMAND {
- evas_object_size_hint_weight_set(m->base,
- EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(m->win, m->base);
- }
- _WHEN_SUCCESS {
- elm_layout_file_set(m->base, EDJ_FILE, MAIN_VIEW_PAGE);
- m->main_setting_view = view;
- m->subsetting_view = NULL;
- m->item_path = m->mgr->GetItemPath();
- evas_object_data_set(m->base, DATA_ID, m);
- elm_object_signal_callback_add(m->base, MAIN_VIEW_ANIM_FINISH, MAIN_VIEW_SOURCE, sm_CbViewAniFinish, this);
-
- if (!m->item_path)
- elm_object_signal_emit(m->base, MAIN_VIEW_LOAD, "");
- else
- m_OnViewAniFinish(NULL, NULL, NULL);
- }
- _CHECK_FAIL{if(m->base) evas_object_del(m->base);}
- _CHECK_FAIL{/* m->win = m->mgr->Window() */}
- _CHECK_FAIL{/* m->mgr = CSettingMgr::GetInstance() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-/**
-* Show the view of settings.
-*
-* @param[in]: base : the base layout of settings.
-*
-* @return: void.
-*/
-void CMainCatalogView::Show(void)
-{
- ASSERT(m);
-
- unsigned int cnt, i;
- const char *name, *path;
- Evas_Object *btn, *icon;
- void* obj;
- Eina_Array *btns;
- Eina_Array_Iterator a;
-
- path = NULL;
-
- if (m->item_path) {
- btns = m->main_item_btn;
-
- cnt = eina_array_count(m->item_path);
- if (cnt > 1) {
- path = (const char *) eina_array_data_get(m->item_path, cnt - 2);
- if (!path)
- return;
- }
-
- EINA_ARRAY_ITER_NEXT(btns, i, obj, a) {
- btn = (Evas_Object *) obj;
- name = (const char *) evas_object_data_get(btn, SETTING_ID);
- if (!name)
- return;
-
- if (!strncmp(name, path, ARRAY_SIZE)) {
- m_DrawSubItems(name);
-
- icon = (Evas_Object *)eina_array_data_get(
- m->main_icon_base, i);
- if (icon)
- elm_object_signal_emit(icon,
- MAIN_BTN_FOCUSED,
- MAIN_BTN);
-
- elm_object_focus_set(btn, EINA_TRUE);
-
- m->focus_status = FOCUS_MAIN_ITEM;
- m->focused_main_item_btn = btn;
-
- _move_focus_on_subitem(m);
- }
- }
- }
-
- evas_object_show(m->base);
-}
-
-/**
-* Hide the view of settings.
-*
-* @param[in]: base : the base layout of settings.
-*
-* @return: void.
-*/
-void CMainCatalogView::Hide(void)
-{
- ASSERT(m);
-
- evas_object_hide(m->base);
-}
-
-/**
-* Refresh the view of settings.
-*
-* @param[in]: base : the base layout of settings.
-*
-* @return: void.
-*/
-void CMainCatalogView::Refresh(void)
-{
- ASSERT(m);
-
- char *sld;
- const char *id;
- unsigned int i;
- struct settingitem *item;
- Eina_Array_Iterator a;
- Evas_Object *btn, *pb, *icon;
- void* obj;
-
- sld = (char *) evas_object_data_del(m->base, SELECTED_ITEM_ID);
- if (sld) {
- EINA_ARRAY_ITER_NEXT(m->sub_item_btn, i, obj, a) {
- btn = (Evas_Object *) obj;
- item = (struct settingitem *) evas_object_data_get(btn, SUBITEM_DATA_ID);
- id = settingitem_get_id(item);
- if (!id)
- continue;
-
- if (item && !strncmp(sld, id, strlen(sld))) {
- m->focused_sub_item_btn = btn;
- break;
- }
- }
- }
-
- if (m->focus_status == FOCUS_SUB_ITEM) {
- elm_object_focus_set(m->focused_sub_item_btn, EINA_TRUE);
-
- elm_object_signal_emit(m->focused_main_item_btn,
- MAINICONBTN_FOCUSED_ON_SUBITEM,
- MAINICONBTN_MAIN_ITEM_SOURCE);
-
- icon = elm_object_part_content_get(m->focused_main_item_btn,
- MAINICONBTN_ICON_SWALLOW);
- if (icon)
- elm_object_signal_emit(icon,
- MAIN_BTN_HIGHLIGHT, MAIN_BTN);
-
- if (_refresh_subitems(m) == -1)
- _ERR("Refresh subitems failed");
-
- pb = (Evas_Object *) evas_object_data_get(m->focused_sub_item_btn,
- PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb,
- SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
- }
-
- if (m->mgr->GetTimeoutFreezeState() == EINA_TRUE)
- m->mgr->ThawTimeout();
-}
-
-/**
-* Destroy the view of settings.
-*
-* @param[in]: base : the base layout of settings.
-*
-* @return: void.
-*/
-void CMainCatalogView::Destroy(void)
-{
- ASSERT(m);
-
- Eina_Array_Iterator a;
- Evas_Object *tmp;
- void* obj;
- unsigned int i;
-
- if (m->sub_item_btn) {
- EINA_ARRAY_ITER_NEXT(m->sub_item_btn, i, obj, a)
- {
- tmp = (Evas_Object *) obj;
- evas_object_del(tmp);
- }
- eina_array_free(m->sub_item_btn);
- }
-
- if (m->main_item_btn) {
- EINA_ARRAY_ITER_NEXT(m->main_item_btn, i, obj, a)
- {
- tmp = (Evas_Object *) obj;
- evas_object_del(tmp);
- }
- eina_array_free(m->main_item_btn);
- }
-
- if (m->main_icon_base) {
- EINA_ARRAY_ITER_NEXT(m->main_icon_base, i, obj, a)
- {
- tmp = (Evas_Object *) obj;
- evas_object_del(tmp);
- }
- eina_array_free(m->main_icon_base);
- }
-
- if (m->main_setting_view)
- viewdata_release(m->main_setting_view);
-
- if (m->subsetting_view)
- viewdata_release(m->subsetting_view);
-
- evas_object_del(m->base);
- delete m;
- m = NULL;
-}
-
-/**
-* Change the language of view of settings.
-*
-* @param[in]: base : the base layout of settings.
-*
-* @return: void.
-*/
-void CMainCatalogView::LangChanged(void)
-{
- ASSERT(m);
-
- Eina_List *l;
- int cnt;
-
- cnt = 0;
- l = viewdata_get_childitems_list(m->main_setting_view);
- if (l)
- cnt = eina_list_count(l);
-
- _change_buttons_name(l, m->main_item_btn, cnt);
-
- cnt = 0;
- l = viewdata_get_childitems_list(m->subsetting_view);
- if (l)
- cnt = eina_list_count(l);
-
- _change_buttons_name(l, m->sub_item_btn, cnt);
-}
-
-/**
-* Froze the view of settings.
-*
-* @param[in]: base : the base layout of settings.
-*
-* @return: void.
-*/
-void CMainCatalogView::Frozen(void)
-{
- ASSERT(m);
-
- evas_object_freeze_events_set(m->mainitem_box, EINA_TRUE);
- evas_object_freeze_events_set(m->subitem_box, EINA_TRUE);
-}
-
-/**
-* Activate the view of settings.
-*
-* @param[in]: base : the base layout of settings.
-*
-* @return: void.
-*/
-void CMainCatalogView::Active(void)
-{
- ASSERT(m);
-
- evas_object_freeze_events_set(m->mainitem_box, EINA_FALSE);
- evas_object_freeze_events_set(m->subitem_box, EINA_FALSE);
-}
-
-
-void CMainCatalogView::OnMouseClicked(int id, Evas_Object *obj)
-{
- _DBG();
- if (!obj) {
- _ERR("Invalid argument");
- return;
- }
-
- switch(id) {
- case MAIN_ITEM_BTNS:
- m_MoveFromMainitemToSubitem(obj);
- break;
- case SUB_ITEM_BTNS:
- {
- Evas_Object *icon;
- m_SubItemClicked(obj);
-
- elm_object_signal_emit(m->focused_main_item_btn, MAINICONBTN_FOCUSED_ON_SUBITEM, MAINICONBTN_MAIN_ITEM_SOURCE);
-
- icon = elm_object_part_content_get(m->focused_main_item_btn, MAINICONBTN_ICON_SWALLOW);
- if (icon)
- elm_object_signal_emit(icon, MAIN_BTN_HIGHLIGHT, MAIN_BTN);
- }
- break;
- default:
- break;
- }
-}
-
-
-void CMainCatalogView::OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
- switch(id) {
- case MAIN_ITEM_BTNS:
- {
- Evas_Object *next, *icon;
- const char *name;
-
- if (!strcmp(ev->keyname, KEY_UP)) {
- icon = elm_object_part_content_get(obj, MAINICONBTN_ICON_SWALLOW);
- if (!icon) {
- _ERR("part %s content get failed.", MAINICONBTN_ICON_SWALLOW);
- return;
- }
-
- elm_object_signal_emit(icon, MAIN_BTN_UNFOCUSED, MAIN_BTN);
-
- next = elm_object_focus_next_object_get(obj, ELM_FOCUS_UP);
- if (!next) {
- _ERR("next object get failed.");
- return;
- }
-
- m->focused_main_item_btn = next;
-
- icon = elm_object_part_content_get(next, MAINICONBTN_ICON_SWALLOW);
- if (!icon) {
- _ERR("part %s content get failed.", MAINICONBTN_ICON_SWALLOW);
- return;
- }
-
- elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
-
- _release_subitems(m);
-
- name =(const char *) evas_object_data_get(next, SETTING_ID);
- if (name)
- m_DrawSubItems(name);
- }
- }
- break;
- default:
- break;
- }
-}
-
-
-void CMainCatalogView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case MAIN_ITEM_BTNS:
- {
- Evas_Object *next, *icon;
- const char *name;
-
- if (!strcmp(ev->keyname, KEY_DOWN)) {
- icon = elm_object_part_content_get(obj, MAINICONBTN_ICON_SWALLOW);
- if (!icon) {
- _ERR("part %s content get failed.", MAINICONBTN_ICON_SWALLOW);
- return;
- }
-
- elm_object_signal_emit(icon, MAIN_BTN_UNFOCUSED, MAIN_BTN);
-
- next = elm_object_focus_next_object_get(obj, ELM_FOCUS_DOWN);
- if (!next) {
- _ERR("next object get failed.");
- return;
- }
-
- m->focused_main_item_btn = next;
-
- icon = elm_object_part_content_get(next, MAINICONBTN_ICON_SWALLOW);
- if (!icon) {
- _ERR("part %s content get failed.", MAINICONBTN_ICON_SWALLOW);
- return;
- }
-
- elm_object_signal_emit(icon, MAIN_BTN_FOCUSED, MAIN_BTN);
-
- _release_subitems(m);
- name =(const char *) evas_object_data_get(next, SETTING_ID);
- if (name)
- m_DrawSubItems(name);
- } else if (!strcmp(ev->keyname, KEY_RIGHT)) {
- m_MoveFromMainitemToSubitem(obj);
- } else if (!strcmp(ev->keyname, KEY_EXIT) || !strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- app_efl_exit();
- }
- }
- break;
-
- case SUB_ITEM_BTNS:
- {
- Evas_Object *pb;
- Evas_Object *next;
-
- if (!strcmp(ev->keyname, KEY_LEFT) || !strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- pb = (Evas_Object *) evas_object_data_get(obj, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
-
- m_MoveFromSubitemToMainitem(obj);
- } else if (!strncmp(ev->keyname, KEY_DOWN, strlen(ev->keyname))) {
- pb = (Evas_Object *)evas_object_data_get(obj, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
-
- next = elm_object_focus_next_object_get(obj, ELM_FOCUS_DOWN);
- if (!next) {
- _ERR("focus next object get failed.");
- return;
- }
-
- pb = (Evas_Object *)evas_object_data_get(next, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
- } else if (!strncmp(ev->keyname, KEY_UP, strlen(ev->keyname))) {
- pb = (Evas_Object *)evas_object_data_get(obj, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_UNFOCUSED, SRC_PB_PROG);
-
- next = elm_object_focus_next_object_get(obj, ELM_FOCUS_UP);
- if (!next) {
- _ERR("focus next object get failed.");
- return;
- }
-
- pb = (Evas_Object *)evas_object_data_get(next, PROGRESS_BAR_DATA);
- if (pb)
- elm_object_signal_emit(pb, SIG_UNCTRL_PB_FOCUSED, SRC_PB_PROG);
- } else if (!strncmp(ev->keyname, KEY_EXIT, strlen(ev->keyname))) {
- app_efl_exit();
- }
- }
- break;
- default:
- break;
- }
-}
-
-
-#if 0
-static struct setting_class _vclass = {
- VCLASS_TITLE_MAIN_VIEW,
- _create,
- _show,
- NULL,
- NULL,
- _refresh,
- NULL,
- _hide,
- _destroy,
- _lang_changed,
- _frozen,
- _active,
- 0
-};
-
-/**
-* Return view class of settings view.
-*
-* @param: void.
-*
-* @return: the view class of settings view.
-*/
-struct setting_class *view_maincatalog_get_vclass(void)
-{
- return &_vclass;
-}
-#endif
* limitations under the License.
*/
-#include <AppCommon.h>
-#include "common_defs.h"
+#include <KeyDefine.h>
+
+#include "dbg.h"
+#include "def.h"
#include "utils.h"
#include "settings_provider.h"
#include "view_need_pwd.h"
PWD_ENTRY_MAX
};
-struct SNeedPasscodeView {
+struct _chnllock_data {
Evas_Object *win;
Evas_Object *bg;
Evas_Object *base;
char passcode[BUF_SIZE];
- CSettingMgr *mgr;
+ struct setting_mgr *mgr;
struct settingview_data *view;
struct obj_geometry_data gd;
};
-static void _free_priv_data(SNeedPasscodeView *data);
-//static void _hide(Evas_Object *base);
+static void _free_priv_data(struct _chnllock_data *data);
+static void _hide(Evas_Object *base);
/**
* Free user data.
*
* @return: void.
*/
-static void _free_priv_data(SNeedPasscodeView *data)
+static void _free_priv_data(struct _chnllock_data *data)
{
if (!data)
return;
if (data->array)
eina_array_free(data->array);
+ free(data);
}
/**
static void _cancel_btn_clicked_cb(void *priv, Evas_Object *obj,
void *ev)
{
- SNeedPasscodeView *data;
+ struct _chnllock_data *data;
if (!priv || !obj)
return;
- data = (SNeedPasscodeView *) priv;
+ data = priv;
- data->mgr->ViewPop();
+ settingmgr_view_pop(data->mgr);
}
/**
*
* @return: the created cancel button or null if error occurred.
*/
-static Evas_Object *_add_view_cancel_btn(SNeedPasscodeView *data)
+static Evas_Object *_add_view_cancel_btn(struct _chnllock_data *data)
{
Evas_Object *btn;
if (!data || !data->base)
return NULL;
- btn = utils_add_btn(data->base, PWD_BASIC_BTN, MSGID_CANCEL, EINA_TRUE);
+ btn = utils_add_btn(data->base, PWD_BASIC_BTN,
+ utils_get_translation_str(MSGID_CANCEL), EINA_TRUE);
if (!btn) {
_ERR("utils add button failed.");
return NULL;
*
* @return: 0 - wrong passcode, 1 - right passcode.
*/
-static int _check_passcode(SNeedPasscodeView *data)
+static int _check_passcode(struct _chnllock_data *data)
{
char *passcode;
*
* @return: void.
*/
-static void _push_next_view(SNeedPasscodeView *data)
+static void _push_next_view(struct _chnllock_data *data)
{
struct settingitem *item;
Eina_List *list;
if (!list)
return;
- item = (struct settingitem *) eina_list_nth(list, 0);
+ item = eina_list_nth(list, 0);
if (!item)
return;
if (!id)
return;
- data->mgr->ViewPush(id, &data->gd);
+ settingmgr_view_push(data->mgr, id, &data->gd);
}
/**
*
* @return: void.
*/
-void CNeedPasscodeView::sm_CbKeyDown(void *priv, Evas *e, Evas_Object *obj, void *ei)
-{
- CNeedPasscodeView *root = (CNeedPasscodeView*)priv;
- if (root)
- root->m_OnKeyDown(e, obj, (Evas_Event_Key_Down*)ei);
-}
-
-
-void CNeedPasscodeView::m_OnKeyDown(Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+static void _key_down_cb(void *priv, Evas *e, Evas_Object *obj,
+ void *ei)
{
+ Evas_Event_Key_Down *event;
Eina_Array *array;
Evas_Object *entry, *next_entry;
+ struct _chnllock_data *data;
const char *keyname;
char *text;
int btn_num, i;
- if (!obj)
+ if (!priv || !ei || !obj)
return;
- array = m->array;
+ data = priv;
+ array = data->array;
if (!array)
return;
- keyname = ev->keyname;
+ event = ei;
+ keyname = event->keyname;
if (!keyname)
return;
if (btn_num == -1)
return;
- if (!strncmp(keyname, KEY_BACK, strlen(keyname)) || !strncmp(keyname, KEY_BACK_REMOTE, strlen(keyname))) {
- m->mgr->ViewPop();
+ if (!strncmp(keyname, KEY_BACK, strlen(keyname))) {
+ settingmgr_view_pop(data->mgr);
} else if (!strncmp(keyname, KEY_DOWN, strlen(keyname))) {
- elm_object_focus_set(m->cancel_btn, EINA_TRUE);
+ elm_object_focus_set(data->cancel_btn, EINA_TRUE);
} else if (!strncmp(keyname, KEY_0, strlen(keyname)) ||
!strncmp(keyname, KEY_1, strlen(keyname)) ||
!strncmp(keyname, KEY_2, strlen(keyname)) ||
!strncmp(keyname, KEY_8, strlen(keyname)) ||
!strncmp(keyname, KEY_9, strlen(keyname))) {
elm_entry_entry_set(obj, PWD_SYMBOL);
- m->passcode[btn_num] = keyname[0];
+ data->passcode[btn_num] = keyname[0];
if (btn_num < PWD_ENTRY_3) {
elm_object_focus_next(obj, ELM_FOCUS_NEXT);
if (!next_entry)
return;
- elm_object_focus_next_object_set(m->cancel_btn,
+ elm_object_focus_next_object_set(data->cancel_btn,
next_entry, ELM_FOCUS_UP);
} else {
- if (_check_passcode(m)) {
- Hide();
- _push_next_view(m);
+ if (_check_passcode(data)) {
+ _hide(data->base);
+ _push_next_view(data);
} else {
text = utils_get_translation_str(
MSGID_WRONG_PWD);
- elm_object_part_text_set(m->base,
+ elm_object_part_text_set(data->base,
PART_UPTEXT, text);
- entry = (Evas_Object *) eina_array_data_get(array, PWD_ENTRY_0);
+ entry = eina_array_data_get(array, PWD_ENTRY_0);
if (!entry)
return;
elm_object_focus_set(entry, EINA_TRUE);
for (i = PWD_ENTRY_0; i < PWD_ENTRY_MAX; i++) {
- entry = (Evas_Object *)eina_array_data_get(array, i);
+ entry = eina_array_data_get(array, i);
if (!entry)
return;
return;
for (idx = PWD_ENTRY_0; idx < PWD_ENTRY_3; idx++) {
- entry = (Evas_Object *)eina_array_data_get(array, idx);
+ entry = eina_array_data_get(array, idx);
if (!entry)
return;
elm_object_focus_next_object_set(entry,
- (Evas_Object *)eina_array_data_get(array, idx + 1),
+ eina_array_data_get(array, idx + 1),
ELM_FOCUS_NEXT);
elm_object_focus_next_object_set(entry,
cancel_btn, ELM_FOCUS_DOWN);
}
elm_object_focus_next_object_set(cancel_btn,
- (Evas_Object *)eina_array_data_get(array, PWD_ENTRY_0),
+ eina_array_data_get(array, PWD_ENTRY_0),
ELM_FOCUS_UP);
}
{
Evas_Object *entry;
Elm_Entry_Filter_Limit_Size length = {
- 1
+ .max_char_count = 1
};
Elm_Entry_Filter_Accept_Set type = {
- PWD_RANGE
+ .accepted = PWD_RANGE
};
if (!parent)
*
* @return: 0 - Success, -1 - Fail.
*/
-int CNeedPasscodeView::m_AddViewEntries(void)
+static int _add_view_entries(struct _chnllock_data *data)
{
Eina_Array *array;
Evas_Object *box;
Evas_Object *entry, *base;
int idx;
- box = utils_add_box(m->base);
+ if (!data || !data->base) {
+ _ERR("invalid arguments.");
+ return -1;
+ }
+
+ box = utils_add_box(data->base);
if (!box)
return -1;
}
for (idx = PWD_ENTRY_0; idx < PWD_ENTRY_MAX; idx++) {
- base = utils_add_base(m->base);
+ base = utils_add_base(data->base);
if (!base) {
_ERR("utils add base failed.");
evas_object_del(box);
elm_box_pack_end(box, base);
evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN,
- sm_CbKeyDown, this);
+ _key_down_cb, data);
}
- elm_object_focus_allow_set((Evas_Object*) eina_array_data_get(array, PWD_ENTRY_0),
+ elm_object_focus_allow_set(eina_array_data_get(array, PWD_ENTRY_0),
EINA_TRUE);
- elm_object_focus_set((Evas_Object *)eina_array_data_get(array, PWD_ENTRY_0),
+ elm_object_focus_set(eina_array_data_get(array, PWD_ENTRY_0),
EINA_TRUE);
- elm_object_part_content_set(m->base, SWALLOW_CONTENT_AREA, box);
+ elm_object_part_content_set(data->base, SWALLOW_CONTENT_AREA, box);
- _set_entry_directions(array, m->cancel_btn);
+ _set_entry_directions(array, data->cancel_btn);
- m->array = array;
- m->box = box;
+ data->array = array;
+ data->box = box;
return 0;
}
*
* @return: void.
*/
-void CNeedPasscodeView::sm_CbCtxpopupDismissed(void *priv, Evas_Object *obj, void *ev)
+static void _ctxpopup_dismissed(void *priv, Evas_Object *obj,
+ void *ev)
{
- CNeedPasscodeView *root = (CNeedPasscodeView*)priv;
- if (root)
- root->m_OnCtxpopupDismissed(obj, ev);
-}
+ struct _chnllock_data *data;
-
-void CNeedPasscodeView::m_OnCtxpopupDismissed(Evas_Object *obj, void *ev)
-{
- if (!obj)
+ if (!priv || !obj)
return;
- Hide();
-
- m->mgr->ViewPop();
-}
-
-
+ data = priv;
+ if (!data->base || !data->mgr)
+ return;
-Evas_Object* CNeedPasscodeView::Base(void)
-{
- ASSERT(m);
+ _hide(data->base);
- return m->base;
+ settingmgr_view_pop(data->mgr);
}
-
/**
* Create all the UI components of channel lock view.
*
* @return: the base layout of channel lock view or null
* if error occurred.
*/
-bool CNeedPasscodeView::Create(struct settingview_data *view, void *prev)
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
{
- ASSERT(!m);
- ASSERT(view);
- ASSERT(prev);
-
- CSettingMgr *mgr = CSettingMgr::GetInstance();
-
Evas_Object *win, *base, *bg;
Evas_Object *ctxpopup;
Evas_Object *cancel_btn;
- int ret, width, height, xpos, ypos;
+ struct _chnllock_data *data;
+ int ret, xpos, ypos;
struct obj_geometry_data *tmp;
- win = mgr->Window();
- ASSERT(win);
+ if (!mgr || !view || !prev) {
+ _ERR("invalid argument.");
+ return NULL;
+ }
+
+ win = settingmgr_get_win(mgr);
+ if (!win) {
+ _ERR("settings manager get window failed.");
+ return NULL;
+ }
- m = new SNeedPasscodeView;
- if (!m) {
+ data = calloc(1, sizeof(*data));
+ if (!data) {
_ERR("calloc memory for _priv_data failed.");
- return false;
+ return NULL;
}
- tmp = (struct obj_geometry_data *) prev;
+ tmp = prev;
- m->win = win;
- m->gd = *tmp;
+ data->win = win;
+ data->gd = *tmp;
bg = _add_view_bg(win);
if (!bg) {
goto error;
}
- m->bg = bg;
+ data->bg = bg;
- ctxpopup = utils_add_ctxpopup(win, (char *)CHANGE_PWD_CTXPOPUP_STYLE);
+ ctxpopup = utils_add_ctxpopup(win, CHANGE_PWD_CTXPOPUP_STYLE);
if (!ctxpopup) {
_ERR("add ctxpopup failed.");
goto error;
}
- m->ctxpopup = ctxpopup;
+ data->ctxpopup = ctxpopup;
- base = _add_view_base(m->ctxpopup);
+ base = _add_view_base(data->ctxpopup);
if (!base) {
_ERR("add view base failed.");
goto error;
}
- m->base = base;
+ data->base = base;
elm_object_content_set(ctxpopup, base);
- width = WIN_WIDTH;
- height = WIN_HEIGHT;
-
- xpos = (width - CTXPOPUP_WIDTH) / 2;
- ypos = (height - CTXPOPUP_HEIGHT) / 2;
- evas_object_move(m->ctxpopup, xpos * ELM_SCALE,
+ xpos = (WIN_WIDTH - CTXPOPUP_WIDTH) / 2;
+ ypos = (WIN_HEIGHT - CTXPOPUP_HEIGHT) / 2;
+ evas_object_move(data->ctxpopup, xpos * ELM_SCALE,
ypos * ELM_SCALE);
- evas_object_smart_callback_add(m->ctxpopup,
- SIG_DISMISSED, sm_CbCtxpopupDismissed, this);
+ evas_object_smart_callback_add(data->ctxpopup,
+ SIG_DISMISSED, _ctxpopup_dismissed, data);
- cancel_btn = _add_view_cancel_btn(m);
+ cancel_btn = _add_view_cancel_btn(data);
if (!cancel_btn) {
_ERR("add cancel button faield.");
goto error;
}
- m->cancel_btn = cancel_btn;
+ data->cancel_btn = cancel_btn;
- ret = m_AddViewEntries();
+ ret = _add_view_entries(data);
if (ret != 0)
goto error;
- m->mgr = mgr;
- m->view = view;
+ data->mgr = mgr;
+ data->view = view;
- evas_object_data_set(base, CHNLLOCK_DATA_ID, m);
+ evas_object_data_set(base, CHNLLOCK_DATA_ID, data);
- return true;
+ return base;
error:
- _free_priv_data(m);
- delete m;
- m = NULL;
- return false;
+ _free_priv_data(data);
+ return NULL;
}
/**
*
* @return: void.
*/
-void CNeedPasscodeView::Show(void)
+static void _show(Evas_Object *base)
{
- ASSERT(m);
+ struct _chnllock_data *data;
+
+ if (!base)
+ return;
- evas_object_show(m->ctxpopup);
- evas_object_show(m->bg);
- evas_object_show(m->base);
+ data = evas_object_data_get(base, CHNLLOCK_DATA_ID);
+ if (!data) {
+ _ERR("get data from base failed. ID: %s.", CHNLLOCK_DATA_ID);
+ return;
+ }
+
+ evas_object_show(data->ctxpopup);
+ evas_object_show(data->bg);
+ evas_object_show(data->base);
}
/**
*
* @return: void.
*/
-void CNeedPasscodeView::Destroy(void)
+static void _destroy(Evas_Object *base)
{
- ASSERT(m);
+ struct _chnllock_data *data;
+
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, CHNLLOCK_DATA_ID);
+ if (!data) {
+ _ERR("get data from base failed. ID: %s.", CHNLLOCK_DATA_ID);
+ return;
+ }
- _free_priv_data(m);
- delete m;
- m = NULL;
+ _free_priv_data(data);
}
/**
*
* @return: void.
*/
-void CNeedPasscodeView::Hide(void)
+static void _hide(Evas_Object *base)
{
- ASSERT(m);
+ struct _chnllock_data *data;
+
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, CHNLLOCK_DATA_ID);
+ if (!data)
+ return;
- evas_object_hide(m->base);
- evas_object_hide(m->ctxpopup);
- evas_object_hide(m->bg);
+ evas_object_hide(data->base);
+ evas_object_hide(data->ctxpopup);
+ evas_object_hide(data->bg);
}
/**
*
* @return: void.
*/
-void CNeedPasscodeView::Refresh(void)
+static void _refresh(Evas_Object *base)
{
- ASSERT(m);
+ struct _chnllock_data *data;
- m->mgr->ViewPop();
-}
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, CHNLLOCK_DATA_ID);
+ if (!data)
+ return;
+ settingmgr_view_pop(data->mgr);
+}
-#if 0
/**
* view class of channel lock view.
*/
struct setting_class _vclass = {
- VCLASS_TITLE_NEED_PASSCODE,
- _create,
- _show,
- NULL,
- NULL,
- _refresh,
- NULL,
- _hide,
- _destroy,
- NULL,
- NULL,
- NULL,
- 0
+ .title = VCLASS_TITLE_NEED_PASSCODE,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .refresh = _refresh
};
/**
{
return &_vclass;
}
-#endif
* limitations under the License.
*/
-#include <AppCommon.h>
-#include "common_defs.h"
+#include <KeyDefine.h>
+
+#include "dbg.h"
+#include "def.h"
#include "view_pwd_popup.h"
#include "utils.h"
#include "settings_provider.h"
-#include "settingviewmgr.h"
#define PWD_DATA_ID "change_passcode_data"
#define CTXPOPUP_WIDTH 688
ENTRY_MAX
};
-struct SPasscodePopupView {
+struct _pwd_data {
Evas_Object *win;
Evas_Object *bg;
Evas_Object *base;
int renew_flag;
int wrong_flag;
- CSettingMgr *mgr;
+ struct setting_mgr *mgr;
struct settingview_data *view;
};
-//static void _hide(Evas_Object *base);
+static void _hide(Evas_Object *base);
/**
* Free user data.
*
* @return: void.
*/
-static void _free_pwd_data(SPasscodePopupView *data)
+static void _free_pwd_data(struct _pwd_data *data)
{
if (!data)
return;
if (data->array)
eina_array_free(data->array);
+
+ free(data);
}
/**
*/
static void _cancelbtn_clicked_cb(void *priv, Evas_Object *obj, void *ev)
{
- SPasscodePopupView *data;
+ struct _pwd_data *data;
if (!priv || !obj)
return;
- data = (SPasscodePopupView *) priv;
+ data = priv;
- data->mgr->ViewPop();
+ settingmgr_view_pop(data->mgr);
}
/**
*
* @return: the created cancel button or null if error occurred.
*/
-static Evas_Object *_add_pwd_cancel_btn(SPasscodePopupView *data)
+static Evas_Object *_add_pwd_cancel_btn(struct _pwd_data *data)
{
Evas_Object *btn;
if (!data || !data->base)
return NULL;
- btn = utils_add_btn(data->base, PWD_BASIC_BTN, MSGID_CANCEL, EINA_TRUE);
+ btn = utils_add_btn(data->base, PWD_BASIC_BTN,
+ utils_get_translation_str(MSGID_CANCEL), EINA_TRUE);
if (!btn) {
_ERR("utils add button failed.");
return NULL;
return;
for (i = ENTRY_0; i < ENTRY_3; i++) {
- en = (Evas_Object *) eina_array_data_get(array, i);
+ en = eina_array_data_get(array, i);
if (!en)
return;
elm_object_focus_next_object_set(en,
- (Evas_Object *) eina_array_data_get(array, i + 1),
+ eina_array_data_get(array, i + 1),
ELM_FOCUS_NEXT);
elm_object_focus_next_object_set(en, en, ELM_FOCUS_LEFT);
elm_object_focus_next_object_set(en, en, ELM_FOCUS_RIGHT);
ELM_FOCUS_DOWN);
}
- lasten = (Evas_Object *) eina_array_data_get(array, ENTRY_3);
+ lasten = eina_array_data_get(array, ENTRY_3);
elm_object_focus_next_object_set(lasten, lasten, ELM_FOCUS_UP);
elm_object_focus_next_object_set(lasten, cancel_btn, ELM_FOCUS_DOWN);
elm_object_focus_next_object_set(lasten, lasten, ELM_FOCUS_LEFT);
elm_object_focus_next_object_set(cancel_btn, cancel_btn,
ELM_FOCUS_RIGHT);
elm_object_focus_next_object_set(cancel_btn,
- (Evas_Object *) eina_array_data_get(array, ENTRY_0), ELM_FOCUS_UP);
+ eina_array_data_get(array, ENTRY_0), ELM_FOCUS_UP);
elm_object_focus_next_object_set(cancel_btn, cancel_btn,
ELM_FOCUS_DOWN);
}
*
* @return: 0 - wrong passcode, 1 - right passcode.
*/
-static int _check_pwd(SPasscodePopupView *data)
+static int _check_pwd(struct _pwd_data *data)
{
char *pwd;
*
* @return: void.
*/
-static void _reset_pwd(SPasscodePopupView *data)
+static void _reset_pwd(struct _pwd_data *data)
{
Evas_Object *btn, *first;
Eina_Array *array;
array = data->array;
- first = (Evas_Object *) eina_array_data_get(array, ENTRY_0);
+ first = eina_array_data_get(array, ENTRY_0);
if (!first)
return;
elm_object_focus_next_object_set(data->cancel_btn, first, ELM_FOCUS_UP);
for (i = ENTRY_0; i < ENTRY_MAX; i++) {
- btn = (Evas_Object *)eina_array_data_get(array, i);
+ btn = eina_array_data_get(array, i);
if (!btn)
return;
*
* @return: 0 - Success, -1 - Fail.
*/
-static int _set_pwd(SPasscodePopupView *data)
+static int _set_pwd(struct _pwd_data *data)
{
int ret;
struct settingitem *item;
*
* @return: 0 - Success, -1 - Fail.
*/
-static int _check_reentered_pwd(SPasscodePopupView *data)
+static int _check_reentered_pwd(struct _pwd_data *data)
{
if (!data)
return 0;
*
* @return: void.
*/
-static void _update_pwd_ui(SPasscodePopupView *data,
+static void _update_pwd_ui(struct _pwd_data *data,
const char *part, const char *msgid)
{
char *text;
Evas_Event_Key_Down *event;
Eina_Array *array;
Evas_Object *next_entry;
- SPasscodePopupView *data;
+ struct _pwd_data *data;
const char *keyname;
int entry_idx, i;
if (!priv || !ei || !obj)
return;
- data = (SPasscodePopupView *) priv;
+ data = priv;
array = data->array;
if (!array)
return;
- event = (Evas_Event_Key_Down *) ei;
+ event = ei;
keyname = event->keyname;
if (!keyname)
return;
}
}
- if (!strncmp(keyname, KEY_BACK, strlen(keyname)) || !strncmp(keyname, KEY_BACK_REMOTE, strlen(keyname))) {
- data->mgr->ViewPop();
+ if (!strncmp(keyname, KEY_BACK, strlen(keyname))) {
+ settingmgr_view_pop(data->mgr);
} else if (!strncmp(keyname, KEY_DOWN, strlen(keyname))) {
elm_object_focus_set(data->cancel_btn, EINA_TRUE);
} else if (!strncmp(keyname, KEY_0, strlen(keyname)) ||
data->new_flag = 0;
data->renew_flag = 0;
- data->mgr->ViewPop();
+ settingmgr_view_pop(data->mgr);
} else {
_update_pwd_ui(data, PART_UPTEXT,
MSGID_DIFFER_PWD);
{
Evas_Object *entry;
Elm_Entry_Filter_Limit_Size length = {
- 1
+ .max_char_count = 1
};
Elm_Entry_Filter_Accept_Set type = {
- PWD_RANGE
+ .accepted = PWD_RANGE
};
if (!parent)
*
* @return: 0 - Success, -1 - Fail.
*/
-static int _add_pwd_entry(SPasscodePopupView *data)
+static int _add_pwd_entry(struct _pwd_data *data)
{
Eina_Array *array;
Evas_Object *box;
elm_object_part_content_set(data->base, SWALLOW_CONTENT_AREA, box);
elm_object_focus_allow_set(
- (Evas_Object *) eina_array_data_get(array, ENTRY_0), EINA_TRUE);
+ eina_array_data_get(array, ENTRY_0), EINA_TRUE);
elm_object_focus_set(
- (Evas_Object *)eina_array_data_get(array, ENTRY_0), EINA_TRUE);
+ eina_array_data_get(array, ENTRY_0), EINA_TRUE);
_set_entry_directions(array, data->cancel_btn);
*
* @return: void.
*/
-void CPasscodePopupView::sm_CbCtxpopupDismissed(void *priv, Evas_Object *obj, void *ev)
-{
- CPasscodePopupView *root = (CPasscodePopupView*)priv;
- if (root)
- root->m_OnCtxpopupDismissed(obj, ev);
-}
-
-
-void CPasscodePopupView::m_OnCtxpopupDismissed(Evas_Object *obj, void *ev)
+static void _ctxpopup_dismissed(void *priv, Evas_Object *obj,
+ void *ev)
{
- if (!obj)
- return;
+ struct _pwd_data *data;
- if (!m->base || !m->mgr)
+ if (!priv || !obj)
return;
- Hide();
-
- m->mgr->ViewPop();
-}
-
+ data = priv;
+ if (!data->base || !data->mgr)
+ return;
-Evas_Object* CPasscodePopupView::Base(void)
-{
- ASSERT(m);
+ _hide(data->base);
- return m->base;
+ settingmgr_view_pop(data->mgr);
}
-
/**
* Create all the UI components of change passcode view.
*
* @return: the base layout of change passcode view or null
* if error occurred.
*/
-bool CPasscodePopupView::Create(struct settingview_data *view, void *prev)
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
{
- ASSERT(!m);
- ASSERT(view);
-
- CSettingMgr *mgr = CSettingMgr::GetInstance();
- ASSERT(mgr);
-
Evas_Object *base, *bg;
Evas_Object *win;
Evas_Object *cancel_btn;
Evas_Object *ctxpopup;
+ struct _pwd_data *data;
int ret;
- int width, height;
int xpos, ypos;
- win = mgr->Window();
- ASSERT(win);
+ if (!mgr || !view) {
+ _ERR("invalid argument.");
+ return NULL;
+ }
+
+ win = settingmgr_get_win(mgr);
+ if (!win) {
+ _ERR("settingmgr get window failed.");
+ return NULL;
+ }
- m = new SPasscodePopupView;
- if (!m) {
+ data = calloc(1, sizeof(*data));
+ if (!data) {
_ERR("calloc _change_passcode_data failed.");
- return false;
+ return NULL;
}
- m->win = win;
+ data->win = win;
- _clear_pwd(m->pwd);
+ _clear_pwd(data->pwd);
bg = _add_pwd_bg(win);
if (!bg) {
goto error;
}
- ctxpopup = utils_add_ctxpopup(win, (char *) CHANGE_PWD_CTXPOPUP_STYLE);
+ ctxpopup = utils_add_ctxpopup(win, CHANGE_PWD_CTXPOPUP_STYLE);
if (!ctxpopup) {
_ERR("add ctxpopup failed.");
goto error;
}
- m->ctxpopup = ctxpopup;
+ data->ctxpopup = ctxpopup;
- base = _add_pwd_base(m->ctxpopup);
+ base = _add_pwd_base(data->ctxpopup);
if (!base) {
_ERR("add change passcode base layout failed.");
goto error;
}
- m->base = base;
+ data->base = base;
elm_object_content_set(ctxpopup, base);
- width = WIN_WIDTH;
- height = WIN_HEIGHT;
-
- xpos = (width - CTXPOPUP_WIDTH) / 2;
- ypos = (height - CTXPOPUP_HEIGHT) / 2;
- evas_object_move(m->ctxpopup, xpos * ELM_SCALE, ypos * ELM_SCALE);
+ xpos = (WIN_WIDTH - CTXPOPUP_WIDTH) / 2;
+ ypos = (WIN_HEIGHT - CTXPOPUP_HEIGHT) / 2;
+ evas_object_move(data->ctxpopup, xpos * ELM_SCALE, ypos * ELM_SCALE);
- cancel_btn = _add_pwd_cancel_btn(m);
+ cancel_btn = _add_pwd_cancel_btn(data);
if (!cancel_btn) {
_ERR("add change passcode cancel button failed.");
goto error;
}
- m->cancel_btn = cancel_btn;
+ data->cancel_btn = cancel_btn;
- ret = _add_pwd_entry(m);
+ ret = _add_pwd_entry(data);
if (ret != 0) {
_ERR("add change passcode input buttons failed.");
goto error;
}
- m->mgr = mgr;
- m->bg = bg;
- m->view = view;
+ data->mgr = mgr;
+ data->bg = bg;
+ data->view = view;
- evas_object_smart_callback_add(m->ctxpopup,
- SIG_DISMISSED, sm_CbCtxpopupDismissed, this);
+ evas_object_smart_callback_add(data->ctxpopup,
+ SIG_DISMISSED, _ctxpopup_dismissed, data);
- evas_object_data_set(base, PWD_DATA_ID, m);
+ evas_object_data_set(base, PWD_DATA_ID, data);
- return true;
+ return base;
error:
- _free_pwd_data(m);
- delete m;
- m = NULL;
- return false;
+ _free_pwd_data(data);
+ return NULL;
}
/**
*
* @return: void.
*/
-void CPasscodePopupView::Show(void)
+static void _show(Evas_Object *base)
{
- ASSERT(m);
+ struct _pwd_data *data;
+
+ if (!base)
+ return;
- evas_object_show(m->ctxpopup);
+ data = evas_object_data_get(base, PWD_DATA_ID);
+ if (!data) {
+ _ERR("get data from base failed. ID: %s.", PWD_DATA_ID);
+ return;
+ }
+
+ evas_object_show(data->ctxpopup);
}
/**
*
* @return: void.
*/
-void CPasscodePopupView::Destroy(void)
+static void _destroy(Evas_Object *base)
{
- ASSERT(m);
+ struct _pwd_data *data;
+
+ if (!base)
+ return;
- _free_pwd_data(m);
- delete m;
- m = NULL;
+ data = evas_object_data_get(base, PWD_DATA_ID);
+ if (!data) {
+ _ERR("get data from base failed. ID: %s.", PWD_DATA_ID);
+ return;
+ }
+
+ _free_pwd_data(data);
}
/**
*
* @return: void.
*/
-void CPasscodePopupView::Hide(void)
+static void _hide(Evas_Object *base)
{
- ASSERT(m);
+ struct _pwd_data *data;
- evas_object_hide(m->bg);
- evas_object_hide(m->ctxpopup);
-}
+ if (!base)
+ return;
+ data = evas_object_data_get(base, PWD_DATA_ID);
+ if (!data) {
+ _ERR("get data from base failed. ID: %s.",
+ PWD_DATA_ID);
+ return;
+ }
+
+ evas_object_hide(data->bg);
+ evas_object_hide(data->ctxpopup);
+}
-#if 0
/**
* view class of change passcode view.
*/
static struct setting_class _vclass = {
- VCLASS_TITLE_CHANGE_PASSCODE,
- _create,
- _show,
- NULL,
- NULL,
- NULL,
- NULL,
- _hide,
- _destroy,
- NULL,
- NULL,
- NULL,
- 0
+ .title = VCLASS_TITLE_CHANGE_PASSCODE,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide
};
/**
{
return &_vclass;
}
-#endif
--- /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 "dbg.h"
+#include "def.h"
+#include "stdbool.h"
+#include "viewmgr.h"
+#include "utils.h"
+#include "data_wrapper.h"
+#include "settings_provider.h"
+#include "view_resetpopup.h"
+
+/**
+* This function is invoked to create view layout.
+*
+* @param mgr [in] The setting_mgr data pointer passed by @settingmgr_view_push.
+* @param view [in] The settingview_data data pointer passed by @settingmgr_view_push.
+* @param prev [in] The parameter data which passed by prev view or NULL.
+* @return View layout evas object, NULL on error.
+*/
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ /*TODO:Implement this function*/
+ return NULL;
+}
+
+/**
+* This function is invoked to show view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _show(Evas_Object *base)
+{
+}
+
+/**
+* This function is invoked to destroy view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _destroy(Evas_Object *base)
+{
+}
+
+/**
+* This function is invoked to hide view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _hide(Evas_Object *base)
+{
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_RESET_POPUP,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .hide_view = 0
+};
+
+/**
+* This function is invoked to get reset popup view class object.
+*
+* @return The setting_class data static pointer, NULL on error.
+*/
+struct setting_class *view_resetpopup_get_vclass(void)
+{
+ return &_vclass;
+}
--- /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 <KeyDefine.h>
+
+#include "dbg.h"
+#include "def.h"
+#include "stdbool.h"
+#include "viewmgr.h"
+#include "utils.h"
+#include "data_wrapper.h"
+#include "settings_provider.h"
+#include "view_sublist.h"
+
+#define DATA_ID "SUBLISTDATA"
+#define MAX_ITEMS 8
+#define ITEMID "itemdata"
+
+#define SUBLIST_OFFSET 70.0
+#define SUBLIST_WIDTH 310.0
+#define ITEM_HEIGHT 82
+#define ITEM_OFFSET (39 * 2)
+
+#define SIG_SCROLL_BOTTOM "edge,bottom"
+#define SIG_SCROLL_TOP "edge,top"
+#define SIG_SCROLL "scroll"
+#define SIG_ITEM_FOCUSED "focused"
+#define SIG_ITEM_UNFOCUSED "unfocused"
+#define SIG_ITEM_CLICKED "clicked"
+#define SIG_CTXPOPUP_DISMISSED "dismissed"
+
+struct _sublist_data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *ctxpopup;
+ Evas_Object *popup_box;
+ Evas_Object *scroller;
+ Eina_Array *sub_btn_array;
+
+ int sub_items_count;
+ int selected_index;
+ struct obj_geometry_data *geometry_data;
+ struct settingview_data *sublist_view;
+ struct setting_mgr *mgr;
+};
+
+static void _destroy(Evas_Object *base);
+static void _hide(Evas_Object *base);
+
+/**
+* This function is invoked to exit and pop current view.
+*
+* @param data [in] The _sublist_data data pointer.
+* @return void.
+*/
+static void _exit_view(struct _sublist_data *data)
+{
+ if (!data)
+ return;
+
+ _hide(data->base);
+ settingmgr_view_pop(data->mgr);
+}
+
+/**
+* This function is invoked to get item's data list.
+*
+* @param data [in] The settingview_data data pointer.
+* @param cnt [out] The list element numbers
+* @return The Eina_List data pointer, NULL on error.
+*/
+static Eina_List *_get_list_data(struct settingview_data *data, int *cnt)
+{
+ Eina_List *list;
+
+ if (!data || !cnt) {
+ _ERR("Invalid arguments");
+ return NULL;
+ }
+
+ list = settingitem_get_data_list(viewdata_get_parentitem(data));
+ if (!list) {
+ *cnt = 0;
+ return NULL;
+ }
+
+ *cnt = eina_list_count(list);
+
+ return list;
+}
+
+/**
+* This function is invoked to get current selected value.
+*
+* @param data [in] The _sublist_data data pointer.
+* @return The selected string value, NULL on error.
+*/
+static char *_get_selected_value(struct _sublist_data *data)
+{
+ struct settingitem *item;
+
+ if (!data || !data->sublist_view) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ item = viewdata_get_parentitem(data->sublist_view);
+ if (!item) {
+ _ERR("Get item failed");
+ return NULL;
+ }
+
+ return provider_get_list_value(item);
+}
+
+/**
+* This function is invoked to set selected value to middleware.
+*
+* @param data [in] The _sublist_data data pointer.
+* @param obj [in] The evas object user selected.
+* @return void.
+*/
+static void _set_selected_value(struct _sublist_data *data,
+ Evas_Object *obj)
+{
+ struct settingitem *item;
+ char *val;
+ int r;
+
+ if (!data || !data->sublist_view || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ item = viewdata_get_parentitem(data->sublist_view);
+ if (!item) {
+ _ERR("Get item failed");
+ return;
+ }
+
+ val = evas_object_data_get(obj, ITEMID);
+ if (val) {
+ r = provider_set_list_value(item, val);
+ if (r == -1)
+ _ERR("Set list value failed");
+ }
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if scroller go to bottom.
+*
+* @param data [in] The user data.
+* @param obj [in] The corresponding object which event occurred.
+* @param event [in] The event infomation.
+* @return void.
+*/
+static void _scroller_bottom_cb(void *data, Evas_Object *obj, void *event)
+{
+ struct _sublist_data *priv;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ elm_object_signal_emit(priv->ctxpopup, SUBLIST_SHOW_UP_ARROW, "");
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if scroller go to top.
+*
+* @param data [in] The user data.
+* @param obj [in] The corresponding object which event occurred.
+* @param event [in] The event infomation.
+* @return void.
+*/
+static void _scroller_top_cb(void *data, Evas_Object *obj, void *event)
+{
+ struct _sublist_data *priv;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ elm_object_signal_emit(priv->ctxpopup, SUBLIST_SHOW_DOWN_ARROW, "");
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if scroller is scrolling.
+*
+* @param data [in] The user data.
+* @param obj [in] The corresponding object which event occurred.
+* @param event [in] The event infomation.
+* @return void.
+*/
+static void _scroll_event_cb(void *data, Evas_Object *obj, void *event)
+{
+ struct _sublist_data *priv;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ elm_object_signal_emit(priv->ctxpopup, SUBLIST_SHOW_BOTH_ARROW, "");
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if evas object get focus.
+*
+* @param data [in] The user data.
+* @param obj [in] The corresponding object which event occurred.
+* @param ev [in] The event infomation.
+* @return void.
+*/
+static void _subitem_focus_in_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _sublist_data *priv;
+ char *val, *sel;
+
+ if (!obj || !data) {
+ _ERR("Invalid arguments\n");
+ return;
+ }
+
+ priv = data;
+
+ val = evas_object_data_get(obj, ITEMID);
+ if (!val) {
+ _ERR("Get value from btn failed\n");
+ return;
+ }
+
+ sel = _get_selected_value(priv);
+ if (!sel) {
+ _ERR("_get_selected_value failed\n");
+ return;
+ }
+
+ if (!strncmp(sel, val, strlen(sel)))
+ elm_object_signal_emit(obj, CTXPOPUPBTN_ICON_FOCUSED,
+ CTXPOPUPBTN_ICON_SOURCE);
+
+ elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_FOCUSED,
+ CTXPOPUPBTN_BUTTON_SOURCE);
+
+ provider_release_list_value(sel);
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if evas object lose focus.
+*
+* @param data [in] The user data.
+* @param obj [in] The corresponding object which event occurred.
+* @param ev [in] The event infomation.
+* @return void.
+*/
+static void _subitem_focus_out_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _sublist_data *priv;
+ char *val, *sel;
+
+ if (!obj || !data) {
+ _ERR("Invalid arguments\n");
+ return;
+ }
+
+ priv = data;
+
+ val = evas_object_data_get(obj, ITEMID);
+ if (!val) {
+ _ERR("Get value from btn failed\n");
+ return;
+ }
+
+ sel = _get_selected_value(priv);
+ if (!sel) {
+ _ERR("_get_selected_value failed\n");
+ return;
+ }
+
+ if (!strncmp(sel, val, strlen(sel)))
+ elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_HIGHLIGHT,
+ CTXPOPUPBTN_BUTTON_SOURCE);
+ else
+ elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_UNFOCUSED,
+ CTXPOPUPBTN_BUTTON_SOURCE);
+
+ provider_release_list_value(sel);
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if evas object be clicked.
+*
+* @param data [in] The user data.
+* @param obj [in] The corresponding object which event occurred.
+* @param ev [in] The event infomation.
+* @return void.
+*/
+static void _subitem_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _sublist_data *priv;
+
+ if (!data || !obj)
+ return;
+
+ priv = data;
+
+ _set_selected_value(priv, obj);
+
+ _exit_view(priv);
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if
+* ctxpopup dismissed.
+*
+* @param data [in] The user data.
+* @param obj [in] The corresponding object which event occurred.
+* @param ev [in] The event infomation.
+* @return void.
+*/
+static void _ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _sublist_data *priv;
+
+ if (!data)
+ return;
+
+ priv = data;
+
+ _exit_view(priv);
+}
+
+/**
+* This function is a @Evas_Smart_Cb type callback, it will be invoked if occurred
+* key press event.
+*
+* @param data [in] The user data.
+* @param e [in] The evas handler.
+* @param obj [in] The corresponding object which event occurred.
+* @param ei [in] The event infomation.
+* @return void.
+*/
+static void _subitem_key_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _sublist_data *priv;
+
+ if (!data || !ei)
+ return;
+
+ ev = ei;
+ priv = data;
+
+ if (!strcmp(ev->keyname, KEY_BACK))
+ _exit_view(priv);
+}
+
+/**
+* This function is invoked to draw ctxpopup layout.
+*
+* @param data [in] The _sublist_data data pointer.
+* @return 0 if success, -1 if fail.
+*/
+static int _draw_ctxpopup_layout(struct _sublist_data *data)
+{
+ Evas_Object *box, *ctxpopup, *scroller;
+
+ if (!data || !data->ctxpopup) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ ctxpopup = data->ctxpopup;
+ scroller = NULL;
+
+ if (data->sub_items_count > MAX_ITEMS) {
+ scroller = utils_add_scroller(ctxpopup);
+ if (!scroller) {
+ _ERR("elm_scroller_add failed\n");
+ return -1;
+ }
+
+ elm_object_style_set(scroller, SUBLIST_SCROLLER_STYLE);
+ elm_object_content_set(ctxpopup, scroller);
+
+ box = utils_add_box(ctxpopup);
+ if (!box) {
+ _ERR("elm_box_add failed\n");
+ evas_object_del(scroller);
+ return -1;
+ }
+
+ elm_object_content_set(scroller, box);
+
+ evas_object_smart_callback_add(scroller, SIG_SCROLL_BOTTOM,
+ _scroller_bottom_cb, data);
+ evas_object_smart_callback_add(scroller, SIG_SCROLL_TOP,
+ _scroller_top_cb, data);
+ evas_object_smart_callback_add(scroller, SIG_SCROLL,
+ _scroll_event_cb, data);
+
+ elm_object_signal_emit(ctxpopup, SUBLIST_SHOW_DOWN_ARROW, "");
+ } else {
+ box = utils_add_box(ctxpopup);
+ if (!box) {
+ _ERR("elm_box_add failed\n");
+ return -1;
+ }
+
+ elm_object_content_set(ctxpopup, box);
+
+ elm_object_signal_emit(ctxpopup, SUBLIST_HIDE_BOTH_ARROW, "");
+ }
+
+ data->popup_box = box;
+ data->scroller = scroller;
+
+ return 0;
+}
+
+/**
+* This function is invoked to draw list items.
+*
+* @param data [in] The _sublist_data data pointer.
+* @param list [in] The eina list data pointer.
+* @return 0 if success, -1 if fail.
+*/
+static int _draw_list_items(struct _sublist_data *data, Eina_List *list)
+{
+ struct listitem *ldata;
+ Eina_List *l;
+ Eina_Array *btns;
+ Eina_Array_Iterator a;
+ Evas_Object *btn, *tmp;
+ char *sel;
+ const char *name, *val;
+ int check, i, j;
+
+ if (!data || !list || !data->popup_box) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ sel = _get_selected_value(data);
+ if (!sel) {
+ _ERR("Get selected value failed");
+ return -1;
+ }
+
+ btns = eina_array_new(1);
+ if (!btns) {
+ _ERR("Allocate array failed\n");
+ provider_release_list_value(sel);
+ return -1;
+ }
+
+ i = 0;
+ j = 0;
+ check = 0;
+
+ EINA_LIST_FOREACH(list, l, ldata) {
+ name = listitem_get_display_name(ldata);
+
+ btn = utils_add_btn(data->popup_box, CTXPOPUPBTN_STYLE,
+ name, EINA_TRUE);
+ if (!btn) {
+ _ERR("Add button failed\n");
+ EINA_ARRAY_ITER_NEXT(btns, j, tmp, a)
+ evas_object_del(tmp);
+ eina_array_free(btns);
+ provider_release_list_value(sel);
+ return -1;
+ }
+
+ val = listitem_get_value(ldata);
+ if (!strncmp(sel, val, strlen(sel))) {
+ elm_object_signal_emit(btn,
+ CTXPOPUPBTN_BUTTON_HIGHLIGHT,
+ CTXPOPUPBTN_BUTTON_SOURCE);
+ check = i;
+ }
+
+ evas_object_data_set(btn, ITEMID, val);
+
+ evas_object_smart_callback_add(btn, SIG_ITEM_FOCUSED,
+ _subitem_focus_in_cb, data);
+ evas_object_smart_callback_add(btn, SIG_ITEM_UNFOCUSED,
+ _subitem_focus_out_cb, data);
+ evas_object_smart_callback_add(btn, SIG_ITEM_CLICKED,
+ _subitem_btn_clicked_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _subitem_key_pressed_cb, data);
+
+ elm_box_pack_end(data->popup_box, btn);
+ eina_array_push(btns, btn);
+
+ if (i == 0)
+ elm_object_focus_set(btn, EINA_TRUE);
+
+ i++;
+ }
+
+ data->sub_btn_array = btns;
+ data->selected_index = check;
+
+ provider_release_list_value(sel);
+
+ return 0;
+}
+
+/**
+* This function is invoked to draw sub list view.
+*
+* @param data [in] The _sublist_data data pointer.
+* @return 0 if success, -1 if fail.
+*/
+static int _draw_sublist(struct _sublist_data *data)
+{
+ struct settingview_data *view;
+ Eina_List *list;
+ double ratio, w;
+ int cnt, x, y, height;
+ struct obj_geometry_data *param;
+
+ if (!data || !data->sublist_view || !data->geometry_data) {
+ _ERR("Invalid argument\n");
+ return -1;
+ }
+
+ view = data->sublist_view;
+
+ cnt = 0;
+ list = _get_list_data(view, &cnt);
+ if (!list) {
+ _ERR("Get item list failed");
+ return -1;
+ }
+
+ data->sub_items_count = cnt;
+
+ if (_draw_ctxpopup_layout(data) == -1) {
+ _ERR("Fail to draw ctxpopup layout");
+ return -1;
+ }
+
+ if (_draw_list_items(data, list) == -1) {
+ _ERR("Fail to draw list items");
+ return -1;
+ }
+
+ param = data->geometry_data;
+
+ w = param->width;
+ if (w <= 0) {
+ _ERR("Fail to get clicked button width");
+ return -1;
+ }
+
+ ratio = (w - SUBLIST_WIDTH - SUBLIST_OFFSET) / w;
+
+ x = param->x + param->width * ratio;
+ y = param->y;
+
+ if (data->sub_items_count < MAX_ITEMS)
+ height = data->sub_items_count * ITEM_HEIGHT;
+ else
+ height = MAX_ITEMS * ITEM_HEIGHT + ITEM_OFFSET;
+
+ if (y > WIN_HEIGHT)
+ y = y - height;
+
+ evas_object_move(data->ctxpopup, x * ELM_SCALE, y * ELM_SCALE);
+
+ utils_set_focus_directions(data->sub_btn_array, data->sub_items_count);
+
+ return 0;
+}
+
+/**
+* This function is invoked to create view layout.
+*
+* @param mgr [in] The setting_mgr data pointer passed by @settingmgr_view_push.
+* @param view [in] The settingview_data data pointer passed by @settingmgr_view_push.
+* @param prev [in] The parameter data which passed by prev view or NULL.
+* @return View layout evas object, NULL on error.
+*/
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ Evas_Object *base, *ctxpopup, *win;
+ struct _sublist_data *data;
+
+ if (!mgr || !view || !prev) {
+ _ERR("Invalid argument!\n");
+ return NULL;
+ }
+
+ win = settingmgr_get_win(mgr);
+ if (!win) {
+ _ERR("Fail to get win");
+ return NULL;
+ }
+
+ data = calloc(1, sizeof(*data));
+ if (!data) {
+ _ERR("Unable to allocate memory\n");
+ return NULL;
+ }
+
+ base = elm_layout_add(win);
+ if (!base) {
+ free(data);
+ return NULL;
+ }
+
+ elm_layout_file_set(base, EDJ_FILE, SUBLIST_VIEW_PAGE);
+
+ ctxpopup = utils_add_ctxpopup(win, SUBLIST_CTXPOPUP_STYLE1);
+ if (!ctxpopup) {
+ _ERR("Fail to add ctxpopup");
+ evas_object_del(base);
+ free(data);
+ return NULL;
+ }
+
+ evas_object_smart_callback_add(ctxpopup, SIG_CTXPOPUP_DISMISSED,
+ _ctxpopup_dismissed_cb, data);
+
+ data->geometry_data = prev;
+
+ data->mgr = mgr;
+ data->win = win;
+ data->base = base;
+ data->ctxpopup = ctxpopup;
+ data->sublist_view = view;
+
+ evas_object_data_set(base, DATA_ID, data);
+
+ if (_draw_sublist(data) == -1) {
+ _ERR("Error in drawing items function\n");
+ evas_object_del(base);
+ evas_object_del(ctxpopup);
+ if (data->sub_btn_array)
+ eina_array_free(data->sub_btn_array);
+
+ free(data);
+ return NULL;
+ }
+
+ return base;
+
+}
+
+/**
+* This function is invoked to show view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _show(Evas_Object *base)
+{
+ struct _sublist_data *data;
+
+ if (!base) {
+ _ERR("Invalid argument\n");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Get sublist data failed\n");
+ return;
+ }
+
+ evas_object_show(data->ctxpopup);
+ evas_object_show(base);
+}
+
+/**
+* This function is invoked to destroy view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _destroy(Evas_Object *base)
+{
+ struct _sublist_data *data;
+
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Invalid arguments");
+ evas_object_del(data->ctxpopup);
+ evas_object_del(base);
+ return;
+ }
+
+ if (data->sub_btn_array)
+ eina_array_free(data->sub_btn_array);
+
+ evas_object_del(data->ctxpopup);
+ evas_object_del(base);
+
+ if (data->sublist_view)
+ viewdata_release(data->sublist_view);
+
+ free(data);
+}
+
+/**
+* This function is invoked to hide view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _hide(Evas_Object *base)
+{
+ struct _sublist_data *data;
+
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Invalid arguments");
+ return;
+ }
+
+ evas_object_hide(base);
+ evas_object_hide(data->ctxpopup);
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_SUBLIST,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .hide_view = 0
+};
+
+/**
+* This function is invoked to get sub list view class object.
+*
+* @return The setting_class data static pointer, NULL on error.
+*/
+struct setting_class *view_sublist_get_vclass(void)
+{
+ return &_vclass;
+}
+++ /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 <AppCommon.h>
-#include "common_defs.h"
-#include "stdbool.h"
-#include "settingviewmgr.h"
-#include "utils.h"
-#include "data_wrapper.h"
-#include "settings_provider.h"
-#include "view_sublist.h"
-#include "settingviewmgr.h"
-
-
-enum EId {
- ID_BTNS,
-};
-
-#define MAX_ITEMS 8
-#define ITEMID "itemdata"
-
-#define SUBLIST_OFFSET 70.0
-#define SUBLIST_WIDTH 310.0
-#define ITEM_HEIGHT 82
-#define ITEM_OFFSET (39 * 2)
-
-#define SIG_SCROLL_BOTTOM "edge,bottom"
-#define SIG_SCROLL_TOP "edge,top"
-#define SIG_SCROLL "scroll"
-#define SIG_ITEM_FOCUSED "focused"
-#define SIG_ITEM_UNFOCUSED "unfocused"
-#define SIG_ITEM_CLICKED "clicked"
-#define SIG_CTXPOPUP_DISMISSED "dismissed"
-
-struct SSublistView {
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *ctxpopup;
- Evas_Object *popup_box;
- Evas_Object *scroller;
- Eina_Array *sub_btn_array;
-
- int sub_items_count;
- int selected_index;
- struct obj_geometry_data *geometry_data;
- struct settingview_data *sublist_view;
- CSettingMgr *mgr;
-};
-
-//static void _destroy(Evas_Object *base);
-//static void _hide(Evas_Object *base);
-
-/**
-* This function is invoked to exit and pop current view.
-*
-* @param data [in] The _sublist_data data pointer.
-* @return void.
-*/
-void CSublistView::m_ExitView(void)
-{
- _DBG();
-
- Hide();
-
- m->mgr->ViewPop();
-}
-
-/**
-* This function is invoked to get item's data list.
-*
-* @param data [in] The settingview_data data pointer.
-* @param cnt [out] The list element numbers
-* @return The Eina_List data pointer, NULL on error.
-*/
-static Eina_List *_get_list_data(struct settingview_data *data, int *cnt)
-{
- Eina_List *list;
-
- if (!data || !cnt) {
- _ERR("Invalid arguments");
- return NULL;
- }
-
- list = settingitem_get_data_list(viewdata_get_parentitem(data));
- if (!list) {
- *cnt = 0;
- return NULL;
- }
-
- *cnt = eina_list_count(list);
-
- return list;
-}
-
-/**
-* This function is invoked to get current selected value.
-*
-* @param data [in] The _sublist_data data pointer.
-* @return The selected string value, NULL on error.
-*/
-static char *_get_selected_value(SSublistView *data)
-{
- struct settingitem *item;
-
- if (!data || !data->sublist_view) {
- _ERR("Invalid argument");
- return NULL;
- }
-
- item = viewdata_get_parentitem(data->sublist_view);
- if (!item) {
- _ERR("Get item failed");
- return NULL;
- }
-
- return provider_get_list_value(item);
-}
-
-/**
-* This function is invoked to set selected value to middleware.
-*
-* @param data [in] The _sublist_data data pointer.
-* @param obj [in] The evas object user selected.
-* @return void.
-*/
-void CSublistView::m_SetSelectedValue(Evas_Object *obj)
-{
- struct settingitem *item;
- char *val;
- int r;
-
- if (!m->sublist_view || !obj) {
- _ERR("Invalid argument");
- return;
- }
-
- item = viewdata_get_parentitem(m->sublist_view);
- if (!item) {
- _ERR("Get item failed");
- return;
- }
-
- val = (char *) evas_object_data_get(obj, ITEMID);
- if (val) {
- r = provider_set_list_value(item, val);
- if (r == -1)
- _ERR("Set list value failed");
- }
-}
-
-/**
-* This function is a @Evas_Smart_Cb type callback, it will be invoked if scroller go to bottom.
-*
-* @param data [in] The user data.
-* @param obj [in] The corresponding object which event occurred.
-* @param event [in] The event infomation.
-* @return void.
-*/
-static void _scroller_bottom_cb(void *data, Evas_Object *obj, void *event)
-{
- SSublistView *priv;
-
- if (!data) {
- _ERR("Invalid argument");
- return;
- }
-
- priv = (SSublistView *) data;
-
- elm_object_signal_emit(priv->ctxpopup, SUBLIST_SHOW_UP_ARROW, "");
-}
-
-/**
-* This function is a @Evas_Smart_Cb type callback, it will be invoked if scroller go to top.
-*
-* @param data [in] The user data.
-* @param obj [in] The corresponding object which event occurred.
-* @param event [in] The event infomation.
-* @return void.
-*/
-static void _scroller_top_cb(void *data, Evas_Object *obj, void *event)
-{
- SSublistView *priv;
-
- if (!data) {
- _ERR("Invalid argument");
- return;
- }
-
- priv = (SSublistView *) data;
-
- elm_object_signal_emit(priv->ctxpopup, SUBLIST_SHOW_DOWN_ARROW, "");
-}
-
-/**
-* This function is a @Evas_Smart_Cb type callback, it will be invoked if scroller is scrolling.
-*
-* @param data [in] The user data.
-* @param obj [in] The corresponding object which event occurred.
-* @param event [in] The event infomation.
-* @return void.
-*/
-static void _scroll_event_cb(void *data, Evas_Object *obj, void *event)
-{
- SSublistView *priv;
-
- if (!data) {
- _ERR("Invalid argument");
- return;
- }
-
- priv = (SSublistView *) data;
-
- elm_object_signal_emit(priv->ctxpopup, SUBLIST_SHOW_BOTH_ARROW, "");
-}
-
-
-/**
-* This function is a @Evas_Smart_Cb type callback, it will be invoked if
-* ctxpopup dismissed.
-*
-* @param data [in] The user data.
-* @param obj [in] The corresponding object which event occurred.
-* @param ev [in] The event infomation.
-* @return void.
-*/
-void CSublistView::sm_CbCtxpopupDismissed(void *data, Evas_Object *obj, void *ev)
-{
- _DBG();
- CSublistView *root = (CSublistView*)data;
- if (root)
- root->m_OnCtxpopupDismissed(obj, ev);
-}
-
-
-void CSublistView::m_OnCtxpopupDismissed(Evas_Object *obj, void *ev)
-{
- _DBG();
- m_ExitView();
-}
-
-
-/**
-* This function is invoked to draw ctxpopup layout.
-*
-* @param data [in] The _sublist_data data pointer.
-* @return 0 if success, -1 if fail.
-*/
-bool CSublistView::m_DrawCtxpopupLayout()
-{
- _DBG();
- if (!m->ctxpopup) {
- _ERR("Invalid argument");
- return false;
- }
-
- if (m->sub_items_count > MAX_ITEMS) {
- _DBG();
- m->scroller = utils_add_scroller(m->ctxpopup);
- if (!m->scroller) {
- _ERR("elm_scroller_add failed");
- return false;
- }
-
- //elm_object_style_set(m->scroller, SUBLIST_SCROLLER_STYLE);
- elm_object_content_set(m->ctxpopup, m->scroller);
-
- m->popup_box = utils_add_box(m->ctxpopup);
- if (!m->popup_box) {
- _ERR("elm_box_add failed");
- evas_object_del(m->scroller);
- return false;
- }
-
- elm_object_content_set(m->scroller, m->popup_box);
-
- evas_object_smart_callback_add(m->scroller, SIG_SCROLL_BOTTOM, _scroller_bottom_cb, m);
- evas_object_smart_callback_add(m->scroller, SIG_SCROLL_TOP, _scroller_top_cb, m);
- evas_object_smart_callback_add(m->scroller, SIG_SCROLL, _scroll_event_cb, m);
-
- elm_object_signal_emit(m->ctxpopup, SUBLIST_SHOW_DOWN_ARROW, "");
- } else {
- m->popup_box = utils_add_box(m->ctxpopup);
- if (!m->popup_box) {
- _ERR("elm_box_add failed");
- return false;
- }
-
- elm_object_content_set(m->ctxpopup, m->popup_box);
-
- elm_object_signal_emit(m->ctxpopup, SUBLIST_HIDE_BOTH_ARROW, "");
- }
-
- return true;
-}
-
-/**
-* This function is invoked to draw list items.
-*
-* @param data [in] The _sublist_data data pointer.
-* @param list [in] The eina list data pointer.
-* @return 0 if success, -1 if fail.
-*/
-bool CSublistView::m_DrawListItems(Eina_List *list)
-{
- _DBG();
- struct listitem *ldata;
- void* obj;
- Eina_List *l;
- Eina_Array *btns;
- Eina_Array_Iterator a;
- Evas_Object *btn, *tmp;
- char *sel;
- const char *name, *val;
- unsigned int check, i, j;
-
- if (!list || !m->popup_box) {
- _ERR("Invalid argument");
- return false;
- }
-
- sel = _get_selected_value(m);
- if (!sel) {
- _ERR("Get selected value failed");
- return false;
- }
-
- btns = eina_array_new(1);
- if (!btns) {
- _ERR("Allocate array failed");
- provider_release_list_value(sel);
- return false;
- }
-
- i = 0;
- j = 0;
- check = 0;
-
- EINA_LIST_FOREACH(list, l, obj) {
- ldata = (struct listitem *) obj;
- name = listitem_get_display_name(ldata);
-
- btn = utils_add_btn(m->popup_box, CTXPOPUPBTN_STYLE, name, EINA_TRUE);
- if (!btn) {
- _ERR("Add button failed");
- EINA_ARRAY_ITER_NEXT(btns, j, obj, a)
- {
- tmp = (Evas_Object *) obj;
- evas_object_del(tmp);
- }
- eina_array_free(btns);
- provider_release_list_value(sel);
- return false;
- }
-
- val = listitem_get_value(ldata);
- if (!strncmp(sel, val, strlen(sel))) {
- elm_object_signal_emit(btn, CTXPOPUPBTN_BUTTON_HIGHLIGHT, CTXPOPUPBTN_BUTTON_SOURCE);
- check = i;
- }
-
- evas_object_data_set(btn, ITEMID, val);
-
- _DBG("[%s] Connected", name);
- Connect(btn, ID_BTNS, TYPE_FOCUSED | TYPE_UNFOCUSED | TYPE_CLICKED | TYPE_KEY_DOWN);
-
- //evas_object_smart_callback_add(btn, SIG_ITEM_FOCUSED, sm_CbSubitemFocusIn, this);
- //evas_object_smart_callback_add(btn, SIG_ITEM_UNFOCUSED, sm_CbSubitemFocusOut, this);
- //evas_object_smart_callback_add(btn, SIG_ITEM_CLICKED, sm_CbSubitemBtnClicked, this);
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, sm_CbSubitemKeyPressed, this);
-
- elm_box_pack_end(m->popup_box, btn);
- eina_array_push(btns, btn);
-
- if (i == 0)
- elm_object_focus_set(btn, EINA_TRUE);
-
- i++;
- }
-
- m->sub_btn_array = btns;
- m->selected_index = check;
-
- provider_release_list_value(sel);
-
- return true;
-}
-
-/**
-* This function is invoked to draw sub list view.
-*
-* @param data [in] The _sublist_data data pointer.
-* @return 0 if success, -1 if fail.
-*/
-bool CSublistView::m_DrawSublist(void)
-{
- _DBG();
- Eina_List *list;
- int cnt;
-
- if (!m->sublist_view || !m->geometry_data) {
- _ERR("Invalid argument\n");
- return false;
- }
-
- cnt = 0;
- list = _get_list_data(m->sublist_view, &cnt);
- if (!list) {
- _ERR("Get item list failed");
- return false;
- }
-
- m->sub_items_count = cnt;
-
- if (!m_DrawCtxpopupLayout()) {
- _ERR("Fail to draw ctxpopup layout");
- return false;
- }
-
- if (!m_DrawListItems(list)) {
- _ERR("Fail to draw list items");
- return false;
- }
-
- evas_object_move(m->ctxpopup, m->geometry_data->x + m->geometry_data->width , m->geometry_data->y);
-
- utils_set_focus_directions(m->sub_btn_array, m->sub_items_count);
-
- return true;
-}
-
-
-
-Evas_Object* CSublistView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-/**
-* This function is invoked to create view layout.
-*
-* @param mgr [in] The setting_mgr data pointer passed by @settingmgr_view_push.
-* @param view [in] The settingview_data data pointer passed by @settingmgr_view_push.
-* @param prev [in] The parameter data which passed by prev view or NULL.
-* @return View layout evas object, NULL on error.
-*/
-bool CSublistView::Create(struct settingview_data *view, void *prev)
-{
- ASSERT(!m);
- ASSERT(view);
- ASSERT(prev);
- _DBG();
-
- _CREATE_BEGIN {
- _CHECK(m = new SSublistView)
- _CHECK(m->mgr = CSettingMgr::GetInstance())
- _CHECK(m->win = m->mgr->Window())
- _CHECK(m->base = elm_layout_add(m->win))
- _COMMAND {
- elm_layout_file_set(m->base, EDJ_FILE, SUBLIST_VIEW_PAGE);
- }
- //_CHECK(m->ctxpopup = utils_add_ctxpopup(m->win, (char *) SUBLIST_CTXPOPUP_STYLE1))
- _CHECK(m->ctxpopup = utils_add_ctxpopup(m->win, NULL))
- _COMMAND {
- evas_object_smart_callback_add(m->ctxpopup, SIG_CTXPOPUP_DISMISSED, sm_CbCtxpopupDismissed, this);
- m->geometry_data = (struct obj_geometry_data *) prev;
- _DBG("m-geometry_data w:%d, h:%d, x:%d, y:%d",
- m->geometry_data->width,
- m->geometry_data->height,
- m->geometry_data->x,
- m->geometry_data->y
- );
-
- m->sublist_view = view;
- }
- _CHECK(m_DrawSublist())
- _WHEN_SUCCESS { }
- _CHECK_FAIL{ if (m->sub_btn_array) eina_array_free(m->sub_btn_array); }
- _CHECK_FAIL{ if(m->ctxpopup) evas_object_del(m->ctxpopup); }
- _CHECK_FAIL{ if(m->base) evas_object_del(m->base); }
- _CHECK_FAIL{/* m->win = m->mgr->Window() */}
- _CHECK_FAIL{/* m->mgr = CSettingMgr::GetInstance() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-/**
-* This function is invoked to show view layout.
-*
-* @param base [in] The view layout evas object.
-* @return void.
-*/
-void CSublistView::Show(void)
-{
- ASSERT(m);
- _DBG();
-
- evas_object_show(m->ctxpopup);
- evas_object_show(m->base);
-}
-
-/**
-* This function is invoked to destroy view layout.
-*
-* @param base [in] The view layout evas object.
-* @return void.
-*/
-void CSublistView::Destroy(void)
-{
- ASSERT(m);
- _DBG();
-
- if (m->sub_btn_array)
- eina_array_free(m->sub_btn_array);
-
- evas_object_del(m->ctxpopup);
- evas_object_del(m->base);
-
- if (m->sublist_view)
- viewdata_release(m->sublist_view);
-
- delete m;
- m = NULL;
-}
-
-/**
-* This function is invoked to hide view layout.
-*
-* @param base [in] The view layout evas object.
-* @return void.
-*/
-void CSublistView::Hide(void)
-{
- ASSERT(m);
- _DBG();
-
- evas_object_hide(m->base);
- evas_object_hide(m->ctxpopup);
-}
-
-
-void CSublistView::OnMouseClicked(int id, Evas_Object *obj)
-{
- _DBG();
- if (id != ID_BTNS)
- return;
-
- if (!obj)
- return;
-
- m_SetSelectedValue(obj);
-
- m_ExitView();
-}
-
-
-void CSublistView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- _DBG();
- if (id != ID_BTNS)
- return;
-
- char *val, *sel;
-
- if (!obj) {
- _ERR("Invalid arguments\n");
- return;
- }
-
- val = (char *)evas_object_data_get(obj, ITEMID);
- if (!val) {
- _ERR("Get value from btn failed\n");
- return;
- }
-
- sel = _get_selected_value(m);
- if (!sel) {
- _ERR("_get_selected_value failed\n");
- return;
- }
-
- if (!strncmp(sel, val, strlen(sel)))
- elm_object_signal_emit(obj, CTXPOPUPBTN_ICON_FOCUSED,
- CTXPOPUPBTN_ICON_SOURCE);
-
- elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_FOCUSED,
- CTXPOPUPBTN_BUTTON_SOURCE);
-
- provider_release_list_value(sel);
-}
-
-
-void CSublistView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- _DBG();
- if (id != ID_BTNS)
- return;
-
- char *val, *sel;
-
- if (!obj) {
- _ERR("Invalid arguments\n");
- return;
- }
-
- val = (char *)evas_object_data_get(obj, ITEMID);
- if (!val) {
- _ERR("Get value from btn failed\n");
- return;
- }
-
- sel = _get_selected_value(m);
- if (!sel) {
- _ERR("_get_selected_value failed\n");
- return;
- }
-
- if (!strncmp(sel, val, strlen(sel)))
- elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_HIGHLIGHT,
- CTXPOPUPBTN_BUTTON_SOURCE);
- else
- elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_UNFOCUSED,
- CTXPOPUPBTN_BUTTON_SOURCE);
-
- provider_release_list_value(sel);
-}
-
-
-void CSublistView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- _DBG();
- if (id != ID_BTNS)
- return;
-
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE))
- m_ExitView();
-}
* limitations under the License.
*/
-#include <AppCommon.h>
-#include "common_defs.h"
+#include <KeyDefine.h>
+
+#include "dbg.h"
+#include "def.h"
#include "stdbool.h"
-#include "settingviewmgr.h"
+#include "viewmgr.h"
#include "utils.h"
#include "data_wrapper.h"
#include "settings_provider.h"
#define SIG_UNFOCUSED "unfocused"
#define SIG_CLICKED "clicked"
-enum EId {
- ID_BTNS,
-};
-
-struct SSystemClockView {
+struct _sysclk_data {
Evas_Object *win;
Evas_Object *base;
Evas_Object *ctxpopup;
int count;
int sel_idx;
struct settingview_data *vdata;
- CSettingMgr *mgr;
+ struct setting_mgr *mgr;
struct evas_obj_data ugd;
struct obj_geometry_data *ogd;
};
+static void _destroy(Evas_Object *base);
+static void _hide(Evas_Object *base);
/**
* Exit system clock sublist view.
*
* @return: void.
*/
-void CSystemClockView::m_ExitView(void)
+static void _exit_view(struct _sysclk_data *data)
{
- ASSERT(m);
+ if (!data || !data->base)
+ return;
- Hide();
+ _hide(data->base);
- m->mgr->ViewPop();
+ settingmgr_view_pop(data->mgr);
}
/**
*
* @return: the selected value or null if error occurred.
*/
-static char *_get_selected_value(SSystemClockView *data)
+static char *_get_selected_value(struct _sysclk_data *data)
{
struct settingitem *item;
*
* @return: void.
*/
-static void _set_selected_value(SSystemClockView *data, Evas_Object *obj)
+static void _set_selected_value(struct _sysclk_data *data, Evas_Object *obj)
{
struct settingitem *item;
char *selval;
return;
}
- selval = (char *) evas_object_data_get(obj, ITEMID);
+ selval = evas_object_data_get(obj, ITEMID);
if (selval) {
ret = provider_set_list_value(item, selval);
if (ret != 0)
}
}
+/**
+* Evas_Smart_Cb type callback for handling foucs in event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the foucs in event occurred.
+* @param[in]: ev : event info.
+*
+* @return: void.
+*/
+static void _subitem_focusin_cb(void *priv, Evas_Object *obj, void *ev)
+{
+ struct _sysclk_data *data;
+ char *value;
+ char *selval;
+
+ if (!obj || !priv) {
+ _ERR("Invalid arguments\n");
+ return;
+ }
+
+ data = priv;
+
+ value = evas_object_data_get(obj, ITEMID);
+ if (!value) {
+ _ERR("Get value from btn failed\n");
+ return;
+ }
+
+ selval = _get_selected_value(data);
+ if (!selval) {
+ _ERR("_get_selected_value failed\n");
+ return;
+ }
+
+ if (!strncmp(selval, value, strlen(selval))) {
+ elm_object_signal_emit(obj, CTXPOPUPBTN_ICON_FOCUSED,
+ CTXPOPUPBTN_ICON_SOURCE);
+ }
+
+ elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_FOCUSED,
+ CTXPOPUPBTN_BUTTON_SOURCE);
+
+ provider_release_list_value(selval);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling focus out event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the focus out event occurred.
+* @param[in]: ev : event info.
+*
+* @return: void.
+*/
+static void _subitem_focusout_cb(void *priv, Evas_Object *obj, void *ev)
+{
+ struct _sysclk_data *data;
+ char *value;
+ char *selval;
+
+ if (!obj || !priv) {
+ _ERR("Invalid arguments\n");
+ return;
+ }
+
+ data = priv;
+
+ value = evas_object_data_get(obj, ITEMID);
+ if (!value) {
+ _ERR("Get value from btn failed\n");
+ return;
+ }
+
+ selval = _get_selected_value(data);
+ if (!selval) {
+ _ERR("_get_selected_value failed\n");
+ return;
+ }
+
+ if (!strncmp(selval, value, strlen(selval)))
+ elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_HIGHLIGHT,
+ CTXPOPUPBTN_BUTTON_SOURCE);
+ else
+ elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_UNFOCUSED,
+ CTXPOPUPBTN_BUTTON_SOURCE);
+
+ provider_release_list_value(selval);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ev : event info.
+*
+* @return: void.
+*/
+static void _subitem_clicked_cb(void *priv, Evas_Object *obj, void *ev)
+{
+ struct _sysclk_data *data;
+ struct settingitem *item;
+ Eina_List *list;
+ char *value;
+ const char *id;
+ const char *name;
+
+ if (!priv || !obj)
+ return;
+
+ data = priv;
+
+ _set_selected_value(data, obj);
+
+ value = evas_object_data_get(obj, ITEMID);
+ if (!value) {
+ _ERR("get value from obj failed. DATA_ID: %s", ITEMID);
+ return;
+ }
+
+ if (!strncmp(value, MANUAL, BUF_SIZE)) {
+ _hide(data->base);
+
+ list = viewdata_get_childitems_list(data->vdata);
+ if (!list) {
+ _ERR("list of clock is null.");
+ return;
+ }
+
+ item = eina_list_nth(list, CLOCK_ITEM);
+ if (!item) {
+ _ERR("there is no clock_mode item in list.");
+ return;
+ }
+
+ id = settingitem_get_id(item);
+ if (!id) {
+ _ERR("get item id failed.");
+ return;
+ }
+
+ name = settingitem_get_display_name(item);
+ if (!name) {
+ _ERR("get display_name failed.");
+ return;
+ }
+
+ data->ugd.display_name = name;
+
+ settingmgr_view_push(data->mgr, id, (void *)&data->ugd);
+ } else {
+ _exit_view(data);
+ }
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling key press event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the corresponding object which the key press event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _subitem_keypress_cb(void *priv, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _sysclk_data *data;
+
+ if (!priv || !ei)
+ return;
+
+ data = priv;
+ ev = ei;
+
+ if (!ev->keyname)
+ return;
+ if (!strncmp(ev->keyname, KEY_BACK, BUF_SIZE))
+ _exit_view(data);
+}
/**
* Create system clock sublist items.
*
* @return: 0 - Success, -1 - Fail.
*/
-bool CSystemClockView::m_AddSysclkSublistItem(Eina_List *list, const char *selval)
+static int _add_sysclk_sublist_item(struct _sysclk_data *data,
+ Eina_List *list, const char *selval)
{
Evas_Object *box, *cp, *btn, *del_btn;
Eina_Array *array;
Eina_Array_Iterator aiter;
struct listitem *li;
- void* obj;
Eina_List *iter;
const char *disp, *value;
- unsigned int idx, i, j;
+ int idx, i, j;
- if (!list || !m->ctxpopup || !selval) {
+ if (!data || !list || !data->ctxpopup || !selval) {
_ERR("invalid arguments.");
- return false;
+ return -1;
}
- cp = m->ctxpopup;
+ cp = data->ctxpopup;
box = utils_add_box(cp);
if (!box) {
_ERR("utils add box to ctxpopup failed.");
- return false;
+ return -1;
}
elm_object_content_set(cp, box);
if (!array) {
_ERR("eina array new failed.");
evas_object_del(box);
- return false;
+ return -1;
}
i = idx = 0;
- EINA_LIST_FOREACH(list, iter, obj) {
- li = (struct listitem *) obj;
+ EINA_LIST_FOREACH(list, iter, li) {
disp = listitem_get_display_name(li);
if (!disp) {
_ERR("display name of list item is null.");
}
evas_object_data_set(btn, ITEMID, value);
- Connect(btn, ID_BTNS, TYPE_FOCUSED | TYPE_UNFOCUSED | TYPE_CLICKED | TYPE_KEY_DOWN);
+
+ evas_object_smart_callback_add(btn, SIG_FOCUSED,
+ _subitem_focusin_cb, data);
+ evas_object_smart_callback_add(btn, SIG_UNFOCUSED,
+ _subitem_focusout_cb, data);
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _subitem_clicked_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _subitem_keypress_cb, data);
elm_box_pack_end(box, btn);
eina_array_push(array, btn);
i++;
}
- m->box = box;
- m->array = array;
- m->sel_idx = idx;
+ data->box = box;
+ data->array = array;
+ data->sel_idx = idx;
- return true;
+ return 0;
error:
- EINA_ARRAY_ITER_NEXT(array, j, obj, aiter) {
- del_btn = (Evas_Object *) obj;
+ EINA_ARRAY_ITER_NEXT(array, j, del_btn, aiter) {
if (del_btn)
evas_object_del(del_btn);
}
evas_object_del(box);
eina_array_free(array);
- return false;
+ return -1;
}
/**
*
* @return: 0 - Success, -1 - Fail.
*/
-bool CSystemClockView::m_DrawSysclkSublist(void)
+static int _draw_sysclk_sublist(struct _sysclk_data *data)
{
Evas_Object *ctxpopup;
char *selval;
struct settingview_data *vdata;
struct obj_geometry_data *ogd;
Eina_List *itlist;
- int xpos, ypos, height, count;
+ int xpos, ypos, height, count, r;
double ratio;
- if (!m->ctxpopup || !m->ogd || !m->vdata) {
+ if (!data || !data->ctxpopup || !data->ogd || !data->vdata) {
_ERR("Invalid argument\n");
- return false;
+ return -1;
}
- ctxpopup = m->ctxpopup;
- vdata = m->vdata;
- ogd = m->ogd;
+ ctxpopup = data->ctxpopup;
+ vdata = data->vdata;
+ ogd = data->ogd;
count = 0;
itlist = _get_item_list(vdata, &count);
if (!itlist) {
_ERR("Get item list failed");
- return false;
+ return -1;
}
- m->count = count;
+ data->count = count;
- selval = _get_selected_value(m);
+ selval = _get_selected_value(data);
if (!selval) {
_ERR("Get selected value failed");
- return false;
+ return -1;
}
if (count > MAX_ITEMS) {
goto error;
}
- if (!m_AddSysclkSublistItem(itlist, selval)) {
+ r = _add_sysclk_sublist_item(data, itlist, selval);
+ if (r != 0) {
_ERR("add system clock sublist items failed.");
goto error;
}
xpos = ogd->x + ogd->width * ratio;
ypos = ogd->y;
- height = m->count * ITEM_HEIGHT;
+ height = data->count * ITEM_HEIGHT;
if (ypos > WIN_HEIGHT)
ypos = ypos - height;
evas_object_move(ctxpopup, xpos * ELM_SCALE, ypos * ELM_SCALE);
- utils_set_focus_directions(m->array, m->count);
+ utils_set_focus_directions(data->array, data->count);
provider_release_list_value(selval);
- return true;
+ return 0;
error:
provider_release_list_value(selval);
- return false;
+ return -1;
}
/**
*
* @return: void.
*/
-void CSystemClockView::sm_CbCtxpopupDismissed(void *priv, Evas_Object *obj, void *ev)
+static void _ctxpopup_dismissed(void *priv, Evas_Object *obj,
+ void *ev)
{
- CSystemClockView *root = (CSystemClockView*)priv;
+ struct _sysclk_data *data;
- if (root)
- root->m_OnCtxpopupDismissed(obj, ev);
-}
-
-
-void CSystemClockView::m_OnCtxpopupDismissed(Evas_Object *obj, void *ev)
-{
- if (!obj)
+ if (!priv || !obj)
return;
- Hide();
-
- m->mgr->ViewPop();
-}
-
+ data = priv;
-Evas_Object* CSystemClockView::Base(void)
-{
- ASSERT(m);
+ _hide(data->base);
- return m->base;
+ settingmgr_view_pop(data->mgr);
}
-
/**
* Create all the UI components of system clock sublist view.
*
* @return: the base layout of system clock view or null
* if error occurred.
*/
-bool CSystemClockView::Create(struct settingview_data *view, void *prev)
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
{
- ASSERT(!m);
- ASSERT(view);
- ASSERT(prev);
-
Evas_Object *base;
Evas_Object *ctxpopup;
Evas_Object *win;
+ struct _sysclk_data *data;
struct evas_obj_data *ugd;
struct obj_geometry_data *ogd;
- CSettingMgr *mgr = CSettingMgr::GetInstance();
+ if (!mgr || !view || !prev) {
+ _ERR("Invalid argument!\n");
+ return NULL;
+ }
- ugd = (struct evas_obj_data *) prev;
- ogd = (struct obj_geometry_data *) evas_object_data_get(ugd->cur_btn, DATA_ID);
+ ugd = prev;
+ ogd = evas_object_data_get(ugd->cur_btn, DATA_ID);
- win = mgr->Window();
- ASSERT(win);
+ win = settingmgr_get_win(mgr);
+ if (!win) {
+ _ERR("settingmgr get window failed.");
+ return NULL;
+ }
- m = new SSystemClockView;
- if (!m) {
+ data = calloc(1, sizeof(*data));
+ if (!data) {
_ERR("Unable to allocate memory.");
- return false;
+ return NULL;
}
- m->ugd = *ugd;
+ data->ugd = *ugd;
base = elm_layout_add(win);
if (!base) {
- delete m;
- m = NULL;
- return false;
+ free(data);
+ return NULL;
}
elm_layout_file_set(base, EDJ_FILE, SUBLIST_VIEW_PAGE);
- ctxpopup = utils_add_ctxpopup(win, (char *) SUBLIST_CTXPOPUP_STYLE1);
+ ctxpopup = utils_add_ctxpopup(win, SUBLIST_CTXPOPUP_STYLE1);
if (!ctxpopup) {
_ERR("Fail to add ctxpopup");
evas_object_del(base);
- delete m;
- m = NULL;
- return false;
+ free(data);
+ return NULL;
}
evas_object_smart_callback_add(ctxpopup, SIG_DISMISSED,
- sm_CbCtxpopupDismissed, this);
+ _ctxpopup_dismissed, data);
- m->mgr = mgr;
- m->win = win;
- m->base = base;
- m->ctxpopup = ctxpopup;
- m->vdata = view;
- m->ogd = ogd;
+ data->mgr = mgr;
+ data->win = win;
+ data->base = base;
+ data->ctxpopup = ctxpopup;
+ data->vdata = view;
+ data->ogd = ogd;
- evas_object_data_set(base, DATA_ID, m);
+ evas_object_data_set(base, DATA_ID, data);
- if (!m_DrawSysclkSublist()) {
+ if (_draw_sysclk_sublist(data) == -1) {
_ERR("Error in drawing items function\n");
evas_object_del(base);
evas_object_del(ctxpopup);
- delete m;
- m = NULL;
- return false;
+ free(data);
+ return NULL;
}
- return true;
+ return base;
}
/**
*
* @return: void.
*/
-void CSystemClockView::Show(void)
+static void _show(Evas_Object *base)
{
- ASSERT(m);
+ struct _sysclk_data *data;
+
+ if (!base) {
+ _ERR("Invalid argument\n");
+ return;
+ }
- evas_object_show(m->ctxpopup);
- evas_object_show(m->base);
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Get sublist data failed\n");
+ return;
+ }
+
+ evas_object_show(data->ctxpopup);
+ evas_object_show(base);
}
/**
*
* @return: void.
*/
-void CSystemClockView::Destroy(void)
+static void _destroy(Evas_Object *base)
{
- ASSERT(m);
+ struct _sysclk_data *data;
+
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Invalid arguments");
+ evas_object_del(data->ctxpopup);
+ evas_object_del(base);
+ return;
+ }
- if (m->array) {
- eina_array_free(m->array);
- m->array = NULL;
+ if (data->array) {
+ eina_array_free(data->array);
+ data->array = NULL;
}
- evas_object_del(m->ctxpopup);
- evas_object_del(m->base);
+ evas_object_del(data->ctxpopup);
+ evas_object_del(base);
- if (m->vdata)
- viewdata_release(m->vdata);
+ if (data->vdata)
+ viewdata_release(data->vdata);
- delete m;
- m = NULL;
+ free(data);
}
/**
*
* @return: void.
*/
-void CSystemClockView::Hide(void)
+static void _hide(Evas_Object *base)
{
- ASSERT(m);
+ struct _sysclk_data *data;
+
+ if (!base)
+ return;
- evas_object_hide(m->base);
- evas_object_hide(m->ctxpopup);
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Invalid arguments");
+ return;
+ }
+
+ evas_object_hide(base);
+ evas_object_hide(data->ctxpopup);
}
/**
*
* @return: void.
*/
-void CSystemClockView::Refresh(void)
-{
- ASSERT(m);
-
- m_ExitView();
-}
-
-
-void CSystemClockView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- char *value;
- char *selval;
-
- if (!obj) {
- _ERR("Invalid arguments\n");
- return;
- }
-
- value = (char *)evas_object_data_get(obj, ITEMID);
- if (!value) {
- _ERR("Get value from btn failed\n");
- return;
- }
-
- selval = _get_selected_value(m);
- if (!selval) {
- _ERR("_get_selected_value failed\n");
- return;
- }
-
- if (!strncmp(selval, value, strlen(selval))) {
- elm_object_signal_emit(obj, CTXPOPUPBTN_ICON_FOCUSED,
- CTXPOPUPBTN_ICON_SOURCE);
- }
-
- elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_FOCUSED,
- CTXPOPUPBTN_BUTTON_SOURCE);
-
- provider_release_list_value(selval);
-}
-
-
-void CSystemClockView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+static void _refresh(Evas_Object *base)
{
- char *value;
- char *selval;
-
- if (!obj) {
- _ERR("Invalid arguments\n");
- return;
- }
+ struct _sysclk_data *data;
- value = (char *)evas_object_data_get(obj, ITEMID);
- if (!value) {
- _ERR("Get value from btn failed\n");
- return;
- }
-
- selval = _get_selected_value(m);
- if (!selval) {
- _ERR("_get_selected_value failed\n");
+ if (!base) {
+ _ERR("the base of system clock is null.");
return;
}
- if (!strncmp(selval, value, strlen(selval)))
- elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_HIGHLIGHT,
- CTXPOPUPBTN_BUTTON_SOURCE);
- else
- elm_object_signal_emit(obj, CTXPOPUPBTN_BUTTON_UNFOCUSED,
- CTXPOPUPBTN_BUTTON_SOURCE);
-
- provider_release_list_value(selval);
-}
-
-
-void CSystemClockView::OnMouseClicked(int oid, Evas_Object *obj)
-{
- if (oid != ID_BTNS)
- return;
-
- struct settingitem *item;
- Eina_List *list;
- char *value;
- const char *id;
- const char *name;
-
- if (!obj)
- return;
-
- _set_selected_value(m, obj);
-
- value = (char *)evas_object_data_get(obj, ITEMID);
- if (!value) {
- _ERR("get value from obj failed. DATA_ID: %s", ITEMID);
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("data get failed. DATA_ID: %s", DATA_ID);
return;
}
- if (!strncmp(value, MANUAL, BUF_SIZE)) {
- Hide();
-
- list = viewdata_get_childitems_list(m->vdata);
- if (!list) {
- _ERR("list of clock is null.");
- return;
- }
-
- item = (struct settingitem *) eina_list_nth(list, CLOCK_ITEM);
- if (!item) {
- _ERR("there is no clock_mode item in list.");
- return;
- }
-
- id = settingitem_get_id(item);
- if (!id) {
- _ERR("get item id failed.");
- return;
- }
-
- name = settingitem_get_display_name(item);
- if (!name) {
- _ERR("get display_name failed.");
- return;
- }
-
- m->ugd.display_name = name;
-
- m->mgr->ViewPush(id, (void *)&m->ugd);
- }
- else {
- m_ExitView();
- }
+ _exit_view(data);
}
+/**
+* view class of system clock view.
+*/
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_SYSTEM_CLOCK,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .refresh = _refresh,
+ .hide_view = 0
+};
-void CSystemClockView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+/**
+* Return view class of system clock view.
+*
+* @param: void.
+*
+* @return: the view class of system clock view.
+*/
+struct setting_class *view_system_clock_get_vclass(void)
{
- if (id != ID_BTNS)
- return;
-
- if (!ev->keyname)
- return;
-
- if (!strncmp(ev->keyname, KEY_BACK, BUF_SIZE) || !strncmp(ev->keyname, KEY_BACK_REMOTE, BUF_SIZE))
- m_ExitView();
+ return &_vclass;
}
-
--- /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 <ui-gadget.h>
+#include "view_uigadget.h"
+#include "dbg.h"
+#include "def.h"
+
+#define DATA_ID "ugdata"
+
+struct _data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *subbtn;
+ Evas_Object *main_item_box;
+ Evas_Object *subitem_box;
+
+ const char *display_name;
+ ui_gadget_h ug_handler;
+ Eina_Bool ug_is_existed;
+ struct setting_mgr *mgr;
+ struct settingview_data *view;
+};
+
+/**
+* This function is invoked to hide view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _hide(Evas_Object *base)
+{
+ if (!base)
+ return;
+
+ evas_object_hide(base);
+}
+
+/**
+* Hide current ug launcher view, then pop this view from view list and return to main view.
+*
+* @param data [in] The function specific data which hold _data pointer.
+* @return void.
+*/
+static void _back_to_mainview(struct _data *data)
+{
+ if (!data)
+ return;
+
+ _hide(data->base);
+ settingmgr_view_pop(data->mgr);
+}
+
+/**
+* This callback function is invoked with base layout for layout arrangement
+* after UI Gadget create create operation is completed.
+*
+* @param ug [in] The handler data representing a UI gadget.
+* @param mode [in] The UI gadget mode.
+* @param priv [in] The function specific data passed by UG caller.
+* @return void.
+*/
+static void _ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+}
+
+/**
+* After UG module invoke ug_send_message to send result,
+* UG library call this callback function registered by calling ug_create.
+*
+* @param ug [in] The handler data representing a UI gadget.
+* @param result [in] The Service handler.
+* @param priv [in] The function specific data passed by UG caller.
+* @return void.
+*/
+static void _ug_result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+}
+
+/**
+* This function is invoked to show sub item buttons evas object.
+*
+* @param box [in] The box evas object contained sub item buttons.
+* @return void.
+*/
+static void _show_item_btns(Evas_Object *box)
+{
+ Eina_List *list, *l;
+ Evas_Object *btn;
+
+ if (!box)
+ return;
+
+ list = elm_box_children_get(box);
+ if (!list) {
+ _ERR("button list is null.");
+ return;
+ }
+
+ EINA_LIST_FOREACH(list, l, btn)
+ evas_object_show(btn);
+
+ eina_list_free(list);
+}
+
+/**
+* Send the destroy request, use ug_destroy_me,
+* then UG library calls this callback function registered by UG caller.
+*
+* @param ug [in] The handler data representing a UI gadget.
+* @param priv [in] The function specific data passed by UG caller.
+* @return void.
+*/
+static void _ug_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ struct _data *data;
+
+ if (!ug || !priv) {
+ _ERR("Invalid parameters in ug destroy callback.");
+ return;
+ }
+
+ data = priv;
+
+ _show_item_btns(data->subitem_box);
+
+ elm_object_focus_set(data->subbtn, EINA_TRUE);
+ elm_object_part_text_set(data->base, UG_TITLE_TEXT, "");
+
+ ug_destroy(ug);
+ data->ug_is_existed = EINA_FALSE;
+ _back_to_mainview(data);
+}
+
+/**
+* This function is invoked to create UI Gadget with specific UG name.
+*
+* @param data [in] The function specific data which hold _data pointer.
+* @return 0 if success, -1 if fail.
+*/
+static int _load_uigadget(struct _data *data)
+{
+ ui_gadget_h ug;
+ const char *name;
+ struct settingitem *parent;
+
+ struct ug_cbs cbs = {
+ .layout_cb = _ug_layout_cb,
+ .result_cb = _ug_result_cb,
+ .destroy_cb = _ug_destroy_cb,
+ .end_cb = NULL
+ };
+
+ if (!data) {
+ _ERR("private data is null.");
+ return -1;
+ }
+
+ cbs.priv = data;
+
+ parent = viewdata_get_parentitem(data->view);
+ name = settingitem_get_settingui_name(parent);
+ elm_object_part_text_set(data->base,
+ UG_TITLE_TEXT, data->display_name);
+
+ ug = ug_create(NULL, name, UG_MODE_FRAMEVIEW, NULL, &cbs);
+ if (!ug) {
+ _ERR("ug create failed.");
+ return -1;
+ } else {
+ data->ug_is_existed = EINA_TRUE;
+ data->ug_handler = ug;
+ settingmgr_freeze_timeout(data->mgr);
+ }
+
+ return 0;
+}
+
+/**
+* This function is invoked to hide sub item buttons evas object.
+*
+* @param box [in] The box evas object contained sub item buttons.
+* @return void.
+*/
+static void _hide_item_btns(Evas_Object *box)
+{
+ Eina_List *list, *l;
+ Evas_Object *btn;
+
+ if (!box) {
+ _ERR("item box is null.");
+ return;
+ }
+
+ list = elm_box_children_get(box);
+ if (!list) {
+ _ERR("button list is null.");
+ return;
+ }
+
+ EINA_LIST_FOREACH(list, l, btn)
+ evas_object_hide(btn);
+
+ eina_list_free(list);
+}
+
+/**
+* This function is invoked to create UG launcher view layout.
+*
+* @param mgr [in] The setting_mgr data pointer passed by @settingmgr_view_push.
+* @param view [in] The settingview_data data pointer passed by @settingmgr_view_push.
+* @param prev [in] The parameter data which passed by prev view or NULL.
+* @return View layout evas object, NULL on error.
+*/
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ Evas_Object *win, *base;
+ struct _data *data;
+ struct evas_obj_data *param;
+ int r;
+
+ if (!mgr || !prev || !view) {
+ _ERR("mgr is null.");
+ return NULL;
+ }
+
+ param = prev;
+
+ _hide_item_btns(param->subitem_box);
+
+ win = settingmgr_get_win(mgr);
+ if (!win) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ data = calloc(1, sizeof(struct _data));
+ if (!data) {
+ _ERR("calloc struct _data failed.");
+ return NULL;
+ }
+
+ base = elm_layout_add(win);
+ if (!base) {
+ _ERR("add base layout failed.");
+ free(data);
+ return NULL;
+ }
+
+ elm_layout_file_set(base, EDJ_FILE, UG_GROUP);
+
+ data->win = win;
+ data->base = base;
+ data->mgr = mgr;
+ data->view = view;
+ data->subitem_box = param->subitem_box;
+ data->display_name = param->display_name;
+ data->subbtn = param->cur_btn;
+ data->ug_is_existed = EINA_FALSE;
+
+ evas_object_data_set(base, DATA_ID, data);
+
+ r = _load_uigadget(data);
+ if (r == -1) {
+ _ERR("load ui gadget failed.");
+ free(data);
+ evas_object_del(base);
+ return NULL;
+ }
+
+ return base;
+}
+
+/**
+* This function is invoked to show view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _show(Evas_Object *base)
+{
+ if (!base) {
+ _ERR("Invalid argument!");
+ return;
+ }
+
+ evas_object_show(base);
+}
+
+/**
+* This function is invoked to destroy view layout.
+*
+* @param base [in] The view layout evas object.
+* @return void.
+*/
+static void _destroy(Evas_Object *base)
+{
+ struct _data *data;
+
+ if (!base) {
+ _ERR("Invalid argument!");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATA_ID);
+ if (!data) {
+ _ERR("Fail to get uglauncher data");
+ return;
+ }
+
+ if (data->ug_is_existed == EINA_TRUE)
+ ug_destroy(data->ug_handler);
+
+ if (data->view)
+ viewdata_release(data->view);
+
+ evas_object_del(base);
+ free(data);
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_UG,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide,
+ .hide_view = 0
+};
+
+/**
+* This function is invoked to get UI Gadget launcher view class object.
+*
+* @return The setting_class data static pointer, NULL on error.
+*/
+struct setting_class *view_uigadget_get_vclass(void)
+{
+ return &_vclass;
+}
+++ /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 <ui-gadget.h>
-#include "view_uigadget.h"
-#include <AppCommon.h>
-#include "common_defs.h"
-#include "settingviewmgr.h"
-
-
-/**
- * This callback function is invoked with base layout for layout arrangement
- * after UI Gadget create create operation is completed.
- *
- * @param ug [in] The handler data representing a UI gadget.
- * @param mode [in] The UI gadget mode.
- * @param priv [in] The function specific data passed by UG caller.
- * @return void.
- */
-void CUiGadget::sm_CbLayout(ui_gadget_h ug, enum ug_mode mode, void *priv)
-{
- CUiGadget *root = (CUiGadget*)priv;
- if (root)
- root->t_OnLayout(ug, mode);
-}
-
-
-/**
- * After UG module invoke ug_send_message to send result,
- * UG library call this callback function registered by calling ug_create.
- *
- * @param ug [in] The handler data representing a UI gadget.
- * @param result [in] The Service handler.
- * @param priv [in] The function specific data passed by UG caller.
- * @return void.
- */
-void CUiGadget::sm_CbResult(ui_gadget_h ug, service_h result, void *priv)
-{
- CUiGadget *root = (CUiGadget*)priv;
- if (root)
- root->t_OnResult(ug, result);
-}
-
-
-
-/**
- * Send the destroy request, use ug_destroy_me,
- * then UG library calls this callback function registered by UG caller.
- *
- * @param ug [in] The handler data representing a UI gadget.
- * @param priv [in] The function specific data passed by UG caller.
- * @return void.
- */
-void CUiGadget::sm_CbDestroy(ui_gadget_h ug, void *priv)
-{
- CUiGadget *root = (CUiGadget*)priv;
- if (root)
- root->t_OnDestroy(ug);
-}
-
-
-void CUiGadget::sm_CbEnd(ui_gadget_h ug, void *priv)
-{
- CUiGadget *root = (CUiGadget*)priv;
- if (root)
- root->t_OnEnd(ug);
-}
-
-
-bool CUiGadget::Create(ui_gadget_h parent, const char *name, ug_mode mode, service_h service)
-{
- ASSERT(!m_handler);
-
- struct ug_cbs cbs = {
- sm_CbLayout,
- sm_CbResult,
- sm_CbDestroy,
- sm_CbEnd
- };
- cbs.priv = this;
-
- m_handler = ug_create(NULL, name, UG_MODE_FRAMEVIEW, NULL, &cbs);
-
- return m_handler ? true : false;
-}
-
-
-void CUiGadget::Destroy(void)
-{
- if (!m_handler)
- return;
-
- ug_destroy(m_handler);
- m_handler = NULL;
-}
-
-
-struct SUiGadgetView {
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *subbtn;
- Evas_Object *main_item_box;
- Evas_Object *subitem_box;
-
- const char *display_name;
- CSettingMgr *mgr;
- struct settingview_data *view;
-};
-
-/**
-* This function is invoked to hide view layout.
-*
-* @param base [in] The view layout evas object.
-* @return void.
-*/
-void CUiGadgetView::Hide(void)
-{
- ASSERT(m);
-
- evas_object_hide(m->base);
-}
-
-/**
-* Hide current ug launcher view, then pop this view from view list and return to main view.
-*
-* @param data [in] The function specific data which hold _data pointer.
-* @return void.
-*/
-void CUiGadgetView::m_BackToMainview(void)
-{
- Hide();
-
- m->mgr->ViewPop();
-}
-
-
-/**
-* This function is invoked to show sub item buttons evas object.
-*
-* @param box [in] The box evas object contained sub item buttons.
-* @return void.
-*/
-static void _show_item_btns(Evas_Object *box)
-{
- Eina_List *list, *l;
- Evas_Object *btn;
- void* obj;
-
- if (!box)
- return;
-
- list = elm_box_children_get(box);
- if (!list) {
- _ERR("button list is null.");
- return;
- }
-
- EINA_LIST_FOREACH(list, l, obj)
- {
- btn = (Evas_Object *) obj;
- evas_object_show(btn);
- }
-
- eina_list_free(list);
-}
-
-
-void CUiGadgetView::t_OnDestroy(ui_gadget_h ug)
-{
- if (!ug) {
- _ERR("Invalid parameters in ug destroy callback.");
- return;
- }
-
- _show_item_btns(m->subitem_box);
-
- elm_object_focus_set(m->subbtn, EINA_TRUE);
- elm_object_part_text_set(m->base, UG_TITLE_TEXT, "");
-
- CUiGadget::Destroy();
-
- m_BackToMainview();
-}
-
-/**
-* This function is invoked to create UI Gadget with specific UG name.
-*
-* @param data [in] The function specific data which hold _data pointer.
-* @return 0 if success, -1 if fail.
-*/
-bool CUiGadgetView::m_Load(void)
-{
- const char *name;
- struct settingitem *parent;
-
- parent = viewdata_get_parentitem(m->view);
- name = settingitem_get_settingui_name(parent);
- elm_object_part_text_set(m->base, UG_TITLE_TEXT, m->display_name);
-
- if (!CUiGadget::Create(NULL, name, UG_MODE_FRAMEVIEW, NULL)) {
- return false;
- }
-
- m->mgr->FreezeTimeout();
-
- return true;
-}
-
-
-/**
-* This function is invoked to hide sub item buttons evas object.
-*
-* @param box [in] The box evas object contained sub item buttons.
-* @return void.
-*/
-static void _hide_item_btns(Evas_Object *box)
-{
- Eina_List *list, *l;
- Evas_Object *btn;
- void* obj;
-
- if (!box) {
- _ERR("item box is null.");
- return;
- }
-
- list = elm_box_children_get(box);
- if (!list) {
- _ERR("button list is null.");
- return;
- }
-
- EINA_LIST_FOREACH(list, l, obj)
- {
- btn = (Evas_Object *) obj;
- evas_object_hide(btn);
- }
-
- eina_list_free(list);
-}
-
-
-Evas_Object *CUiGadgetView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-/**
-* This function is invoked to create UG launcher view layout.
-*
-* @param mgr [in] The setting_mgr data pointer passed by @settingmgr_view_push.
-* @param view [in] The settingview_data data pointer passed by @settingmgr_view_push.
-* @param prev [in] The parameter data which passed by prev view or NULL.
-* @return View layout evas object, NULL on error.
-*/
-bool CUiGadgetView::Create(struct settingview_data *view, void *prev)
-{
- ASSERT(!m);
- ASSERT(view);
- ASSERT(prev);
-
- Evas_Object *win, *base;
- struct evas_obj_data *param;
-
- CSettingMgr *mgr = CSettingMgr::GetInstance();
-
- param = (struct evas_obj_data *) prev;
- _hide_item_btns(param->subitem_box);
-
- win = mgr->Window();
- ASSERT(win);
-
- m = new SUiGadgetView;
- if (!m) {
- _ERR("calloc SUiGadgetView failed.");
- return false;
- }
-
- base = elm_layout_add(win);
- if (!base) {
- _ERR("add base layout failed.");
- delete m;
- m = NULL;
- return false;
- }
-
- elm_layout_file_set(base, EDJ_FILE, UG_GROUP);
-
- m->win = win;
- m->base = base;
- m->mgr = mgr;
- m->view = view;
- m->subitem_box = param->subitem_box;
- m->display_name = param->display_name;
- m->subbtn = param->cur_btn;
-
- if (!m_Load()) {
- _ERR("load ui gadget failed.");
- evas_object_del(base);
- delete m;
- m = NULL;
-
- return false;
- }
-
- return true;
-}
-
-
-void CUiGadgetView::Show(void)
-{
- ASSERT(m);
-
- evas_object_show(m->base);
-}
-
-
-void CUiGadgetView::Destroy(void)
-{
- ASSERT(m);
-
- CUiGadget::Destroy();
-
- if (m->view)
- viewdata_release(m->view);
-
- evas_object_del(m->base);
- delete m;
- m = NULL;
-}
--- /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 "dbg.h"
+#include "utils.h"
+#include "view_upgrade_popup.h"
+
+static Evas_Object *_create(struct setting_mgr *mgr,
+ struct settingview_data *view, void *prev)
+{
+ return NULL;
+}
+
+static void _show(Evas_Object *base)
+{
+}
+
+static void _destroy(Evas_Object *base)
+{
+}
+
+static void _hide(Evas_Object *base)
+{
+}
+
+static struct setting_class _vclass = {
+ .title = VCLASS_TITLE_UPGRADE,
+ .create = _create,
+ .show = _show,
+ .destroy = _destroy,
+ .hide = _hide
+};
+
+struct setting_class *view_upgrade_popup_get_vclass(void)
+{
+ return &_vclass;
+}
* limitations under the License.
*/
-#include <AppCommon.h>
-#include "settingviewmgr.h"
+#include <Elementary.h>
+#include <Eina.h>
+#include "viewmgr.h"
#include "data_wrapper.h"
+#include "dbg.h"
#include "timeout_handler.h"
#include "view_maincatalog.h"
#include "view_uigadget.h"
#include "view_sublist.h"
+#include "view_bottomsublist.h"
+#include "view_bottomslider.h"
#include "view_pwd_popup.h"
+#include "view_device_manager.h"
+#include "view_resetpopup.h"
+#include "view_upgrade_popup.h"
#include "view_system_clock.h"
#include "view_need_pwd.h"
-//#include "settingviewmgr.h"
#define MAINCATALOG "maincatalog"
#define PATH_FACTOR 3
-struct SSettingMgr {
+struct setting_mgr {
Evas_Object *win;
int depth;
Eina_List *view_list;
struct settingmgr_data *data;
Eina_Array *item_path;
- CTimeoutHandler *handler;
+ struct timeout_handler *handler;
Eina_Bool is_freeze;
};
struct _settinginfo {
Evas_Object *base;
- CSettingBaseView *sclass;
+ struct setting_class *sclass;
struct settingview_data *sview;
};
struct settingui_func_map {
const char *style;
- CSettingBaseView *view;
- //struct setting_class* (*get_vclass)(void);
+ struct setting_class* (*get_vclass)(void);
};
-
-CSettingBaseView::CSettingBaseView(const char *pViewId)
-{
- m_title = new char[strlen(pViewId) + 1];
- strcpy(m_title, pViewId);
-}
-
-
-CSettingBaseView::~CSettingBaseView()
-{
- delete[] m_title;
-}
-
-
-Evas_Object *CSettingBaseView::Base(void)
-{
- return NULL;
-}
-
-
-static struct settingui_func_map g_func_map[5];/* = {
+static struct settingui_func_map g_func_map[] = {
{
.style = STYLE_UIGADGET,
.get_vclass = view_uigadget_get_vclass
.get_vclass = view_sublist_get_vclass
},
{
+ .style = STYLE_BOTTOM_CTXPOPUP,
+ .get_vclass = view_bottomsublist_get_vclass
+ },
+ {
+ .style = STYLE_BOTTOMSLIDER,
+ .get_vclass = view_bottomslider_get_vclass
+ },
+ {
+ .style = STYLE_BOTTOM2WAYSLIDER,
+ .get_vclass = view_bottomslider_get_vclass
+ },
+ {
.style = STYLE_PASSCODE_POPUP,
.get_vclass = view_passcode_popup_get_vclass
},
{
+ .style = STYLE_DEVICE_MANAGER,
+ .get_vclass = view_device_manager_get_vclass
+ },
+ {
+ .style = STYLE_RESET_POPUP,
+ .get_vclass = view_resetpopup_get_vclass
+ },
+ {
+ .style = STYLE_UPGRADE_POPUP,
+ .get_vclass = view_upgrade_popup_get_vclass
+ },
+ {
.style = STYLE_CLOCK_CTXPOPUP,
.get_vclass = view_system_clock_get_vclass
},
{
.style = STYLE_NEED_PASSCODE,
.get_vclass = view_need_passcode_get_vclass
- }*/
-//};
+ }
+};
/**
* This function is invoked to build setting view data.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @param name[in] The item name to be created view.
* @return The settingview_data data pointer, NULL on error.
*/
static struct settingview_data *_build_setting_view(
- struct SSettingMgr *mgr, const char *name)
+ struct setting_mgr *mgr, const char *name)
{
struct settingview_data *data;
int r;
return data;
}
-
-CMainCatalogView *g_maincatalog;
/**
* This function is invoked to get setting_class data pointer, this data stand for a kind of view.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @param view[in] The settingview_data data pointer.
* @return The setting_class data pointer, NULL on error.
*/
-static CSettingBaseView *_get_view_class(SSettingMgr *mgr,
+static struct setting_class *_get_view_class(struct setting_mgr *mgr,
struct settingview_data *view)
{
- CSettingBaseView *vclass;
+ struct setting_class *vclass;
struct settingitem *parent;
Eina_List *list;
const char *style;
vclass = NULL;
if (list && !style) {
- if (mgr->depth == 1){
- g_maincatalog = new CMainCatalogView(VCLASS_TITLE_MAIN_VIEW);
- vclass = (CSettingBaseView *) g_maincatalog;// view_maincatalog_get_vclass();
- }
+ if (mgr->depth == 1)
+ vclass = view_maincatalog_get_vclass();
} else {
size = sizeof(g_func_map) / sizeof(*g_func_map);
for (i = 0; i < size; i++) {
if (!strncmp(style, g_func_map[i].style, strlen(style))
- && g_func_map[i].view) {
- vclass = g_func_map[i].view;// get_vclass();
+ && g_func_map[i].get_vclass) {
+ vclass = g_func_map[i].get_vclass();
break;
}
}
/**
* This function is invoked to hide all views stored in view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void _hide_view_in_list(struct SSettingMgr *mgr)
+void _hide_view_in_list(struct setting_mgr *mgr)
{
Eina_List *l;
struct _settinginfo *sinfo;
- void* obj;
if (!mgr) {
_ERR("Invalid arguments\n");
return;
}
- EINA_LIST_FOREACH(mgr->view_list, l, obj) {
- sinfo = (struct _settinginfo *) obj;
- sinfo->sclass->Hide();
- //if (sinfo->sclass->hide)
- // sinfo->sclass->hide(sinfo->base);
+ EINA_LIST_FOREACH(mgr->view_list, l, sinfo) {
+ if (sinfo->sclass->hide)
+ sinfo->sclass->hide(sinfo->base);
}
}
/**
* This function is invoked to show all views stored in view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void _show_view_in_list(struct SSettingMgr *mgr)
+void _show_view_in_list(struct setting_mgr *mgr)
{
Eina_List *l;
struct _settinginfo *sinfo;
- void* obj;
if (!mgr) {
_ERR("Invalid arguments\n");
return;
}
- EINA_LIST_FOREACH(mgr->view_list, l, obj) {
- sinfo = (struct _settinginfo *) obj;
- sinfo->sclass->Show();
- //if (sinfo->sclass->show)
- // sinfo->sclass->show(sinfo->base);
+ EINA_LIST_FOREACH(mgr->view_list, l, sinfo) {
+ if (sinfo->sclass->show)
+ sinfo->sclass->show(sinfo->base);
}
}
/**
* This function is invoked to destroy all views stored in view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void _destroy_views_in_list(struct SSettingMgr *mgr)
+void _destroy_views_in_list(struct setting_mgr *mgr)
{
Eina_List *l;
struct _settinginfo *sinfo;
- void* obj;
if (!mgr) {
_ERR("Invalid arguments\n");
return;
}
- EINA_LIST_FOREACH(mgr->view_list, l, obj) {
- sinfo = (struct _settinginfo *) obj;
- sinfo->sclass->Destroy();
- //if (sinfo->sclass->destroy)
- // sinfo->sclass->destroy(sinfo->base);
+ EINA_LIST_FOREACH(mgr->view_list, l, sinfo) {
+ if (sinfo->sclass->destroy)
+ sinfo->sclass->destroy(sinfo->base);
}
}
/**
* This function is invoked to freeze all views's event stored in view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void _frozen_view_in_list(struct SSettingMgr *mgr)
+void _frozen_view_in_list(struct setting_mgr *mgr)
{
Eina_List *l;
struct _settinginfo *sinfo;
- void* obj;
if (!mgr) {
_ERR("Invalid argument");
return;
}
- if(mgr->view_list) {
- EINA_LIST_REVERSE_FOREACH(mgr->view_list, l, obj) {
- sinfo = (struct _settinginfo *)obj;
- sinfo->sclass->Frozen();
- //if (sinfo->sclass->frozen)
- // sinfo->sclass->frozen(sinfo->base);
- }
+ EINA_LIST_REVERSE_FOREACH(mgr->view_list, l, sinfo) {
+ if (sinfo->sclass->frozen)
+ sinfo->sclass->frozen(sinfo->base);
}
}
/**
* This function is invoked to activate all views's event stored in view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void _active_view_in_list(struct SSettingMgr *mgr)
+void _active_view_in_list(struct setting_mgr *mgr)
{
Eina_List *l;
struct _settinginfo *sinfo;
- void* obj;
if (!mgr) {
_ERR("Invalid argument");
return;
}
- EINA_LIST_REVERSE_FOREACH(mgr->view_list, l, obj) {
- sinfo = (struct _settinginfo *)obj;
- sinfo->sclass->Active();
- //if (sinfo->sclass->active)
- // sinfo->sclass->active(sinfo->base);
+ EINA_LIST_REVERSE_FOREACH(mgr->view_list, l, sinfo) {
+ if (sinfo->sclass->active)
+ sinfo->sclass->active(sinfo->base);
}
}
-
-
-CSettingMgr *CSettingMgr::instance = NULL;
-
/**
* This function is invoked to initialize setting manager.
*
* @param win [in] The window's evas object.
-* @return The SSettingMgr data pointer.
+* @return The setting_mgr data pointer.
*/
-bool CSettingMgr::Initialize(Evas_Object *win)
+struct setting_mgr *settingmgr_init(Evas_Object *win)
{
- ASSERT(!instance);
- ASSERT(win);
-
- //struct settingmgr_data *data;
- //CTimeoutHandler *handler;
-
- _CREATE_BEGIN{
- _CHECK(instance = new CSettingMgr);
- _CHECK(instance->m = new SSettingMgr);
- _CHECK(instance->m->data = viewmgr_data_init());
- _CHECK(instance->m->handler = new CTimeoutHandler);
- _CHECK(instance->m->handler->Create(TIMEOUT_SECS));
-
- _CHECK_FAIL{ instance->m->handler->Destroy(); }
- _CHECK_FAIL{ delete instance->m->handler; }
- _CHECK_FAIL{ viewmgr_data_fini(instance->m->data); }
- _CHECK_FAIL{ delete instance->m; }
- _CHECK_FAIL{ delete instance; instance = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- g_func_map[0].style = STYLE_UIGADGET;
- g_func_map[0].view = new CUiGadgetView(VCLASS_TITLE_UG);
-
- g_func_map[1].style = STYLE_CTXPOPUP;
- g_func_map[1].view = new CSublistView(VCLASS_TITLE_SUBLIST);
-
- g_func_map[2].style = STYLE_PASSCODE_POPUP;
- g_func_map[2].view = new CPasscodePopupView(VCLASS_TITLE_CHANGE_PASSCODE);
-
- g_func_map[3].style = STYLE_CLOCK_CTXPOPUP;
- g_func_map[3].view = new CSystemClockView(VCLASS_TITLE_SYSTEM_CLOCK);
-
- g_func_map[4].style = STYLE_NEED_PASSCODE;
- g_func_map[4].view = new CNeedPasscodeView(VCLASS_TITLE_NEED_PASSCODE);
-
- instance->m->win = win;
- instance->m->depth = 0;
- instance->m->is_freeze = EINA_FALSE;
- instance->m->view_list = NULL;
- instance->m->item_path = NULL;
-
- return true;
-}
+ struct setting_mgr *mgr;
+ struct settingmgr_data *data;
+ struct timeout_handler *handler;
+ if (!win)
+ return NULL;
+
+ mgr = calloc(1, sizeof(*mgr));
+ if (!mgr)
+ return NULL;
+
+ data = viewmgr_data_init();
+ if (!data) {
+ _ERR("viewmgr_data_init failed!");
+ free(mgr);
+ return NULL;
+ }
+
+ handler = timeout_handler_init(TIMEOUT_SECS);
+ if (!handler) {
+ _ERR("Fail to init timeout handler");
+ viewmgr_data_fini(data);
+ free(mgr);
+ return NULL;
+ }
+
+ mgr->win = win;
+ mgr->depth = 0;
+ mgr->data = data;
+ mgr->handler = handler;
+ mgr->is_freeze = EINA_FALSE;
+
+ return mgr;
+}
/**
* This function is invoked to destroy all views stored in view list and release
-* SSettingMgr data structure.
+* setting_mgr data structure.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void CSettingMgr::Finalize(void)
+void settingmgr_fini(struct setting_mgr *mgr)
{
- ASSERT(instance);
- ASSERT(instance->m);
-
struct _settinginfo *sinfo;
- void* obj;
-
- _hide_view_in_list(instance->m);
- _destroy_views_in_list(instance->m);
- EINA_LIST_FREE(instance->m->view_list, obj)
- {
- sinfo = (struct _settinginfo *)obj;
- free(sinfo);
+ if (!mgr) {
+ _ERR("Parameter error!");
+ return;
}
- if (instance->m->item_path)
- eina_array_free(instance->m->item_path);
+ _hide_view_in_list(mgr);
+ _destroy_views_in_list(mgr);
- viewmgr_data_fini(instance->m->data);
- instance->m->handler->Destroy();
- delete instance->m->handler;
+ EINA_LIST_FREE(mgr->view_list, sinfo)
+ free(sinfo);
- delete instance->m;
- delete instance;
- instance = NULL;
-}
+ if (mgr->item_path)
+ eina_array_free(mgr->item_path);
+ viewmgr_data_fini(mgr->data);
+ timeout_handler_fini(mgr->handler);
-CSettingMgr *CSettingMgr::GetInstance(void)
-{
- return instance;
+ free(mgr);
}
-
/**
* This function is invoked to push a view with specific name and data.
*
* Firstly, it will build view data, then get specific view class to create view.
* Otherwise, it will freeze or hide background view and store _settinginfo data into view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @param name [in] The item name to be pushed view.
* @param data [in] The function specific data passed by caller.
* @return 0 if success, -1 if fail.
*/
-bool CSettingMgr::ViewPush(const char *name, void *data)
+int settingmgr_view_push(struct setting_mgr *mgr,
+ const char *name, void *data)
{
- ASSERT(m);
- ASSERT(name);
+ Evas_Object *base;
+ struct _settinginfo *sinfo;
+ struct setting_class *sclass;
+ struct settingview_data *view;
- struct _settinginfo *sinfo = NULL;
- CSettingBaseView *sclass = NULL;
- struct settingview_data *view = NULL;
+ if (!mgr || !name)
+ return -1;
- m->depth++;
+ mgr->depth++;
- sinfo = new _settinginfo;
+ sinfo = calloc(1, sizeof(*sinfo));
if (!sinfo)
- return false;
+ return -1;
- view = _build_setting_view(m, name);
+ view = _build_setting_view(mgr, name);
if (!view) {
_ERR("Build setting view data failed\n");
goto error;
}
- sclass = _get_view_class(m, view);
+ sclass = _get_view_class(mgr, view);
if (!sclass) {
_ERR("failed to get view class.");
goto error;
}
- if (!sclass->Create(view, data)) {
+ base = sclass->create(mgr, view, data);
+ if (!base) {
_ERR("failed to create base layout.");
goto error;
}
- _frozen_view_in_list(m);
+ _frozen_view_in_list(mgr);
if (sclass->hide_view)
- _hide_view_in_list(m);
+ _hide_view_in_list(mgr);
- sclass->Show();
+ if (sclass->show)
+ sclass->show(base);
- sinfo->base = sclass->Base();
+ sinfo->base = base;
sinfo->sclass = sclass;
sinfo->sview = view;
- m->view_list = eina_list_prepend(m->view_list, sinfo);
+ mgr->view_list = eina_list_prepend(mgr->view_list, sinfo);
return 0;
error:
- m->depth--;
+ mgr->depth--;
free(sinfo);
viewdata_release(view);
* Firstly, get top view's _settinginfo data from view list, then call destroy interface of
* view class, finally it will refresh second view, activate and show all views behind top view.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void CSettingMgr::ViewPop(void)
+void settingmgr_view_pop(struct setting_mgr *mgr)
{
- ASSERT(m);
-
struct _settinginfo *sinfo, *prev;
- CSettingBaseView *sclass;
+ struct setting_class *sclass;
int hide;
char *item;
const char *title;
- m->depth--;
- sinfo = (struct _settinginfo *) eina_list_data_get(m->view_list);
+ if (!mgr) {
+ _ERR("Invalid arguments\n");
+ return;
+ }
+
+ mgr->depth--;
+ sinfo = eina_list_data_get(mgr->view_list);
if (!sinfo) {
_DBG("get sinfo failed\n");
return;
sclass = sinfo->sclass;
hide = sclass->hide_view;
- title = sclass->Title();
+ title = sclass->title;
item = NULL;
if (!strncmp(title, VCLASS_TITLE_BOTTOM_SLIDER, strlen(title)))
- item = (char *)evas_object_data_del(sinfo->base, SELECTED_ITEM_ID);
+ item = evas_object_data_del(sinfo->base, SELECTED_ITEM_ID);
- sclass->Destroy();
+ if (sclass->destroy && sinfo->base)
+ sclass->destroy(sinfo->base);
- m->view_list = eina_list_remove_list(m->view_list, m->view_list);
+ mgr->view_list = eina_list_remove_list(mgr->view_list, mgr->view_list);
free(sinfo);
- if (!m->view_list)
+ if (!mgr->view_list)
return;
- prev = (struct _settinginfo *) eina_list_data_get(m->view_list);
+ prev = eina_list_data_get(mgr->view_list);
if (!prev || !prev->sclass)
return;
if (item && !strncmp(title, VCLASS_TITLE_BOTTOM_SLIDER, strlen(title)))
evas_object_data_set(prev->base, SELECTED_ITEM_ID, item);
- sclass->Refresh();
- sclass->Update();
+ if (sclass->refresh)
+ sclass->refresh(prev->base);
+
+ if (sclass->update)
+ sclass->update(prev->base);
- _active_view_in_list(m);
+ _active_view_in_list(mgr);
if (hide)
- _show_view_in_list(m);
+ _show_view_in_list(mgr);
}
/**
* This function is invoked to get window's evas object.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return The window's evas object, NULL on error.
*/
-Evas_Object *CSettingMgr::Window(void)
+Evas_Object *settingmgr_get_win(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr)
+ return NULL;
- return m->win;
+ return mgr->win;
}
/**
* This function is invoked to get view data with specific name.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @param name [in] The view name to be got.
* @return The settingview_data data pointer, NULL on error.
*/
-settingview_data *CSettingMgr::GetView(const char *name)
+struct settingview_data *settingmgr_get_view(struct setting_mgr *mgr,
+ const char *name)
{
- ASSERT(m);
-
- return _build_setting_view(m, name);
+ return _build_setting_view(mgr, name);
}
/**
* This function is invoked to get setting manager data.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return The settingmgr_data data pointer, NULL on error.
*/
-settingmgr_data *CSettingMgr::GetData(void)
+struct settingmgr_data *settingmgr_get_data(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
- return m->data;
+ return mgr->data;
}
/**
* This function is invoked to get view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return The Eina_List data pointer, NULL on error.
*/
-Eina_List *CSettingMgr::GetViewList(void)
+Eina_List *settingmgr_get_view_list(struct setting_mgr *mgr)
{
- ASSERT(m);
-
+ if (!mgr) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
- return m->view_list;
+ return mgr->view_list;
}
/**
* When launch setting by command-line, this function will be invoked. In this launching
* way, setting will be launched and move focus to specific item.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @param name [in] The item name.
* @return 0 if success, -1 if fail.
*/
-bool CSettingMgr::LaunchItem(const char *name)
+int settingmgr_launch_item(struct setting_mgr *mgr,
+ const char *name)
{
- ASSERT(m);
- ASSERT(name);
-
const char *parent;
struct settingitem *item;
Eina_Array *path;
int i, cnt;
+ if (!mgr || !name)
+ return -1;
+
path = eina_array_new(1);
if (!path) {
_ERR("new eina array failed.");
- return false;
+ return -1;
}
eina_array_push(path, name);
if (!parent) {
_ERR("get parent item name failed.");
eina_array_free(path);
- return false;
+ return -1;
}
eina_array_push(path, parent);
do {
- viewmgr_data_read_jsonfile_into_hash(m->data, parent);
+ viewmgr_data_read_jsonfile_into_hash(mgr->data, parent);
- item = viewmgr_data_get_settingitem(m->data, parent);
+ item = viewmgr_data_get_settingitem(mgr->data, parent);
if (!item)
break;
eina_array_push(path, parent);
} while (parent && strncmp(parent, MAINCATALOG, strlen(parent)));
- m->item_path = path;
-
-
- ViewPush(MAINCATALOG, NULL);
+ mgr->item_path = path;
+ settingmgr_view_push(mgr, MAINCATALOG, NULL);
cnt = eina_array_count(path);
for (i = cnt - PATH_FACTOR; i > 0; i--)
- ViewPush((const char *) eina_array_data_get(path, i), NULL);
+ settingmgr_view_push(mgr, eina_array_data_get(path, i), NULL);
- return true;
+ return 0;
}
/**
* Item path is a value described all node value from root node to item
* in setting tree of json files.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return The Eina_Array data pointer, NULL on error.
*/
-Eina_Array *CSettingMgr::GetItemPath(void)
+Eina_Array *settingmgr_get_item_path(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr || !mgr->item_path)
+ return NULL;
- return m->item_path;
+ return mgr->item_path;
}
/**
* This function is invoked to refresh all view stored in view list.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void CSettingMgr::ViewRefresh(void)
+void settingmgr_view_refresh(struct setting_mgr *mgr)
{
- ASSERT(m);
-
struct _settinginfo *info;
- CSettingBaseView *vclass;
+ struct setting_class *vclass;
- if (!m->view_list)
+ if (!mgr || !mgr->view_list)
return;
- info = (struct _settinginfo *) eina_list_data_get(m->view_list);
+ info = eina_list_data_get(mgr->view_list);
if (!info)
return;
vclass = info->sclass;
- vclass->Refresh();
- vclass->Update();
+ if (vclass->refresh)
+ vclass->refresh(info->base);
+
+ if (vclass->update)
+ vclass->update(info->base);
}
/**
* This function is invoked to set refresh flag.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @param val [in] The value to be set.
* @return void.
*/
-void CSettingMgr::SetRefreshFlag(unsigned int val)
+void settingmgr_set_refresh_flag(struct setting_mgr *mgr,
+ unsigned int val)
{
- ASSERT(m);
+ if (!mgr)
+ return;
- m->refresh = val;
+ mgr->refresh = val;
}
/**
* This function is invoked to get refresh flag.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return The refresh flag value, -1 if fail.
*/
-unsigned int CSettingMgr::GetRefreshFlag(void)
+unsigned int settingmgr_get_refresh_flag(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr)
+ return -1;
- return m->refresh;
+ return mgr->refresh;
}
/**
* This function is invoked to set relaunch flag.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @param val [in] The value to be set.
* @return void.
*/
-void CSettingMgr::SetRelaunchFlag(unsigned int val)
+void settingmgr_set_relaunch_flag(struct setting_mgr *mgr,
+ unsigned int val)
{
- ASSERT(m);
+ if (!mgr)
+ return;
- m->relaunch = val;
+ mgr->relaunch = val;
}
/**
* This function is invoked to get relaunch flag.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return The refresh flag value, -1 if fail.
*/
-unsigned int CSettingMgr::GetRelaunchFlag(void)
+unsigned int settingmgr_get_relaunch_flag(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr)
+ return -1;
- return m->relaunch;
+ return mgr->relaunch;
}
/**
* This function wrapped timeout_handler interface to freeze timer.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void CSettingMgr::FreezeTimeout(void)
+void settingmgr_freeze_timeout(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr) {
+ _ERR("Invalid argument");
+ return;
+ }
- m->is_freeze = EINA_TRUE;
- m->handler->FreezeTimer();
+ mgr->is_freeze = EINA_TRUE;
+ timeout_handler_freeze_timer(mgr->handler);
}
/**
* This function wrapped timeout_handler interface to thaw timer.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void CSettingMgr::ThawTimeout(void)
+void settingmgr_thaw_timeout(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr) {
+ _ERR("Invalid argument");
+ return;
+ }
- m->handler->ThawTimer();
- m->is_freeze = EINA_FALSE;
+ timeout_handler_thaw_timer(mgr->handler);
+ mgr->is_freeze = EINA_FALSE;
}
/**
* This function is invoked to get timeout freeze state.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return EINA_TRUE if current state is frozen
* EINA_FALSE if current state is normal or occurred error.
*/
-Eina_Bool CSettingMgr::GetTimeoutFreezeState(void)
+Eina_Bool settingmgr_get_timeout_freeze_state(struct setting_mgr *mgr)
{
- ASSERT(m);
+ if (!mgr) {
+ _ERR("Invalid argument");
+ return EINA_FALSE;
+ }
- return m->is_freeze;
+ return mgr->is_freeze;
}
/**
* This function is invoked to refresh all views when system language changed.
*
-* @param mgr [in] The SSettingMgr data pointer.
+* @param mgr [in] The setting_mgr data pointer.
* @return void.
*/
-void CSettingMgr::LangChanged(void)
+void settingmgr_lang_changed(struct setting_mgr *mgr)
{
- ASSERT(m);
-
struct _settinginfo *sinfo;
Eina_List *l;
- void* obj;
- if (!m->view_list) {
+ if (!mgr || !mgr->view_list) {
_ERR("Invalid argument");
return;
}
- EINA_LIST_FOREACH(m->view_list, l, obj) {
- sinfo = (struct _settinginfo *) obj;
+ EINA_LIST_FOREACH(mgr->view_list, l, sinfo) {
if (!sinfo || !sinfo->sclass) {
_ERR("settings info is NULL");
return;
}
- sinfo->sclass->LangChanged();
+ if (sinfo->sclass->lang_changed)
+ sinfo->sclass->lang_changed(sinfo->base);
}
}
+++ /dev/null
-settings_all.txt
+++ /dev/null
-# Sound
-Key Pressed
-Down 1000
-Key Released
-Down 104
-Key Pressed
-Right 2168
-Key Released
-Right 112
-Key Pressed
-Return 1096
-Key Released
-Return 80
-Key Pressed
-Down 664
-Key Released
-Down 96
-Key Pressed
-Return 848
-Key Released
-Return 80
-Key Pressed
-Return 1040
-Key Released
-Return 80
-Key Pressed
-Down 576
-Key Released
-Down 104
-Key Pressed
-Down 128
-Key Released
-Down 112
-Key Pressed
-Return 680
-Key Released
-Return 80
-Key Pressed
-Return 904
-Key Released
-Return 88
-Key Pressed
-Down 584
-Key Released
-Down 104
-Key Pressed
-Down 96
-Key Released
-Down 112
-Key Pressed
-Down 144
-Key Released
-Down 96
-Key Pressed
-Return 848
-Key Released
-Return 72
-Key Pressed
-Left 1304
-Key Released
-Left 112
-# Systems
-Key Pressed
-Down 1000
-Key Released
-Down 104
-Key Pressed
-Right 616
-Key Released
-Right 96
-Key Pressed
-Down 255
-Key Released
-Down 137
-Key Pressed
-Left 416
-Key Released
-Left 120
-Key Pressed
-Down 456
-Key Released
-Down 112
-Key Pressed
-Right 336
-Key Released
-Right 138
-Key Pressed
-Down 334
-Key Released
-Down 112
-Key Pressed
-Down 280
-Key Released
-Down 120
-Key Pressed
-Left 392
-Key Released
-Left 120
-Key Pressed
-Down 336
-Key Released
-Down 144
-Key Pressed
-Right 360
-Key Released
-Right 136
-Key Pressed
-Down 1168
-Key Released
-Down 120
-Key Pressed
-Right 1824
-Key Released
-Right 168
-Key Pressed
-Down 2216
-Key Released
-Down 152
-Key Pressed
-Down 2568
-Key Released
-Down 160
-Key Pressed
-Down 392
-Key Released
-Down 136
-Key Pressed
-Down 760
-Key Released
-Down 152
-Key Pressed
-Return 4488
-Key Released
-Return 112
-Key Pressed
-Down 1424
-Key Released
-Down 136
-Key Pressed
-Return 424
-Key Released
-Return 96
-Key Pressed
-Escape 1720
-Key Released
-Escape 96
-Key Pressed
-Up 880
-Key Released
-Up 96
-Key Pressed
-Return 800
-Key Released
-Return 72
-Key Pressed
-Down 448
-Key Released
-Down 96
-Key Pressed
-Return 136
-Key Released
-Return 88
-Key Pressed
-Escape 1120
-Key Released
-Escape 104
-Key Pressed
-Right 1576
-Key Released
-Right 136
-Key Pressed
-Down 448
-Key Released
-Down 136
-Key Pressed
-Down 335
-Key Released
-Down 153
-Key Pressed
-Down 272
-Key Released
-Down 152
-Key Pressed
-Return 576
-Key Released
-Return 72
-Key Pressed
-Down 520
-Key Released
-Down 96
-Key Pressed
-Return 24
-Key Released
-Return 64
-Key Pressed
-Down 664
-Key Released
-Down 80
-Key Pressed
-Down 136
-Key Released
-Down 144
-Key Pressed
-Return 120
-Key Released
-Return 104
-Key Pressed
-Down 368
-Key Released
-Down 104
-Key Pressed
-Return 88
-Key Released
-Return 112
-Key Pressed
-Down 352
-Key Released
-Down 88
-Key Pressed
-Down 80
-Key Released
-Down 96
-Key Pressed
-Down 88
-Key Released
-Down 152
-Key Pressed
-Return 216
-Key Released
-Return 104
-Key Pressed
-Down 296
-Key Released
-Down 112
-Key Pressed
-Return 248
-Key Released
-Return 120
-Key Pressed
-Down 496
-Key Released
-Down 104
-Key Pressed
-Down 80
-Key Released
-Down 112
-Key Pressed
-Down 80
-Key Released
-Down 152
-Key Pressed
-Return 256
-Key Released
-Return 104
-Key Pressed
-Down 128
-Key Released
-Down 104
-Key Pressed
-Down 72
-Key Released
-Down 96
-Key Pressed
-Return 144
-Key Released
-Return 104
-Key Pressed
-Down 448
-Key Released
-Down 104
-Key Pressed
-Down 248
-Key Released
-Down 104
-Key Pressed
-Return 24
-Key Released
-Return 112
-Key Pressed
-Down 416
-Key Released
-Down 112
-Key Pressed
-Return 24
-Key Released
-Return 96
-Key Pressed
-Down 720
-Key Released
-Down 112
-Key Pressed
-Return 24
-Key Released
-Return 96
-Key Pressed
-Down 440
-Key Released
-Down 72
-Key Pressed
-Down 104
-Key Released
-Down 88
-Key Pressed
-Return 104
-Key Released
-Return 112
-Key Pressed
-Up 584
-Key Released
-Up 88
-Key Pressed
-Up 88
-Key Released
-Up 104
-Key Pressed
-Down 352
-Key Released
-Down 96
-Key Pressed
-Return 16
-Key Released
-Return 80
-Key Pressed
-Down 56
-Key Released
-Down 104
-Key Pressed
-Down 80
-Key Released
-Down 96
-Key Pressed
-Down 80
-Key Released
-Down 88
-Key Pressed
-Down 80
-Key Released
-Down 96
-Key Pressed
-Down 64
-Key Released
-Down 104
-Key Pressed
-Down 72
-Key Released
-Down 128
-Key Pressed
-Down 232
-Key Released
-Down 96
-Key Pressed
-Return 24
-Key Released
-Return 72
-Key Pressed
-Up 976
-Key Released
-Up 112
-Key Pressed
-Return 256
-Key Released
-Return 120
-Key Pressed
-Up 352
-Key Released
-Up 128
-Key Pressed
-Return 168
-Key Released
-Return 112
-Key Pressed
-Up 328
-Key Released
-Up 88
-Key Pressed
-Up 104
-Key Released
-Up 72
-Key Pressed
-Return 360
-Key Released
-Return 104
-Key Pressed
-Down 24
-Key Released
-Down 88
-Key Pressed
-Up 752
-Key Released
-Up 104
-Key Pressed
-Return 24
-Key Released
-Return 72
-Key Pressed
-Down 480
-Key Released
-Down 104
-Key Pressed
-Up 152
-Key Released
-Up 88
-Key Pressed
-Up 80
-Key Released
-Up 112
-Key Pressed
-Up 80
-Key Released
-Up 104
-Key Pressed
-Down 336
-Key Released
-Down 104
-Key Pressed
-Return 272
-Key Released
-Return 112
-Key Pressed
-Down 328
-Key Released
-Down 120
-Key Pressed
-Down 72
-Key Released
-Down 80
-Key Pressed
-Down 80
-Key Released
-Down 104
-Key Pressed
-Down 64
-Key Released
-Down 80
-Key Pressed
-Down 72
-Key Released
-Down 104
-Key Pressed
-Down 88
-Key Released
-Down 120
-Key Pressed
-Up 216
-Key Released
-Up 96
-Key Pressed
-Return 24
-Key Released
-Return 64
-Key Pressed
-Escape 1600
-Key Released
-Escape 96
-Key Pressed
-Down 72
-Key Released
-Down 160
-Key Pressed
-Escape 1000
-Key Released
-Escape 88
INCLUDE(FindPkgConfig)
pkg_check_modules(AUTO_PRGM_UG_PKGS REQUIRED
+ dlog
eina
edje
evas
aul
ui-gadget-1
)
+ #ecore-x
#tv-service
#tv-player-core
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
SET(SRCS
- src/ug_auto_program.cpp
- src/util.cpp
- src/ChannelMainView.cpp
- src/ChannelResultView.cpp
- src/ChannelSearchView.cpp
- ../src/TVServiceMgr.cpp
+ src/ug_auto_program.c
+ src/util.c
+ src/viewmgr_auto_program.c
+ src/view_scan_start.c
+ src/view_search_page.c
+ src/view_result_page.c
+ src/tv_scan.c
)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../include)
-
ADD_DEFINITIONS("-DPKGNAME=\"${PROJECT_NAME}\"")
ADD_DEFINITIONS("-DAUTO_PRGM_EDJ_FILE=\"${AUTO_PRGM_EDJEDIR}/${AUTO_PRGM_EDJ_FILE}\"")
size: 18*2;
min: 1 0;
text_class: "tizen";
- ellipsis: -1;
}
fixed: 1 1;
}
+++ /dev/null
-#ifndef __CHANNEL_MAIN_VIEW_H__
-#define __CHANNEL_MAIN_VIEW_H__
-
-
-class CChannelMainView : public CBaseView, public IMouseClickedListener, public IFocusedListener, public IUnfocusedListener {
-private :
- struct SChannelMainView *m;
- bool m_CreateBox(void);
- bool m_UpdateAntennaList(void);
- void m_UpdateFocus(void);
-
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CChannelMainView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), IFocusedListener(this), IUnfocusedListener(this), m(0) {}
- virtual ~CChannelMainView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
-};
-
-#endif /* __CHANNEL_MAIN_VIEW_H__ */
-
-
+++ /dev/null
-#ifndef __CHANNEL_RESULT_VIEW_H__
-#define __CHANNEL_RESULT_VIEW_H__
-
-
-class CChannelResultView : public CBaseView, public IMouseClickedListener{
-private :
- struct SChannelResultView *m;
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CChannelResultView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), m(0) {}
- virtual ~CChannelResultView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnMouseClicked(int id, Evas_Object *obj);
-};
-
-#endif /* __CHANNEL_RESULT_VIEW_H__ */
+++ /dev/null
-#ifndef __CHANNEL_SEARCH_VIEW_H__
-#define __CHANNEL_SEARCH_VIEW_H__
-
-
-class CChannelSearchView : public CBaseView, public IMouseClickedListener{
-private :
- struct SChannelSearchView *m;
- bool m_StartScan(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CChannelSearchView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), m(0) {}
- virtual ~CChannelSearchView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnMouseClicked(int id, Evas_Object *obj);
-};
-
-#endif /* __CHANNEL_SEARCH_VIEW_H__ */
--- /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 __DBG_H__
+
+
+#include <dlog.h>
+
+
+#ifndef _ERR
+#define _ERR(fmt, args...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _DBG
+#define _DBG(fmt, args...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _INFO
+#define _INFO(fmt, args...) LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+
+#endif /* __DBG_H__ */
#ifndef __DEFS_H__
#define __DEFS_H__
-/* View */
-#define CHANNEL_MAINVIEW "CHANNEL_MAINVIEW"
-
#define VIEW_START "scanstart"
#define VIEW_SEARCH "searchpage"
#define VIEW_RESULT "resultpage"
--- /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 __TV_SCAN_H__
+#define __TV_SCAN_H__
+
+struct tv_scan;
+
+enum local_mode {
+ INVALID_LOCAL = -1,
+ KR_MODE,
+ US_MODE,
+ MAX_LOCAL
+};
+
+enum antenna_mode {
+ SCAN_TYPE_INVALID = -1,
+ SCAN_TYPE_ALL,
+ SCAN_TYPE_CABLE,
+ SCAN_TYPE_AIR
+};
+
+struct tv_scan_result {
+ unsigned int air_dtv;
+ unsigned int cable_dtv;
+ unsigned int air_atv;
+ unsigned int cable_atv;
+};
+
+struct tv_scan_cbs {
+ void (*progress_cb)(struct tv_scan *tvs, enum antenna_mode mode,
+ int count, int num, void *arg);
+ void (*found_cb)(struct tv_scan *tvs, int count, int num,
+ const struct tv_scan_result *result, void *arg);
+ void (*done_cb)(struct tv_scan *tvs,
+ const struct tv_scan_result *result, void *arg);
+
+ void *data;
+};
+
+struct tv_scan *tv_scan_init(enum antenna_mode scan_mode);
+int tv_scan_fini(struct tv_scan *tvs);
+int tv_scan_set_callbacks(struct tv_scan *tvs, struct tv_scan_cbs *cbs);
+int tv_scan_start(struct tv_scan *tvs);
+int tv_scan_pause(struct tv_scan *tvs);
+int tv_scan_resume(struct tv_scan *tvs);
+int tv_scan_stop(struct tv_scan *tvs);
+int tv_scan_get_total_channel(struct tv_scan *tvs);
+struct tv_scan_result *tv_scan_get_result(struct tv_scan *tvs);
+int tv_scan_is_stopped(struct tv_scan *tvs);
+
+#endif /* __TV_SCAN_H__ */
#define __UG_CHANNEL_SEARCH_VIEW_H_
#include <ui-gadget-module.h>
+#include "tv_scan.h"
+
+struct _ugdata {
+ Evas_Object *win;
+ Evas_Object *ugd_base;
+ ui_gadget_h ug;
+ struct viewmgr *vmgr;
+ enum antenna_mode scan_type;
+ int find_chs;
+};
#endif/*__UG_CHANNEL_SEARCH_VIEW_H_*/
#ifndef __UTIL_H__
#define __UTIL_H__
-Evas_Object *util_add_layout(Evas_Object *parent, const char *file, const char *group);
-Evas_Object *util_add_scroller(Evas_Object *parent, Eina_Bool h_bounce, Eina_Bool v_bounce);
+Evas_Object *util_add_layout(Evas_Object *parent, const char *file,
+ const char *group);
+Evas_Object *util_add_scroller(Evas_Object *parent, Eina_Bool h_bounce,
+ Eina_Bool v_bounce);
Evas_Object *util_add_box(Evas_Object *parent, double h, double v);
-Evas_Object *util_add_button(Evas_Object *parent, const char *btnstyle, const char *btnpart, const char *btntext, Eina_Bool flag);
+Evas_Object *util_add_button(Evas_Object *parent, const char *btnstyle,
+ const char *btnpart, const char *btntext, Eina_Bool flag);
void util_focus_next_set(Evas_Object *obj);
#endif /* __UTIL_H__ */
--- /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 __VIEW_RESULT_PAGE_H__
+#define __VIEW_RESULT_PAGE_H__
+
+#include "ug_auto_program.h"
+#include "viewmgr_auto_program.h"
+
+struct view_class *view_resultpage_get_vclass(void);
+
+#endif /* __VIEW_RESULT_PAGE_H__ */
--- /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 __VIEW_SCAN_START_H__
+#define __VIEW_SCAN_START_H__
+
+#include "ug_auto_program.h"
+#include "viewmgr_auto_program.h"
+
+struct view_class *view_scanstart_get_vclass(void);
+
+#endif /* __VIEW_SCAN_START_H__ */
--- /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 __VIEW_SEARCHPAGE_H__
+#define __VIEW_SEARCHPAGE_H__
+
+#include "ug_auto_program.h"
+#include "viewmgr_auto_program.h"
+
+struct view_class *view_searchpage_get_vclass(void);
+
+#endif /* __VIEW_SEARCHPAGE_H__ */
--- /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 __VIEWMGR_AUTO_PROGRAM_H__
+#define __VIEWMGR_AUTO_PROGRAM_H__
+
+#include <Elementary.h>
+#include <Evas.h>
+
+struct viewmgr {
+ Eina_List *vlist;
+ Evas_Object *win;
+ int count;
+};
+
+struct view_class {
+ char *title;
+ Evas_Object* (*create)(struct viewmgr *vmgr, void *data);
+ void (*update)(Evas_Object *base);
+ void (*resume)(Evas_Object *base);
+ void (*pause)(Evas_Object *base);
+ void (*terminate)(Evas_Object *base);
+};
+
+struct viewmgr *viewmgr_init(Evas_Object *win);
+void viewmgr_fini(struct viewmgr *vmgr);
+int viewmgr_push(struct viewmgr *vmgr, struct view_class *vclass, void *data);
+int viewmgr_pop(struct viewmgr *vmgr);
+int viewmgr_resume(struct viewmgr *vmgr);
+int viewmgr_pause(struct viewmgr *vmgr);
+Evas_Object *viewmgr_get_win(struct viewmgr *vmgr);
+
+#endif /* __VIEWMGR_AUTO_PROGRAM_H__ */
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <AppCommon.h>
-#include "util.h"
-#include "defs.h"
-#include "TVServiceMgr.h"
-
-#include "ChannelMainView.h"
-
-#define HORIZONTAL_ALIGN 0.5
-#define VERTICAL_ALIGN 0.0
-#define MAX_ITEMS 3
-#define ALL "All"
-#define CABLE "Cable"
-#define AIR "Air"
-
-enum antenna_type {
- ALL_ITEM,
- CABLE_ITEM,
- AIR_ITEM
-};
-
-struct SChannelMainView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *start_btn;
- Evas_Object *cancel_btn;
- Evas_Object *box;
- Evas_Object *last_focus_item;
- Evas_Object *selected_item;
- Evas_Object *atn_btn[MAX_ITEMS];
- enum antenna_mode scan_type;
-
- CViewMgr *pViewMgr;
-};
-
-bool CChannelMainView::m_CreateBox(void)
-{
- m->box = util_add_box(m->base, HORIZONTAL_ALIGN, VERTICAL_ALIGN);
- if (!m->box) {
- _ERR("box add failed");
- return false;
- }
-
- elm_object_part_content_set(m->base, PART_ANTENNA_LIST, m->box);
- evas_object_size_hint_weight_set(m->box, EVAS_HINT_EXPAND, 0);
-
- return true;
-}
-
-
-bool CChannelMainView::m_UpdateAntennaList(void)
-{
- Evas_Object *btn;
- int i;
- const char *temp[MAX_ITEMS] = { ALL, CABLE, AIR };
-
- elm_box_clear(m->box);
- m->last_focus_item = NULL;
- m->selected_item = NULL;
-
- for (i = 0; i < MAX_ITEMS; i++) {
- btn = util_add_button(m->box, (char *) ITEM_STYLE, NULL, temp[i], EINA_TRUE);
- if (!btn) {
- _ERR("Fail to add button");
- return false;
- }
- elm_box_pack_end(m->box, btn);
- //evas_object_smart_callback_add(btn, SIGNAL_CLICKED, atninfo[i].cb, data);
- //elm_object_signal_callback_add(btn, SIGNAL_FOCUSED, ELM_SOURCE, _btn_focused_cb, data);
- //elm_object_signal_callback_add(btn, SIGNAL_UNFOCUSED, ELM_SOURCE, _btn_unfocused_cb, data);
- Connect(btn, 100+i);
-
- m->atn_btn[i] = btn;
-
- if (i == 0) {
- elm_object_focus_set(btn, EINA_TRUE);
- elm_object_signal_emit(btn, SIGNAL_SELECTED, CHANNEL_SOURCE);
- m->selected_item = btn;
- }
- }
-
- m_UpdateFocus();
- return true;
-}
-
-
-void CChannelMainView::m_UpdateFocus(void)
-{
- elm_object_focus_next_object_set(m->atn_btn[ALL_ITEM], m->start_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->atn_btn[CABLE_ITEM], m->start_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->atn_btn[AIR_ITEM], m->start_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(m->atn_btn[ALL_ITEM], m->atn_btn[ALL_ITEM], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->atn_btn[CABLE_ITEM], m->atn_btn[CABLE_ITEM], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->atn_btn[AIR_ITEM], m->atn_btn[AIR_ITEM], ELM_FOCUS_LEFT);
-
- if (m->selected_item) {
- elm_object_focus_next_object_set(m->start_btn, m->selected_item, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->cancel_btn, m->selected_item, ELM_FOCUS_LEFT);
- } else {
- elm_object_focus_next_object_set(m->start_btn, m->atn_btn[ALL_ITEM], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->cancel_btn, m->atn_btn[ALL_ITEM], ELM_FOCUS_LEFT);
- }
-
- elm_object_focus_next_object_set(m->start_btn, m->cancel_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(m->cancel_btn, m->start_btn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(m->cancel_btn, m->start_btn, ELM_FOCUS_UP);
-}
-
-
-void CChannelMainView::t_OnShow(void)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CChannelMainView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-}
-
-
-void CChannelMainView::t_OnHide(void)
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CChannelMainView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- ui_gadget_h ug;
- if (!data) {
- _ERR("Invalid argument");
- return false;
- }
- ug = (ui_gadget_h)data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SChannelMainView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m->base = util_add_layout(m->win, AUTO_PRGM_EDJ_FILE, GRP_SCAN_START))
- _COMMAND{
- //evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN, _key_pressed_cb, priv);
- Connect(m->base, 0);
- elm_object_part_text_set(m->base, PART_STAR_MAIN_TITLE_BLOCK, START_MAIN_TITLE);
- }
- _CHECK(m->start_btn = util_add_button(m->base, BTN_STYLE, PART_START_BTN, TEXT_BTN_START, EINA_TRUE))
- _CHECK(m->cancel_btn = util_add_button(m->base, BTN_STYLE, PART_CANCEL_BTN, TEXT_BTN_CANCEL, EINA_TRUE))
- _COMMAND{
-#if 0
- evas_object_data_set(m->base, "SCANSTARTDATA", m);
-#endif
- //evas_object_smart_callback_add(start_btn, SIGNAL_CLICKED, _start_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(cancel_btn, SIGNAL_CLICKED, _cancel_btn_clicked_cb, priv);
- Connect(m->start_btn, 1);
- Connect(m->cancel_btn, 2);
- evas_object_raise(m->base);
- }
- _CHECK(m_CreateBox())
- _CHECK(m_UpdateAntennaList())
- _WHEN_SUCCESS {
- m->ug = ug;
- m->pViewMgr = CViewMgr::GetInstance();
- }
- _CHECK_FAIL{for(int i = 0; i < MAX_ITEMS ; i++) evas_object_del(m->atn_btn[i]);}
- _CHECK_FAIL{evas_object_del(m->box);}
- _CHECK_FAIL{evas_object_del(m->cancel_btn);}
- _CHECK_FAIL{evas_object_del(m->start_btn);}
- _CHECK_FAIL{evas_object_del(m->base);}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CChannelMainView::Destroy(void)
-{
- ASSERT(m);
-
- if(m->atn_btn[0]) {
- for(int i = 0; i < MAX_ITEMS ; i++) evas_object_del(m->atn_btn[i]);
- }
-
- if(m->box)
- evas_object_del(m->box);
- if(m->cancel_btn)
- evas_object_del(m->cancel_btn);
- if(m->start_btn)
- evas_object_del(m->start_btn);
- if(m->base)
- evas_object_del(m->base);
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CChannelMainView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-
-void CChannelMainView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname NULL!");
- return;
- }
-
- switch(id) {
- case 0:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE))
- ug_destroy_me(m->ug);
- break;
- default:
- break;
- }
-
-}
-
-
-void CChannelMainView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 1:
- {
- Eina_Bool tuner_exist;
-
- /*
- * TODO: add the interface when TV service provider the related API.
- * Here is a pseudo-data.
- */
- tuner_exist = EINA_TRUE;
- if (!tuner_exist) {
- /*
- * TODO: popup the notification iniformation:
- * there is no tuner
- */
- return;
- }
-
-#if 0
- if (viewmgr_push(m->vmgr, view_searchpage_get_vclass(), m->ugd) == -1) {
- _ERR("search view push failed");
- return;
- }
-#endif
- }
- break;
- case 2:
- {
- ug_destroy_me(m->ug);
- }
- break;
- case 100:
- case 101:
- case 102:
- {
- const char *text;
-
- if (!m->selected_item) {
- elm_object_focus_set(obj, EINA_TRUE);
- elm_object_signal_emit(obj, SIGNAL_SELECTED, CHANNEL_SOURCE);
- m->selected_item = obj;
- } else {
- if (m->selected_item != obj) {
- elm_object_signal_emit(m->selected_item, SIGNAL_UNSELECTED, CHANNEL_SOURCE);
- elm_object_signal_emit(obj, SIGNAL_SELECTED, CHANNEL_SOURCE);
- m->selected_item = obj;
- }
- }
-
- text = elm_object_text_get(m->selected_item);
- if (text && !strcmp(text, ALL))
- m->scan_type = SCAN_TYPE_ALL;
- else if (text && !strcmp(text, CABLE))
- m->scan_type = SCAN_TYPE_CABLE;
- else if (text && !strcmp(text, AIR))
- m->scan_type = SCAN_TYPE_AIR;
- else
- m->scan_type = SCAN_TYPE_INVALID;
-
-#if 0
- m->ugd->scan_type = m->scan_type;
-#endif
-
- m_UpdateFocus();
- }
- break;
- default:
- break;
- }
-}
-
-
-void CChannelMainView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- switch(id) {
- case 100:
- case 101:
- case 102:
- {
- if (m->last_focus_item) {
- elm_object_signal_emit(m->last_focus_item,
- SIGNAL_SHOWLINE, CHANNEL_SOURCE);
- elm_object_signal_emit(obj, SIGNAL_HIDELINE, CHANNEL_SOURCE);
- } else {
- elm_object_signal_emit(obj, SIGNAL_SHOWLINE, CHANNEL_SOURCE);
- }
-
- m->last_focus_item = obj;
- }
- break;
- default:
- break;
- }
-}
-
-
-void CChannelMainView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- switch(id) {
- case 100:
- case 101:
- case 102:
- {
- elm_object_signal_emit(m->last_focus_item, SIGNAL_SHOWLINE, CHANNEL_SOURCE);
- }
- break;
- default:
- break;
- }
-
-}
-
-
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <system_info.h>
-#include <AppCommon.h>
-#include "defs.h"
-#include "util.h"
-
-#include "ChannelResultView.h"
-
-#define RESULT_MSG_SIZE 60
-
-struct SChannelResultView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *ok_btn;
-
- CViewMgr *pViewMgr;
-};
-
-void CChannelResultView::t_OnShow(void)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CChannelResultView::t_OnUpdate(void *data)
-{
- _DBG();
- Evas_Object *ok_btn;
- char msg[RESULT_MSG_SIZE];
- int chs = -1;
-
-#if 0
- chs = m->ugd->find_chs;
-#endif
-
- snprintf(msg, sizeof(msg), "%s<br>%d %s", COMPLETE_MAIN_TITLE, chs, TEXT_CH_MEMORIZED);
- elm_object_part_text_set(m->base, PART_RES_MAIN_TITLE, msg);
-
- ok_btn = util_add_button(m->base, BTN_STYLE, PART_OK_BTN, TEXT_BUTTON_OK, EINA_TRUE);
- if (!ok_btn) {
- _ERR("ok_btn is NULL");
- return;
- }
-
- m->ok_btn = ok_btn;
- elm_object_focus_set(ok_btn, EINA_TRUE);
- //evas_object_smart_callback_add(ok_btn, SIGNAL_CLICKED, _ok_btn_clicked_cb, priv);
- Connect(ok_btn,1);
-
- util_focus_next_set(ok_btn);
-
- evas_object_show(m->base);
-}
-
-
-void CChannelResultView::t_OnHide(void)
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-
-bool CChannelResultView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- ui_gadget_h ug;
- if (!data) {
- _ERR("Invalid argument");
- return false;
- }
- ug = (ui_gadget_h)data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SChannelResultView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m->base = util_add_layout(m->win, AUTO_PRGM_EDJ_FILE, GROUP_RES))
-
- _WHEN_SUCCESS {
- elm_win_resize_object_add(m->win, m->base);
-#if 0
- evas_object_data_set(m->base, "RESDATA", m);
-#endif
- m->ug = ug;
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{evas_object_del(m->base);}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CChannelResultView::Destroy(void)
-{
- ASSERT(m);
-
- if(m->base)
- evas_object_del(m->base);
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CChannelResultView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-void CChannelResultView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 1:
- ug_destroy_me(m->ug);
- break;
- default:
- break;
- }
-}
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <system_info.h>
-#include <AppCommon.h>
-#include "defs.h"
-#include "util.h"
-
-#include "TVServiceMgr.h"
-#include "ChannelSearchView.h"
-
-#define MAX_BUF_SIZE 30
-#define CH_NAME_SIZE 30
-#define INITIAL_CH_NUMS 0
-#define PERCENT 100
-#define INITIAL_TEXT "0%"
-#define INITIAL_VALUE 0.0
-
-struct SChannelSearchView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *pb;
- Evas_Object *stop_btn;
- Evas_Object *exit_btn;
- Evas_Object *cancel_btn;
-
- CTVServiceMgr *pTVServiceMgr;
- CViewMgr *pViewMgr;
-};
-
-#if 0
-static void _progress_cb(struct tv_scan *tvs, enum antenna_mode mode,
- int count, int num, void *arg)
-{
- struct _data *priv;
- char buf[CH_NAME_SIZE];
- int total;
- int ratio;
-
- if (!tvs || !arg) {
- _ERR("Invalid argument");
- return;
- }
-
- priv = (struct _data *) arg;
-
- snprintf(buf, sizeof(buf), "CH. %d", count);
- elm_object_part_text_set(m->base, PART_CH_NAME, buf);
- elm_object_signal_emit(m->base, SEARCHCHANNEL, SUBTEXT_SOURCE);
-
- total = tv_scan_get_total_channel(tvs);
- if (total <= 0) {
- _ERR("Invalid Total value");
- return;
- }
-
- ratio = count * PERCENT / total;
- snprintf(buf, sizeof(buf), "%d%%", ratio);
- elm_object_part_text_set(m->base, PART_PGBAR_NUM, buf);
- elm_progressbar_value_set(m->pb, (float)ratio / PERCENT);
-}
-
-/**
- * Dealing with the scanning result.
- *
- * When finishing scanning, the total found channels will be calculated and the
- * scan result view will be invoked in this function.
- *
- * @param[in] tvs: The tv service structure for managering the scanning
- * @param[in] res: The structure for saving the number of ATV air, DTV air,
- * ATV cable and DTV cable channel.
- * @param[in] arg: A pointer to current data structure.
- */
-static void _done_cb(struct tv_scan *tvs,
- const struct tv_scan_result *res, void *arg)
-{
- struct _data *priv;
- struct _ugdata *ugd;
- struct viewmgr *vmgr;
-
- if (!arg) {
- _ERR("Invalid argument");
- return;
- }
-
- priv = (struct _data *)arg;
-
- if (!m->tvs || !m->vmgr || !m->ugd) {
- _ERR("Invalid argument");
- return;
- }
-
- vmgr = m->vmgr;
- ugd = m->ugd;
-
- ugd->find_chs = res->air_dtv + res->cable_dtv +
- res->air_atv + res->cable_atv;
-
- if (viewmgr_push(vmgr, view_resultpage_get_vclass(), ugd) == -1)
- _ERR("result view push failed");
-}
-
-/**
- * Deal with the found channel signal.
- *
- * @param[in] tvs: The tv service structure for managering the scanning
- * @param[in] count: The number of channel signal received up to now
- * @param[in] num: The physical channel number
- * @param[in] res: The structure for saving the number of ATV air, DTV air,
- * ATV cable and DTV cable channel.
- * @param[in] arg: A pointer to the current data structure.
- * @return 0 on success, and -1 on fail
- */
-static void _found_cb(struct tv_scan *tvs, int count, int num,
- const struct tv_scan_result *res, void *arg)
-{
- struct _data *priv;
- char buf[CH_NAME_SIZE];
- int found;
-
- if (!arg) {
- _ERR("Invalid argument");
- return;
- }
-
- priv = (struct _data *)arg;
- snprintf(buf, sizeof(buf), "CH. %d", count);
-
- elm_object_part_text_set(m->base, PART_CH_NAME, buf);
- elm_object_signal_emit(m->base, CHANNELFOUND, SUBTEXT_SOURCE);
-
- found = res->air_dtv + res->cable_dtv + res->air_atv + res->cable_atv;
- snprintf(buf, sizeof(buf), "%d %s", found, TEXT_CH_FOUND);
- elm_object_part_text_set(m->base, PART_SRCH_SEARCH_RESULT, buf);
-
- m->ugd->find_chs = found;
-}
-#endif
-
-bool CChannelSearchView::m_StartScan(void)
-{
-
-#if 0
- if(!m->pTVServiceMgr->SetCallback(&cbs)) {
- _ERR("tv_scan_set_callbacks failed");
- return -1;
- }
-#endif
-
- if(!m->pTVServiceMgr->Start()) {
- _ERR("tv_scan_start failed.");
- return -1;
- }
-
- return false;
-}
-
-
-void CChannelSearchView::t_OnShow(void)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CChannelSearchView::t_OnUpdate(void *data)
-{
- _DBG();
-
- m->stop_btn = util_add_button(m->base, BTN_STYLE, PART_STOP_BTN, TEXT_BTN_STOP, EINA_TRUE);
- if (!m->stop_btn) {
- _ERR("stop_btn is NULL");
- return;
- }
-
- elm_object_focus_set(m->stop_btn, EINA_TRUE);
- //evas_object_smart_callback_add(m->stop_btn, SIGNAL_CLICKED, _stop_btn_clicked_cb, priv);
- Connect(m->stop_btn, 1);
- util_focus_next_set(m->stop_btn);
-
- m->pb = elm_progressbar_add(m->base);
- if (!m->pb) {
- _ERR("pb is NULL");
- evas_object_del(m->stop_btn);
- return;
- }
-
- elm_object_style_set(m->pb, PRGBAR_STYLE);
- elm_object_part_text_set(m->base, PART_PGBAR_NUM, INITIAL_TEXT);
- elm_progressbar_value_set(m->pb, INITIAL_VALUE);
- elm_object_part_content_set(m->base, PART_PROGRESSBAR, m->pb);
- evas_object_show(m->pb);
-
- if (m_StartScan() != true) {
- _ERR("start scan failed");
- return;
- }
-
- evas_object_show(m->base);
-}
-
-
-void CChannelSearchView::t_OnHide(void)
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-
-bool CChannelSearchView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
- char buf[MAX_BUF_SIZE];
-
- ui_gadget_h ug;
- if (!data) {
- _ERR("Invalid argument");
- return false;
- }
- ug = (ui_gadget_h)data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SChannelSearchView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(CTVServiceMgr::Initialize())
- _CHECK(m->pTVServiceMgr = CTVServiceMgr::GetInstance())
- _CHECK(m->base = util_add_layout(m->win, AUTO_PRGM_EDJ_FILE, GROUP_SRCH))
-
- _WHEN_SUCCESS {
- elm_win_resize_object_add(m->win, m->base);
- elm_object_part_text_set(m->base, PART_SRCH_MAIN_TITLE, SEARCH_MAIN_TITLE);
- elm_object_part_text_set(m->base, PART_CH_NAME, SCAN_CH_NAME);
- snprintf(buf, sizeof(buf), "%d %s", INITIAL_CH_NUMS, TEXT_CH_FOUND);
- elm_object_part_text_set(m->base, PART_SRCH_SEARCH_RESULT, buf);
-#if 0
- evas_object_data_set(m->base, "SRCHDATA", m);
-#endif
- m->ug = ug;
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{evas_object_del(m->base);}
- _CHECK_FAIL{/* m->pTVServiceMgr = CTVServiceMgr::GetInstance() */}
- _CHECK_FAIL{CTVServiceMgr::Finalize();}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CChannelSearchView::Destroy(void)
-{
- ASSERT(m);
-
- if(m->base)
- evas_object_del(m->base);
-
- CTVServiceMgr::Finalize();
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CChannelSearchView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-void CChannelSearchView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 1:
- case 4:
- {
- if(!m->pTVServiceMgr->Pause()) {
- _ERR("tv_scan_pause failed");
- return;
- }
-
- elm_object_part_text_set(m->base, PART_SRCH_MAIN_TITLE, PAUSE_MAIN_TITLE);
-
- m->exit_btn = util_add_button(m->base, BTN_STYLE, PART_EXIT_BTN, TEXT_BTN_STOP, EINA_TRUE);
- if (!m->exit_btn) {
- _ERR("exit_btn is NULL");
- return;
- }
-
- //evas_object_smart_callback_add(m->exit_btn, SIGNAL_CLICKED, _destroy_search_page_cb, priv);
- Connect(m->exit_btn, 2);
-
- m->cancel_btn = util_add_button(m->base, BTN_STYLE, PART_SRCH_CANCEL_BTN, TEXT_BTN_CANCEL, EINA_TRUE);
- if (!m->cancel_btn) {
- _ERR("cancel_btn is NULL");
- evas_object_del(m->exit_btn);
- m->exit_btn = NULL;
- return;
- }
-
- //evas_object_smart_callback_add(m->cancel_btn, SIGNAL_CLICKED, _cancel_btn_clicked_cb, priv);
- Connect(m->cancel_btn, 3);
-
- elm_object_focus_allow_set(m->exit_btn, EINA_TRUE);
- elm_object_focus_set(m->exit_btn, EINA_TRUE);
- util_focus_next_set(m->exit_btn);
-
- evas_object_del(m->stop_btn);
- m->stop_btn = NULL;
- }
- break;
- case 2:
- {
- if(!m->pTVServiceMgr->Stop()) {
- _ERR("tv_scan_stop failed");
- return;
- }
-
- ug_destroy_me(m->ug);
- }
- break;
- case 3:
- {
- elm_object_part_text_set(m->base, PART_SRCH_MAIN_TITLE, SEARCH_MAIN_TITLE);
-
- if(!m->pTVServiceMgr->Resume()) {
- _ERR("resume tv scan failed.");
- return;
- }
-
- m->stop_btn = util_add_button(m->base, BTN_STYLE, PART_STOP_BTN, TEXT_BTN_STOP, EINA_TRUE);
- if (!m->stop_btn) {
- _ERR("stop_btn is NULL");
- return;
- }
-
- elm_object_focus_allow_set(m->stop_btn, EINA_TRUE);
- elm_object_focus_set(m->stop_btn, EINA_TRUE);
- //evas_object_smart_callback_add(m->stop_btn, SIGNAL_CLICKED, _stop_btn_clicked_cb, priv);
- Connect(m->stop_btn, 4);
-
- util_focus_next_set(m->stop_btn);
-
- evas_object_del(m->exit_btn);
- evas_object_del(m->cancel_btn);
- m->exit_btn = NULL;
- m->cancel_btn = NULL;
- }
- break;
- default:
- break;
- }
-}
--- /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 <stdlib.h>
+#include <Ecore.h>
+#include "dbg.h"
+//#include "tv_service_proxy.h"
+#include "tv_scan.h"
+
+#define SIGNAL_HANDLER_INTERVAL 0.1
+
+enum tv_scan_state {
+ SCAN_STATE_READY,
+ SCAN_STATE_SEARCHING,
+ SCAN_STATE_PAUSED,
+ SCAN_STATE_STOPPING,
+ SCAN_STATE_MAX
+};
+
+struct tv_scan {
+ struct tv_scan_cbs cbs;
+ enum tv_scan_state state;
+ enum antenna_mode set_mode;
+#if 0
+ TvServiceScan service_scan;
+ TvServiceScanType scan_type;
+#endif
+ int ch_count;
+ int ch_num;
+ int total_ch;
+ struct tv_scan_result res;
+ int is_stopped;
+ Eina_List *signal_queue;
+ Ecore_Timer *signal_timer;
+};
+
+struct _signal_info {
+#if 0
+ TvServiceScanType scan_type;
+ TvServiceScanEvent signal;
+ TvServiceScanEventData signal_data;
+#endif
+};
+
+/**
+ * Get the scan type according to the setting of scanning mode in the beginning
+ *
+ * In this function, it will find the scan state the tv service provided
+ * accordding to the setting of scanning mode by user
+ *
+ * @param[in] mode: The setting of scanning mode in view_scan_start
+ * @param[out] type: The corresponding scan type provided by tv service
+ * @return 0 on success otherwise -1
+ */
+#if 0
+static int _get_scan_mode(enum antenna_mode mode, TvServiceScanType *type)
+{
+ switch (mode) {
+ case SCAN_TYPE_ALL:
+ *type = TVS_SCAN_ALL_ANALOG_DIGITAL;
+ break;
+ case SCAN_TYPE_CABLE:
+ *type = TVS_SCAN_CABLE_ANALOG_DIGITAL;
+ break;
+ case SCAN_TYPE_AIR:
+ *type = TVS_SCAN_AIR_ANALOG_DIGITAL;
+ break;
+ default:
+ _ERR("Invalid scan mode: %d", mode);
+ return -1;
+ }
+
+ return 0;
+}
+#endif
+
+/**
+ * Handling the beginning signal.
+ *
+ * When user press the button "start", it will begin scanning, and the tv
+ * service will return the total number of channels in the first for
+ * calculating the progress of the progressbar
+ *
+ * In this function, it will find the total number of channel signal according
+ * to the scanning type.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @param[in] sinfo: The channel signal information.
+ */
+static void _handle_begin_signal(struct tv_scan *tvs,
+ struct _signal_info *sinfo)
+{
+#if 0
+ if (!tvs || !sinfo) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ switch (sinfo->scan_type) {
+ case TVS_SCAN_ALL_ANALOG_DIGITAL:
+ tvs->total_ch = sinfo->signal_data.data.l[0] +
+ sinfo->signal_data.data.l[1];
+ break;
+ case TVS_SCAN_AIR_ANALOG_DIGITAL:
+ tvs->total_ch = sinfo->signal_data.data.l[0];
+ break;
+ case TVS_SCAN_CABLE_ANALOG_DIGITAL:
+ tvs->total_ch = sinfo->signal_data.data.l[1];
+ break;
+ default:
+ _ERR("Invalid scan type");
+ break;
+ }
+#endif
+}
+
+/**
+ * Handle the receiving channel signal.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @param[in] sinfo: The channel signal information.
+ */
+static void _handle_progress_signal(struct tv_scan *tvs,
+ struct _signal_info *sinfo)
+{
+#if 0
+ if (!tvs || !sinfo) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ tvs->ch_count++;
+ tvs->ch_num = sinfo->signal_data.data.l[0];
+
+ if (tvs->cbs.progress_cb)
+ tvs->cbs.progress_cb(tvs, tvs->set_mode, tvs->ch_count,
+ tvs->ch_num, tvs->cbs.data);
+#endif
+}
+
+/**
+ * Calculating the number of ATV channle signal or DTV channel signal.
+ *
+ * @param[in] atv: A pointer for saving the number of ATV channel signal.
+ * @param[in] dtv: A pointer for saving the number of DTV channel signal.
+ * @param[in] sinfo: The channel signal information.
+ */
+static void _channel_count(unsigned int *atv, unsigned int *dtv,
+ struct _signal_info *sinfo)
+{
+#if 0
+ if (!sinfo || !atv || !dtv) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ switch (sinfo->signal_data.data.s[1]) {
+ case TVS_CHANNEL_TYPE_ATV:
+ *atv += sinfo->signal_data.data.s[2];
+ break;
+ case TVS_CHANNEL_TYPE_DTV:
+ *dtv += sinfo->signal_data.data.s[3];
+ break;
+ default:
+ _ERR("Invalid TVS_CHANNEL_TYPE");
+ break;
+ }
+#endif
+}
+
+/**
+ * Handle the found channel signal when tune lock success.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @param[in] sinfo: The channel signal information.
+ */
+static void _handle_found_signal(struct tv_scan *tvs,
+ struct _signal_info *sinfo)
+{
+#if 0
+ if (!tvs || !sinfo) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ /* judge *param.s[0]: antenna type */
+ switch (sinfo->signal_data.data.s[0]) {
+ case TV_SERVICE_ANTENNA_TYPE_AIR:
+ _channel_count(&tvs->res.air_atv,
+ &tvs->res.air_dtv, sinfo);
+ break;
+ case TV_SERVICE_ANTENNA_TYPE_CABLE:
+ _channel_count(&tvs->res.cable_atv,
+ &tvs->res.cable_dtv, sinfo);
+ break;
+ default:
+ _ERR("Invalid channel type");
+ return;
+ }
+
+ if ((sinfo->signal_data.data.s[2] > 0 ||
+ sinfo->signal_data.data.s[3] > 0) && tvs->cbs.found_cb)
+ tvs->cbs.found_cb(tvs, tvs->ch_count, tvs->ch_num, &tvs->res,
+ tvs->cbs.data);
+#endif
+}
+
+/**
+ * Handle the result when scanning is finished.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @param[in] sinfo: The channel signal information.
+ */
+static void _handle_done_signal(struct tv_scan *tvs,
+ struct _signal_info *sinfo)
+{
+#if 0
+ if (!tvs || !sinfo) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ if (sinfo->signal_data.data.l[0] == TVS_SCAN_SEARCH_FINISH_COMPLETE) {
+ tvs->state = SCAN_STATE_READY;
+
+ if (tvs->cbs.done_cb)
+ tvs->cbs.done_cb(tvs, &tvs->res, tvs->cbs.data);
+ }
+#endif
+}
+
+/**
+ * Handle the receiving signal saved in tvs->signal_queue.
+ *
+ * @param[in] data: Data handler for tv scan manager.
+ */
+static Eina_Bool _handle_signal(void *data)
+{
+#if 0
+ struct tv_scan *tvs;
+ struct _signal_info *sinfo;
+
+ if (!data)
+ return ECORE_CALLBACK_CANCEL;
+
+ tvs = data;
+
+ if (!tvs->signal_queue)
+ goto stop;
+
+ sinfo = eina_list_data_get(tvs->signal_queue);
+ if (!sinfo)
+ goto stop;
+
+ tvs->signal_queue = eina_list_remove_list(
+ tvs->signal_queue, tvs->signal_queue);
+
+ switch (sinfo->signal) {
+ case TVS_SCAN_EVENT_SEARCH_BEGIN:
+ _handle_begin_signal(tvs, sinfo);
+ break;
+ case TVS_SCAN_EVENT_SEARCH_CHANNEL:
+ _handle_progress_signal(tvs, sinfo);
+ break;
+ case TVS_SCAN_EVENT_CHANNEL_FOUND:
+ _handle_found_signal(tvs, sinfo);
+ break;
+ case TVS_SCAN_EVENT_SEARCH_FINISH:
+ _handle_done_signal(tvs, sinfo);
+ break;
+ default:
+ _ERR("Invalid signal");
+ break;
+ }
+
+ free(sinfo);
+
+ if (!tvs->signal_queue)
+ goto stop;
+
+ return ECORE_CALLBACK_RENEW;
+
+stop:
+ tvs->signal_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+#endif
+}
+
+/**
+ * Handle the receiving signal from tv service.
+ *
+ * Tv service will send the signal one by one, and the variable Ecore_Timer:
+ * signal_timer is set for setting the time for dealing with the signal in
+ * signal_queue at regular intervals.
+ *
+ * @param[in] signal: Signal from Tv service.
+ * @param[in] signal_data: Data handler for tv service sacn event.
+ * @param[in] data: Data handler for tv scan manager.
+ */
+#if 0
+static void _signal_received(TvServiceScanEvent signal,
+ TvServiceScanEventData *signal_data, gpointer data)
+{
+ struct tv_scan *tvs;
+ struct _signal_info *sinfo;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ tvs = data;
+
+ sinfo = calloc(1, sizeof(*sinfo));
+ if (!sinfo) {
+ _ERR("calloc failed");
+ return;
+ }
+
+ sinfo->signal = signal;
+ sinfo->signal_data = *signal_data;
+ sinfo->scan_type = tvs->scan_type;
+
+ tvs->signal_queue = eina_list_append(
+ tvs->signal_queue, sinfo);
+
+ if (!tvs->signal_timer) {
+ tvs->signal_timer = ecore_timer_add(SIGNAL_HANDLER_INTERVAL,
+ _handle_signal, tvs);
+ if (!tvs->signal_timer) {
+ _ERR("add timer failed.");
+ tvs->signal_queue = eina_list_remove(tvs->signal_queue,
+ sinfo);
+ free(sinfo);
+ return;
+ }
+ }
+}
+#endif
+
+/**
+ * Initialize the tv scan manager object
+ *
+ * In this function, it will create tv_scan struct object, and get the related
+ * scan mode (one of TVS_SCAN_ALL_ANALOG_DIGITAL /
+ * TVS_SCAN_CABLE_ANALOG_DIGITAL / TVS_SCAN_AIR_ANALOG_DIGITAL)
+ * fron tv service according to the optional setting mode
+ * (one of AIR / CABLE / ALL) in scan_start view,
+ * and register TvServiceScan object and set it for variable service_scan,
+ * and set the initial scan state SCAN_STATE_READY.
+ *
+ * @param[in] mode: the setting mode (one of AIR / CABLE / ALL) in
+ * view_scan_start
+ * @return The struct tvs or NULL if initialize failed
+ */
+struct tv_scan *tv_scan_init(enum antenna_mode mode)
+{
+#if 0
+ struct tv_scan *tvs;
+ TvServiceScan scan;
+ TvServiceScanType type;
+ gint result;
+ int r;
+
+ tvs = calloc(1, sizeof(*tvs));
+ if (!tvs) {
+ _ERR("calloc failed");
+ return NULL;
+ }
+
+ r = _get_scan_mode(mode, &type);
+ if (r == -1) {
+ _ERR("Get scan mode failed");
+ free(tvs);
+ return NULL;
+ }
+
+ result = tv_service_scan_create(&scan, type);
+ if (result != TVS_ERROR_OK) {
+ _ERR("Create Scan failed");
+ free(tvs);
+ return NULL;
+ }
+
+ tvs->service_scan = scan;
+ tvs->scan_type = type;
+ tvs->set_mode = mode;
+ tvs->state = SCAN_STATE_READY;
+
+ return tvs;
+#endif
+ return NULL;
+}
+
+/**
+ * Release tv_scan struct resource
+ *
+ * In this function, it will release the object in tv_scan struct object,
+ * include channel information saved in signal_queue and the Ecore_Timer object
+ * and so on.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_fini(struct tv_scan *tvs)
+{
+#if 0
+ struct _signal_info *sinfo;
+
+ if (!tvs) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ if (tvs->state != SCAN_STATE_READY)
+ tv_scan_stop(tvs);
+
+ if (tvs->signal_timer)
+ ecore_timer_del(tvs->signal_timer);
+
+ EINA_LIST_FREE(tvs->signal_queue, sinfo)
+ free(sinfo);
+
+ tv_service_scan_destroy(tvs->service_scan);
+ free(tvs);
+
+#endif
+ return 0;
+}
+
+/**
+ * Register callbacks for tvs struct
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @param[in] cbs: The registered callbacks for control the scan state
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_set_callbacks(struct tv_scan *tvs, struct tv_scan_cbs *cbs)
+{
+ if (!tvs || !cbs) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ tvs->cbs = *cbs;
+
+ return 0;
+}
+
+/**
+ * Start scanning channels
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_start(struct tv_scan *tvs)
+{
+#if 0
+ gint result;
+
+ if (!tvs || !tvs->service_scan) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ if (tvs->state != SCAN_STATE_READY) {
+ _ERR("unable state to start scan");
+ return -1;
+ }
+
+ result = tv_service_scan_register_callback(tvs->service_scan,
+ _signal_received, (gpointer)tvs);
+ if (result != TVS_ERROR_OK) {
+ _ERR("register callback failed");
+ return -1;
+ }
+
+ result = tv_service_scan_start(tvs->service_scan);
+ if (result != TVS_ERROR_OK) {
+ _ERR("scan start failed");
+ return -1;
+ }
+
+ tvs->state = SCAN_STATE_SEARCHING;
+ tvs->is_stopped = 0;
+ tvs->ch_count = 0;
+ memset(&tvs->res, 0x00, sizeof(tvs->res));
+
+ return 0;
+#endif
+ return -1;
+}
+
+/**
+ * Pause the scanning of channels
+ *
+ * In this function, it will invoke the pausing function from tv service
+ * for pausing the scaning and stop sending channel signals.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_pause(struct tv_scan *tvs)
+{
+#if 0
+ gint result;
+
+ if (!tvs || !tvs->service_scan) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ if (tvs->state != SCAN_STATE_SEARCHING) {
+ _ERR("unable state to pause scan");
+ return -1;
+ }
+
+ result = tv_service_scan_pause(tvs->service_scan);
+ if (result != TVS_ERROR_OK) {
+ _ERR("Pause Scan failed");
+ return -1;
+ }
+
+ tvs->state = SCAN_STATE_PAUSED;
+
+ return 0;
+#endif
+}
+
+
+/**
+ * Resume the paused scanning of channels
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_resume(struct tv_scan *tvs)
+{
+#if 0
+ gint result;
+
+ if (!tvs || !tvs->service_scan) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ if (tvs->state != SCAN_STATE_PAUSED) {
+ _ERR("unable state to resume scan");
+ return -1;
+ }
+
+ result = tv_service_scan_resume(tvs->service_scan);
+ if (result != TVS_ERROR_OK) {
+ _ERR("resume Scan failed");
+ return -1;
+ }
+
+ tvs->state = SCAN_STATE_SEARCHING;
+
+ return 0;
+#endif
+ return -1;
+}
+
+/**
+ * Stop the scanning of channels
+ *
+ * Stop the scanning and stop receiving channel signal
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_stop(struct tv_scan *tvs)
+{
+#if 0
+ gint result;
+
+ if (!tvs) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ if (tvs->state == SCAN_STATE_READY) {
+ _ERR("unable state to stop scan");
+ return -1;
+ }
+
+ result = tv_service_scan_stop(tvs->service_scan);
+ if (result != TVS_ERROR_OK) {
+ _ERR("Create Scan failed");
+ return -1;
+ }
+
+ tvs->state = SCAN_STATE_STOPPING;
+ tvs->is_stopped = 1;
+
+ return 0;
+#endif
+ return -1;
+}
+
+/**
+ * Get the total number of channel signals saved in
+ * data handler for tv scan manager
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_get_total_channel(struct tv_scan *tvs)
+{
+ if (!tvs) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ return tvs->total_ch;
+}
+
+/**
+ * Get the scanning result of channel signals
+ *
+ * There are four kinds of channel signals: ATV air, ATV cable, DTV air and
+ * DTV cable, and the numner of the channel signal is saved in variable
+ * tvs->res.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return The tv_scan_result struct
+ */
+struct tv_scan_result *tv_scan_get_result(struct tv_scan *tvs)
+{
+ if (!tvs) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ return &tvs->res;
+}
+
+/**
+ * Get the state of scanning of channels
+ *
+ * Get the state of scanning of channels to judge whether the scanning
+ * is stopped.
+ *
+ * @param[in] tvs: Data handler for tv scan manager.
+ * @return 0 on success otherwise -1
+ */
+int tv_scan_is_stopped(struct tv_scan *tvs)
+{
+ if (!tvs) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ return tvs->is_stopped;
+}
#define UG_MODULE_API __attribute__ ((visibility("default")))
#endif
+#include <Elementary.h>
+#include <app.h>
#include "defs.h"
-#include <AppCommon.h>
+#include "dbg.h"
+#include "viewmgr_auto_program.h"
#include "ug_auto_program.h"
+#include "view_scan_start.h"
+#include "view_search_page.h"
+#include "view_result_page.h"
#include "util.h"
-#include "TVServiceMgr.h"
-#include "ChannelMainView.h"
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-struct _ug_data {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
-
- enum antenna_mode scan_type;
- int find_chs;
-
- CViewMgr *pViewMgr;
- CChannelMainView *pChannelMainView;
-};
-
/**
* Creates the base layout for channel UI gadget
*
static void *_on_create(ui_gadget_h ug, enum ug_mode mode,
service_h service, void *priv)
{
- struct _ug_data *ugd;
Evas_Object *win;
+ struct _ugdata *ugd;
+ struct viewmgr *vmgr;
if (!ug || !priv) {
- _ERR("Parameter error!");
+ _ERR("ug: %p , priv: %p ", ug, priv);
return NULL;
}
- ugd = (struct _ug_data *) priv;
- ugd->ug = ug;
+ ugd = priv;
elm_theme_extension_add(NULL, AUTO_PRGM_EDJ_THEME);
- win = (Evas_Object *) ug_get_window();
+ win = ug_get_window();
if (!win) {
_ERR("window get failed");
return NULL;
}
- ugd->win = win;
-
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
elm_win_focus_highlight_style_set(win, INVISIBLE);
- CViewMgr::Initialize(ugd->win, NULL);
- ugd->pViewMgr = CViewMgr::GetInstance();
- if(!ugd->pViewMgr) {
- CViewMgr::Finalize();
- _ERR("Fail to get CViewMgr instance");
+ vmgr = viewmgr_init(win);
+ if (!vmgr) {
+ _ERR("viewmgr init failed");
return NULL;
}
- ugd->pChannelMainView = new CChannelMainView(CHANNEL_MAINVIEW);
- if(!ugd->pViewMgr->AddView(ugd->pChannelMainView)) {
- _ERR("Fail to add pFbBaseView");
- CViewMgr::Finalize();
- return false;
- }
- ugd->pViewMgr->PushView(CHANNEL_MAINVIEW, ugd->ug);
- ugd->base = ugd->pChannelMainView->Base();
+ ugd->ug = ug;
+ ugd->win = win;
+ ugd->vmgr = vmgr;
- return ugd->base;
+ if (viewmgr_push(vmgr, view_scanstart_get_vclass(), ugd) == -1) {
+ _ERR("scan view push failed");
+ viewmgr_fini(vmgr);
+ return NULL;
+ }
+
+ return ugd->ugd_base;
}
/**
*/
static void _on_destroy(ui_gadget_h ug, service_h service, void *priv)
{
- CViewMgr::Finalize();
+ struct _ugdata *ugd;
+
+ if (!ug || !priv) {
+ _ERR("Invalid parameter.");
+ return;
+ }
+
+ ugd = priv;
+
+ viewmgr_fini(ugd->vmgr);
+
+ return;
}
/**
*/
UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
{
- struct _ug_data *ugd;
+ struct _ugdata *ugd;
if (!ops)
return -1;
- ugd = (struct _ug_data *) calloc(1, sizeof(*ugd));
+ ugd = calloc(1, sizeof(*ugd));
if (!ugd)
return -1;
*/
UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
{
- struct _ug_data *ugd;
+ struct _ugdata *ugd;
if (!ops)
return;
- ugd = (struct _ug_data *)ops->priv;
+ ugd = ops->priv;
free(ugd);
}
-
-#if defined (__cplusplus)
-};
-#endif
#include <aul.h>
#include <app.h>
#include "defs.h"
-#include <MacroDefine.h>
+#include "dbg.h"
#include "util.h"
/**
--- /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 <Elementary.h>
+#include <app.h>
+#include <system_info.h>
+#include "dbg.h"
+#include "defs.h"
+#include "util.h"
+#include "viewmgr_auto_program.h"
+#include "ug_auto_program.h"
+#include "view_search_page.h"
+#include "view_result_page.h"
+
+#define RESULT_MSG_SIZE 60
+
+#define _GET_PRIV(o) evas_object_data_get(o, "RESDATA")
+#define _SET_PRIV(o, data) evas_object_data_set(o, "RESDATA", data)
+
+struct _data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *ok_btn;
+ struct viewmgr *vmgr;
+ struct _ugdata *ugd;
+};
+
+/**
+ * @Evas_Smart_Cb type callback for handling the click callback event for
+ * "OK" button.
+ *
+ * When "OK" button is clicked, channel ug will exit.
+ *
+ * @param[in] data: the user data related to current view
+ * @param[in] obj: the corresponding object on which the button click event
+ * occurred
+ *
+ * @param[in] ev: event information
+ */
+static void _ok_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _ugdata *ugd;
+ struct _data *priv;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+ ugd = priv->ugd;
+
+ if (!ugd || !ugd->ug) {
+ _ERR("ugd->ug is NULL");
+ return;
+ }
+
+ ug_destroy_me(ugd->ug);
+}
+
+/**
+ * Initializes the base layout for scanning result view.
+ *
+ * Create the layout of scanning result view.
+ *
+ * @param[in] vmgr: the handler to the struct object for managing the view
+ * @param[in] data: the user data related to current view
+ * @return The base or NULL if creatting failed
+ */
+static Evas_Object *_create(struct viewmgr *vmgr, void *data)
+{
+ Evas_Object *base;
+ Evas_Object *win;
+ struct _data *priv;
+ struct _ugdata *ugd;
+
+ if (!vmgr || !data) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ ugd = data;
+
+ win = viewmgr_get_win(vmgr);
+ if (!win)
+ return NULL;
+
+ priv = calloc(1, sizeof(*priv));
+ if (!priv)
+ return NULL;
+
+ base = util_add_layout(win, AUTO_PRGM_EDJ_FILE, GROUP_RES);
+ if (!base) {
+ free(priv);
+ return NULL;
+ }
+
+ elm_win_resize_object_add(win, base);
+
+ priv->win = win;
+ priv->base = base;
+ priv->ugd = ugd;
+ priv->vmgr = vmgr;
+
+ _SET_PRIV(base, priv);
+
+ return base;
+}
+
+/**
+ * Invoked after _create() function as defined in viewmgr_push().
+ *
+ * Create the button in result view, and show the information about the
+ * number of found channels.
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _update(Evas_Object *base)
+{
+ Evas_Object *ok_btn;
+ struct _data *priv;
+ char msg[RESULT_MSG_SIZE];
+ int chs;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = _GET_PRIV(base);
+ if (!priv) {
+ _ERR("Data get failed");
+ return;
+ }
+
+ chs = priv->ugd->find_chs;
+
+ snprintf(msg, sizeof(msg), "%s<br>%d %s", COMPLETE_MAIN_TITLE,
+ chs, TEXT_CH_MEMORIZED);
+ elm_object_part_text_set(priv->base, PART_RES_MAIN_TITLE, msg);
+
+ ok_btn = util_add_button(priv->base, BTN_STYLE,
+ PART_OK_BTN, TEXT_BUTTON_OK, EINA_TRUE);
+ if (!ok_btn) {
+ _ERR("ok_btn is NULL");
+ return;
+ }
+
+ priv->ok_btn = ok_btn;
+ elm_object_focus_set(ok_btn, EINA_TRUE);
+ evas_object_smart_callback_add(ok_btn, SIGNAL_CLICKED,
+ _ok_btn_clicked_cb, priv);
+
+ util_focus_next_set(ok_btn);
+}
+
+/**
+ * Resume the application.
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _resume(Evas_Object *base)
+{
+ evas_object_show(base);
+}
+
+/**
+ * Pause the application.
+ *
+ * Hide the layout
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _pause(Evas_Object *base)
+{
+ evas_object_hide(base);
+}
+
+/**
+ * Called after the main loop of the view exits.
+ *
+ * Delete the layout and release the resourse
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _terminate(Evas_Object *base)
+{
+ struct _data *priv;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = _GET_PRIV(base);
+ if (!priv) {
+ _ERR("Data get failed");
+ return;
+ }
+
+ if (priv->base)
+ evas_object_del(priv->base);
+
+ free(priv);
+}
+
+/**
+ * This struct is for registering the callbacks for the view
+ */
+static struct view_class _vclass = {
+ .title = VIEW_RESULT,
+ .create = _create,
+ .update = _update,
+ .resume = _resume,
+ .pause = _pause,
+ .terminate = _terminate,
+};
+
+ /**
+ * Returns current view_class which implements the result view's life cycle
+ *
+ * @return view_class
+ */
+struct view_class *view_resultpage_get_vclass(void)
+{
+ return &_vclass;
+}
--- /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 <Elementary.h>
+#include <Ecore_Evas.h>
+#include <system_info.h>
+#include <app.h>
+
+#include <KeyDefine.h>
+
+#include "ug_auto_program.h"
+#include "view_scan_start.h"
+#include "view_search_page.h"
+#include "view_result_page.h"
+#include "viewmgr_auto_program.h"
+#include "dbg.h"
+#include "defs.h"
+#include "tv_scan.h"
+#include "util.h"
+
+#define HORIZONTAL_ALIGN 0.5
+#define VERTICAL_ALIGN 0.0
+#define MAX_ITEMS 3
+#define ALL "All"
+#define CABLE "Cable"
+#define AIR "Air"
+
+#define _GET_PRIV(o) evas_object_data_get(o, "SCANSTARTDATA")
+#define _SET_PRIV(o, data) evas_object_data_set(o, "SCANSTARTDATA", data)
+
+enum antenna_type {
+ ALL_ITEM,
+ CABLE_ITEM,
+ AIR_ITEM
+};
+
+struct _data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *start_btn;
+ Evas_Object *cancel_btn;
+ Evas_Object *box;
+ Evas_Object *last_focus_item;
+ Evas_Object *selected_item;
+ Evas_Object *atn_btn[MAX_ITEMS];
+ struct viewmgr *vmgr;
+ struct _ugdata *ugd;
+ enum antenna_mode scan_type;
+};
+
+struct _antenna_info {
+ char *style;
+ Evas_Smart_Cb cb;
+ char *text;
+};
+
+/**
+ * @EVAS_CALLBACK_KEY_DOWN type callback for handling key pressed callback
+ * event
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] e: evas handler
+ * @param[in] obj: the corresponding object on which the key pressed event
+ * occurred
+ * @param[in] ei: event information
+ */
+static void _key_pressed_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _data *priv;
+ struct _ugdata *ugd;
+
+ if (!data || !ei) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!priv->ugd) {
+ _ERR("priv->ugd is NULL");
+ return;
+ }
+
+ ugd = priv->ugd;
+
+ if (!ugd->ug) {
+ _ERR("ugd->ug is NULL");
+ return;
+ }
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname NULL!");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK))
+ ug_destroy_me(ugd->ug);
+}
+
+/**
+ * @Evas_Smart_Cb type callback for handling the click callback event for
+ * "start" button.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: the corresponding object on which the button click event
+ * occurred
+ * @param[in] ev: event information
+ */
+static void _start_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _data *priv;
+ Eina_Bool tuner_exist;
+
+ if (!data) {
+ _ERR("data is NULL");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->ugd || !priv->vmgr) {
+ _ERR("parameter is NULL");
+ return;
+ }
+
+ /*
+ * TODO: add the interface when TV service provider the related API.
+ * Here is a pseudo-data.
+ */
+ tuner_exist = EINA_TRUE;
+ if (!tuner_exist) {
+ /*
+ * TODO: popup the notification iniformation:
+ * there is no tuner
+ */
+ return;
+ }
+
+ if (viewmgr_push(priv->vmgr, view_searchpage_get_vclass(),
+ priv->ugd) == -1) {
+ _ERR("search view push failed");
+ return;
+ }
+}
+
+ /**
+ * @Evas_Smart_Cb type callback for handling the click callback event for
+ * "cancel" button.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: the corresponding object on which the button click event
+ * occurred
+ * @param[in] ev: event information
+ */
+static void _cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _data *priv;
+ struct _ugdata *ugd;
+
+ if (!data) {
+ _ERR("data is NULL");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->ugd) {
+ _ERR("priv->ugd is NULL");
+ return;
+ }
+
+ ugd = priv->ugd;
+
+ if (!ugd->ug) {
+ _ERR("ugd->ug is NULL");
+ return;
+ }
+
+ ug_destroy_me(ugd->ug);
+}
+
+/**
+ * Callback function for button focus event.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: the corresponding object on which the button focus event
+ * occurred
+ * @param[in] emission: the signal's name.
+ * @param[in] source: the signal's source.
+ */
+static void _btn_focused_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ struct _data *priv;
+
+ if (!obj || !data) {
+ _ERR("Invalid parameter");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->last_focus_item) {
+ elm_object_signal_emit(priv->last_focus_item,
+ SIGNAL_SHOWLINE, CHANNEL_SOURCE);
+ elm_object_signal_emit(obj, SIGNAL_HIDELINE, CHANNEL_SOURCE);
+ } else {
+ elm_object_signal_emit(obj, SIGNAL_SHOWLINE, CHANNEL_SOURCE);
+ }
+
+ priv->last_focus_item = obj;
+}
+
+/**
+ * Callback function for button unfocus event.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: the corresponding object on which the button focus event
+ * occurred
+ * @param[in] emission: the signal's name.
+ * @param[in] source: the signal's source.
+ */
+static void _btn_unfocused_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ struct _data *priv;
+
+ if (!obj || !data) {
+ _ERR("Invalid parameter");
+ return;
+ }
+
+ priv = data;
+ elm_object_signal_emit(priv->last_focus_item,
+ SIGNAL_SHOWLINE, CHANNEL_SOURCE);
+}
+
+/**
+ * Set the focus sequence for the objects in the layout.
+ *
+ * @param[in] data: user data related to current view
+ */
+static void _update_focus_sequence(struct _data *priv)
+{
+ if (!priv) {
+ _ERR("Invalid parameter");
+ return;
+ }
+
+ elm_object_focus_next_object_set(priv->atn_btn[ALL_ITEM],
+ priv->start_btn, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(priv->atn_btn[CABLE_ITEM],
+ priv->start_btn, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(priv->atn_btn[AIR_ITEM],
+ priv->start_btn, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(priv->atn_btn[ALL_ITEM],
+ priv->atn_btn[ALL_ITEM], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->atn_btn[CABLE_ITEM],
+ priv->atn_btn[CABLE_ITEM], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->atn_btn[AIR_ITEM],
+ priv->atn_btn[AIR_ITEM], ELM_FOCUS_LEFT);
+
+ if (priv->selected_item) {
+ elm_object_focus_next_object_set(priv->start_btn,
+ priv->selected_item, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->cancel_btn,
+ priv->selected_item, ELM_FOCUS_LEFT);
+ } else {
+ elm_object_focus_next_object_set(priv->start_btn,
+ priv->atn_btn[ALL_ITEM], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->cancel_btn,
+ priv->atn_btn[ALL_ITEM], ELM_FOCUS_LEFT);
+ }
+
+ elm_object_focus_next_object_set(priv->start_btn,
+ priv->cancel_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(priv->cancel_btn,
+ priv->start_btn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(priv->cancel_btn,
+ priv->start_btn, ELM_FOCUS_UP);
+}
+
+/**
+ * @Evas_Smart_Cb type callback for handling the click callback event.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: the corresponding object on which the button click event
+ * occurred
+ * @param[in] ev: event information
+ */
+static void _item_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _data *priv;
+ const char *text;
+
+ if (!data || !obj) {
+ _ERR("Invalid parameter");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->selected_item) {
+ elm_object_focus_set(obj, EINA_TRUE);
+ elm_object_signal_emit(obj, SIGNAL_SELECTED, CHANNEL_SOURCE);
+ priv->selected_item = obj;
+ } else {
+ if (priv->selected_item != obj) {
+ elm_object_signal_emit(priv->selected_item,
+ SIGNAL_UNSELECTED, CHANNEL_SOURCE);
+ elm_object_signal_emit(obj, SIGNAL_SELECTED,
+ CHANNEL_SOURCE);
+ priv->selected_item = obj;
+ }
+ }
+
+ text = elm_object_text_get(priv->selected_item);
+ if (text && !strcmp(text, ALL))
+ priv->scan_type = SCAN_TYPE_ALL;
+ else if (text && !strcmp(text, CABLE))
+ priv->scan_type = SCAN_TYPE_CABLE;
+ else if (text && !strcmp(text, AIR))
+ priv->scan_type = SCAN_TYPE_AIR;
+ else
+ priv->scan_type = SCAN_TYPE_INVALID;
+
+ priv->ugd->scan_type = priv->scan_type;
+
+ _update_focus_sequence(priv);
+}
+
+/**
+ * Clear the content of the box.
+ *
+ * @param[in] data: user data related to current view
+ */
+static void _clear_box(struct _data *data)
+{
+ if (!data) {
+ _ERR("Invalid parameter.");
+ return;
+ }
+
+ if (!data->box) {
+ _ERR("data->box is NULL");
+ return;
+ }
+
+ elm_box_clear(data->box);
+
+ data->last_focus_item = NULL;
+ data->selected_item = NULL;
+}
+
+/**
+ * Add items in the box of the layout.
+ *
+ * @param[in] parent: the box created in the layout.
+ * @param[in] btnstyle: the style of the button
+ * @param[in] btntext: the text shown in button
+ * @param[in] fun_cb: the click callback function for the button
+ * @param[in] data: user data related to current view
+ * @return Button or NULL if creatting failed
+ */
+static Evas_Object *_add_exit_item(Evas_Object *parent, const char *btnstyle,
+ const char *btntext, Evas_Smart_Cb fun_cb, struct _data *data)
+{
+ Evas_Object *btn;
+
+ if (!data) {
+ _ERR("Invalid parameter.");
+ return NULL;
+ }
+
+ if (!parent || !btnstyle || !btntext || !fun_cb) {
+ _ERR("Invalid parameter.");
+ return NULL;
+ }
+
+ btn = util_add_button(parent, btnstyle, NULL, btntext, EINA_TRUE);
+ if (!btn) {
+ _ERR("add item failed");
+ return NULL;
+ }
+
+ elm_box_pack_end(parent, btn);
+ evas_object_smart_callback_add(btn, SIGNAL_CLICKED,
+ fun_cb, data);
+ elm_object_signal_callback_add(btn, SIGNAL_FOCUSED,
+ ELM_SOURCE, _btn_focused_cb, data);
+ elm_object_signal_callback_add(btn, SIGNAL_UNFOCUSED,
+ ELM_SOURCE, _btn_unfocused_cb, data);
+
+ return btn;
+}
+
+/**
+ * Create the item list of antenna type .
+ *
+ * @param[in] data: user data related to current view
+ */
+static void _update_antenna_list(struct _data *data)
+{
+ Evas_Object *btn;
+ int i;
+ struct _antenna_info atninfo[] = {
+ [ALL_ITEM] = {
+ .style = ITEM_STYLE,
+ .cb = _item_clicked_cb,
+ .text = ALL
+ },
+ [CABLE_ITEM] = {
+ .style = ITEM_STYLE,
+ .cb = _item_clicked_cb,
+ .text = CABLE
+ },
+ [AIR_ITEM] = {
+ .style = ITEM_STYLE,
+ .cb = _item_clicked_cb,
+ .text = AIR
+ }
+ };
+
+ if (!data) {
+ _ERR("Invalid parameter.");
+ return;
+ }
+
+ if (!data->base || !data->box) {
+ _ERR("Invalid parameter.");
+ return;
+ }
+
+ _clear_box(data);
+
+ for (i = 0; i < MAX_ITEMS; i++) {
+ btn = _add_exit_item(data->box, atninfo[i].style,
+ atninfo[i].text, atninfo[i].cb, data);
+ if (!btn) {
+ _ERR("add exist item failed.");
+ return;
+ }
+
+ data->atn_btn[i] = btn;
+
+ if (i == 0) {
+ elm_object_focus_set(btn, EINA_TRUE);
+ elm_object_signal_emit(btn,
+ SIGNAL_SELECTED, CHANNEL_SOURCE);
+ data->selected_item = btn;
+ }
+ }
+
+ _update_focus_sequence(data);
+}
+
+/**
+ * Create box in the layout for adding item in it.
+ *
+ * @param[in] base: the layout created in _creat() of current view
+ * @return The box or NULL if creatting failed
+ */
+static Evas_Object *_create_box(Evas_Object *base)
+{
+ Evas_Object *box;
+ struct _data *priv;
+
+ if (!base) {
+ _ERR("base is NULL");
+ return NULL;
+ }
+
+ priv = _GET_PRIV(base);
+ if (!priv) {
+ _ERR("Data get failed");
+ return NULL;
+ }
+
+ box = util_add_box(base, HORIZONTAL_ALIGN, VERTICAL_ALIGN);
+ if (!box) {
+ _ERR("box add failed");
+ return NULL;
+ }
+
+ elm_object_part_content_set(base, PART_ANTENNA_LIST, box);
+ evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
+
+ return box;
+}
+
+/**
+ * Initializes the base layout for scanning start view.
+ *
+ * Create the beginning view layout based on window
+ *
+ * @param[in] vmgr: the handler to the struct object for managing the view
+ * @param[in] data: the user data related to current view
+ * @return The base or NULL if creatting failed
+ */
+static Evas_Object *_create(struct viewmgr *vmgr, void *data)
+{
+ Evas_Object *base;
+ Evas_Object *win;
+ Evas_Object *start_btn;
+ Evas_Object *cancel_btn;
+ Evas_Object *box;
+ struct _data *priv;
+ struct _ugdata *ugd;
+
+ if (!vmgr || !data) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ ugd = (struct _ugdata *)data;
+
+ win = viewmgr_get_win(vmgr);
+ if (!win) {
+ _ERR("get win failed.");
+ return NULL;
+ }
+
+ priv = calloc(1, sizeof(*priv));
+ if (!priv) {
+ _ERR("calloc memory failed.");
+ return NULL;
+ }
+
+ base = util_add_layout(win, AUTO_PRGM_EDJ_FILE, GRP_SCAN_START);
+ if (!base) {
+ _ERR("scan start layout creat failed!");
+ free(priv);
+ return NULL;
+ }
+
+ elm_win_resize_object_add(win, base);
+ evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN,
+ _key_pressed_cb, priv);
+ elm_object_part_text_set(base, PART_STAR_MAIN_TITLE_BLOCK,
+ START_MAIN_TITLE);
+
+ start_btn = util_add_button(base, BTN_STYLE,
+ PART_START_BTN, TEXT_BTN_START, EINA_TRUE);
+ if (!start_btn) {
+ _ERR("create start_btn failed");
+ goto aborting;
+ }
+
+ cancel_btn = util_add_button(base, BTN_STYLE,
+ PART_CANCEL_BTN, TEXT_BTN_CANCEL, EINA_TRUE);
+ if (!cancel_btn) {
+ _ERR("create cancel_btn failed");
+ goto aborting;
+ }
+
+ priv->base = base;
+ priv->start_btn = start_btn;
+ priv->cancel_btn = cancel_btn;
+ priv->ugd = ugd;
+ priv->ugd->ugd_base = base;
+ priv->vmgr = vmgr;
+ priv->win = win;
+
+ _SET_PRIV(base, priv);
+
+ evas_object_smart_callback_add(start_btn, SIGNAL_CLICKED,
+ _start_btn_clicked_cb, priv);
+ evas_object_smart_callback_add(cancel_btn, SIGNAL_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ evas_object_raise(base);
+
+ box = _create_box(base);
+ if (!box) {
+ _ERR("create box failed.");
+ goto aborting;
+ }
+
+ priv->box = box;
+
+ _update_antenna_list(priv);
+
+ return base;
+
+aborting:
+ evas_object_del(base);
+ free(priv);
+ return NULL;
+}
+
+/**
+ * Invoked when refresh the window of application.
+ *
+ * @param[in] base: the layout of the view
+ *
+ * There is no action in this application.
+ */
+static void _update(Evas_Object *base)
+{
+}
+
+/**
+ * Resume the application.
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _resume(Evas_Object *base)
+{
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ evas_object_show(base);
+}
+
+/**
+ * Pause the view.
+ *
+ * Hide the layout
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _pause(Evas_Object *base)
+{
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ evas_object_hide(base);
+}
+
+/**
+ * Called after the main loop of the view exits.
+ *
+ * Delete the layout and release the resourse
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _terminate(Evas_Object *base)
+{
+ struct _data *priv;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = _GET_PRIV(base);
+ if (!priv) {
+ _ERR("Data get failed");
+ return;
+ }
+
+ if (priv->base)
+ evas_object_del(priv->base);
+
+ free(priv);
+}
+
+/**
+ * This struct is for registering the callbacks for the view
+ */
+static struct view_class _vclass = {
+ .title = VIEW_START,
+ .create = _create,
+ .update = _update,
+ .resume = _resume,
+ .pause = _pause,
+ .terminate = _terminate,
+};
+
+ /**
+ * Returns current view_class which implements the scan start view's life cycle
+ *
+ * @return view_class
+ */
+struct view_class *view_scanstart_get_vclass(void)
+{
+ return &_vclass;
+}
--- /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 <Elementary.h>
+#include <Ecore_Evas.h>
+#include <system_info.h>
+#include <app.h>
+#include "ug_auto_program.h"
+#include "view_search_page.h"
+#include "view_result_page.h"
+#include "viewmgr_auto_program.h"
+#include "dbg.h"
+#include "defs.h"
+#include "tv_scan.h"
+#include "util.h"
+
+#define _GET_PRIV(o) evas_object_data_get(o, "SRCHDATA")
+#define _SET_PRIV(o, data) evas_object_data_set(o, "SRCHDATA", data)
+#define MAX_BUF_SIZE 30
+#define CH_NAME_SIZE 30
+#define INITIAL_CH_NUMS 0
+#define PERCENT 100
+#define INITIAL_TEXT "0%"
+#define INITIAL_VALUE 0.0
+
+struct _data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *pb;
+ Evas_Object *stop_btn;
+ Evas_Object *exit_btn;
+ Evas_Object *cancel_btn;
+ struct viewmgr *vmgr;
+ struct tv_scan *tvs;
+ struct _ugdata *ugd;
+};
+
+/**
+ * The statement for "stop" button for clicking callback event, for
+ * there are two buttons with the same text "stop".
+ */
+static void _stop_btn_clicked_cb(void *data, Evas_Object *obj, void *ev);
+
+/**
+ * The click callback event for the "cancel" button.
+ *
+ * When "cancel" button is clicked, the scanning will be resumed.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: a pointer to the object on which click event occurred
+ * @param[in] ev: event information
+ */
+static void _cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _data *priv;
+ int r;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->cancel_btn || !priv->exit_btn) {
+ _ERR("priv->cancel_btn or priv->exit_btn is NULL");
+ return;
+ }
+
+ elm_object_part_text_set(priv->base, PART_SRCH_MAIN_TITLE,
+ SEARCH_MAIN_TITLE);
+
+ r = tv_scan_resume(priv->tvs);
+ if (r != 0) {
+ _ERR("resume tv scan failed.");
+ return;
+ }
+
+ priv->stop_btn = util_add_button(priv->base, BTN_STYLE,
+ PART_STOP_BTN, TEXT_BTN_STOP, EINA_TRUE);
+ if (!priv->stop_btn) {
+ _ERR("stop_btn is NULL");
+ return;
+ }
+
+ elm_object_focus_allow_set(priv->stop_btn, EINA_TRUE);
+ elm_object_focus_set(priv->stop_btn, EINA_TRUE);
+ evas_object_smart_callback_add(priv->stop_btn, SIGNAL_CLICKED,
+ _stop_btn_clicked_cb, priv);
+
+ util_focus_next_set(priv->stop_btn);
+
+ evas_object_del(priv->exit_btn);
+ evas_object_del(priv->cancel_btn);
+ priv->exit_btn = NULL;
+ priv->cancel_btn = NULL;
+}
+
+/**
+ * @Evas_Smart_Cb type callback for handling the click callback event for
+ * "stop" button.
+ *
+ * The click callback event for the "stop" button in paused view.
+ * When the "stop" button in paused view is clicked, the scanning will
+ * be stopped, and channel ug will be exited.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: a pointer to the object on which click event occurred
+ * @param[in] ev: event information
+ */
+static void _destroy_search_page_cb(void *data, Evas_Object *obj,
+ void *ev)
+{
+ struct _ugdata *ugd;
+ struct _data *priv;
+ int r;
+
+ if (!data) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->ugd || !priv->tvs) {
+ _ERR("priv->ugd or priv->tvs is NULL");
+ return;
+ }
+
+ ugd = priv->ugd;
+
+ r = tv_scan_stop(priv->tvs);
+ if (r != 0) {
+ _ERR("tv_scan_stop failed");
+ return;
+ }
+
+ if (!ugd->ug) {
+ _ERR("ugd->ug is NULL");
+ return;
+ }
+
+ ug_destroy_me(ugd->ug);
+}
+
+/**
+ * @Evas_Smart_Cb type callback for handling the click callback event for
+ * "stop" button.
+ *
+ * When the "stop" button is clicked, the scanning will be paused, the view
+ * will be changed into paused state.
+ *
+ * @param[in] data: user data related to current view
+ * @param[in] obj: a pointer to the object on which click event occurred
+ * @param[in] ev: event information
+ */
+static void _stop_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _data *priv;
+ int r;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->base || !priv->tvs) {
+ _ERR("priv->base or priv->tvs is NULL");
+ return;
+ }
+
+ r = tv_scan_pause(priv->tvs);
+ if (r != 0) {
+ _ERR("tv_scan_pause failed");
+ return;
+ }
+
+ elm_object_part_text_set(priv->base, PART_SRCH_MAIN_TITLE,
+ PAUSE_MAIN_TITLE);
+
+ priv->exit_btn = util_add_button(priv->base, BTN_STYLE,
+ PART_EXIT_BTN, TEXT_BTN_STOP, EINA_TRUE);
+ if (!priv->exit_btn) {
+ _ERR("exit_btn is NULL");
+ return;
+ }
+
+ evas_object_smart_callback_add(priv->exit_btn, SIGNAL_CLICKED,
+ _destroy_search_page_cb, priv);
+
+ priv->cancel_btn = util_add_button(priv->base, BTN_STYLE,
+ PART_SRCH_CANCEL_BTN, TEXT_BTN_CANCEL, EINA_TRUE);
+ if (!priv->cancel_btn) {
+ _ERR("cancel_btn is NULL");
+ evas_object_del(priv->exit_btn);
+ priv->exit_btn = NULL;
+ return;
+ }
+
+ evas_object_smart_callback_add(priv->cancel_btn, SIGNAL_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ elm_object_focus_allow_set(priv->exit_btn, EINA_TRUE);
+ elm_object_focus_set(priv->exit_btn, EINA_TRUE);
+ util_focus_next_set(priv->exit_btn);
+
+ evas_object_del(priv->stop_btn);
+ priv->stop_btn = NULL;
+}
+
+/**
+ * Dealing with the receving signal.
+ *
+ * When receiving a channel signal, update the progress of the progressbar
+ * and the number of channel signal.
+ *
+ * @param[in] tvs: The tv service data structure
+ * @param[in] mode: The setting scan mode in view_scan_start.c
+ * @param[in] count: The number of channel signal received up to now
+ * @param[in] num: The physical channel number of current channel
+ * @param[in] arg: A pointer to current data structure.
+ */
+static void _progress_cb(struct tv_scan *tvs, enum antenna_mode mode,
+ int count, int num, void *arg)
+{
+ struct _data *priv;
+ char buf[CH_NAME_SIZE];
+ int total;
+ int ratio;
+
+ if (!tvs || !arg) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = arg;
+
+ snprintf(buf, sizeof(buf), "CH. %d", count);
+ elm_object_part_text_set(priv->base, PART_CH_NAME, buf);
+ elm_object_signal_emit(priv->base, SEARCHCHANNEL, SUBTEXT_SOURCE);
+
+ total = tv_scan_get_total_channel(tvs);
+ if (total <= 0) {
+ _ERR("Invalid Total value");
+ return;
+ }
+
+ ratio = count * PERCENT / total;
+ snprintf(buf, sizeof(buf), "%d%%", ratio);
+ elm_object_part_text_set(priv->base, PART_PGBAR_NUM, buf);
+ elm_progressbar_value_set(priv->pb, (float)ratio / PERCENT);
+}
+
+/**
+ * Dealing with the scanning result.
+ *
+ * When finishing scanning, the total found channels will be calculated and the
+ * scan result view will be invoked in this function.
+ *
+ * @param[in] tvs: The tv service structure for managering the scanning
+ * @param[in] res: The structure for saving the number of ATV air, DTV air,
+ * ATV cable and DTV cable channel.
+ * @param[in] arg: A pointer to current data structure.
+ */
+static void _done_cb(struct tv_scan *tvs,
+ const struct tv_scan_result *res, void *arg)
+{
+ struct _data *priv;
+ struct _ugdata *ugd;
+ struct viewmgr *vmgr;
+
+ if (!arg) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = arg;
+
+ if (!priv->tvs || !priv->vmgr || !priv->ugd) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ vmgr = priv->vmgr;
+ ugd = priv->ugd;
+
+ ugd->find_chs = res->air_dtv + res->cable_dtv +
+ res->air_atv + res->cable_atv;
+
+ if (viewmgr_push(vmgr, view_resultpage_get_vclass(), ugd) == -1)
+ _ERR("result view push failed");
+}
+
+/**
+ * Deal with the found channel signal.
+ *
+ * @param[in] tvs: The tv service structure for managering the scanning
+ * @param[in] count: The number of channel signal received up to now
+ * @param[in] num: The physical channel number
+ * @param[in] res: The structure for saving the number of ATV air, DTV air,
+ * ATV cable and DTV cable channel.
+ * @param[in] arg: A pointer to the current data structure.
+ * @return 0 on success, and -1 on fail
+ */
+static void _found_cb(struct tv_scan *tvs, int count, int num,
+ const struct tv_scan_result *res, void *arg)
+{
+ struct _data *priv;
+ char buf[CH_NAME_SIZE];
+ int found;
+
+ if (!arg) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = arg;
+ snprintf(buf, sizeof(buf), "CH. %d", count);
+
+ elm_object_part_text_set(priv->base, PART_CH_NAME, buf);
+ elm_object_signal_emit(priv->base, CHANNELFOUND, SUBTEXT_SOURCE);
+
+ found = res->air_dtv + res->cable_dtv + res->air_atv + res->cable_atv;
+ snprintf(buf, sizeof(buf), "%d %s", found, TEXT_CH_FOUND);
+ elm_object_part_text_set(priv->base, PART_SRCH_SEARCH_RESULT, buf);
+
+ priv->ugd->find_chs = found;
+}
+
+/**
+ * Register callback functions for tvs scan manager and begin scanning.
+ *
+ * It registers the callback functions and private data.
+ * _progress_cb When receiving a channle signal, _progress_cb will be invoked;
+ * _found_cb When finding a channel, _found_cb will be invoked.
+ * _done_cb When finishing scanning, _done_cb will be invoked.
+ *
+ * @param[in] data: user data related to current view
+ * @return 0 on success, and -1 on fail
+ */
+static int _start_scan(struct _data *data)
+{
+ struct tv_scan_cbs cbs;
+ int r;
+
+ if (!data) {
+ _ERR("Invalid argument data: %p", data);
+ return -1;
+ }
+
+ if (!data->tvs) {
+ _ERR("Invalid argumentdata->tvs: %p", data->tvs);
+ return -1;
+ }
+
+ cbs.data = data;
+ cbs.progress_cb = _progress_cb;
+ cbs.found_cb = _found_cb;
+ cbs.done_cb = _done_cb;
+
+ r = tv_scan_set_callbacks(data->tvs, &cbs);
+ if (r != 0) {
+ _ERR("tv_scan_set_callbacks failed");
+ return -1;
+ }
+
+ r = tv_scan_start(data->tvs);
+ if (r != 0) {
+ _ERR("tv_scan_start failed.");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * Initializes the base layout for searching view.
+ *
+ * Invoked as soon as "start" button is clicked in view_scan_start
+ *
+ * @param[in] vmgr: the handler to the struct object for managing the view
+ * @param[in] data: user data related to current view
+ * @return The base or NULL if creatting failed
+ */
+static Evas_Object *_create(struct viewmgr *vmgr, void *data)
+{
+ Evas_Object *base;
+ Evas_Object *win;
+ struct _data *priv;
+ struct _ugdata *ugd;
+ struct tv_scan *tvs;
+ char buf[MAX_BUF_SIZE];
+
+ if (!vmgr) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ if (!data) {
+ _ERR("Invalid argument.");
+ return NULL;
+ }
+
+ ugd = data;
+
+ win = viewmgr_get_win(vmgr);
+ if (!win) {
+ _ERR("get win failed.");
+ return NULL;
+ }
+
+ priv = calloc(1, sizeof(*priv));
+ if (!priv) {
+ _ERR("calloc memory failed");
+ return NULL;
+ }
+
+ tvs = tv_scan_init(ugd->scan_type);
+ if (!tvs) {
+ _ERR("tvs init failed, set scan_type: %d", ugd->scan_type);
+ free(priv);
+ return NULL;
+ }
+
+ base = util_add_layout(win, AUTO_PRGM_EDJ_FILE, GROUP_SRCH);
+ if (!base) {
+ _ERR("base is NULL");
+ tv_scan_fini(tvs);
+ free(priv);
+ return NULL;
+ }
+
+ elm_win_resize_object_add(win, base);
+ elm_object_part_text_set(base, PART_SRCH_MAIN_TITLE,
+ SEARCH_MAIN_TITLE);
+ elm_object_part_text_set(base, PART_CH_NAME, SCAN_CH_NAME);
+
+ snprintf(buf, sizeof(buf), "%d %s", INITIAL_CH_NUMS, TEXT_CH_FOUND);
+ elm_object_part_text_set(base, PART_SRCH_SEARCH_RESULT, buf);
+
+ priv->vmgr = vmgr;
+ priv->win = win;
+ priv->ugd = ugd;
+ priv->tvs = tvs;
+ priv->base = base;
+
+ _SET_PRIV(base, priv);
+
+ return base;
+}
+
+/**
+ * Invoked when refresh the window of application.
+ *
+ * @param[in] base: the layout of the view
+ *
+ * There is no action in this application.
+ */
+static void _update(Evas_Object *base)
+{
+ Evas_Object *stop_btn;
+ Evas_Object *pb;
+ struct _data *priv;
+ int r;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = _GET_PRIV(base);
+ if (!priv) {
+ _ERR("Data get failed");
+ return;
+ }
+
+ stop_btn = util_add_button(base, BTN_STYLE,
+ PART_STOP_BTN, TEXT_BTN_STOP, EINA_TRUE);
+ if (!stop_btn) {
+ _ERR("stop_btn is NULL");
+ evas_object_del(base);
+ free(priv);
+ return;
+ }
+
+ priv->stop_btn = stop_btn;
+ elm_object_focus_set(stop_btn, EINA_TRUE);
+ evas_object_smart_callback_add(stop_btn, SIGNAL_CLICKED,
+ _stop_btn_clicked_cb, priv);
+ util_focus_next_set(stop_btn);
+
+ pb = elm_progressbar_add(base);
+ if (!pb) {
+ _ERR("pb is NULL");
+ evas_object_del(base);
+ free(priv);
+ return;
+ }
+
+ priv->pb = pb;
+ elm_object_style_set(pb, PRGBAR_STYLE);
+ elm_object_part_text_set(base, PART_PGBAR_NUM, INITIAL_TEXT);
+ elm_progressbar_value_set(pb, INITIAL_VALUE);
+ elm_object_part_content_set(base, PART_PROGRESSBAR, pb);
+ evas_object_show(pb);
+
+ r = _start_scan(priv);
+ if (r != 0) {
+ _ERR("start scan failed");
+ return;
+ }
+}
+
+/**
+ * Resume the application.
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _resume(Evas_Object *base)
+{
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ evas_object_show(base);
+}
+
+/**
+ * Pause the view.
+ *
+ * Hide the layout
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _pause(Evas_Object *base)
+{
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ evas_object_hide(base);
+}
+
+/**
+ * Called after the main loop of the view exits.
+ *
+ * Delete the layout and release the resourse
+ *
+ * @param[in] base: the layout of the view
+ */
+static void _terminate(Evas_Object *base)
+{
+ struct _data *priv;
+ int r;
+
+ if (!base) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = _GET_PRIV(base);
+ if (!priv) {
+ _ERR("Data get failed");
+ return;
+ }
+
+ r = tv_scan_fini(priv->tvs);
+ if (r != 0)
+ _ERR("tv_scan_fini failed");
+
+ if (priv->base)
+ evas_object_del(priv->base);
+
+ free(priv);
+}
+
+/**
+ * This struct is for registering the callbacks for the view
+ */
+static struct view_class _vclass = {
+ .title = VIEW_SEARCH,
+ .create = _create,
+ .update = _update,
+ .resume = _resume,
+ .pause = _pause,
+ .terminate = _terminate,
+};
+
+ /**
+ * Returns current view_class which implements the search view's life cycle
+ *
+ * @return view_class
+ */
+struct view_class *view_searchpage_get_vclass(void)
+{
+ return &_vclass;
+}
--- /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 <Elementary.h>
+#include <Eina.h>
+#include "ug_auto_program.h"
+#include "viewmgr_auto_program.h"
+#include "dbg.h"
+#include "defs.h"
+
+struct _viewinfo {
+ struct view_class *vclass;
+ Evas_Object *base;
+};
+
+/**
+ * Initialize the data handler view manager
+ *
+ * Viewmgr struct will be created.
+ *
+ * @param[in] win: window object
+ * @return The handler to the struct object of managing the view.
+ */
+struct viewmgr *viewmgr_init(Evas_Object *win)
+{
+ struct viewmgr *vmgr;
+
+ if (!win) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ vmgr = calloc(1, sizeof(*vmgr));
+ if (!vmgr) {
+ _ERR("calloc vmgr failed.");
+ return NULL;
+ }
+
+ vmgr->win = win;
+
+ return vmgr;
+}
+
+/**
+ * Invoked before channel ug is terminated
+ * Each view will be poped, and the related info about each view will be
+ * released in this function, and the viewmgr struct will be released.
+ *
+ * @param[in] vmgr: the handler to the struct object of managing the view
+ */
+void viewmgr_fini(struct viewmgr *vmgr)
+{
+ int i;
+ int count;
+
+ if (!vmgr) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ count = eina_list_count(vmgr->vlist);
+ for (i = count; i > 0; i--)
+ viewmgr_pop(vmgr);
+
+ free(vmgr);
+}
+
+/**
+ * Evas_Object_Event_Cb type callback for handling deletion event
+ *
+ * Delete the layout and release the resouse
+ *
+ * @param[in] data: the data handler for view
+ * @param[in] e: evas handler
+ * @param[in] obj: the corresponding object which the deletion event occurred
+ * @param[in] ev : event information
+ */
+static void _view_deleted(void *data, Evas *e, Evas_Object *obj, void *ev)
+{
+ struct view_class *vclass;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ vclass = data;
+
+ if (vclass->terminate)
+ vclass->terminate(obj);
+}
+
+/**
+ * Push the view in the top
+ *
+ * In push function, layout of current view will be deleted,
+ * and the related info will be released in this channel ug,
+ * and a new view will be created.
+ *
+ * @param[in] vmgr: the handler to the struct object of managing the view
+ * @param[in] vclass: the basic struct for managing each view, it contains both
+ * functions and variables requried in each view. It has basic functions like
+ * create/show/hide/terminate
+ * @param[in] data: data handler of each view
+ * @return 0 on success otherwise -1
+ */
+int viewmgr_push(struct viewmgr *vmgr, struct view_class *vclass, void *data)
+{
+ Evas_Object *base;
+ struct _viewinfo *vinfo;
+
+ if (!vmgr || !vmgr->win ||
+ !vclass || !vclass->create || !data) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ base = vclass->create(vmgr, data);
+ if (!base) {
+ _ERR("create base failed");
+ return -1;
+ }
+
+ evas_object_event_callback_add(base, EVAS_CALLBACK_DEL,
+ _view_deleted, vclass);
+
+ if (vclass->update)
+ vclass->update(base);
+
+ vinfo = eina_list_data_get(vmgr->vlist);
+ if (vinfo && vinfo->base)
+ vinfo->vclass->pause(vinfo->base);
+
+ vinfo = calloc(1, sizeof(*vinfo));
+ if (!vinfo) {
+ _ERR("calloc failed.");
+ return -1;
+ }
+
+ vinfo->base = base;
+ vinfo->vclass = vclass;
+
+ vmgr->vlist = eina_list_prepend(vmgr->vlist, vinfo);
+
+ return 0;
+}
+
+/**
+ * Pop the view and remove the view information of the popped item in Eina_List
+ *
+ * In pop function, current view layout will be deleted,
+ * and the related resource will be released in this channel ug.
+ *
+ * @param[in] vmgr: the handler to the struct object of managing the view
+ * @return 0 on success otherwise -1
+ */
+int viewmgr_pop(struct viewmgr *vmgr)
+{
+ struct _viewinfo *vinfo;
+
+ if (!vmgr || !vmgr->vlist) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ vinfo = eina_list_data_get(vmgr->vlist);
+ if (!vinfo || !vinfo->base)
+ return -1;
+
+ evas_object_del(vinfo->base);
+ vinfo->base = NULL;
+
+ vmgr->vlist = eina_list_remove_list(vmgr->vlist, vmgr->vlist);
+ free(vinfo);
+
+ viewmgr_resume(vmgr);
+
+ return 0;
+}
+
+/**
+ * Resume the paused view
+ *
+ * @param[in] vmgr: the handler to the struct object of managing the view
+ * @return 0 on success otherwise -1
+ */
+int viewmgr_resume(struct viewmgr *vmgr)
+{
+ struct _viewinfo *vinfo;
+ struct view_class *vclass;
+
+ if (!vmgr || !vmgr->vlist) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ vinfo = eina_list_data_get(vmgr->vlist);
+ if (!vinfo || !vinfo->vclass || !vinfo->base)
+ return -1;
+
+ vclass = vinfo->vclass;
+ if (vclass->resume)
+ vclass->resume(vinfo->base);
+
+ return 0;
+}
+
+/**
+ * Pause the view
+ *
+ * @param[in] vmgr: the handler to the struct object of managing the view
+ * @return 0 on success otherwise -1
+ */
+int viewmgr_pause(struct viewmgr *vmgr)
+{
+ struct _viewinfo *vinfo;
+ struct view_class *vclass;
+
+ if (!vmgr || !vmgr->vlist) {
+ _ERR("Invalid argument");
+ return -1;
+ }
+
+ vinfo = eina_list_data_get(vmgr->vlist);
+
+ if (!vinfo || !vinfo->vclass || !vinfo->base)
+ return -1;
+
+ vclass = vinfo->vclass;
+ if (vclass->pause)
+ vclass->pause(vinfo->base);
+
+ return 0;
+}
+
+/**
+ * Get the eina list from viewmgr
+ *
+ * @param[in] vmgr: the handler to the struct object of managing the view
+ * @return The eina list in viewmgr
+ */
+Eina_List *viewmgr_get_list(struct viewmgr *vmgr)
+{
+ if (!vmgr) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ return vmgr->vlist;
+}
+
+/**
+ * Get the window object from viewmgr struct
+ *
+ * @param[in] vmgr: the handler to the struct object of managing the view
+ * @return The window object on success otherwise NULL
+ */
+Evas_Object *viewmgr_get_win(struct viewmgr *vmgr)
+{
+ if (!vmgr) {
+ _ERR("Invalid argument");
+ return NULL;
+ }
+
+ return vmgr->win;
+}
+++ /dev/null
-#ifndef __NETCONMGR_H__
-#define __NETCONMGR_H__
-
-#include "UgCommon.h"
-#include "net_connection.h"
-
-class CNetConMgr {
-private:
- static CNetConMgr *instance;
- struct SNetConMgr *m;
-
-private:
- static void sm_CbIpAddrChanged(const char *ipv4, const char *ipv6, void* data);
- void m_OnIpAddrChanged(void *data);
-
- static void sm_CbProfileStateChanged(connection_profile_state_e state, void *data);
- bool m_GetEthernetProfile(void);
- bool m_UpdateProfile(void);
-
-private:
- CNetConMgr(void) : m(0) {}
- virtual ~CNetConMgr() {}
-
-public:
- static bool Initialize(void);
- static void Finalize(void);
- static CNetConMgr *GetInstance(void);
-
- void RefreshEthernetProfile(void);
- bool GetEthernetState(bool *state);
-
- bool GetProfileName(char *out_name);
- bool IsConnected(void);
-
- bool SetIpConfType(connection_ip_config_type_e);
- bool SetIpAddr(char *ip);
- bool SetSubnetMask(char *submask);
- bool SetGateway(char *gateway);
- bool SetDNS(char *dns);
-
- bool GetIpAddr(char *ip);
- bool GetSubnetMask(char *submask);
- bool GetGateway(char *gateway);
- bool GetDNS(char *dns);
-
- bool SetProxyType(EProxyMethod method);
- bool GetProxyType(EProxyMethod *method);
- bool SetProxyAddr(char *ip);
- bool GetProxyAddr(char *ip);
-
- const char *GetErrorMsg(connection_error_e err);
-
- bool RegisterIpChangedCallback(void(*ip_changed_cb)(bool change_state, void *data), void *data);
-
-};
-
-#endif /* __NETCONMGR_H__ */
+++ /dev/null
-#ifndef __TVSERVICEMGR_H__
-#define __TVSERVICEMGR_H__
-
-enum antenna_mode {
- SCAN_TYPE_INVALID = -1,
- SCAN_TYPE_ALL,
- SCAN_TYPE_CABLE,
- SCAN_TYPE_AIR
-};
-
-class CTVServiceMgr {
-private:
- static CTVServiceMgr *instance;
- struct STVServiceMgr *m;
-
-private:
- CTVServiceMgr(void) : m(0) {}
- virtual ~CTVServiceMgr() {}
-
-public:
- static bool Initialize(void);
- static void Finalize(void);
- static CTVServiceMgr *GetInstance(void);
-
- bool Start(void);
- bool Pause(void);
- bool Resume(void);
- bool Stop(void);
- bool GetAllChannel(void);
- unsigned int GetServiceType(void);
- bool IsStopped(void);
-};
-
-#endif /* __TVSERVICEMGR_H__ */
+++ /dev/null
-#ifndef __UG_COMMON_H__
-#define __UG_COMMON_H__
-
-
-#define WIFI_DIRECT_DEFAULT_BUF_LEN 256
-#define WIFI_DIRECT_STATE_BUF_LEN 32
-
-enum EProxyMethod {
- PROXY_METHOD_NONE = 0,
- PROXY_METHOD_MANUAL,
- PROXY_METHOD_AUTO
-};
-
-struct device_info {
- char dev_name[WIFI_DIRECT_DEFAULT_BUF_LEN];
- char mac_addr[WIFI_DIRECT_DEFAULT_BUF_LEN];
- bool is_conn;
- int wps_types;
- char wps_pin[WIFI_DIRECT_STATE_BUF_LEN];
- char state[WIFI_DIRECT_STATE_BUF_LEN];
-};
-#endif /* __UG_COMMON_H__ */
+++ /dev/null
-#ifndef __WIFIDIRECTMGR_H__
-#define __WIFIDIRECTMGR_H__
-
-#include "UgCommon.h"
-#include "wifi-direct.h"
-
-class CWifiDirectMgr {
-private:
- static CWifiDirectMgr *instance;
- struct SWifiDirectMgr *m;
-
-private:
- CWifiDirectMgr(void) : m(0) {}
- virtual ~CWifiDirectMgr() {}
-
-public:
- static bool Initialize(void);
- static void Finalize(void);
- static CWifiDirectMgr* GetInstance(void);
-
- char* GetDevieName(void);
- char* GetMacAddr(void);
- bool GetState(wifi_direct_state_e *status);
- bool Activate(void);
- bool Deactivate(void);
- bool SetMaxClient(void); // set_configure_num
-
- bool GetAllDicoveredPeerInfo(wifi_direct_discovered_peer_cb cb, void *data);
- bool GetAllConnectedPeerInfo(wifi_direct_connected_peer_cb cb, void *data);
-
- bool StartDiscovery(void);
- bool CancelDiscovery(void);
- bool Connect(const char *macaddr);
- bool Disconnect(const char *macaddr);
- bool AcceptConnection(char *macaddr);
- bool GetWPStype(Eina_Bool *is_pbc);
- bool SetWPStype(wifi_direct_wps_type_e *type);
-
- bool SetDeviceStateChangedCb(wifi_direct_device_state_changed_cb cb, void *data);
- bool UnSetDeviceStateChangedCb(void);
- bool SetDiscoveryStateChangedCb(wifi_direct_discovery_state_chagned_cb cb, void *data);
- bool UnSetDiscoveryStateChangedCb(void);
- bool SetConnectionStateChangedCb(wifi_direct_connection_state_changed_cb cb, void *data);
- bool UnSetConnectionStateChangedCb(void);
-
- bool UnSetClientIpAddrAssignedCb(void);
-
-
- const char* GetErrorMsg(int err);
-};
-
-#endif /* __WIFIDIRECTMGR_H__ */
+++ /dev/null
-#ifndef __WIFIMGR_H__
-#define __WIFIMGR_H__
-
-#include "UgCommon.h"
-#include "wifi.h"
-
-
-class CWifiAp {
- friend class CWifiMgr;
-private:
- wifi_ap_h m_handle;
-
-private:
- bool m_CheckErr(const char *func, int ret);
-
-protected:
- void t_SetHandle(wifi_ap_h handle);
-
-public:
- CWifiAp(wifi_ap_h handle);
- virtual ~CWifiAp();
-
- wifi_ap_h Handle(void);
-
- bool AllocConnectedAp(void);
- void Destroy(void);
-
- bool GetEssid(char *essid, int size);
- bool GetConnectionState(wifi_connection_state_e *state);
- bool GetSecurityType(wifi_security_type_e *type);
- bool SetPassPhrase(const char *passcode);
-
- bool Connect(void(*wifi_connected_cb)(wifi_error_e err, void *data), void *data);
- bool SetIpType(wifi_ip_config_type_e type);
-
- bool GetIp(char *ip, int size);
- bool GetSubnetMask(char *submask);
- bool GetGateway(char *gateway);
- bool GetDNS(char *dns);
-
- bool SetIp(char *ip);
- bool SetSubnetMask(char *submask);
- bool SetGateway(char *gateway);
- bool SetDNS(char *dns);
-
- bool CloneAP(wifi_ap_h *cloned_ap, wifi_ap_h origin);
-
- static bool ForgetAP(void);
-
- bool SetProxyType(EProxyMethod pm);
- bool GetProxyType(EProxyMethod *pm);
-
- bool SetProxyAddr(const char *addr);
- bool GetProxyAddr(char **addr);
-};
-
-
-class CWifiMgr {
-private:
- static CWifiMgr *instance;
- struct SWifiMgr *m;
-
-private:
- CWifiMgr(void) : m(0) {}
- virtual ~CWifiMgr() {}
-
-public:
- static bool Initialize(void);
- static void Finalize(void);
- static CWifiMgr * GetInstance(void);
-
- bool Activate(void(*cbActivated)(wifi_error_e err, void *data), void *data);
-
- bool IsActivated(bool *activated);
-
- bool Scan(void (*cbFinish)(wifi_error_e err, void *data), void *data);
- bool FoundAps(bool(*FoundCb)(CWifiAp *ap, void *data), void *data);
-
- static const char * ErrorMsg(wifi_error_e err);
-};
-
-
-#endif /* __WIFIMGR_H__ */
INCLUDE(FindPkgConfig)
pkg_check_modules(UG_NETWORK_PKGS REQUIRED
+ dlog
eina
edje
evas
capi-appfw-application
capi-network-wifi
capi-network-connection
- application-common
)
+ #ecore-x
+
SET(PKGS_LDFLAGS "${PKGS_LDFLAGS} ${UG_NETWORK_PKGS_LDFLAGS}")
FOREACH(FLAG ${UG_NETWORK_PKGS_CFLAGS})
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
SET(SRCS
- src/ug_network_settings.cpp
- src/NetworkMainView.cpp
- src/IpSettingView.cpp
- src/WifiPasscodeView.cpp
- src/util.cpp
- ../src/WifiMgr.cpp
- ../src/NetConMgr.cpp
+ src/ug_network_settings.c
+ src/main_view.c
+ src/network_viewmgr.c
+ src/ip_setting_view.c
+ src/vconf_mgr.c
+ src/wifi_mgr.c
+ src/connection_mgr.c
+ src/util.c
+ src/wifi_passcode_view.c
)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../include)
-
ADD_DEFINITIONS("-DPKGNAME=\"${PROJECT_NAME}\"")
ADD_DEFINITIONS("-DUG_NETWORK_EDJ_FILE=\"${UG_NETWORK_EDJE_DIR}/${UG_NETWORK_EDJ_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 __IP_SETTING_VIEW_H__
-#define __IP_SETTING_VIEW_H__
-
-class CIpSettingView : public CBaseView, public IMouseClickedListener, public IUnfocusedListener {
-private :
- struct SIpSettingView *m;
-
- bool m_InitConnectionMgr();
- void m_FinalizeConnectionMgr();
- Evas_Object* m_CreateMainLayout();
-
- bool m_GetCurConnectionMode(void);
- bool m_GetCurIpInfo(void);
-
- void m_GetIpInfo(char *des, const char *key);
- bool m_CreateDNSSetting(void);
- bool m_CreateBtns(void);
- bool m_CreateIpSetting(void);
- bool m_CreateDimLayout(void);
- Evas_Object* m_CreateSettingBtn(char *key, char *txt, Evas_Smart_Cb cb, void *data);
- void m_SetupDownCycleFocus(Evas_Object **obj, int count);
- void m_KeepBtnFocused(void);
- void m_CreateValuePopup(void);
- Evas_Object* m_CreateValueBtn(Evas_Object *base, int num, char *txt, void *data);
- void m_SetLeftRightCycleFocus(Evas_Object **obj, int count);
- bool m_GetValuePopupPos(Evas_Coord *pos_x, Evas_Coord *pos_y);
- void m_ConfigNetwork(void);
- void m_ShowConfirmPopup(void);
- bool m_ConfigNetworkDynamic(void);
- bool m_ConfigNetworkManually(void);
- bool m_CheckIpValid(void);
- void m_ShowInvalidIpPopup(void);
- void m_SaveMode(void);
- void m_SetTheValue(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CIpSettingView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), IUnfocusedListener(this), m(0) {}
- virtual ~CIpSettingView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
-};
-
-#endif /* __IP_SETTING_VIEW_H__ */
-
+++ /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 __NETWORK_MAIN_VIEW_H__
-#define __NETWORK_MAIN_VIEW_H__
-
-
-#include "WifiMgr.h"
-
-class CNetworkMainView : public CBaseView {
-private :
- struct SNetworkMainView *m;
-
- static void sm_CbGenlistItemSelected(void *data, Evas_Object *obj, void *ei);
- static Eina_Bool sm_CbSelectConnected(void *data);
-
- static bool sm_CbWifiFoundAP(CWifiAp *ap, void *data);
- bool m_OnWifiFoundAP(CWifiAp *ap);
-
- static void sm_CbWifiScanRequest(wifi_error_e err, void *data);
- void m_OnWifiScanRequest(wifi_error_e err);
-
- static void sm_CbConnectionOnlineAsync(bool state, void *data);
- void m_OnConnectionOnlineAync(bool state);
-
- static void sm_CbCheckGatewayAsync(bool state, void *data);
- void m_OnCheckGatewayAsync(bool state);
-
- static void sm_CbWifiActivated(wifi_error_e err, void *data);
- void m_OnWifiActivated(wifi_error_e err);
-
- static char* sm_GetApName(void *data, Evas_Object *obj, const char *part);
- static void sm_CbEthernetStateChanged(bool state, void *data);
- void m_OnEthernetStateChanged(bool state);
-
- bool m_InitConnectionMgr(void);
- void m_FinalizeConnectionMgr();
-
- Evas_Object *m_CreateMainLayout(void);
- bool m_CreateUpperLayout(void);
-
- bool m_CreateActionBtns(void);
- void m_DestroyActionBtns();
-
- bool m_CreateDimLayout(void);
- void m_SetNetTypeBtnText(void);
-
- bool m_SetWireless(void);
- bool m_SetWired(void);
-
- void m_FillContentPart(Evas_Object *obj);
- void m_SetActionBtnPos(void);
-
- void m_CreateWirelessDisconnectPart(void);
- bool m_CreateWiredConnectPart(void);
- bool m_CreateWiredDisconnectPart(void);
- Evas_Object* m_CreateGenlistView(void);
- void m_ClearGenlist(void);
-
- static void sm_CbWifiConnected(wifi_error_e err, void *data);
- void m_OnWifiConnected(wifi_error_e err);
- void m_ConnectNetwork(void);
- bool m_WifiConnectAP(int index);
- bool m_WiredConnectAP();
- bool m_ConnectionSetLastNetwork(void);
- void m_GetIpInfo(char *des, const char *key);
-
- void m_ShowConfirmPopup(void);
- void m_ShowProgressPopup(void);
-public :
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CNetworkMainView(const char *szViewId) : CBaseView(szViewId), m(0) {}
- virtual ~CNetworkMainView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-};
-
-#endif /* __NETWORK_MAIN_VIEW_H__ */
+++ /dev/null
-#ifndef __WIFI_PASSCODE_VIEW_H__
-#define __WIFI_PASSCODE_VIEW_H__
-
-class CWifiPasscodeView : public CBaseView, public IMouseClickedListener, public IUnfocusedListener {
-private :
- struct SWifiPasscodeView *m;
-
- static void sm_CbWifiConnected(wifi_error_e err, void *data);
- void m_OnWifiConnected(wifi_error_e err);
-
- static bool sm_CbWifiFoundAP(CWifiAp *ap, void *data);
- void m_OnWifiFoundAP(CWifiAp *ap);
-
- static void sm_CbWifiScanRequest(wifi_error_e err, void *data);
- void m_OnWifiScanRequest(wifi_error_e err, void *data);
-
- void m_AddEntry(void);
- bool m_CreateDimLayout(void);
- void m_ShowInvalidPwdPopup(void);
- bool m_WifiConnectAP(void);
- void m_ShowProgressPopup(void);
- void m_ShowConfirmPopup(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CWifiPasscodeView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), IUnfocusedListener(this), m(0) {}
- virtual ~CWifiPasscodeView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
-};
-
-#endif /* __WIFI_PASSCODE_VIEW_H__ */
-
#ifndef __NETWORK_COMMON_H__
#define __NETWORK_COMMON_H__
-
+#include <net_connection.h>
#include <wifi.h>
-#include "WifiMgr.h"
-
#define IP_STRING_MAX_SIZE 20
#define MAX_NAME_SIZE 256
MODE_MAN
};
-enum action_btn_enum {
- CONNECT = 0,
- REFRESH,
- OTHER,
- CLOSE
-};
-
-enum view_type {
- NETWORK_MAIN_VIEW = 0,
- NETWORK_WIFI_PASSCODE_VIEW,
- NETWORK_IP_SETTING_VIEW
-};
-
struct connection_info {
enum network_type_enum cur_type;
+ connection_h connection;
+ connection_profile_h profile;
char name[MAX_NAME_SIZE];
wifi_ap_h ap;
};
char dns[IP_STRING_MAX_SIZE + 1];
};
-#define SSID_MAX_LENTH 256
-#define PWD_MAX_LENTH 256
-
-#define BTN_ACT 4
-#define BTN_TYPE 2
-#define TIMER_INTERNAL 0.1
-#define KEY_PRIV "priv"
-#define TYPE_POPUP_X_OFFSET 190
-
-struct wifi_ap_info {
- char essid[SSID_MAX_LENTH];
- char bssid[SSID_MAX_LENTH];
- int rssi;
- int frequency;
- int max_speed;
- wifi_security_type_e secure_type;
- wifi_encryption_type_e encryption_type;
- bool passphrase_required;
- int wps_supported;
- wifi_connection_state_e state;
-
- wifi_ip_config_type_e ip_type;
- wifi_proxy_type_e proxy_type;
- wifi_encryption_type_e enc_type;
- wifi_eap_type_e eap_type;
- wifi_eap_auth_type_e eap_auth_type;
-
- CWifiAp *ap;
- void *user_data;
-};
#endif /* __NETWORK_COMMON_H__ */
--- /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 __CONNECTION_MGR_H__
+#define __CONNECTION_MGR_H__
+
+#include <Elementary.h>
+#include <net_connection.h>
+#include "common.h"
+
+int connection_mgr_set_profile(
+ connection_h connection,
+ connection_profile_h profile,
+ struct network_info *info);
+connection_h connection_mgr_create(void);
+int connection_mgr_destroy(connection_h connection);
+int connection_mgr_uninit(connection_h connection);
+int connection_mgr_get_profile_info(
+ connection_h connection, struct connection_info *info);
+Eina_Bool connection_mgr_is_connected(connection_h connection);
+int connection_mgr_ip_dynamic_config(connection_h connection,
+ connection_profile_h profile);
+int connection_mgr_get_ethernet_state(
+ connection_h connection,
+ Eina_Bool *plugin);
+int connection_mgr_get_ip_info(
+ connection_profile_h profile,
+ struct network_info *info);
+#if 0
+int connection_mgr_register_ethernet_state_cb(
+ connection_h connection,
+ connection_ethernet_state_chaged_cb cb, void *data);
+int connection_mgr_set_profile_state_changed_cb(
+ connection_profile_h profile,
+ connection_profile_state_changed_cb cb, void *data);
+int connection_mgr_get_is_online_async(
+ connection_h connection,
+ connection_is_online_async_cb cb, void *data);
+int connection_mgr_check_gateway_async(
+ connection_profile_h profile,
+ connection_profile_check_gateway_async_cb cb, void *data);
+#endif
+
+#endif /* __CONNECTION_MGR_H__ */
--- /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 __DBG_H__
+#define __DBG_H__
+
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "ug-network-settings"
+
+#ifndef _ERR
+#define _ERR(fmt, args...) (LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#ifndef _DBG
+#define _DBG(fmt, args...) (LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#ifndef _INFO
+#define _INFO(fmt, args...) \
+ (LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#endif /* __DBG_H__ */
#define RET_FAILED -1
#define RET_IP_INVALID -2
-/* VIEW */
-#define NETWORK_MAINVIEW "NETWORK_MAIN_VIEW"
-
/*GROUP*/
#define GRP_MAIN "main"
#define GRP_NETWORK_TYPE_SELECT "popup_select"
#define POPUP_WIDTH 688
#define POPUP_HEIGHT 411
-/* Width Height */
+/* Key defines */
+#define KEY_UP "Up"
+#define KEY_DOWN "Down"
+#define KEY_LEFT "Left"
+#define KEY_RIGHT "Right"
+#define KEY_ENTER "Return"
+#define KEY_EXIT "XF86Close"
+
+#define KEY_0 "0"
+#define KEY_1 "1"
+#define KEY_2 "2"
+#define KEY_3 "3"
+#define KEY_4 "4"
+#define KEY_5 "5"
+#define KEY_6 "6"
+#define KEY_7 "7"
+#define KEY_8 "8"
+#define KEY_9 "9"
+
+/* FIXME: do not pre-define */
#define DEFAULT_WIN_WIDTH 1920
#define DEFAULT_WIN_HEIGHT 1080
-/* vconf value */
-#define WIRED_DNS_LAST_MODE "db/menu/network/wired_dns_mode"
-#define WIRED_IP_LAST_MODE "db/menu/network/wired_ip_mode"
-#define WIRED_IP_KEY "db/menu/network/wired_ip"
-#define WIRED_SUBMASK_KEY "db/menu/network/wired_subnet"
-#define WIRED_GATEWAY_KEY "db/menu/network/wired_gateway"
-#define WIRED_DNS_KEY "db/menu/network/wired_dns"
-
-#define WIRELESS_IP_LAST_MODE "db/menu/network/wireless_ip_mode"
-#define WIRELESS_DNS_LAST_MODE "db/menu/network/wireless_dns_mode"
-#define WIRELESS_IP_KEY "db/menu/network/wireless_ip"
-#define WIRELESS_SUBMASK_KEY "db/menu/network/wireless_subnet"
-#define WIRELESS_GATEWAY_KEY "db/menu/network/wireless_gateway"
-#define WIRELESS_DNS_KEY "db/menu/network/wireless_dns"
-
-#define SELECTED_NETWORK_TYPE_KEY "db/menu/network/network_type"
#endif /* __DEFS_H__ */
--- /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 __CONNECTION_VIEW_H__
+#define __CONNECTION_VIEW_H__
+
+#include <Elementary.h>
+#include "network_viewmgr.h"
+
+struct view_class *ip_setting_view_vclass_get(void);
+
+#endif /* __CONNECTION_VIEW_H__ */
--- /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 __MAIN_VIEW_H__
+#define __MAIN_VIEW_H__
+
+#include <Elementary.h>
+#include <wifi.h>
+#include <net_connection.h>
+#include <ui-gadget-module.h>
+#include "network_viewmgr.h"
+
+struct view_class *main_view_vclass_get(void);
+
+#endif /* __MAIN_VIEW_H__ */
--- /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 __NETVIEWMGR_H__
+#define __NETVIEWMGR_H__
+
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+
+enum view_type {
+ NETWORK_MAIN_VIEW = 0,
+ NETWORK_WIFI_PASSCODE_VIEW,
+ NETWORK_IP_SETTING_VIEW
+};
+
+enum message_id {
+ PASSCODE_DEVIVER = 0
+};
+
+struct viewmgr {
+ Eina_List *vlist;
+ Evas_Object *win;
+ ui_gadget_h ug;
+};
+
+struct view_class {
+ Evas_Object * (*create)(struct viewmgr *vmgr, void *data);
+ void (*pause)(Evas_Object *base);
+ void (*resume)(Evas_Object *base);
+ void (*terminate)(Evas_Object *base);
+ void (*message_handler)(Evas_Object *base,
+ enum message_id msg_id, void *data);
+ enum view_type (*get_view_type)(void);
+};
+
+struct viewmgr *viewmgr_init();
+void viewmgr_fini(struct viewmgr *vmgr);
+Evas_Object *viewmgr_push(struct viewmgr *vmgr,
+ struct view_class *vclass, void *data);
+int viewmgr_send_message(struct viewmgr *vmgr,
+ enum view_type view_type,
+ enum message_id msg_id, void *data);
+int viewmgr_pop(struct viewmgr *vmgr);
+int viewmgr_resume(struct viewmgr *vmgr);
+Evas_Object *viewmgr_win_get(struct viewmgr *vmgr);
+
+#endif /* __VIEWMGR_H__ */
+
#ifndef __UTIL_H__
#define __UTIL_H__
-Evas_Object *util_add_layout(Evas_Object *parent, const char *file, const char *group);
-Evas_Object *util_add_button(Evas_Object *parent, const char *style, const char *part, const char *text);
-Evas_Object *util_add_key_value_button(Evas_Object *parent, const char *part, const char *text_key, const char *text_value);
+Evas_Object *util_add_layout(Evas_Object *parent, const char *file,
+ const char *group);
+Evas_Object *util_add_button(Evas_Object *parent, const char *style,
+ const char *part, const char *text);
+Evas_Object *util_add_key_value_button(Evas_Object *parent,
+ const char *part, const char *text_key, const char *text_value);
Evas_Object *util_add_scroll(Evas_Object *parent, const char *part);
Evas_Object *util_add_box(Evas_Object *parent, const char *part);
-Evas_Object *util_add_image(Evas_Object *parent, const char *file, const char *part);
-Evas_Object *util_add_entry(Evas_Object *parent, const char *style, const char *part);
+Evas_Object *util_add_image(Evas_Object *parent,
+ const char *file, const char *part);
+Evas_Object *util_add_entry(Evas_Object *parent,
+ const char *style, const char *part);
Evas_Object *util_add_genlist(Evas_Object *parent);
void util_focus_next_set(Evas_Object *obj);
--- /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 __VCONF_MGR_H__
+#define __VCONF_MGR_H__
+
+#include <vconf.h>
+#include "connection_mgr.h"
+#include "common.h"
+
+int vconf_mgr_get_network_type(enum network_type_enum *network_type);
+int vconf_mgr_set_network_type(enum network_type_enum network_type);
+int vconf_mgr_get_wired_network_info(struct network_info *info);
+int vconf_mgr_get_wireless_network_info(struct network_info *info);
+int vconf_mgr_save_wired_config_info(struct network_info *info);
+int vconf_mgr_save_wireless_config_info(struct network_info *info);
+int vconf_mgr_get_wired_ip_mode(enum setting_mode *mode);
+int vconf_mgr_set_wired_ip_mode(enum setting_mode mode);
+int vconf_mgr_get_wired_dns_mode(enum setting_mode *mode);
+int vconf_mgr_set_wired_dns_mode(enum setting_mode mode);
+int vconf_mgr_get_wireless_ip_mode(enum setting_mode *mode);
+int vconf_mgr_set_wireless_ip_mode(enum setting_mode mode);
+int vconf_mgr_get_wireless_dns_mode(enum setting_mode *mode);
+int vconf_mgr_set_wireless_dns_mode(enum setting_mode mode);
+
+#endif /* __VCONF_MGR_H__ */
--- /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 __WIFI_MGR_H__
+#define __WIFI_MGR_H__
+
+#include <wifi.h>
+#include "common.h"
+
+#define SSID_MAX_LENTH 256
+#define PWD_MAX_LENTH 256
+
+struct wifi_ap_info {
+ char essid[SSID_MAX_LENTH];
+ char bssid[SSID_MAX_LENTH];
+ int rssi;
+ int frequency;
+ int max_speed;
+ wifi_security_type_e secure_type;
+ wifi_encryption_type_e encryption_type;
+ bool passphrase_required;
+ int wps_supported;
+ wifi_connection_state_e state;
+
+ wifi_ip_config_type_e ip_type;
+ wifi_proxy_type_e proxy_type;
+ wifi_encryption_type_e enc_type;
+ wifi_eap_type_e eap_type;
+ wifi_eap_auth_type_e eap_auth_type;
+
+ wifi_ap_h ap;
+ void *user_data;
+};
+
+const char *wifi_mgr_error_dbg(wifi_error_e err_type);
+int wifi_mgr_init(void);
+int wifi_mgr_deinit(void);
+int wifi_mgr_ap_destroy(wifi_ap_h ap);
+int wifi_mgr_ap_clone(wifi_ap_h *cloned_ap, wifi_ap_h origin);
+int wifi_mgr_is_activated(bool *activated);
+int wifi_mgr_scan_request(wifi_scan_finished_cb cb, void *data);
+int wifi_mgr_foreach_found_aps(wifi_found_ap_cb cb, void *data);
+int wifi_mgr_activate(wifi_activated_cb cb, void *data);
+int wifi_mgr_get_ap_info(wifi_ap_h ap, struct wifi_ap_info *ap_info);
+int wifi_mgr_get_connected_ap(wifi_ap_h *ap);
+int wifi_mgr_forget_last_ap(void);
+int wifi_mgr_connect(wifi_ap_h ap, wifi_connected_cb cb, void *data);
+int wifi_mgr_set_passphrase(wifi_ap_h ap, const char *passcode);
+int wifi_mgr_get_ip_info(wifi_ap_h ap, struct network_info *info);
+int wifi_mgr_ap_set_ip_config_type(wifi_ap_h ap,
+ wifi_ip_config_type_e type);
+int wifi_mgr_set_ip_config(wifi_ap_h ap, struct network_info *info);
+int wifi_mgr_set_dns_config(wifi_ap_h ap, struct network_info *info);
+//int wifi_mgr_get_is_online_async(wifi_get_is_online_async_cb cb, void *data);
+
+#endif /* __WIFI_MGR_H__ */
--- /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 __WIFI_PASSWORD_VIEW_H__
+#define __WIFI_PASSWORD_VIEW_H__
+
+#include <Elementary.h>
+#include <wifi.h>
+#include <net_connection.h>
+#include <ui-gadget-module.h>
+#include "network_viewmgr.h"
+
+struct view_class *wifi_passcode_view_vclass_get(void);
+
+#endif /* __WIFI_PASSWORD_VIEW_H__ */
+++ /dev/null
-#include <ui-gadget-module.h>
-#include "defs.h"
-#include <AppCommon.h>
-#include <vconf.h>
-#include "i18n.h"
-#include "util.h"
-#include "common.h"
-#include "WifiMgr.h"
-#include "NetConMgr.h"
-
-#include "IpSettingView.h"
-
-#define MODE_BTN_NUM 2
-#define MAX_IP_NUM 255
-#define IP_SET_MAX_NUM 4
-#define STRING_MAX_SIZE 50
-#define SETTING_MODE_OFFSET_X 448
-#define SETTING_MODE_OFFSET_Y 0
-#define SETTING_VALUE_OFFSET_X 162
-#define SETTING_VALUE_OFFSET_Y 20
-#define CENTER_ALIGN 0.5
-#define BOX_PAD_X 0
-#define BOX_PAD_Y 2
-#define RATIO 10
-
-#define IP_VALUE1 "value1"
-#define IP_VALUE2 "value2"
-#define IP_VALUE3 "value3"
-#define IP_VALUE4 "value4"
-
-#define TXT_MAKE_OTHER_NETWORK _("You can make other network"\
- "<br>Enter the IP address to use.")
-
-enum connection_setting_enum {
- SETTING_INVALID,
- SETTING_IP,
- SETTING_IP_ADDRESS,
- SETTING_SUBNET_MASK,
- SETTING_GATEWAY,
- SETTING_DNS,
- SETTING_DNS_SERVER
-};
-
-struct SIpSettingView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *dim_ly;
- Evas_Object *ip_mode_btn;
- Evas_Object *ip_addr_btn;
- Evas_Object *subnet_mask_btn;
- Evas_Object *gateway_btn;
- Evas_Object *dns_mode_btn;
- Evas_Object *dns_server_btn;
- Evas_Object *ip_mode_ly;
- Evas_Object *dns_mode_ly;
- Evas_Object *config_popup;
- Evas_Object *cur_ip_btn[IP_SET_MAX_NUM];
- Evas_Object *confirm_popup;
- Evas_Object *ok_btn;
- Evas_Object *cancel_btn;
-
- struct network_info info;
- enum setting_mode ip_mode;
- enum setting_mode dns_mode;
-
- enum connection_setting_enum cur_type;
- enum network_type_enum network_type;
-
- CWifiAp *ap;
-
- char profile_name[MAX_NAME_SIZE];
-
- CWifiMgr *pWifiMgr;
- CNetConMgr *pNetConMgr;
- CViewMgr *pViewMgr;
-};
-
-
-bool CIpSettingView::m_InitConnectionMgr()
-{
- _DBG();
- if(!CNetConMgr::Initialize()) {
- _ERR("Fail to init CNetConMgr");
- }
-
- m->pNetConMgr = CNetConMgr::GetInstance();
- if (!m->pNetConMgr) {
- _ERR("Fail to get instance");
- return false;
- }
-
- if(!m->pNetConMgr->GetProfileName(m->profile_name)) {
- _ERR("Fail to get profilename");
- return false;
- }
-
- return true;
-}
-
-void CIpSettingView::m_FinalizeConnectionMgr()
-{
- _DBG();
- CNetConMgr::Finalize();
- m->pNetConMgr = NULL;
-}
-
-
-bool CIpSettingView::m_GetCurConnectionMode(void)
-{
- const char *str = NULL;
- if (m->network_type == TYPE_WIRED) {
- str = vconf_get_str(WIRED_IP_LAST_MODE);
- if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
- m->ip_mode = MODE_AUTO;
- else
- m->ip_mode = MODE_MAN;
-
- str = NULL;
- str = vconf_get_str(WIRED_DNS_LAST_MODE);
- if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
- m->dns_mode = MODE_AUTO;
- else
- m->dns_mode = MODE_MAN;
- } else if (m->network_type == TYPE_WIRELESS) {
- str = vconf_get_str(WIRELESS_IP_LAST_MODE);
- if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
- m->ip_mode = MODE_AUTO;
- else
- m->ip_mode = MODE_MAN;
-
- str = NULL;
- str = vconf_get_str(WIRELESS_DNS_LAST_MODE);
- if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
- m->dns_mode = MODE_AUTO;
- else
- m->dns_mode = MODE_MAN;
- } else {
- _ERR("the network type is invalid.");
- return false;
- }
-
- return true;
-}
-
-
-bool CIpSettingView::m_GetCurIpInfo(void)
-{
- struct network_info info;
- bool result = false;
-
- if (m->network_type == TYPE_WIRED) {
- if (m->ip_mode == MODE_AUTO) {
- if (!m->pNetConMgr->GetIpAddr(info.ip_addr)) {
- _ERR("connection_mgr_get_ip_info() failed.");
- return false;
- }
- if (!m->pNetConMgr->GetSubnetMask(info.submask)) {
- _ERR("connection_mgr_get_ip_info() failed.");
- return false;
- }
- if (!m->pNetConMgr->GetGateway(info.gateway)) {
- _ERR("connection_mgr_get_ip_info() failed.");
- return false;
- }
- if (!m->pNetConMgr->GetDNS(info.dns)) {
- _ERR("connection_mgr_get_ip_info() failed.");
- return false;
- }
- } else if (m->ip_mode == MODE_MAN) {
- m_GetIpInfo(info.ip_addr, WIRED_IP_KEY);
- m_GetIpInfo(info.submask, WIRED_SUBMASK_KEY);
- m_GetIpInfo(info.gateway, WIRED_GATEWAY_KEY);
- m_GetIpInfo(info.dns, WIRED_DNS_KEY);
- } else {
- _ERR("ip mode is invalid.");
- return false;
- }
- } else if (m->network_type == TYPE_WIRELESS) {
- if (m->ip_mode == MODE_AUTO) {
- result = m->ap->GetIp(m->info.ip_addr, sizeof(m->info.ip_addr));
- if(result != true) {
- _ERR("wifi_mgr_get_ip_info() failed.");
- return false;
- }
- result = m->ap->GetSubnetMask(m->info.submask);
- if(result != true) {
- _ERR("wifi_mgr_get_ip_info() failed.");
- return false;
- }
- result = m->ap->GetGateway(m->info.gateway);
- if(result != true) {
- _ERR("wifi_mgr_get_ip_info() failed.");
- return false;
- }
- result = m->ap->GetDNS(m->info.dns);
- if(result != true) {
- _ERR("wifi_mgr_get_ip_info() failed.");
- return false;
- }
- } else if (m->ip_mode == MODE_MAN) {
- m_GetIpInfo(info.ip_addr, WIRELESS_IP_KEY);
- m_GetIpInfo(info.submask, WIRELESS_SUBMASK_KEY);
- m_GetIpInfo(info.gateway, WIRELESS_GATEWAY_KEY);
- m_GetIpInfo(info.dns, WIRELESS_DNS_KEY);
- } else {
- _ERR("ip mode is invalid.");
- return false;
- }
- } else {
- _ERR("network type is invalid.");
- return false;
- }
-
- strncpy(m->info.ip_addr, info.ip_addr, IP_STRING_MAX_SIZE);
- strncpy(m->info.submask, info.submask, IP_STRING_MAX_SIZE);
- strncpy(m->info.gateway, info.gateway, IP_STRING_MAX_SIZE);
- strncpy(m->info.dns, info.dns, IP_STRING_MAX_SIZE);
-
- return true;
-}
-
-
-void CIpSettingView::m_GetIpInfo(char *des, const char *key)
-{
- _DBG();
- const char *str;
-
- if (!des || !key)
- return;
-
- str = vconf_get_str(key);
- if (!str)
- return;
-
- if (str == '\0' || !strncmp(str, NULL_STRING, IP_STRING_MAX_SIZE))
- strncpy(des, _(ZERO_IP), IP_STRING_MAX_SIZE);
- else
- strncpy(des, str, IP_STRING_MAX_SIZE);
-}
-
-
-bool CIpSettingView::m_CreateDNSSetting(void)
-{
- Evas_Object *base = NULL;
- Evas_Object *btn;
- Evas_Object *box;
- char mode[STRING_MAX_SIZE];
-
- box = util_add_box(base, PART_CONNECTION_DNS_SETTING);
- if (!box) {
- _ERR("add box failed.");
- return false;
- }
-
- elm_box_horizontal_set(box, EINA_FALSE);
- elm_box_padding_set(box, BOX_PAD_X, BOX_PAD_Y);
-
- memset(mode, 0, STRING_MAX_SIZE);
- if (m->dns_mode == MODE_AUTO)
- snprintf(mode, STRING_MAX_SIZE - 1, "%s", _(TXT_OBTAIN_AUTO));
- else
- snprintf(mode, STRING_MAX_SIZE - 1, "%s", _(TXT_ENTER_MAN));
-
- btn = util_add_key_value_button(base, NULL, _(TXT_DNS_SETING), mode);
- if (!btn) {
- _ERR("Add button failed.");
- evas_object_del(box);
- return false;
- }
-
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _dns_setting_btn_clicked_cb, priv);
- Connect(btn, 1);
-
- elm_box_pack_end(box, btn);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
-
- m->dns_mode_btn = btn;
-
- btn = util_add_key_value_button(base, NULL, _(TXT_DNS_SERVER), m->info.dns);
- if (!btn) {
- _ERR("Add btn failed.");
- evas_object_del(box);
- return false;
- }
-
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
-
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _dns_server_btn_clicked_cb, priv);
- Connect(btn, 2);
-
- elm_object_signal_emit(btn, SIG_HIDE_BOTTOME_LINE, PROG);
- elm_box_pack_end(box, btn);
-
- m->dns_server_btn = btn;
-
- if (m->dns_mode == MODE_AUTO)
- elm_object_disabled_set(m->dns_server_btn, EINA_TRUE);
-
- return true;
-}
-
-
-bool CIpSettingView::m_CreateBtns(void)
-{
- Evas_Object *base = NULL;
- Evas_Object *ok_btn;
- Evas_Object *cancel_btn;
-
- ok_btn = util_add_button(base, STYLE_SETTING_BTN, NULL, _(TXT_OK));
- if (!ok_btn) {
- _ERR("Add button failed.");
- return false;
- }
-
- elm_object_part_content_set(base, PART_CONNECTION_OK_BTN, ok_btn);
- m->ok_btn = ok_btn;
-
- //evas_object_smart_callback_add(ok_btn, SIG_CLICKED, _ok_btn_clicked_cb, priv);
- Connect(ok_btn, 3);
-
- cancel_btn = util_add_button(base, STYLE_SETTING_BTN, PART_CONNECTION_CANCEL_BTN, _(TXT_CANCEL));
- if (!cancel_btn) {
- _ERR("Add button failed.");
- evas_object_del(ok_btn);
- return false;
- }
-
- //evas_object_smart_callback_add(cancel_btn, SIG_CLICKED, _cancel_btn_clicked_cb, priv);
- Connect(cancel_btn, 4);
-
- m->cancel_btn = cancel_btn;
-
- return true;
-}
-
-
-bool CIpSettingView::m_CreateIpSetting(void)
-{
- Evas_Object *base = NULL;
- Evas_Object *scroll;
- Evas_Object *box;
- Evas_Object *btn;
- char mode[STRING_MAX_SIZE];
-
- scroll = util_add_scroll(base, PART_CONNECTION_IP_SETTING);
- if (!scroll) {
- _ERR("add scroll failed.");
- return false;
- }
-
- box = util_add_box(scroll, NULL);
- if (!box) {
- _ERR("add box failed.");
- evas_object_del(scroll);
- return false;
- }
-
- elm_box_horizontal_set(box, EINA_FALSE);
- elm_box_padding_set(box, BOX_PAD_X, BOX_PAD_Y);
-
- memset(mode, 0, STRING_MAX_SIZE);
- if (m->ip_mode == MODE_AUTO)
- snprintf(mode, STRING_MAX_SIZE - 1, "%s", _(TXT_OBTAIN_AUTO));
- else
- snprintf(mode, STRING_MAX_SIZE - 1, "%s", _(TXT_ENTER_MAN));
-
- btn = util_add_key_value_button(base, NULL, _(TXT_IP_SETTING), mode);
- if (!btn) {
- _ERR("Add button failed.");
- evas_object_del(scroll);
- return false;
- }
- //evas_object_smart_callback_add(btn, SIG_CLICKED, cb, data);
- Connect(btn, 5);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
-
- elm_box_pack_end(box, btn);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
- elm_object_focus_set(btn, EINA_TRUE);
- m->ip_mode_btn = btn;
-
- btn = util_add_key_value_button(base, NULL, _(TXT_IP_ADDR), m->info.ip_addr);
- if (!btn) {
- _ERR("Add btn failed.");
- evas_object_del(scroll);
- return false;
- }
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _ip_address_btn_clicked_cb, data);
- Connect(btn, 6);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
-
- elm_box_pack_end(box, btn);
- m->ip_addr_btn = btn;
-
- btn = util_add_key_value_button(base, NULL, _(TXT_SUBNET_MASK), m->info.submask);
- if (!btn) {
- _ERR("Add btn failed.");
- evas_object_del(scroll);
- return false;
- }
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _sub_mask_btn_clicked_cb, data);
- Connect(btn, 7);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
-
- elm_box_pack_end(box, btn);
- m->subnet_mask_btn = btn;
-
- btn = util_add_key_value_button(base, NULL, _(TXT_GATEWAY), m->info.gateway);
- if (!btn) {
- _ERR("Add btn failed.");
- evas_object_del(scroll);
- return false;
- }
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _gateway_btn_clicked_cb, data);
- Connect(btn, 8);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
-
- elm_object_signal_emit(btn, SIG_HIDE_BOTTOME_LINE, PROG);
-
- elm_box_pack_end(box, btn);
- m->gateway_btn = btn;
-
- elm_object_content_set(scroll, box);
-
- if (m->ip_mode == MODE_AUTO){
- elm_object_disabled_set(m->ip_addr_btn, EINA_TRUE);
- elm_object_disabled_set(m->subnet_mask_btn, EINA_TRUE);
- elm_object_disabled_set(m->gateway_btn, EINA_TRUE);
- }
-
- return true;
-}
-
-
-bool CIpSettingView::m_CreateDimLayout(void)
-{
- Evas_Object *dim_ly;
-
- dim_ly = util_add_layout(m->win, UG_NETWORK_EDJ_FILE,
- GRP_DIM_LY);
- if (!dim_ly) {
- _ERR("elm_layout_add() failed.");
- return false;
- }
-
- m->dim_ly = dim_ly;
- evas_object_hide(m->dim_ly);
-
- return true;
-}
-
-Evas_Object* CIpSettingView::m_CreateMainLayout()
-{
- _DBG();
- Evas_Object *base;
-
- base = elm_layout_add(m->win);
- if (!base) {
- _ERR("elm_layout_add() failed.");
- return NULL;
- }
-
- elm_layout_file_set(base, UG_NETWORK_EDJ_FILE, GRP_CONNECTION_SETTING);
-
- evas_object_show(base);
-
- return base;
-}
-
-
-void CIpSettingView::t_OnShow()
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CIpSettingView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-
-#if 0
- switch (m->cur_view) {
- case NETWORK_IP_SETTING_VIEW:
- elm_object_focus_set(m->other_btn, EINA_TRUE);
- break;
- case NETWORK_WIFI_PASSCODE_VIEW:
- elm_object_focus_set(m->connect_btn, EINA_TRUE);
- break;
- default:
- break;
- }
-#endif
-}
-
-
-void CIpSettingView::t_OnHide()
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CIpSettingView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- struct connection_info *info;
-
- _CREATE_BEGIN{
- _CHECK(m = new SIpSettingView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m_InitConnectionMgr())
- _COMMAND{
- if(data) {
- info = (struct connection_info *) data;
- m->network_type = info->cur_type;
- m->ap = m->ap;
- strncpy(m->profile_name, info->name, MAX_NAME_SIZE - 1);
- }
- }
- _CHECK(m->base = m_CreateMainLayout())
- _COMMAND{
- //evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN, _base_key_pressed_cb, priv);
- Connect(m->base, 0);
- elm_object_part_text_set(m->base, PART_CONNECTION_DESCRITION, TXT_MAKE_OTHER_NETWORK);
- }
- _CHECK(m_GetCurConnectionMode())
- _CHECK(m_GetCurIpInfo())
- _CHECK(m_CreateDNSSetting())
- _CHECK(m_CreateBtns())
- _CHECK(m_CreateIpSetting())
- _CHECK(m_CreateDimLayout())
- _WHEN_SUCCESS{
- m->pViewMgr = CViewMgr::GetInstance();
- }
- _CHECK_FAIL{ /* m_CreateDimLayout() */ }
- _CHECK_FAIL{ /* m_CreateIpSetting() */ }
- _CHECK_FAIL{ /* m_CreateBtns() */ }
- _CHECK_FAIL{ /* m_CreateDNSSetting() */ }
- _CHECK_FAIL{ /* m_GetCurIpInfo() */ }
- _CHECK_FAIL{ /* m_GetCurConnectionMode() */ }
- _CHECK_FAIL{ evas_object_del(m->base); }
- _CHECK_FAIL{ m_FinalizeConnectionMgr(); }
- _CHECK_FAIL{ /* m->win = CViewMgr::GetInstance()->Window() */ }
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- _DBG("Done");
- return true;
-}
-
-
-void CIpSettingView::Destroy()
-{
- ASSERT(m);
- _DBG();
-
- if (m->dim_ly)
- evas_object_del(m->dim_ly);
-
- CBaseView::Destroy();
- delete m;
- m = NULL;
-}
-
-Evas_Object* CIpSettingView::Base()
-{
- ASSERT(m);
- _DBG();
-
- return m->base;
-}
-
-
-void CIpSettingView::m_SetupDownCycleFocus(Evas_Object **obj, int count)
-{
- int i;
-
- if (!*obj || !obj)
- return;
-
- for (i = 0; i < count; i++) {
- if (i == count - 1)
- elm_object_focus_next_object_set(obj[i], obj[0], ELM_FOCUS_DOWN);
- else
- elm_object_focus_next_object_set(obj[i], obj[i + 1], ELM_FOCUS_DOWN);
-
- if (i == 0)
- elm_object_focus_next_object_set(obj[i], obj[count - 1], ELM_FOCUS_UP);
- else
- elm_object_focus_next_object_set(obj[i], obj[i - 1], ELM_FOCUS_UP);
- }
-}
-
-
-void CIpSettingView::m_KeepBtnFocused(void)
-{
- Evas_Object *obj;
-
- switch (m->cur_type) {
- case SETTING_IP:
- obj = m->ip_mode_btn;
- break;
- case SETTING_IP_ADDRESS:
- obj = m->ip_addr_btn;
- break;
- case SETTING_SUBNET_MASK:
- obj = m->subnet_mask_btn;
- break;
- case SETTING_GATEWAY:
- obj = m->gateway_btn;
- break;
- case SETTING_DNS:
- obj = m->dns_mode_btn;
- break;
- case SETTING_DNS_SERVER:
- obj = m->dns_server_btn;
- break;
- default:
- return;
- }
-
- elm_object_signal_emit(obj, SIG_BTN_SELECTED, PROG);
-}
-
-
-void CIpSettingView::m_CreateValuePopup(void)
-{
- Evas_Object *base = NULL, *ctxpopup, *btn;
- Evas_Coord pos_x, pos_y;
- int i;
-
- ctxpopup = util_add_layout(base, UG_NETWORK_EDJ_FILE,
- GRP_NETWORK_VALUE_SETTING);
- if (!ctxpopup) {
- _ERR("elm_ctxpopup_add() failed.");
- return;
- }
-
- elm_object_focus_allow_set(ctxpopup, EINA_TRUE);
- //evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- Connect(ctxpopup, 15);
-
- m->config_popup = ctxpopup;
-
- evas_object_show(m->dim_ly);
-
- for (i = 0; i < IP_SET_MAX_NUM; i++) {
- btn = m_CreateValueBtn(ctxpopup, i, _(TXT_ZERO), NULL);
- if (!btn) {
- _ERR("_create_value_btn() failed.");
- evas_object_del(ctxpopup);
- m->config_popup = NULL;
- return;
- }
-
- m->cur_ip_btn[i] = btn;
- }
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _popup_dismissed_cb, data);
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _ip_btn_key_pressed_cb, data);
- Connect(m->cur_ip_btn[0], 16);
- Connect(m->cur_ip_btn[1], 17);
- Connect(m->cur_ip_btn[2], 18);
- Connect(m->cur_ip_btn[3], 19);
-
- //evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN, _value_ctxpopup_key_pressed_cb, priv);
- m_SetLeftRightCycleFocus(m->cur_ip_btn, IP_SET_MAX_NUM);
-
- m_KeepBtnFocused();
-
- pos_x = 0;
- pos_y = 0;
- m_GetValuePopupPos(&pos_x, &pos_y);
- evas_object_move(ctxpopup, pos_x * ELM_SCALE, pos_y * ELM_SCALE);
-
-}
-
-
-Evas_Object* CIpSettingView::m_CreateValueBtn(Evas_Object *base, int num, char *txt, void *data)
-{
- Evas_Object *btn;
-
- if (!base || !txt || !data) {
- _ERR("The param is invalid.");
- return NULL;
- }
-
- btn = util_add_button(base, STYLE_VALUE_BTN, NULL, txt);
- if (!btn) {
- _ERR("add button failed.");
- return NULL;
- }
-
- switch (num) {
- case 0:
- elm_object_part_content_set(base, PART_IP_FIRST, btn);
- evas_object_data_set(base, IP_VALUE1, btn);
- elm_object_focus_set(btn, EINA_TRUE);
- break;
- case 1:
- elm_object_part_content_set(base, PART_IP_SECOND, btn);
- evas_object_data_set(base, IP_VALUE2, btn);
- break;
- case 2:
- elm_object_part_content_set(base, PART_IP_THIRD, btn);
- evas_object_data_set(base, IP_VALUE3, btn);
- break;
- case 3:
- elm_object_part_content_set(base, PART_IP_FORTH, btn);
- evas_object_data_set(base, IP_VALUE4, btn);
- break;
- default:
- break;
- }
-
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
-
- return btn;
-}
-
-
-void CIpSettingView::m_SetLeftRightCycleFocus(Evas_Object **obj, int count)
-{
- int i;
-
- if (!obj || !*obj) {
- _ERR("the param is invalid.");
- return;
- }
-
- for (i = 0; i < count; i++) {
- if (i == count - 1)
- elm_object_focus_next_object_set(obj[i], obj[0], ELM_FOCUS_RIGHT);
- else
- elm_object_focus_next_object_set(obj[i], obj[i + 1], ELM_FOCUS_RIGHT);
-
- if (i == 0)
- elm_object_focus_next_object_set(obj[i], obj[count - 1], ELM_FOCUS_LEFT);
- else
- elm_object_focus_next_object_set(obj[i], obj[i - 1], ELM_FOCUS_LEFT);
- }
-}
-
-
-bool CIpSettingView::m_GetValuePopupPos(Evas_Coord *pos_x, Evas_Coord *pos_y)
-{
- Evas_Coord x;
- Evas_Coord y;
- Evas_Coord w;
- Evas_Coord h;
-
- if (!pos_x || !pos_y) {
- _ERR("the param is invalid.");
- return false;
- }
-
- switch (m->cur_type) {
- case SETTING_IP_ADDRESS:
- evas_object_geometry_get(m->ip_addr_btn, &x, &y, &w, &h);
- *pos_x = x + SETTING_VALUE_OFFSET_X;
- *pos_y = y - SETTING_VALUE_OFFSET_Y;
- break;
- case SETTING_SUBNET_MASK:
- evas_object_geometry_get(m->subnet_mask_btn, &x, &y, &w, &h);
- *pos_x = x + SETTING_VALUE_OFFSET_X;
- *pos_y = y - SETTING_VALUE_OFFSET_Y;
- break;
- case SETTING_GATEWAY:
- evas_object_geometry_get(m->gateway_btn, &x, &y, &w, &h);
- *pos_x = x + SETTING_VALUE_OFFSET_X;
- *pos_y = y - SETTING_VALUE_OFFSET_Y;
- break;
- case SETTING_DNS_SERVER:
- evas_object_geometry_get(m->dns_server_btn, &x, &y, &w, &h);
- *pos_x = x + SETTING_VALUE_OFFSET_X;
- *pos_y = y - 2 * SETTING_VALUE_OFFSET_Y;
- break;
- default:
- return false;
- }
-
- return true;
-}
-
-
-void CIpSettingView::m_ConfigNetwork(void)
-{
- bool ret;
-
- switch (m->ip_mode) {
- case MODE_AUTO:
- ret = m_ConfigNetworkDynamic();
- if (ret != true) {
- _ERR("config network automatically failed.");
- m_ShowConfirmPopup();
- return;
- }
-
- break;
- case MODE_MAN:
- ret = m_ConfigNetworkManually();
- if (ret == false) {
- _ERR("invalid IP.");
- return;
- } else if (ret != true) {
- _ERR("config network manually failed.");
- m_ShowConfirmPopup();
- return;
- }
-
- break;
- default:
- m_ShowConfirmPopup();
- return;
- }
-
- m_SaveMode();
-
-#if 0
- viewmgr_pop(m->vmgr);
-#endif
-}
-
-
-void CIpSettingView::m_ShowConfirmPopup(void)
-{
- Evas_Object *layout;
- Evas_Object *retry_btn, *cancel_btn;
- Evas_Coord w;
- Evas_Coord h;
- char content[CONTENT_TXT_SIZE];
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_NETWORK_EDJ_FILE,
- GRP_CONFIRM_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- m->confirm_popup = layout;
-
- if (m->network_type == TYPE_WIRED)
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRED_LY));
- else
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
-
- memset(content, 0, CONTENT_TXT_SIZE);
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s", _(TXT_FAILED_CONNECT), m->profile_name);
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
-
- retry_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_RETRY_BTN, _(TXT_RETRY));
- if (!retry_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- cancel_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_CANCEL_BTN, _(TXT_CANCEL));
- if (!cancel_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_focus_next_object_set(retry_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(cancel_btn, retry_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_DOWN);
-
- //evas_object_smart_callback_add(retry_btn, SIG_CLICKED, _retry_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(cancel_btn, SIG_CLICKED, _popup_ok_cancel_btn_clicked_cb, priv);
- Connect(retry_btn, 20);
- Connect(cancel_btn, 21);
-
- elm_object_focus_set(retry_btn, EINA_TRUE);
-
- elm_object_focus_allow_set(layout, EINA_TRUE);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_pressed_cb, priv);
- Connect(layout, 22);
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - POPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - POPUP_HEIGHT) * ELM_SCALE);
-}
-
-
-bool CIpSettingView::m_ConfigNetworkDynamic(void)
-{
- bool result = false;
-
- switch (m->network_type) {
- case TYPE_WIRED:
- if(!m->pNetConMgr->SetIpConfType(CONNECTION_IP_CONFIG_TYPE_DYNAMIC)) {
- _ERR("connection_mgr_ip_dynamic_config() failed.");
- return false;
- }
-
- break;
- case TYPE_WIRELESS:
- result = m->ap->SetIpType(WIFI_IP_CONFIG_TYPE_DYNAMIC);
- if(result != false) {
- _ERR("connection_mgr_ip_dynamic_config() failed.");
- return false;
- }
-
- break;
- default:
- break;
- }
-
- return true;
-}
-
-
-bool CIpSettingView::m_ConfigNetworkManually(void)
-{
- bool result = false;
-
- result = m_CheckIpValid();
- if (result != true) {
- _ERR("the ip is invalid.");
- m_ShowInvalidIpPopup();
- return false;
- }
-
- result = false;
- switch (m->network_type) {
- case TYPE_WIRED:
- if (!m->pNetConMgr->SetIpAddr(m->info.ip_addr)) {
- _ERR("set profile failed.");
- return false;
- }
- if (!m->pNetConMgr->SetSubnetMask(m->info.submask)) {
- _ERR("set profile failed.");
- return false;
- }
- if (!m->pNetConMgr->SetGateway(m->info.gateway)) {
- _ERR("set profile failed.");
- return false;
- }
- if (!m->pNetConMgr->SetDNS(m->info.dns)) {
- _ERR("set profile failed.");
- return false;
- }
-
- vconf_set_str(WIRED_IP_KEY, m->info.ip_addr);
- vconf_set_str(WIRED_SUBMASK_KEY, m->info.submask);
- vconf_set_str(WIRED_GATEWAY_KEY, m->info.gateway);
- vconf_set_str(WIRED_DNS_KEY, m->info.dns);
- break;
- case TYPE_WIRELESS:
- result = m->ap->SetIp(m->info.ip_addr);
- if(result != true) {
- _ERR("set wifi dns config failed.");
- return false;
- }
- result = m->ap->SetSubnetMask(m->info.submask);
- if(result != true) {
- _ERR("set wifi dns config failed.");
- return false;
- }
- result = m->ap->SetGateway(m->info.gateway);
- if(result != true) {
- _ERR("set wifi dns config failed.");
- return false;
- }
- result = m->ap->SetDNS(m->info.dns);
- if(result != true) {
- _ERR("set wifi dns config failed.");
- return false;
- }
-
- vconf_set_str(WIRELESS_IP_KEY, m->info.ip_addr);
- vconf_set_str(WIRELESS_SUBMASK_KEY, m->info.submask);
- vconf_set_str(WIRELESS_GATEWAY_KEY, m->info.gateway);
- vconf_set_str(WIRELESS_DNS_KEY, m->info.dns);
- break;
- default:
- break;
- }
-
- return true;
-}
-
-
-bool CIpSettingView::m_CheckIpValid(void)
-{
- if (!strncmp(m->info.ip_addr, ZERO_IP, IP_STRING_MAX_SIZE)) {
- _ERR("IP addr is invalid.");
- return false;
- }
-
- if (!strncmp(m->info.submask, ZERO_IP, IP_STRING_MAX_SIZE)) {
- _ERR("submask addr is invalid.");
- return false;
- }
-
- if (!strncmp(m->info.gateway, ZERO_IP, IP_STRING_MAX_SIZE)) {
- _ERR("gateway addr is invalid.");
- return false;
- }
-
- if (!strncmp(m->info.dns, ZERO_IP, IP_STRING_MAX_SIZE)) {
- _ERR("dns addr is invalid.");
- return false;
- }
-
- return true;
-}
-
-
-void CIpSettingView::m_ShowInvalidIpPopup(void)
-{
- Evas_Object *layout;
- Evas_Object *ok_btn;
- Evas_Coord w;
- Evas_Coord h;
- char content[CONTENT_TXT_SIZE];
-
- if (m->confirm_popup) {
- evas_object_del(m->confirm_popup);
- m->confirm_popup = NULL;
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_CONFIRM_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- evas_object_show(layout);
-
- if (m->network_type == TYPE_WIRED)
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRED_LY));
- else
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
-
- memset(content, 0, CONTENT_TXT_SIZE);
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s", _(TXT_INVALID_IP));
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
-
- ok_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_OK_BTN, _(TXT_OK));
- if (!ok_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_DOWN);
- //evas_object_smart_callback_add(ok_btn, SIG_CLICKED, _popup_ok_cancel_btn_clicked_cb, priv);
- Connect(ok_btn, 23);
-
- elm_object_focus_set(ok_btn, EINA_TRUE);
-
- elm_object_focus_allow_set(layout, EINA_TRUE);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_pressed_cb, priv);
- Connect(layout, 24);
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - POPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - POPUP_HEIGHT) * ELM_SCALE);
-
- m->confirm_popup = layout;
-}
-
-
-void CIpSettingView::m_SaveMode(void)
-{
- switch (m->network_type) {
- case TYPE_WIRED:
- if(m->ip_mode == MODE_AUTO) {
- vconf_set_str(WIRED_IP_LAST_MODE, _(TXT_OBTAIN_AUTO));
- }
- else if(m->ip_mode == MODE_MAN) {
- vconf_set_str(WIRED_IP_LAST_MODE, _(TXT_ENTER_MAN));
- }
-
- if(m->dns_mode == MODE_AUTO) {
- vconf_set_str(WIRED_DNS_LAST_MODE, _(TXT_OBTAIN_AUTO));
- }
- else if(m->dns_mode == MODE_MAN) {
- vconf_set_str(WIRED_DNS_LAST_MODE, _(TXT_ENTER_MAN));
- }
- break;
- case TYPE_WIRELESS:
- if(m->ip_mode == MODE_AUTO) {
- vconf_set_str(WIRELESS_IP_LAST_MODE, _(TXT_OBTAIN_AUTO));
- }
- else if(m->ip_mode == MODE_MAN) {
- vconf_set_str(WIRELESS_IP_LAST_MODE, _(TXT_ENTER_MAN));
- }
-
- if(m->dns_mode == MODE_AUTO) {
- vconf_set_str(WIRELESS_DNS_LAST_MODE, _(TXT_OBTAIN_AUTO));
- }
- else if(m->dns_mode == MODE_MAN) {
- vconf_set_str(WIRELESS_DNS_LAST_MODE, _(TXT_ENTER_MAN));
- }
- break;
- default:
- break;
- }
-}
-
-
-void CIpSettingView::m_SetTheValue(void)
-{
- Evas_Object *btn;
- const char *value1;
- const char *value2;
- const char *value3;
- const char *value4;
- char value[IP_STRING_MAX_SIZE];
-
- value1 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->config_popup, IP_VALUE1);
- if (btn)
- value1 = elm_object_text_get(btn);
-
- value2 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->config_popup, IP_VALUE2);
- if (btn)
- value2 = elm_object_text_get(btn);
-
- value3 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->config_popup, IP_VALUE3);
- if (btn)
- value3 = elm_object_text_get(btn);
-
- value4 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->config_popup, IP_VALUE4);
- if (btn)
- value4 = elm_object_text_get(btn);
-
- memset(value, 0, IP_STRING_MAX_SIZE);
- snprintf(value, IP_STRING_MAX_SIZE, "%s.%s.%s.%s",
- value1 ? value1 : "\\0", value2 ? value2 : "\\0",
- value3 ? value3 : "\\0", value4 ? value4 : "\\0");
-
- switch (m->cur_type) {
- case SETTING_IP_ADDRESS:
- elm_object_part_text_set(m->ip_addr_btn, PART_VALUE, value);
- strncpy(m->info.ip_addr, value, IP_STRING_MAX_SIZE);
- break;
- case SETTING_SUBNET_MASK:
- elm_object_part_text_set(m->subnet_mask_btn, PART_VALUE, value);
- strncpy(m->info.submask, value, IP_STRING_MAX_SIZE);
- break;
- case SETTING_GATEWAY:
- elm_object_part_text_set(m->gateway_btn, PART_VALUE, value);
- strncpy(m->info.gateway, value, IP_STRING_MAX_SIZE);
- break;
- case SETTING_DNS_SERVER:
- elm_object_part_text_set(m->dns_server_btn, PART_VALUE, value);
- strncpy(m->info.dns, value, IP_STRING_MAX_SIZE);
- break;
- default:
- return;
- }
-
- evas_object_del(m->config_popup);
- m->config_popup = NULL;
-}
-
-
-void CIpSettingView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- /* ID list */
- /* 0 m->base */
- /* 1 m->dns_mode_btn */
- /* 2 m->dns_setting_btn */
- /* 3 m->ok_btn */
- /* 4 m->cancel_btn */
- /* 5 m->ip_mode_btn */
- /* 6 m->ip_addr_btn */
- /* 7 m->subnet_mask_btn */
- /* 8 m->gateway_btn */
- /* 9 btn_auto */
- /* 10 btn_man */
- /* 11 m->dns_mode_ly */
- /* 12 ctxpopup auto_btn*/
- /* 13 ctxpopup man_btn*/
- /* 14 m->ip_mode_ly */
- /* 15 m->config_popup */
- /* 16 m->cur_ip_btn[0] */
- /* 17 m->cur_ip_btn[1] */
- /* 18 m->cur_ip_btn[2] */
- /* 19 m->cur_ip_btn[3] */
- /* 20 showpopup retry_btn */
- /* 21 showpopup cancel_btn */
- /* 22 showpopup */
- /* 23 showInvalidIpPopup ok_btn */
- /* 24 showInvalidIpPopup layout */
-
-
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 0:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-#if 0
- viewmgr_pop(m->vmgr);
-#endif
- return;
- }
- break;
- case 9:
- case 10:
- case 12:
- case 13:
- if (!strcmp(ev->keyname, KEY_LEFT) || !strcmp(ev->keyname, KEY_RIGHT)) {
- evas_object_hide(m->dim_ly);
- if (m->cur_type == SETTING_IP) {
- evas_object_del(m->ip_mode_ly);
- m->ip_mode_ly = NULL;
- } else if (m->cur_type == SETTING_DNS) {
- evas_object_del(m->dns_mode_ly);
- m->dns_mode_ly = NULL;
- }
- }
- break;
- case 11:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- evas_object_del(m->dns_mode_ly);
- m->dns_mode_ly = NULL;
- } else if (!strcmp(ev->keyname, KEY_EXIT)) {
- ug_destroy_me(m->ug);
- }
- break;
- case 14:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- evas_object_del(m->ip_mode_ly);
- m->ip_mode_ly = NULL;
- }
- break;
- case 15:
- if (!strcmp(ev->keyname, KEY_ENTER) || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
- evas_object_hide(m->dim_ly);
- m_SetTheValue();
- evas_object_del(obj);
- } else if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- }
- break;
- case 16:
- case 17:
- case 18:
- case 19:
- const char *value;
- int num, new_num;
-
- if (!strcmp(ev->keyname, KEY_UP)) {
- value = elm_object_text_get(obj);
- num = atoi(value);
- num++;
- if (num > MAX_IP_NUM)
- num = 0;
- } else if (!strcmp(ev->keyname, KEY_DOWN)) {
- value = elm_object_text_get(obj);
- num = atoi(value);
- num--;
- if (num < 0)
- num = MAX_IP_NUM;
- } else if (!strcmp(ev->keyname, KEY_0) ||
- !strcmp(ev->keyname, KEY_1) ||
- !strcmp(ev->keyname, KEY_2) ||
- !strcmp(ev->keyname, KEY_3) ||
- !strcmp(ev->keyname, KEY_4) ||
- !strcmp(ev->keyname, KEY_5) ||
- !strcmp(ev->keyname, KEY_6) ||
- !strcmp(ev->keyname, KEY_7) ||
- !strcmp(ev->keyname, KEY_8) ||
- !strcmp(ev->keyname, KEY_9)) {
- value = elm_object_text_get(obj);
- if (!value)
- elm_object_text_set(obj, ev->keyname);
-
- new_num = atoi(ev->keyname);
-
- num = atoi(value);
- if (!num || (num * RATIO + new_num) > MAX_IP_NUM) {
- elm_object_text_set(obj, ev->keyname);
- return;
- }
-
- num = num * RATIO + new_num;
- } else {
- return;
- }
-
- char temp_value[IP_STRING_MAX_SIZE];
-
- memset(temp_value, 0, IP_STRING_MAX_SIZE);
- snprintf(temp_value, IP_STRING_MAX_SIZE - 1, "%d", num);
- elm_object_text_set(obj, temp_value);
- break;
- case 22:
- case 24:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- }
- break;
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- default:
- break;
- }
-}
-
-
-void CIpSettingView::OnMouseClicked(int id, Evas_Object *obj)
-{
- /* ID list */
- /* 0 m->base */
- /* 1 m->dns_mode_btn */
- /* 2 m->dns_setting_btn */
- /* 3 m->ok_btn */
- /* 4 m->cancel_btn */
- /* 5 m->ip_mode_btn */
- /* 6 m->ip_addr_btn */
- /* 7 m->subnet_mask_btn */
- /* 8 m->gateway_btn */
- /* 9 btn_auto */
- /* 10 btn_man */
- /* 11 m->dns_mode_ly */
- /* 12 ctxpopup auto_btn*/
- /* 13 ctxpopup man_btn*/
- /* 14 m->ip_mode_ly */
- /* 15 m->config_popup */
- /* 16 m->cur_ip_btn[0] */
- /* 17 m->cur_ip_btn[1] */
- /* 18 m->cur_ip_btn[2] */
- /* 19 m->cur_ip_btn[3] */
- /* 20 showpopup retry_btn */
- /* 21 showpopup cancel_btn */
- /* 22 showpopup */
- /* 23 showInvalidIpPopup ok_btn */
- /* 24 showInvalidIpPopup layout */
-
- switch(id) {
- case 0:
- break;
- case 1:
- {
- Evas_Object *ctxpopup, *box, *btn_auto, *btn_man;
- Evas_Coord x, y, w, h;
- Evas_Object *btn[2];
-
- m->cur_type = SETTING_DNS;
-
- if (m->dns_mode == MODE_INVALID)
- m->dns_mode = MODE_MAN;
-
- ctxpopup = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_NETWORK_MODE_SETTING);
- if (!ctxpopup) {
- _ERR("elm_layout_add() failed.");
- return;
- }
-
- box = util_add_box(ctxpopup, PART_SWALLOW_CONTENT);
- if (!box) {
- _ERR("add box failed.");
- evas_object_del(ctxpopup);
- return;
- }
-
- elm_box_horizontal_set(box, EINA_FALSE);
-
- btn_auto = util_add_button(m->base, STYLE_MODE_SELECT_BTN, NULL, _(TXT_OBTAIN_AUTO));
- if (!btn_auto) {
- _ERR("Add btn failed.");
- evas_object_del(ctxpopup);
- return;
- }
-#if 0
- evas_object_smart_callback_add(btn_auto, SIG_DISMISSED, _mode_sub_popup_dismissed_cb, data);
-#endif
- //evas_object_smart_callback_add(btn_auto, SIG_CLICKED, _dns_auto_mode_btn_clicked_cb, data);
- //evas_object_event_callback_add(btn_auto, EVAS_CALLBACK_KEY_DOWN, _mode_sub_popup_key_pressed_cb, data);
- Connect(btn_auto, 9);
-
- elm_box_pack_end(box, btn_auto);
- elm_object_focus_set(btn_auto, EINA_TRUE);
- btn[0] = btn_auto;
-
- btn_man = util_add_button(m->base, STYLE_MODE_SELECT_BTN, NULL, _(TXT_ENTER_MAN));
- if (!btn_man) {
- _ERR("Add btn failed.");
- evas_object_del(ctxpopup);
- return;
- }
-#if 0
- evas_object_smart_callback_add(btn, SIG_DISMISSED, _mode_sub_popup_dismissed_cb, data);
-#endif
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _dns_manual_mode_btn_clicked_cb, data);
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _mode_sub_popup_key_pressed_cb, data);
- Connect(btn_man, 10);
-
- elm_box_pack_end(box, btn_man);
- btn[1] = btn_man;
-
- m_SetupDownCycleFocus(btn, 2);
-#if 0
-
- evas_object_smart_callback_add(ctxpopup, SIG_DISMISSED, _dns_ctxpopup_dismissed_cb, priv);
-#endif
- //evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN, _dns_ctxpopup_key_pressed_cb, priv);
- //evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- Connect(ctxpopup, 11);
-
- evas_object_geometry_get(m->dns_mode_btn, &x, &y, &w, &h);
- m->dns_mode_ly = ctxpopup;
-
- evas_object_move(ctxpopup, (x + SETTING_MODE_OFFSET_X) * ELM_SCALE,
- (y + h) * ELM_SCALE);
-
- if (m->dns_mode == MODE_AUTO)
- elm_object_signal_emit(btn_auto, SIG_BTN_SELECTED, PROG);
- else if (m->dns_mode == MODE_MAN)
- elm_object_signal_emit(btn_man, SIG_BTN_SELECTED, PROG);
-
- evas_object_show(m->dim_ly);
-
- m_KeepBtnFocused();
- }
- break;
- case 2:
- m->cur_type = SETTING_DNS_SERVER;
- m_CreateValuePopup();
- break;
- case 3:
- m_ConfigNetwork();
- break;
- case 4:
-#if 0
- if (m->vmgr)
- viewmgr_pop(m->vmgr);
-#endif
- break;
- case 5:
- {
- Evas_Object *ctxpopup, *box, *auto_btn, *man_btn;
- Evas_Coord x, y, w, h;
- Evas_Object *btn[MODE_BTN_NUM];
-
- m->cur_type = SETTING_IP;
-
- if (m->ip_mode == MODE_INVALID)
- m->ip_mode = MODE_MAN;
-
- ctxpopup = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_NETWORK_MODE_SETTING);
- if (!ctxpopup) {
- _ERR("elm_layout_add() failed.");
- return;
- }
-
- evas_object_show(m->dim_ly);
- m_KeepBtnFocused();
-
- box = util_add_box(ctxpopup, PART_SWALLOW_CONTENT);
- if (!box) {
- _ERR("create box failed.");
- evas_object_del(ctxpopup);
- return;
- }
-
- elm_box_horizontal_set(box, EINA_FALSE);
-
- auto_btn = util_add_button(ctxpopup, STYLE_MODE_SELECT_BTN, NULL, _(TXT_OBTAIN_AUTO));
- if (!auto_btn) {
- _ERR("Add btn failed.");
- evas_object_del(ctxpopup);
- return;
- }
-#if 0
- evas_object_smart_callback_add(auto_btn, SIG_DISMISSED, _mode_sub_popup_dismissed_cb, NULL);
-#endif
- //evas_object_smart_callback_add(auto_btn, SIG_CLICKED, _ip_auto_mode_btn_clicked_cb, NULL);
- //evas_object_event_callback_add(auto_btn, EVAS_CALLBACK_KEY_DOWN, _mode_sub_popup_key_pressed_cb, NULL);
- Connect(auto_btn, 12);
-
- elm_box_pack_end(box, auto_btn);
- elm_object_focus_set(auto_btn, EINA_TRUE);
- btn[0] = auto_btn;
-
- man_btn = util_add_button(ctxpopup, STYLE_MODE_SELECT_BTN, NULL, _(TXT_ENTER_MAN));
- if (!man_btn) {
- _ERR("Add btn failed.");
- evas_object_del(ctxpopup);
- return;
- }
-#if 0
- evas_object_smart_callback_add(man_btn, SIG_DISMISSED, _mode_sub_popup_dismissed_cb, NULL);
-#endif
- //evas_object_smart_callback_add(man_btn, SIG_CLICKED, _ip_manual_mode_btn_clicked_cb, NULL);
- //evas_object_event_callback_add(man_btn, EVAS_CALLBACK_KEY_DOWN, _mode_sub_popup_key_pressed_cb, NULL);
- Connect(man_btn, 13);
-
- elm_box_pack_end(box, man_btn);
- btn[1] = man_btn;
-
- m_SetupDownCycleFocus(btn, 2);
- //evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN, _ip_ctxpopup_key_pressed_cb, priv);
- //evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- Connect(man_btn, 14);
-
- m->ip_mode_ly = ctxpopup;
-
- if (m->ip_mode == MODE_AUTO)
- elm_object_signal_emit(auto_btn, SIG_BTN_SELECTED, PROG);
- else if (m->ip_mode == MODE_MAN)
- elm_object_signal_emit(man_btn, SIG_BTN_SELECTED, PROG);
-
- evas_object_geometry_get(m->ip_mode_btn, &x, &y, &w, &h);
- evas_object_move(ctxpopup, (x + SETTING_MODE_OFFSET_X) * ELM_SCALE, (y + h) * ELM_SCALE);
- }
- break;
- case 6:
- m->cur_type = SETTING_IP_ADDRESS;
- m_CreateValuePopup();
- break;
- case 7:
- m->cur_type = SETTING_SUBNET_MASK;
- m_CreateValuePopup();
- break;
- case 8:
- m->cur_type = SETTING_GATEWAY;
- m_CreateValuePopup();
- break;
- case 9:
- elm_object_disabled_set(m->dns_server_btn, EINA_TRUE);
- elm_object_part_text_set(m->dns_mode_btn, PART_VALUE, _(TXT_OBTAIN_AUTO));
- evas_object_del(m->dns_mode_ly);
- m->dns_mode_ly = NULL;
- m->dns_mode = MODE_AUTO;
- evas_object_hide(m->dim_ly);
- break;
- case 10:
- elm_object_disabled_set(m->dns_server_btn, EINA_FALSE);
- elm_object_part_text_set(m->dns_mode_btn, PART_VALUE, _(TXT_ENTER_MAN));
- evas_object_del(m->dns_mode_ly);
- m->dns_mode_ly = NULL;
- m->dns_mode = MODE_MAN;
- evas_object_hide(m->dim_ly);
- break;
- case 11:
- break;
- case 12:
- elm_object_disabled_set(m->ip_addr_btn, EINA_TRUE);
- elm_object_disabled_set(m->subnet_mask_btn, EINA_TRUE);
- elm_object_disabled_set(m->gateway_btn, EINA_TRUE);
-
- if (m->ip_mode_btn)
- elm_object_part_text_set(m->ip_mode_btn, PART_VALUE, _(TXT_OBTAIN_AUTO));
-
- evas_object_del(m->ip_mode_ly);
- m->ip_mode_ly = NULL;
- m->ip_mode = MODE_AUTO;
-
- evas_object_hide(m->dim_ly);
- break;
- case 13:
- elm_object_disabled_set(m->ip_addr_btn, EINA_FALSE);
- elm_object_disabled_set(m->subnet_mask_btn, EINA_FALSE);
- elm_object_disabled_set(m->gateway_btn, EINA_FALSE);
-
- elm_object_part_text_set(m->ip_mode_btn,
- PART_VALUE, _(TXT_ENTER_MAN));
-
- evas_object_del(m->ip_mode_ly);
- m->ip_mode_ly = NULL;
- m->ip_mode = MODE_MAN;
-
- evas_object_hide(m->dim_ly);
- break;
- case 16:
- case 17:
- case 18:
- case 19:
- evas_object_hide(m->dim_ly);
- if (m->confirm_popup)
- evas_object_del(m->confirm_popup);
- break;
- case 20:
- if (m->confirm_popup)
- evas_object_del(m->confirm_popup);
- evas_object_hide(m->dim_ly);
- elm_object_focus_set(m->ok_btn, EINA_TRUE);
- m_ConfigNetwork();
- break;
- case 21:
- case 23:
- if (m->confirm_popup)
- evas_object_del(m->confirm_popup);
- evas_object_hide(m->dim_ly);
- elm_object_focus_set(m->ok_btn, EINA_TRUE);
- break;
- default:
- break;
- }
-}
-
-void CIpSettingView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- /* ID list */
- /* 0 m->base */
- /* 1 m->dns_mode_btn */
- /* 2 m->dns_setting_btn */
- /* 3 m->ok_btn */
- /* 4 m->cancel_btn */
- /* 5 m->ip_mode_btn */
- /* 6 m->ip_addr_btn */
- /* 7 m->subnet_mask_btn */
- /* 8 m->gateway_btn */
- /* 9 btn_auto */
- /* 10 btn_man */
- /* 11 m->dns_mode_ly */
- /* 12 ctxpopup auto_btn*/
- /* 13 ctxpopup man_btn*/
- /* 14 m->ip_mode_ly */
- /* 15 m->config_popup */
- /* 16 m->cur_ip_btn[0] */
- /* 17 m->cur_ip_btn[1] */
- /* 18 m->cur_ip_btn[2] */
- /* 19 m->cur_ip_btn[3] */
- /* 20 showpopup retry_btn */
- /* 21 showpopup cancel_btn */
- /* 22 showpopup */
- /* 23 showInvalidIpPopup ok_btn */
- /* 24 showInvalidIpPopup layout */
-
- switch(id) {
- case 11:
- case 14:
- case 15:
- case 22:
- case 24:
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- break;
- default:
- break;
- }
-}
-
-
+++ /dev/null
-#include <AppCommon.h>
-#include "util.h"
-#include "defs.h"
-#include "i18n.h"
-#include "common.h"
-#include <vconf.h>
-#include <ui-gadget-module.h>
-#include "WifiMgr.h"
-#include "NetConMgr.h"
-
-#include "NetworkMainView.h"
-
-static const char *action_button[4] = {
- TXT_CONNECT_BTN,
- TXT_REFRESH_BTN,
- TXT_OTHER_BTN,
- TXT_CLOSE_BTN
-};
-
-static const char *button_swallow[4] = {
- PART_CONNECT_BTN,
- PART_REFRESH_BTN,
- PART_OTHER_BTN,
- PART_CLOSE_BTN
-};
-
-static const char *popup_button[2] = {
- TXT_WIRELESS,
- TXT_WIRED
-};
-
-struct SNetworkMainView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *type_btn;
- Evas_Object *network_ctxpopup;
- Evas_Object *dim_ly;
- Evas_Object *connect_btn;
- Evas_Object *refresh_btn;
- Evas_Object *other_btn;
- Evas_Object *close_btn;
- Evas_Object *genlist;
- Evas_Object *wired_con_box;
- Evas_Object *wireless_discon_ly;
- Evas_Object *wired_discon_ly;
- Evas_Object *status_popup;
-
- Elm_Genlist_Item_Class *lock_ic;
- Elm_Genlist_Item_Class *nolock_ic;
- Elm_Object_Item *last_item;
-
- Eina_List *ap_list;
- Ecore_Timer *timer;
-
- enum network_type_enum network_type;
- enum view_type cur_view;
-
- int wifi_init;
- Eina_Bool wifi_conn;
- Eina_Bool wired_conn;
-
- char profile_name[MAX_NAME_SIZE];
-
- CWifiAp *ap;
- char *ap_name;
- char *ap_pwd;
-
- CWifiMgr *pWifiMgr;
- CNetConMgr *pNetConMgr;
- CViewMgr *pViewMgr;
-
- SNetworkMainView() {
- pHandlerBase = new CHandlerBase(this);
- pHandlerTypeButton = new CHandlerTypeButton(this);
- pHandlerPopupButton = new CHandlerPopupButton(this);
- pHandlerWiredConBox = new CHandlerWiredConBox(this);
- pHandlerActionBtns = new CHandlerActionBtns(this);
- pHandlerConfirmPopup = new CHandlerConfirmPopup(this);
- }
- virtual ~SNetworkMainView() {
- delete pHandlerConfirmPopup;
- delete pHandlerActionBtns;
- delete pHandlerWiredConBox;
- delete pHandlerPopupButton;
- delete pHandlerTypeButton;
- delete pHandlerBase;
- }
-
- class CHandlerBase : public CListenerMgr, public IKeyDownListener {
- private:
- SNetworkMainView *m;
-
- public:
- CHandlerBase(SNetworkMainView *ins) : IKeyDownListener(this) { m = ins; }
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
- _DBG();
- switch (id) {
- case 0:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- ug_destroy_me(m->ug);
- }
- break;
- case 1:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- //_unset_layout_dim(priv);
- evas_object_hide(m->dim_ly);
- if (m->network_ctxpopup) {
- evas_object_del(m->network_ctxpopup);
- m->network_ctxpopup = NULL;
- }
- }
- break;
- default:
- break;
- }
- }
- } *pHandlerBase;
-
- class CHandlerTypeButton : public CListenerMgr, IMouseClickedListener {
- private:
- SNetworkMainView *m;
-
- public:
- CHandlerTypeButton(SNetworkMainView *ins) : IMouseClickedListener(this) { m = ins; }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- _DBG();
- Evas_Object *base = NULL;
- Evas_Object *layout, *box;
- Evas_Object *btn[BTN_TYPE];
- Evas_Coord x;
- Evas_Coord y;
- Evas_Coord w;
- Evas_Coord h;
- int i;
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(base, UG_NETWORK_EDJ_FILE, GRP_NETWORK_TYPE_SELECT);
- if (!layout) {
- _ERR("util_add_layout() failed.");
- return;
- }
-
- box = util_add_box(layout, PART_SWALLOW_CONTENT);
- if (!box) {
- evas_object_del(layout);
- return;
- }
-
- evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
-
- for (i = 0; i < BTN_TYPE; i++) {
- btn[i] = util_add_button(box, STYLE_POPUP_BTN, NULL, _(popup_button[i]));
- if (!btn[i]) {
- evas_object_del(layout);
- return;
- }
-
- elm_box_pack_end(box, btn[i]);
-
- //evas_object_smart_callback_add(btn[i], SIG_CLICKED, _type_select_btn_cb, priv);
- m->pHandlerPopupButton->Connect(btn[i],i);
- }
-
- if (m->network_type == TYPE_WIRELESS)
- elm_object_signal_emit(btn[TYPE_WIRELESS], SIG_BTN_SELECTED, PROG);
- else
- elm_object_signal_emit(btn[TYPE_WIRED], SIG_BTN_SELECTED, PROG);
-
- elm_object_part_content_set(layout, PART_SWALLOW_CONTENT, box);
-
- elm_object_focus_next_object_set(btn[1], btn[0], ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(btn[0], btn[1], ELM_FOCUS_UP);
- elm_object_focus_next_object_set(btn[1], btn[0], ELM_FOCUS_UP);
- elm_object_focus_next_object_set(btn[0], btn[1], ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(btn[0], btn[0], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(btn[0], btn[0], ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(btn[1], btn[1], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(btn[1], btn[1], ELM_FOCUS_RIGHT);
-
- x = 0; y = 0; w = 0; h = 0;
-
- evas_object_geometry_get(m->type_btn, &x, &y, &w, &h);
- evas_object_move(layout, (x + w - TYPE_POPUP_X_OFFSET) * ELM_SCALE, (y + h) * ELM_SCALE);
-
- m->network_ctxpopup = layout;
-
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _type_key_pressed_cb, priv);
- m->pHandlerBase->Connect(layout, 1);
-
- elm_object_focus_set(btn[0], EINA_TRUE);
- evas_object_show(layout);
- }
- } *pHandlerTypeButton;
-
- class CHandlerPopupButton : public CListenerMgr, IMouseClickedListener {
- private:
- SNetworkMainView *m;
- public:
- CHandlerPopupButton(SNetworkMainView *ins) : IMouseClickedListener(this) { m = ins; }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- _DBG();
- const char *value;
-
- value = elm_object_text_get(obj);
- if (!value) {
- _ERR("get text from network type btn is NULL.");
- return;
- }
-
- if ((!strcmp(value, _(popup_button[TYPE_WIRELESS]))) && m->network_type == TYPE_WIRED) {
- m->network_type = TYPE_WIRELESS;
- //m_SetWireless();
- vconf_set_str(SELECTED_NETWORK_TYPE_KEY, TXT_WIRELESS);
- } else if ((!strcmp(value, _(popup_button[TYPE_WIRED]))) && m->network_type == TYPE_WIRELESS) {
- m->network_type = TYPE_WIRED;
- //m_SetWired();
- vconf_set_str(SELECTED_NETWORK_TYPE_KEY, TXT_WIRED);
- }
-
- //m_SetNetTypeBtnText();
-
- if (m->network_ctxpopup) {
- evas_object_del(m->network_ctxpopup);
- m->network_ctxpopup = NULL;
- }
-
- evas_object_hide(m->dim_ly);
- }
- } *pHandlerPopupButton;
-
- class CHandlerWiredConBox : public CListenerMgr, IMouseClickedListener {
- private:
- SNetworkMainView *m;
- public:
- CHandlerWiredConBox(SNetworkMainView *ins) : IMouseClickedListener(this) { m = ins; }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- _DBG();
- if (m->wired_conn) {
- elm_object_signal_emit(obj, SIG_STATE_UNSELECTED, ELM);
- m->wired_conn = EINA_FALSE;
- elm_object_disabled_set(m->connect_btn, EINA_TRUE);
- elm_object_disabled_set(m->other_btn, EINA_TRUE);
- } else {
- elm_object_signal_emit(obj, SIG_STATE_SELECTED, ELM);
- m->wired_conn = EINA_TRUE;
- elm_object_disabled_set(m->connect_btn, EINA_FALSE);
- elm_object_disabled_set(m->other_btn, EINA_FALSE);
- }
- }
- } *pHandlerWiredConBox;
-
- class CHandlerActionBtns : public CListenerMgr, IMouseClickedListener {
- private:
- SNetworkMainView *m;
- public:
- CHandlerActionBtns(SNetworkMainView *ins) : IMouseClickedListener(this) { m = ins; }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- _DBG();
- switch (id) {
- case 0: /* CONNECT */
- //m_ConnectNetwork();
- break;
- case 1: /* REFRESH */
- //m_ClearGenlist();
- //m_SetWireless();
- break;
- case 2: /* OTHER */
- struct connection_info info;
-
- m->cur_view = NETWORK_IP_SETTING_VIEW;
-
- info.cur_type = m->network_type;
-
- if (m->network_type == TYPE_WIRED) {
- strncpy(info.name, m->profile_name,
- MAX_NAME_SIZE - 1);
- } else {
- if (!m->ap) {
- _ERR("selected ap is NULL.");
- return;
- }
-
- info.ap = m->ap;
-
- if (m->ap_name)
- strncpy(info.name, m->ap_name,
- MAX_NAME_SIZE - 1);
- }
-
-#if 0
- base = viewmgr_push(m->vmgr, ip_setting_view_vclass_get(), &info);
- if (!base)
- _ERR("add connection layout failed.");
-#endif
- break;
- case 3: /* CLOSE */
- if (m->ug)
- ug_destroy_me(m->ug);
- break;
- default:
- break;
- }
- }
- } *pHandlerActionBtns;
-
- class CHandlerConfirmPopup : public CListenerMgr, IKeyDownListener, IMouseClickedListener, IUnfocusedListener {
- private:
- SNetworkMainView *m;
- public:
- CHandlerConfirmPopup(SNetworkMainView *ins) : IKeyDownListener(this), IMouseClickedListener(this), IUnfocusedListener(this) { m = ins; }
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
- _DBG();
- switch(id) {
- case 0: /* retry_btn */
- break;
- case 1: /* cancel_btn */
- break;
- case 2: /* layout */
- case 5: /* layout of progress popup */
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- }
- break;
- default:
- break;
- }
- }
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- _DBG();
- switch(id) {
- case 0:
- evas_object_hide(m->dim_ly);
- if (m->status_popup)
- evas_object_del(m->status_popup);
- m->status_popup = NULL;
- //m_ConnectNetwork();
- break;
- case 1:
- case 4: /* cancel_btn of progress popup */
- evas_object_hide(m->dim_ly);
- if (m->status_popup)
- evas_object_del(m->status_popup);
- m->status_popup = NULL;
- elm_object_focus_set(m->connect_btn, EINA_TRUE);
- break;
- case 2:
- break;
- default:
- break;
- }
- }
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item){
- _DBG();
- switch(id) {
- case 0:
- break;
- case 1:
- break;
- case 2:
- case 5: /* layout of progress popup */
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- break;
- default:
- break;
- }
- }
- } *pHandlerConfirmPopup;
-};
-
-
-void CNetworkMainView::sm_CbGenlistItemSelected(void *data, Evas_Object *obj, void *ei)
-{
- _DBG();
- struct SNetworkMainView *priv;
- Elm_Object_Item *gen_item;
- struct wifi_ap_info *ap_info;
- int index;
-
- if (!data || !ei) {
- _ERR("Parameter error!");
- return;
- }
-
- priv = (struct SNetworkMainView *) data;
- gen_item = (Elm_Object_Item *) ei;
-
- if (priv->last_item == gen_item) {
- elm_object_item_signal_emit(gen_item, SIG_STATE_UNSELECTED, ELM);
-
- elm_object_disabled_set(priv->connect_btn, EINA_TRUE);
- elm_object_disabled_set(priv->other_btn, EINA_TRUE);
-
- priv->last_item = NULL;
-
- return;
- }
-
- elm_object_item_signal_emit(gen_item, SIG_STATE_SELECTED, ELM);
- if (priv->last_item)
- elm_object_item_signal_emit(priv->last_item, SIG_STATE_UNSELECTED, ELM);
- priv->last_item = gen_item;
-
- elm_object_disabled_set(priv->connect_btn, EINA_FALSE);
- elm_object_disabled_set(priv->other_btn, EINA_FALSE);
-
- index = elm_genlist_item_index_get(priv->last_item);
- if (index < 0) {
- _ERR("the index of item is invalid.");
- return;
- }
-
- ap_info = (struct wifi_ap_info *) eina_list_nth(priv->ap_list, index);
- if (!ap_info) {
- _ERR("ap info is NULL.");
- return;
- }
-
- if (priv->ap_name) {
- free(priv->ap_name);
- priv->ap_name = NULL;
- }
-
- priv->ap_name = strdup(ap_info->essid);
- if (!priv->ap_name) {
- _ERR("ap name gets failed.");
- return;
- }
-
- if (priv->ap) {
- delete priv->ap;
- priv->ap = NULL;
- }
-
- priv->ap = new CWifiAp(ap_info->ap->Handle());
- if (!priv->ap) {
- _ERR("ap clone failed.");
- return;
- }
-
- if (ap_info->secure_type == WIFI_SECURITY_TYPE_NONE) {
- if (priv->ap_pwd) {
- free(priv->ap_pwd);
- priv->ap_pwd = NULL;
- }
- }
-}
-
-
-Eina_Bool CNetworkMainView::sm_CbSelectConnected(void *data)
-{
- _DBG();
- struct SNetworkMainView *priv;
-
- if (!data) {
- _ERR("Parameter error!");
- return ECORE_CALLBACK_CANCEL;
- }
-
- priv = (struct SNetworkMainView *) data;
-
- elm_object_item_signal_emit(priv->last_item, SIG_STATE_SELECTED, ELM);
- elm_object_disabled_set(priv->connect_btn, EINA_FALSE);
- elm_object_disabled_set(priv->other_btn, EINA_FALSE);
-
- priv->timer = NULL;
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-bool CNetworkMainView::sm_CbWifiFoundAP(CWifiAp *ap, void *data)
-{
- CNetworkMainView *root = (CNetworkMainView*)data;
- bool ret = false;
-
- if (root)
- ret = root->m_OnWifiFoundAP(ap);
-
- return ret;
-}
-
-
-bool CNetworkMainView::m_OnWifiFoundAP(CWifiAp *ap)
-{
- bool ret;
- bool state;
- struct wifi_ap_info *ap_info;
- Elm_Object_Item *item;
-
- ret = m->pWifiMgr->IsActivated(&state);
- if (ret != true || state == 0) {
- _ERR("failt to wifi_is_activated");
- return false;
- }
-
- ap_info = new wifi_ap_info;
- if (!ap_info) {
- _ERR("calloc failed");
- return false;
- }
-
- if (!ap->GetEssid(ap_info->essid, sizeof(ap_info->essid))) {
- _ERR("Fail to get info");
- return false;
- }
-
- if (!ap->GetConnectionState(&ap_info->state)) {
- _ERR("Fail to get info");
- return false;
- }
-
- if (!ap->GetSecurityType(&ap_info->secure_type)) {
- _ERR("Fail to get info");
- return false;
- }
-
- ap_info->ap = new CWifiAp(ap->Handle());
- ap_info->user_data = m;
- m->ap_list = eina_list_append(m->ap_list, ap_info);
-
- m_FillContentPart(m->genlist);
-
- if (ap_info->secure_type == WIFI_SECURITY_TYPE_NONE)
- item = elm_genlist_item_append(m->genlist, m->nolock_ic, ap_info, NULL, ELM_GENLIST_ITEM_NONE, sm_CbGenlistItemSelected, m);
- else
- item = elm_genlist_item_append(m->genlist, m->lock_ic, ap_info, NULL, ELM_GENLIST_ITEM_NONE, sm_CbGenlistItemSelected, m);
- if (!item) {
- _ERR("genlist append item failed.");
- return false;
- }
-
- if (ap_info->state == WIFI_CONNECTION_STATE_CONNECTED) {
- m->last_item = item;
- if (m->ap) {
- delete m->ap;
- m->ap = NULL;
- }
-
- m->ap = new CWifiAp(ap->Handle());
- if (!m->ap) {
- _ERR("Fail to clone AP");
- }
-
- m->timer = ecore_timer_add(TIMER_INTERNAL, sm_CbSelectConnected, m);
- if (!m->timer) {
- _ERR("add timer failed.");
- return false;
- }
- }
-
- return false;
-}
-
-
-void CNetworkMainView::sm_CbWifiScanRequest(wifi_error_e err, void *data)
-{
- CNetworkMainView *root = (CNetworkMainView*)data;
- if (root)
- root->m_OnWifiScanRequest(err);
-}
-
-
-void CNetworkMainView::m_OnWifiScanRequest(wifi_error_e err)
-{
- _DBG();
- bool ret = false;
- ret = m->pWifiMgr->FoundAps(sm_CbWifiFoundAP, this);
- if (ret != true) {
- _ERR("wifi_mgr_foreach_found_aps() failed.");
- }
-}
-
-
-void CNetworkMainView::sm_CbConnectionOnlineAsync(bool state, void *data)
-{
- _DBG();
- CNetworkMainView *instance = NULL;
- instance = (CNetworkMainView *) data;
-
- instance->m_OnConnectionOnlineAync(state);
-}
-
-void CNetworkMainView::m_OnConnectionOnlineAync(bool state)
-{
- _DBG();
- if (state != true) {
- _ERR("connection result");
- m_ShowConfirmPopup();
- } else {
- ug_destroy_me(m->ug);
- }
-}
-
-void CNetworkMainView::sm_CbCheckGatewayAsync(bool state, void *data)
-{
- _DBG();
- CNetworkMainView *instance = NULL;
- instance = (CNetworkMainView *) data;
-
- instance->m_OnCheckGatewayAsync(state);
-}
-
-
-void CNetworkMainView::m_OnCheckGatewayAsync(bool state)
-{
- _DBG();
- bool ret;
-
- if (state != true) {
- _ERR("connection disconnected");
- m_ShowConfirmPopup();
- } else {
- ret = m->pNetConMgr->RegisterIpChangedCallback( sm_CbConnectionOnlineAsync, this);
- if (ret != true) {
- _ERR("connection_mgr_get_is_online_async() failed.");
- return;
- }
- }
-}
-
-
-void CNetworkMainView::sm_CbWifiActivated(wifi_error_e err, void *data)
-{
- _DBG();
- CNetworkMainView *instance = NULL;
- instance = (CNetworkMainView *) data;
-
- instance->m_OnWifiActivated(err);
-}
-
-
-void CNetworkMainView::m_OnWifiActivated(wifi_error_e err)
-{
- _DBG();
- bool ret;
-
- if (err != WIFI_ERROR_NONE) {
- _ERR("Wi-Fi Activation Failed! error == %s", CWifiMgr::ErrorMsg(err));
- return;
- }
-
- ret = m->pWifiMgr->Scan(sm_CbWifiScanRequest, this);
- if (ret != true) {
- _ERR("wifi_mgr_scan_request() failed.");
- m_FillContentPart(m->wireless_discon_ly);
- m_SetActionBtnPos();
- return;
- }
-
- m->wifi_conn = EINA_TRUE;
-
- m_SetActionBtnPos();
-
- m_FillContentPart(m->genlist);
-}
-
-
-char* CNetworkMainView::sm_GetApName(void *data, Evas_Object *obj, const char *part)
-{
- _DBG();
- struct wifi_ap_info *ap_info;
-
- if (!data || !obj || !part) {
- _ERR("Parameter error!");
- return NULL;
- }
-
- ap_info = (struct wifi_ap_info *) data;
-
- if (!strcmp(part, PART_ELM_TEXT))
- return strdup(ap_info->essid);
-
- return NULL;
-}
-
-
-void CNetworkMainView::sm_CbEthernetStateChanged(bool state, void *data)
-{
- _DBG();
- if (!data) {
- _ERR("data is NULL.");
- return;
- }
-
- CNetworkMainView *priv = (CNetworkMainView *) data;
-
- priv->m_OnEthernetStateChanged(state);
-}
-
-
-void CNetworkMainView::m_OnEthernetStateChanged(bool state)
-{
- _DBG();
- if (m->network_type != TYPE_WIRED) {
- _ERR("cur network type is wireless, return.");
- return;
- }
-
- if (state == true) { // ethernet connected
- m_FillContentPart(m->wired_con_box);
- } else {
- m_FillContentPart(m->wired_discon_ly);
-
- m->wired_conn = EINA_FALSE;
- }
-
- m_SetActionBtnPos();
-}
-
-
-bool CNetworkMainView::m_InitConnectionMgr()
-{
- _DBG();
- if(!CNetConMgr::Initialize()) {
- _ERR("Fail to init CNetConMgr");
- }
-
- m->pNetConMgr = CNetConMgr::GetInstance();
- if (!m->pNetConMgr) {
- _ERR("Fail to get instance");
- return false;
- }
-
- if(!m->pNetConMgr->GetProfileName(m->profile_name)) {
- _ERR("Fail to get profilename");
- return false;
- }
-
- if(!m->pNetConMgr->RegisterIpChangedCallback( sm_CbEthernetStateChanged, this)) {
- _ERR("register_ethernet_state_cb() failed.");
- return false;
- }
-
- return true;
-}
-
-
-void CNetworkMainView::m_FinalizeConnectionMgr()
-{
- _DBG();
- CNetConMgr::Finalize();
- m->pNetConMgr = NULL;
-}
-
-
-Evas_Object* CNetworkMainView::m_CreateMainLayout()
-{
- _DBG();
- Evas_Object *base;
-
- base = util_add_layout(m->win, UG_NETWORK_EDJ_FILE, GRP_MAIN);
- if (!base) {
- _ERR("Add pannel view failed.");
- return NULL;
- }
-
- //evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN, _main_ly_key_pressed_cb, priv);
- m->pHandlerBase->Connect(base, 0);
-
- evas_object_show(base);
-
- return base;
-}
-
-
-bool CNetworkMainView::m_CreateUpperLayout()
-{
- _DBG();
- Evas_Object *type_btn;
-
- elm_object_part_text_set(m->base, PART_SELECT_TEXT, _(TXT_NETWORK_DISC));
-
- type_btn = util_add_button(m->base, STYLE_TYPE_BTN, PART_NETWORK_TYPE, _(TXT_TYPE_BTN));
- if (!type_btn)
- return false;
-
- m->pHandlerTypeButton->Connect(m->base);
-
- elm_object_focus_next_object_set(type_btn, type_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(type_btn, type_btn, ELM_FOCUS_LEFT);
-
- m->type_btn = type_btn;
-
- elm_object_focus_set(type_btn, EINA_TRUE);
-
- m_SetNetTypeBtnText();
-
- return true;
-}
-
-
-bool CNetworkMainView::m_CreateActionBtns()
-{
- _DBG();
- Evas_Object *bt[BTN_ACT];
- int i;
-
- for (i = 0; i < BTN_ACT; i++) {
- bt[i] = util_add_button(m->base, STYLE_ACTION_BTN, button_swallow[i], _(action_button[i]));
- if (!bt[i])
- return false;
- }
-
- m->connect_btn = bt[CONNECT];
- m->refresh_btn = bt[REFRESH];
- m->other_btn = bt[OTHER];
- m->close_btn = bt[CLOSE];
-
- evas_object_hide(m->refresh_btn);
-
- //evas_object_smart_callback_add(bt[CONNECT], SIG_CLICKED, _connect_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(bt[REFRESH], SIG_CLICKED, _refresh_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(bt[OTHER], SIG_CLICKED, _other_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(bt[CLOSE], SIG_CLICKED, _close_btn_clicked_cb, priv);
- m->pHandlerActionBtns->Connect(bt[CONNECT], 0);
- m->pHandlerActionBtns->Connect(bt[REFRESH], 1);
- m->pHandlerActionBtns->Connect(bt[OTHER], 2);
- m->pHandlerActionBtns->Connect(bt[CLOSE], 3);
-
- m_SetActionBtnPos();
-
- return true;
-}
-
-
-void CNetworkMainView::m_DestroyActionBtns()
-{
- _DBG();
- if(m->close_btn) evas_object_del(m->close_btn);
- if(m->other_btn) evas_object_del(m->other_btn);
- if(m->refresh_btn) evas_object_del(m->refresh_btn);
- if(m->connect_btn) evas_object_del(m->connect_btn);
-}
-
-
-bool CNetworkMainView::m_CreateDimLayout()
-{
- _DBG();
- Evas_Object *dim_ly;
-
- dim_ly = util_add_layout(m->win, UG_NETWORK_EDJ_FILE, GRP_DIM_LY);
- if (!dim_ly) {
- _ERR("elm_layout_add() failed.\n");
- return false;
- }
-
- m->dim_ly = dim_ly;
-
- evas_object_hide(m->dim_ly);
-
- return true;
-}
-
-
-void CNetworkMainView::m_SetNetTypeBtnText()
-{
- _DBG();
- switch (m->network_type) {
- case TYPE_WIRELESS:
- elm_object_part_text_set(m->base, PART_CUR_TYPE_TEXT, _(TXT_WIRELESS_NETWORK));
- elm_object_part_text_set(m->type_btn, PART_NETWORK_TYPE_SELECTED, _(TXT_WIRELESS));
- break;
- case TYPE_WIRED:
- elm_object_part_text_set(m->base, PART_CUR_TYPE_TEXT, _(TXT_WIRED_NETWORK));
- elm_object_part_text_set(m->type_btn, PART_NETWORK_TYPE_SELECTED, _(TXT_WIRED));
- break;
- default:
- break;
- }
-}
-
-
-bool CNetworkMainView::m_SetWireless()
-{
- _DBG();
- Evas_Object *obj;
- bool activated;
- bool ret = false;
-
- m_CreateWirelessDisconnectPart();
-
- if (!m->wifi_init) {
- obj = m_CreateGenlistView();
- if (!obj) {
- _ERR("fail to create genlist");
- return false;
- }
-
- ret = CWifiMgr::Initialize();
- if(ret != true) {
- _ERR("Fail to initialize WifiMgr");
- return false;
- }
- m->pWifiMgr = CWifiMgr::GetInstance();
- if(!m->pWifiMgr) {
- _ERR("Fail to get instance");
- return false;
- }
-
- m->wifi_init = 1;
- }
-
- m_ClearGenlist();
-
- activated = EINA_FALSE;
- ret = m->pWifiMgr->IsActivated(&activated);
- if (ret != true) {
- _ERR("the wifi is not activated.");
- return false;
- }
-
- if (activated) {
- if (m->ap) {
- delete m->ap;
- m->ap = NULL;
- }
-
- ret = m->pWifiMgr->Scan(sm_CbWifiScanRequest, this);
- if (ret != true) {
- _ERR("wifi_mgr_scan_request() failed.");
- goto _wireless_finish;
- }
-
- m->wifi_conn = EINA_TRUE;
- } else {
- m->wifi_conn = EINA_FALSE;
-
- ret = m->pWifiMgr->Activate(sm_CbWifiActivated, this);
- if (ret != true)
- _ERR("wifi_mgr_activate() failed.");
- }
-
-_wireless_finish:
- m_FillContentPart(m->wireless_discon_ly);
- m_SetActionBtnPos();
-
- return true;
-}
-
-
-bool CNetworkMainView::m_SetWired()
-{
- _DBG();
- bool plugin;
-
- m_CreateWiredConnectPart();
-
- m_CreateWiredDisconnectPart();
-
- if(!m->pNetConMgr->GetEthernetState(&plugin)) {
- _ERR("connection_mgr_get_ethernet_state() failed.");
- plugin = false;
- }
-
- if (plugin) {
- m_FillContentPart(m->wired_con_box);
- } else {
- m->wired_conn = EINA_FALSE;
- m_FillContentPart(m->wired_discon_ly);
- }
-
- m_SetActionBtnPos();
-
- return true;
-}
-
-
-void CNetworkMainView::m_FillContentPart(Evas_Object *obj)
-{
- _DBG();
- Evas_Object *old_obj;
-
- if (!obj) {
- _ERR("The param is invalid.");
- return;
- }
-
- old_obj = elm_object_part_content_get(m->base, PART_NETLIST_PANNEL);
- if (old_obj == obj) {
- _ERR("PART_NETLIST_PANNEL already filled with this object.");
- return;
- }
-
- if (old_obj) {
- evas_object_hide(old_obj);
- }
-
- elm_object_part_content_unset(m->base, PART_NETLIST_PANNEL);
- elm_object_part_content_set(m->base, PART_NETLIST_PANNEL, obj);
-
- evas_object_show(obj);
-}
-
-
-void CNetworkMainView::m_SetActionBtnPos()
-{
- _DBG();
- Evas_Object *btn;
-
- btn = elm_object_part_content_get(m->base, button_swallow[CONNECT]);
- if (!btn) {
- elm_object_part_content_unset(m->base, button_swallow[CONNECT]);
- elm_object_part_content_set(m->base, button_swallow[CONNECT], m->connect_btn);
- evas_object_show(m->connect_btn);
- }
-
- btn = elm_object_part_content_get(m->base, button_swallow[REFRESH]);
- if (btn) {
- elm_object_part_content_unset(m->base, button_swallow[REFRESH]);
- evas_object_hide(btn);
- }
-
- btn = elm_object_part_content_get(m->base, button_swallow[OTHER]);
- if (btn) {
- elm_object_part_content_unset(m->base, button_swallow[OTHER]);
- evas_object_hide(btn);
- }
-
- btn = elm_object_part_content_get(m->base, button_swallow[CLOSE]);
- if (btn) {
- elm_object_part_content_unset(m->base, button_swallow[CLOSE]);
- evas_object_hide(btn);
- }
-
- if (m->network_type == TYPE_WIRELESS) {
- if (!m->wifi_conn) {
- elm_object_part_content_set(m->base, button_swallow[REFRESH], m->other_btn);
- evas_object_show(m->other_btn);
-
- elm_object_part_content_set(m->base, button_swallow[OTHER], m->close_btn);
- evas_object_show(m->close_btn);
- } else {
- elm_object_part_content_set(m->base, button_swallow[REFRESH], m->refresh_btn);
- evas_object_show(m->refresh_btn);
-
- elm_object_part_content_set(m->base, button_swallow[OTHER], m->other_btn);
- evas_object_show(m->other_btn);
-
- elm_object_part_content_set(m->base, button_swallow[CLOSE], m->close_btn);
- evas_object_show(m->close_btn);
- }
-
- if (m->ap) {
- elm_object_disabled_set(m->other_btn, EINA_FALSE);
- elm_object_disabled_set(m->connect_btn, EINA_FALSE);
- } else {
- elm_object_disabled_set(m->connect_btn, EINA_TRUE);
- elm_object_disabled_set(m->other_btn, EINA_TRUE);
- }
- } else if (m->network_type == TYPE_WIRED) {
- if (!m->wired_conn) {
- elm_object_disabled_set(m->connect_btn, EINA_TRUE);
- elm_object_disabled_set(m->other_btn, EINA_TRUE);
- } else {
- elm_object_disabled_set(m->connect_btn, EINA_FALSE);
- elm_object_disabled_set(m->other_btn, EINA_FALSE);
- }
-
- elm_object_part_content_set(m->base, button_swallow[REFRESH], m->other_btn);
- evas_object_show(m->other_btn);
-
- elm_object_part_content_set(m->base, button_swallow[OTHER], m->close_btn);
- evas_object_show(m->close_btn);
- }
-}
-
-
-void CNetworkMainView::m_CreateWirelessDisconnectPart(void)
-{
- _DBG();
- Evas_Object *disconnect_ly;
-
- if (m->wireless_discon_ly)
- return;
-
- disconnect_ly = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_WIRELESS_DISCONNECT_LY);
- if (!disconnect_ly) {
- _ERR("call elm_layout_add() failed.");
- return;
- }
-
- elm_object_part_text_set(disconnect_ly, PART_DISCONNECT_TEXT, TXT_NO_NETWORK);
-
- evas_object_hide(disconnect_ly);
-
- m->wireless_discon_ly = disconnect_ly;
-}
-
-
-bool CNetworkMainView::m_CreateWiredConnectPart(void)
-{
- _DBG();
- Evas_Object *box;
- Evas_Object *btn;
-
- box = util_add_box(m->base, NULL);
- if (!box) {
- _ERR("add wired connect box failed.");
- return false;
- }
-
- elm_box_horizontal_set(box, EINA_FALSE);
-
- btn = util_add_button(box, STYLE_WIRED_LIST_BTN, NULL, _(m->profile_name));
- if (!btn) {
- _ERR("elm_button_add failed.");
- evas_object_del(box);
- return false;
- }
-
- evas_object_size_hint_align_set(btn, 0, 0);
- m->pHandlerWiredConBox->Connect(btn);
- if (m->wired_conn)
- elm_object_signal_emit(btn, SIG_STATE_SELECTED, ELM);
- elm_box_pack_end(box, btn);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
- evas_object_hide(box);
-
- m->wired_con_box = box;
-
- return true;
-}
-
-
-bool CNetworkMainView::m_CreateWiredDisconnectPart(void)
-{
- _DBG();
- Evas_Object *disconnect_ly;
-
- disconnect_ly = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_WIRED_DISCONNECTED_LY);
- if (!disconnect_ly) {
- _ERR("call elm_layout_add() failed.");
- return false;
- }
-
- elm_object_part_text_set(disconnect_ly, PART_DISCONNECT_TEXT, _(TXT_PLUG_CABLE));
-
- evas_object_hide(disconnect_ly);
-
- m->wired_discon_ly = disconnect_ly;
-
- return true;
-}
-
-
-Evas_Object* CNetworkMainView::m_CreateGenlistView(void)
-{
- _DBG();
- Evas_Object *genlist;
-
- Elm_Genlist_Item_Class *ic;
-
- ic = elm_genlist_item_class_new();
- if (!ic) {
- _ERR("elm_genlist_item_class_new() failed.");
- return NULL;
- }
-
- ic->item_style = STYLE_ITEM_LOCK;
- ic->func.text_get = sm_GetApName;
- ic->func.content_get = NULL;
- ic->func.state_get = NULL;
- ic->func.del = NULL;
-
- m->lock_ic = ic;
-
- ic = NULL;
- ic = elm_genlist_item_class_new();
- if (!ic) {
- _ERR("elm_genlist_item_class_new() failed.");
- return NULL;
- }
-
- ic->item_style = STYLE_ITEM_NOLOCK;
- ic->func.text_get = sm_GetApName;
- ic->func.content_get = NULL;
- ic->func.state_get = NULL;
- ic->func.del = NULL;
- if (!ic) {
- _ERR("get item class failed.");
- return NULL;
- }
-
- m->nolock_ic = ic;
-
- genlist = util_add_genlist(m->base);
- if (!genlist) {
- _ERR("util_add_genlist() failed.");
- return NULL;
- }
-
- m->genlist = genlist;
-
- elm_object_focus_next_object_set(genlist, genlist, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(genlist, m->close_btn, ELM_FOCUS_RIGHT);
-
- return genlist;
-}
-
-
-void CNetworkMainView::m_ClearGenlist(void)
-{
- _DBG();
- struct wifi_ap_info *ap;
- void *temp;
-
- elm_genlist_clear(m->genlist);
-
- if (m->ap_list)
- EINA_LIST_FREE(m->ap_list, temp)
- {
- ap = (struct wifi_ap_info *) temp;
- free(ap);
- }
-}
-
-
-void CNetworkMainView::sm_CbWifiConnected(wifi_error_e err, void *data)
-{
- CNetworkMainView *root = (CNetworkMainView*)data;
- if (root)
- root->m_OnWifiConnected(err);
-}
-
-
-void CNetworkMainView::m_OnWifiConnected(wifi_error_e err)
-{
- _DBG();
- if (!m->status_popup)
- return;
-
- if (err != WIFI_ERROR_NONE) {
- _ERR("connect AP failed.");
- m_ShowConfirmPopup();
- return;
- }
-
- ug_destroy_me(m->ug);
-}
-
-
-void CNetworkMainView::m_ConnectNetwork(void)
-{
- _DBG();
- int index;
- bool ret = false;
-
- if (m->network_type == TYPE_WIRELESS) {
- if (m->last_item) {
- index = elm_genlist_item_index_get(m->last_item);
-
- ret = m_WifiConnectAP(index);
- if (ret != true) {
- _ERR("connect ap");
- m_ShowConfirmPopup();
- return;
- }
- }
- } else {
- ret = m_WiredConnectAP();
- if (ret != true) {
- _ERR("connect ap");
- m_ShowConfirmPopup();
- return;
- }
- }
-}
-
-
-bool CNetworkMainView::m_WifiConnectAP(int index)
-{
- _DBG();
- struct wifi_ap_info *ap_info;
- bool ret = false;
-
- if (index < 0) {
- _ERR("Parameter error!");
- return false;
- }
-
- m_ShowProgressPopup();
-
- ap_info = (struct wifi_ap_info *) eina_list_nth(m->ap_list, index);
- if (!ap_info) {
- _ERR("ap info is NULL.");
- return false;
- }
-
- if (m->ap_name) {
- free(m->ap_name);
- m->ap_name = NULL;
- }
-
- m->ap_name = strdup(ap_info->essid);
- if (!m->ap_name) {
- _ERR("ap name gets failed.");
- return false;
- }
-
- if (ap_info->secure_type == WIFI_SECURITY_TYPE_NONE) {
- if (m->ap_pwd) {
- free(m->ap_pwd);
- m->ap_pwd = NULL;
- }
- } else {
- m->cur_view = NETWORK_WIFI_PASSCODE_VIEW;
-#if 0
- //m->pViewMgr->PushView(~~~)
- //viewmgr_push(m->vmgr, wifi_passcode_view_vclass_get(), ap_info);
-#endif
-
- return true;
- }
-
- ret = CWifiAp::ForgetAP();
- if (ret != true) {
- _ERR("forget last ap failed.");
- return false;
- }
-
- if (m->ap_pwd) {
- m->ap->SetPassPhrase(m->ap_pwd);
- if (ret != true) {
- _ERR("wifi_mgr_set_passphrase() failed.");
- return false;
- }
- }
-
- ret = m->ap->Connect(sm_CbWifiConnected, this);
- if (ret != true) {
- _ERR("Fail to connection request.");
- return false;
- }
- return true;
-}
-
-
-bool CNetworkMainView::m_WiredConnectAP()
-{
- _DBG();
- bool ret = false;
-
- m_ShowProgressPopup();
-
- m->pNetConMgr->RefreshEthernetProfile();
- if(!m->pNetConMgr->GetProfileName(m->profile_name)) {
- _ERR("Fail to get profile name");
- return false;
- }
-
- ret = m_ConnectionSetLastNetwork();
- if (ret != true) {
- _ERR("_connection_set_last_network() failed.");
- return ret;
- }
-
- ret = m->pNetConMgr->RegisterIpChangedCallback( sm_CbCheckGatewayAsync, this);
- if (ret != true) {
- _ERR("connection_mgr_get_is_online_async() failed.");
- return false;
- }
-
- return true;
-}
-
-
-bool CNetworkMainView::m_ConnectionSetLastNetwork(void)
-{
- _DBG();
- enum setting_mode ip_mode;
- struct network_info info;
-
- const char *str = NULL;
- str = vconf_get_str(WIRED_IP_LAST_MODE);
- if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
- ip_mode = MODE_AUTO;
- else
- ip_mode = MODE_MAN;
-
- bool result = false;
- if (ip_mode == MODE_AUTO) {
- result = m->pNetConMgr->SetIpConfType(CONNECTION_IP_CONFIG_TYPE_DYNAMIC);
- if (result != true) {
- _ERR("connection_mgr_ip_dynamic_config() failed.");
- return false;
- }
- } else {
- m_GetIpInfo(info.ip_addr, WIRED_IP_KEY);
- m_GetIpInfo(info.submask, WIRED_SUBMASK_KEY);
- m_GetIpInfo(info.gateway, WIRED_GATEWAY_KEY);
- m_GetIpInfo(info.dns, WIRED_DNS_KEY);
- }
-
- return true;
-}
-
-
-void CNetworkMainView::m_GetIpInfo(char *des, const char *key)
-{
- _DBG();
- const char *str;
-
- if (!des || !key)
- return;
-
- str = vconf_get_str(key);
- if (!str)
- return;
-
- if (str == '\0' || !strncmp(str, NULL_STRING, IP_STRING_MAX_SIZE))
- strncpy(des, _(ZERO_IP), IP_STRING_MAX_SIZE);
- else
- strncpy(des, str, IP_STRING_MAX_SIZE);
-}
-
-
-void CNetworkMainView::m_ShowConfirmPopup(void)
-{
- _DBG();
- Evas_Object *layout;
- Evas_Object *retry_btn;
- Evas_Object *cancel_btn;
- Evas_Coord w;
- Evas_Coord h;
- char content[CONTENT_TXT_SIZE];
-
- if (m->status_popup) {
- evas_object_hide(m->dim_ly);
- evas_object_del(m->status_popup);
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_CONFIRM_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- evas_object_show(layout);
-
- memset(content, 0, CONTENT_TXT_SIZE);
- if (m->network_type == TYPE_WIRED) {
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRED_LY));
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s", _(TXT_FAILED_CONNECT), _(m->profile_name));
- } else {
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s", _(TXT_FAILED_CONNECT), m->ap_name);
- }
-
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
-
- retry_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_RETRY_BTN, _(TXT_RETRY));
- if (!retry_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- cancel_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_CANCEL_BTN, _(TXT_CANCEL));
- if (!cancel_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_focus_next_object_set(retry_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(cancel_btn, retry_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_DOWN);
-
- //evas_object_smart_callback_add(retry_btn, SIG_CLICKED, _retry_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(cancel_btn, SIG_CLICKED, _cancel_btn_clicked_cb, priv);
- m->pHandlerConfirmPopup->Connect(retry_btn, 0);
- m->pHandlerConfirmPopup->Connect(cancel_btn, 1);
-
- elm_object_focus_set(retry_btn, EINA_TRUE);
-
- elm_object_focus_allow_set(layout, EINA_TRUE);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_pressed_cb, priv);
- m->pHandlerConfirmPopup->Connect(layout, 2);
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - POPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - POPUP_HEIGHT) * ELM_SCALE);
-
- m->status_popup = layout;
-}
-
-void CNetworkMainView::m_ShowProgressPopup(void)
-{
- _DBG();
- Evas_Object *layout;
- Evas_Object *cancel_btn;
- Evas_Coord w;
- Evas_Coord h;
- char content[CONTENT_TXT_SIZE];
-
- if (m->status_popup) {
- evas_object_hide(m->dim_ly);
- evas_object_del(m->status_popup);
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_PROCESSING_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- evas_object_show(layout);
-
- m->status_popup = layout;
-
- memset(content, 0, CONTENT_TXT_SIZE);
- if (m->network_type == TYPE_WIRED) {
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRED_LY));
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s", _(TXT_CONNECTTING), _(m->profile_name));
- } else {
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s", _(TXT_CONNECTTING), m->ap_name);
- }
-
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
-
- cancel_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_CANCEL_BTN, _(TXT_CANCEL));
- if (!cancel_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- evas_object_show(cancel_btn);
-
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_DOWN);
-
- //evas_object_smart_callback_add(cancel_btn, SIG_CLICKED, _cancel_btn_clicked_cb, priv);
- m->pHandlerConfirmPopup->Connect(cancel_btn, 4);
- elm_object_focus_set(cancel_btn, EINA_TRUE);
- elm_object_focus_allow_set(layout, EINA_TRUE);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_pressed_cb, priv);
- m->pHandlerConfirmPopup->Connect(layout, 5);
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - POPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - POPUP_HEIGHT) * ELM_SCALE);
-}
-
-
-void CNetworkMainView::t_OnShow()
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CNetworkMainView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- switch (m->cur_view) {
- case NETWORK_IP_SETTING_VIEW:
- elm_object_focus_set(m->other_btn, EINA_TRUE);
- break;
- case NETWORK_WIFI_PASSCODE_VIEW:
- elm_object_focus_set(m->connect_btn, EINA_TRUE);
- break;
- default:
- break;
- }
-}
-
-
-void CNetworkMainView::t_OnHide()
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CNetworkMainView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- bool ret = false;
-
- _CREATE_BEGIN{
- _CHECK(m = new SNetworkMainView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m_InitConnectionMgr())
- _CHECK(m->base = m_CreateMainLayout())
- _COMMAND{
- m->ap_list = NULL;
- const char *str = NULL;
- str = vconf_get_str(SELECTED_NETWORK_TYPE_KEY);
- if (str && !strcmp(str, TXT_WIRED))
- m->network_type = TYPE_WIRED;
- else
- m->network_type = TYPE_WIRELESS;
- }
- _CHECK(m_CreateUpperLayout())
- _COMMAND{
- m->wireless_discon_ly = NULL;
-
- if (m->network_type == TYPE_WIRELESS)
- ret = m_SetWireless();
- else if (m->network_type == TYPE_WIRED)
- ret = m_SetWired();
- else
- ret = false;
- }
- _CHECK(ret)
- _CHECK(m_CreateActionBtns())
- _CHECK(m_CreateDimLayout())
-
- _WHEN_SUCCESS{
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{ if(m->dim_ly) evas_object_del(m->dim_ly); }
- _CHECK_FAIL{ m_DestroyActionBtns(); }
- _CHECK_FAIL{ /* ret */
- if (m->lock_ic)
- elm_genlist_item_class_free(m->lock_ic);
- if (m->nolock_ic)
- elm_genlist_item_class_free(m->nolock_ic);
- if (m->ap_list) {
- EINA_LIST_FREE(m->ap_list, data)
- free(data);
- }
- if (m->timer)
- ecore_timer_del(m->timer);
-
- delete m->ap;
-
- free(m->ap_name);
- free(m->ap_pwd);
-
- if(m->pWifiMgr) {
- CWifiMgr::Finalize();
- m->pWifiMgr = NULL;
- }
- }
- _CHECK_FAIL{ /* m_CreateUpperLayout() */ }
- _CHECK_FAIL{ evas_object_del(m->base); }
- _CHECK_FAIL{ m_FinalizeConnectionMgr(); }
- _CHECK_FAIL{ /* m->win = CViewMgr::GetInstance()->Window() */ }
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- _DBG("Done");
- return true;
-}
-
-
-void CNetworkMainView::Destroy()
-{
- ASSERT(m);
- _DBG();
-
- CBaseView::Destroy();
- delete m;
- m = NULL;
-}
-
-Evas_Object* CNetworkMainView::Base()
-{
- ASSERT(m);
- _DBG();
-
- return m->base;
-}
-
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <cstring>
-#include "defs.h"
-#include <AppCommon.h>
-#include "i18n.h"
-#include "util.h"
-#include "common.h"
-
-#include "WifiMgr.h"
-#include "WifiPasscodeView.h"
-
-#define KEY_PRIV "priv"
-#define KEY_NETWORK_ENTER "Select"
-
-#define AP_NAME_LENTH 256
-
-#define TXT_PASSCODE "Network passcode"
-#define TXT_ENTER_PASSCODE "Enter the network password"
-
-#define STYLE_ENTRY_FOCUS "focus"
-#define STYLE_ENTRY_TXT "DEFAULT='font_size=30 linesize=40'"
-
-struct SWifiPasscodeView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *entry;
- Evas_Object *dim_ly;
- Evas_Object *ctxpopup;
- char ap_name[AP_NAME_LENTH + 1];
- char *ap_pwd;
-
- CWifiMgr *pWifiMgr;
- CViewMgr *pViewMgr;
-};
-
-
-void CWifiPasscodeView::sm_CbWifiConnected(wifi_error_e err, void *data)
-{
- _DBG();
- CWifiPasscodeView *root = (CWifiPasscodeView *)data;
-
- if (root)
- root->m_OnWifiConnected(err);
-}
-
-
-void CWifiPasscodeView::m_OnWifiConnected(wifi_error_e err)
-{
- if (!m->ctxpopup)
- return;
-
- if (err!= WIFI_ERROR_NONE) {
- _ERR("connect AP failed, ret: %s.", CWifiMgr::ErrorMsg(err));
- m_ShowConfirmPopup();
- return;
- }
-
- ug_destroy_me(m->ug);
-}
-
-
-bool CWifiPasscodeView::sm_CbWifiFoundAP(CWifiAp *ap, void *data)
-{
- _DBG();
- CWifiPasscodeView *root = (CWifiPasscodeView *)data;
-
- if (root)
- root->m_OnWifiFoundAP(ap);
-
- return true;
-}
-
-
-void CWifiPasscodeView::m_OnWifiFoundAP(CWifiAp *ap)
-{
- bool ret;
- struct wifi_ap_info ap_info;
-
- ret = ap->GetEssid(ap_info.essid, sizeof(ap_info.essid));
- if(ret != true) {
- _ERR("Fail to get info");
- return ;
- }
- ret = ap->GetConnectionState(&ap_info.state);
- if(ret != true) {
- _ERR("Fail to get info");
- return ;
- }
- ret = ap->GetSecurityType(&ap_info.secure_type);
- if(ret != true) {
- _ERR("Fail to get info");
- return ;
- }
-
- if (!strncmp(m->ap_name, ap_info.essid, AP_NAME_LENTH)) {
- ret = ap->SetPassPhrase(m->ap_pwd);
- if (ret != true) {
- _ERR("wifi_mgr_set_passphrase() failed.");
- m_ShowConfirmPopup();
- return ;
- }
-
- ret = ap->Connect(sm_CbWifiConnected, this);
- if (ret != true) {
- _ERR("Fail to connection request.");
- m_ShowConfirmPopup();
- return ;
- }
- }
- return ;
-}
-
-
-void CWifiPasscodeView::sm_CbWifiScanRequest(wifi_error_e err, void *data)
-{
- CWifiPasscodeView *root = (CWifiPasscodeView *)data;
-
- if (root)
- root->m_OnWifiScanRequest(err, data);
-}
-
-
-void CWifiPasscodeView::m_OnWifiScanRequest(wifi_error_e err, void *data)
-{
- if(err != WIFI_ERROR_NONE)
- _ERR("parameter error = %s", CWifiMgr::ErrorMsg(err));
-
- if(!m->pWifiMgr->FoundAps(sm_CbWifiFoundAP, data)) {
- _ERR("wifi_mgr_foreach_found_aps() failed.");
- m_ShowConfirmPopup();
- return;
- }
-}
-
-
-void CWifiPasscodeView::m_AddEntry(void)
-{
- Evas_Object *entry;
-
- entry = util_add_entry(m->base, STYLE_ENTRY_FOCUS, PART_WIFI_PASSCODE_ENTRY);
- if (!entry) {
- _ERR("util_add_entry failed.");
- evas_object_del(m->base);
- return;
- }
-
- elm_entry_password_set(entry, EINA_TRUE);
- elm_entry_text_style_user_push(entry, STYLE_ENTRY_TXT);
-
- //evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, _entry_key_press_cb, priv);
- Connect(entry, 1);
-
- elm_entry_input_panel_enabled_set(entry, EINA_TRUE);
-
- elm_object_focus_next_object_set(entry, entry, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(entry, entry, ELM_FOCUS_LEFT);
-
- elm_object_focus_set(entry, EINA_TRUE);
-
- m->entry = entry;
-}
-
-
-bool CWifiPasscodeView::m_CreateDimLayout(void)
-{
- Evas_Object *dim_ly;
-
- dim_ly = util_add_layout(m->win, UG_NETWORK_EDJ_FILE, GRP_DIM_LY);
- if (!dim_ly) {
- _ERR("elm_layout_add() failed.");
- return false;
- }
-
- m->dim_ly = dim_ly;
- evas_object_hide(m->dim_ly);
-
- return true;
-}
-
-
-void CWifiPasscodeView::m_ShowInvalidPwdPopup(void)
-{
- Evas_Object *layout;
- Evas_Object *ok_btn;
- Evas_Coord w;
- Evas_Coord h;
- char content[CONTENT_TXT_SIZE];
-
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_CONFIRM_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
-
- memset(content, 0, CONTENT_TXT_SIZE);
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s", _(TXT_INVALID_PWD));
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
-
- ok_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_OK_BTN, _(TXT_OK));
- if (!ok_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_DOWN);
- //evas_object_smart_callback_add(ok_btn, SIG_CLICKED, _popup_ok_btn_clicked_cb, priv);
- Connect(ok_btn, 2);
-
- elm_object_focus_set(ok_btn, EINA_TRUE);
-
- elm_object_focus_allow_set(layout, EINA_TRUE);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_pressed_cb, priv);
- Connect(layout, 3);
-
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - POPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - POPUP_HEIGHT) * ELM_SCALE);
-
- m->ctxpopup = layout;
-}
-
-
-bool CWifiPasscodeView::m_WifiConnectAP(void)
-{
- bool ret;
-
- m_ShowProgressPopup();
-
- ret = CWifiAp::ForgetAP();
- if (ret != true) {
- _ERR("forget last ap failed.");
- return false;
- }
-
- ret = m->pWifiMgr->Scan(sm_CbWifiScanRequest, this);
- if (ret != true) {
- _ERR("wifi_mgr_scan_request() failed.");
- return false;
- }
-
- return true;
-}
-
-
-void CWifiPasscodeView::m_ShowProgressPopup(void)
-{
- Evas_Object *layout;
- Evas_Object *cancel_btn;
- Evas_Coord w;
- Evas_Coord h;
- char content[CONTENT_TXT_SIZE];
-
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_PROCESSING_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- memset(content, 0, CONTENT_TXT_SIZE);
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s", _(TXT_CONNECTTING), m->ap_name);
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
-
- cancel_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_CANCEL_BTN, _(TXT_CANCEL));
- if (!cancel_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_DOWN);
-
- //evas_object_smart_callback_add(cancel_btn, SIG_CLICKED, _cancel_btn_clicked_cb, priv);
- Connect(cancel_btn, 4);
-
- elm_object_focus_set(cancel_btn, EINA_TRUE);
-
- elm_object_focus_allow_set(layout, EINA_TRUE);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_pressed_cb, priv);
- Connect(layout, 5);
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - POPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - POPUP_HEIGHT) * ELM_SCALE);
-
- m->ctxpopup = layout;
-}
-
-
-void CWifiPasscodeView::m_ShowConfirmPopup(void)
-{
- Evas_Object *layout;
- Evas_Object *retry_btn;
- Evas_Object *cancel_btn;
- Evas_Coord w;
- Evas_Coord h;
- char content[CONTENT_TXT_SIZE];
-
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_NETWORK_EDJ_FILE, GRP_CONFIRM_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- memset(content, 0, CONTENT_TXT_SIZE);
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
- snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s", _(TXT_FAILED_CONNECT), m->ap_name);
-
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
-
- retry_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_RETRY_BTN, _(TXT_RETRY));
- if (!retry_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- cancel_btn = util_add_button(layout, STYLE_SETTING_BTN, PART_CANCEL_BTN, _(TXT_CANCEL));
- if (!cancel_btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_focus_next_object_set(retry_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(cancel_btn, retry_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(cancel_btn, cancel_btn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(retry_btn, retry_btn, ELM_FOCUS_DOWN);
-
- //evas_object_smart_callback_add(retry_btn, SIG_CLICKED, _retry_btn_clicked_cb, priv);
- Connect(retry_btn, 6);
- //evas_object_smart_callback_add(cancel_btn, SIG_CLICKED, _cancel_btn_clicked_cb, priv);
- Connect(cancel_btn, 7);
-
- elm_object_focus_set(retry_btn, EINA_TRUE);
-
- elm_object_focus_allow_set(layout, EINA_TRUE);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_pressed_cb, priv);
- Connect(layout, 8);
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - POPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - POPUP_HEIGHT) * ELM_SCALE);
-
- m->ctxpopup = layout;
-}
-
-
-bool CWifiPasscodeView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
- struct wifi_ap_info *ap_info = NULL;
-
- if(data)
- ap_info = (struct wifi_ap_info *) data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SWifiPasscodeView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
-// _CHECK(m->ug = (ui_gadget_h) data)
- _CHECK(m->base = util_add_layout(m->win, UG_NETWORK_EDJ_FILE, GRP_WIFI_PASSCODE_BASE))
- _COMMAND {
- CWifiMgr::Initialize();
- strncpy(m->ap_name, ap_info->essid, AP_NAME_LENTH);
- }
- _CHECK(m->pWifiMgr = CWifiMgr::GetInstance())
-
- _WHEN_SUCCESS{
- //evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN, _base_key_press_cb, priv);
- Connect(m->base, 0);
-
- elm_object_part_text_set(m->base, PART_WIFI_PASSCODE_TITLE, _(TXT_PASSCODE));
- elm_object_part_text_set(m->base, PART_WIFI_PASSCODE_TEXT, _(TXT_ENTER_PASSCODE));
- elm_object_part_text_set(m->base, PART_WIFI_PASSCODE_AP_NAME, m->ap_name);
-
- m_AddEntry();
- m_CreateDimLayout();
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{ /*m->pWifiMgr = CWifiMgr::GetInstance() */ }
- _CHECK_FAIL{ evas_object_del(m->base); }
-// _CHECK_FAIL{ /* m->ug = (ui_gadget_h) data */ }
- _CHECK_FAIL{ /* m->win = CViewMgr::GetInstance()->Window() */ }
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CWifiPasscodeView::Destroy(void)
-{
- ASSERT(m);
- _DBG();
-
- if (m->dim_ly)
- evas_object_del(m->dim_ly);
-
- if(m->ap_pwd)
- delete (m->ap_pwd);
-
- CBaseView::Destroy();
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CWifiPasscodeView::Base(void)
-{
- ASSERT(m);
- _DBG();
-
- return m->base;
-}
-
-
-void CWifiPasscodeView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- /* ID list */
- /* 0 m->base */
- /* 1 entry */
- /* 2 invalidpwdpopup ok_btn */
- /* 3 invalidpwdpopup layout */
- /* 4 showprogresspopup cancel_btn */
- /* 5 showprogresspopup layout */
- /* 6 showconfirmpopup retry_btn */
- /* 7 showconfirmpopup cancel_btn */
- /* 8 showconfirmpopup layout */
-
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 0:
-#if 0
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE))
- viewmgr_pop(m->vmgr);
-#endif
- break;
- case 1:
- if (!strcmp(ev->keyname, KEY_NETWORK_ENTER)) {
- if (m->ap_pwd) {
- free(m->ap_pwd);
- m->ap_pwd = NULL;
- }
-
- m->ap_pwd = strdup(elm_entry_entry_get(obj));
- if (!m->ap_pwd) {
- _ERR("the passcode in entry is NULL.");
- m_ShowInvalidPwdPopup();
- return;
- }
-
- if(m_WifiConnectAP()) {
- _ERR("connect ap");
- m_ShowConfirmPopup();
- return;
- }
- }
- break;
- case 3:
- case 5:
- case 8:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- elm_object_focus_set(m->entry, EINA_TRUE);
- }
- break;
- default:
- break;
- }
-}
-
-
-void CWifiPasscodeView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 2:
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
- elm_object_focus_set(m->entry, EINA_TRUE);
- break;
- case 4:
- case 7:
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- evas_object_hide(m->dim_ly);
-
- elm_object_focus_set(m->entry, EINA_TRUE);
- break;
- case 6:
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- evas_object_hide(m->dim_ly);
-
- if(!m_WifiConnectAP()) {
- _ERR("connect ap");
- m_ShowConfirmPopup();
- return;
- }
- break;
- default:
- break;
- }
-}
-
-void CWifiPasscodeView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- switch(id) {
- case 3:
- case 5:
- case 8:
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- break;
- default:
- break;
- }
-
-
-}
--- /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 <Elementary.h>
+#include <aul.h>
+#include "defs.h"
+#include "dbg.h"
+#include "connection_mgr.h"
+
+/**
+ * Converts the error type to string information.
+ *
+ * @param[in] err_type Error type
+ * @return error string information;
+ */
+static const char *_convert_error_to_string(connection_error_e err_type)
+{
+ _DBG("Not Yet");
+#if 0
+ switch (err_type) {
+ case CONNECTION_ERROR_NONE:
+ return "NONE";
+ case CONNECTION_ERROR_INVALID_PARAMETER:
+ return "INVALID_PARAMETER";
+ case CONNECTION_ERROR_OUT_OF_MEMORY:
+ return "OUT_OF_MEMORY";
+ case CONNECTION_ERROR_INVALID_OPERATION:
+ return "INVALID_OPERATION";
+ case CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+ return "ADDRESS_FAMILY_NOT_SUPPORTED";
+ case CONNECTION_ERROR_OPERATION_FAILED:
+ return "OPERATION_FAILED";
+ case CONNECTION_ERROR_ITERATOR_END:
+ return "ITERATOR_END";
+ case CONNECTION_ERROR_NO_CONNECTION:
+ return "NO_CONNECTION";
+ case CONNECTION_ERROR_NOW_IN_PROGRESS:
+ return "NOW_IN_PROGRESS";
+ case CONNECTION_ERROR_ALREADY_EXISTS:
+ return "ALREADY_EXISTS";
+ case CONNECTION_ERROR_OPERATION_ABORTED:
+ return "OPERATION_ABORTED";
+ case CONNECTION_ERROR_DHCP_FAILED:
+ return "DHCP_FAILED";
+ case CONNECTION_ERROR_INVALID_KEY:
+ return "INVALID_KEY";
+ case CONNECTION_ERROR_NO_REPLY:
+ return "NO_REPLY";
+ case CONNECTION_ERROR_NO_KEYWORD:
+ return "NO_KEYWORD";
+ case CONNECTION_ERROR_TCP_RST:
+ return "RST_IN_TCP_RESPONSE";
+ case CONNECTION_ERROR_TCP_SYN_TIMEOUT:
+ return "TCP_SYN_TIMEOUT";
+ case CONNECTION_ERROR_OFFLINE:
+ return "CONNECTION_OFFLINE";
+ case CONNECTION_ERROR_NETWORK_MONITOR_FAILURE:
+ return "monitor failer";
+ case CONNECTION_ERROR_INVALID_GATEWAY:
+ return "invalid gateway";
+ case CONNECTION_ERROR_INVALID_MACADDRESS:
+ return "invalid mac addr";
+ default:
+ break;
+ }
+#endif
+
+ return "Unknown";
+}
+
+/**
+ * Creates a handle for managing data connections.
+ *
+ * The handle must be released with connection_destroy().
+ *
+ * @return connetcion if the operation is successful; NULL if failed;
+ */
+connection_h connection_mgr_create(void)
+{
+ int ret;
+ connection_h connection;
+
+ connection = NULL;
+ ret = connection_create(&connection);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_create failed");
+ connection = NULL;
+ }
+
+ return connection;
+}
+
+/**
+ * Destroys the connection handle.
+ *
+ * @param[in] connection The handle of the connection
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_destroy(connection_h connection)
+{
+ int ret;
+
+ if (!connection) {
+ _ERR("connection is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = connection_destroy(connection);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_destroy() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the ethernet profile information.
+ *
+ * Iterates all the profile in the connection, and gets the ethernet one.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[out] info The structure to store profile information
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_get_profile_info(
+ connection_h connection, struct connection_info *info)
+{
+ connection_profile_iterator_h iter;
+ connection_profile_h profile;
+ connection_profile_type_e type;
+ char *name;
+ int ret;
+
+ if (!info || !connection) {
+ _ERR("param is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = connection_get_profile_iterator(connection,
+ CONNECTION_ITERATOR_TYPE_REGISTERED, &iter);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile iterator [%d]\n", ret);
+ return RET_FAILED;
+ }
+
+ while (connection_profile_iterator_has_next(iter)) {
+ profile = NULL;
+ if (connection_profile_iterator_next(iter,
+ &profile) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile handle\n");
+ return RET_FAILED;
+ }
+
+ if (!profile) {
+ _ERR("get profile failed.");
+ return RET_FAILED;
+ }
+
+ if (connection_profile_get_type(profile,
+ &type) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile type\n");
+ return RET_FAILED;
+ }
+
+ name = NULL;
+ if (connection_profile_get_name(profile,
+ &name) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile name\n");
+ return RET_FAILED;
+ }
+
+ if (!name) {
+ _ERR("get name failed.");
+ return RET_FAILED;
+ }
+
+ if (type == CONNECTION_PROFILE_TYPE_ETHERNET) {
+ strncpy(info->name, name, MAX_NAME_SIZE - 1);
+ info->profile = profile;
+ }
+
+ free(name);
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Registers the callback called when the state of profile is changed.
+ *
+ * If the state of profile is changed, the registered callback will be called.
+ *
+ * @param[in] profile The handle of the profile
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+#if 0
+int connection_mgr_set_profile_state_changed_cb(
+ connection_profile_h profile,
+ connection_profile_state_changed_cb cb, void *data)
+{
+ int ret;
+
+ if (!profile || !cb || !data) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_state_changed_cb(profile,
+ cb, data);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_profile_set_state_changed_cb() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+#endif
+
+/**
+ * Gets the state of the connection.
+ *
+ * @param[in] connection The handle of the connection
+ * @return EINA_TRUE if the connection is OK; EINA_FALSE otherwise;
+ */
+Eina_Bool connection_mgr_is_connected(connection_h connection)
+{
+ int ret;
+ connection_ethernet_state_e state;
+
+ if (!connection) {
+ _ERR("the connection is NULL.");
+ return EINA_FALSE;
+ }
+
+ ret = connection_get_ethernet_state(connection, &state);
+ if (ret == CONNECTION_ERROR_NONE &&
+ state == CONNECTION_ETHERNET_STATE_CONNECTED)
+ return EINA_TRUE;
+
+ return EINA_FALSE;
+}
+
+/**
+ * Sets the profile information.
+ *
+ * Sets the network information to profile.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[in] profile The handle of the profile
+ * @param[in] info Network information
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_set_profile(connection_h connection,
+ connection_profile_h profile,
+ struct network_info *info)
+{
+ int ret;
+
+ if (!connection || !profile || !info) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_update_profile(connection, profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_update_profile failed.\n");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_ip_config_type(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ CONNECTION_IP_CONFIG_TYPE_STATIC);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_profile_set_ip_config_type() failed.");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_ip_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->ip_addr);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_profile_set_ip_address() failed.");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_subnet_mask(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->submask);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("fail to set_subnet_mask %d\n" , ret);
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_gateway_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->gateway);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("fail to set_gateway_address %d\n" , ret);
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_dns_address(profile, 1,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->dns);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("fail to set_dns_address %d\n" , ret);
+ return RET_FAILED;
+ }
+
+ ret = connection_update_profile(connection, profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_update_profile failed.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets whether the profile can access to the internet asynchronously.
+ *
+ * The result will return in the registered callback.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+#if 0
+int connection_mgr_get_is_online_async(
+ connection_h connection,
+ connection_is_online_async_cb cb, void *data)
+{
+ int ret;
+
+ if (!connection || !cb || !data) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_get_is_online_async(connection, cb, data);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_get_is_online_async() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+#endif
+
+/**
+ * Validates gateway address set for Ethernet Asynchronusly.
+ *
+ * The result will return in the registered callback.
+ *
+ * @param[in] profile The handle of the profile
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+#if 0
+int connection_mgr_check_gateway_async(
+ connection_profile_h profile,
+ connection_profile_check_gateway_async_cb cb, void *data)
+{
+ int ret;
+
+ if (!profile || !cb || !data) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_check_gateway_async(profile, cb, data);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_get_is_online_async() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+#endif
+
+/**
+ * Sets the IP config type into dynamic.
+ *
+ * Called when the profile need getting IP dynamically.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[in] profile The handle of the profile
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_ip_dynamic_config(
+ connection_h connection,
+ connection_profile_h profile)
+{
+ int ret;
+
+ if (!connection || !profile) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ ret = connection_update_profile(connection, profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_update_profile failed, ret: %s.\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_ip_config_type(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ CONNECTION_IP_CONFIG_TYPE_DYNAMIC);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to set ip method type[%s]\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ ret = connection_update_profile(connection, profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_update_profile failed, ret: %s.\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Registers callback for ethernet cable.
+ *
+ * Including cable plugged [in/out] event.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+#if 0
+int connection_mgr_register_ethernet_state_cb(
+ connection_h connection,
+ connection_ethernet_state_chaged_cb cb, void *data)
+{
+ int ret;
+
+ if (!connection || !cb || !data) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_set_ethernet_state_chaged_cb(connection, cb, data);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_set_ethernet_state_chaged_cb() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+#endif
+
+/**
+ * Gets the state of ethernet.
+ *
+ * The returned state is for the ethernet connection state.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[out] plugin The cable plugged state
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_get_ethernet_state(
+ connection_h connection, Eina_Bool *plugin)
+{
+ int ret;
+ connection_ethernet_state_e state;
+
+ if (!connection || !plugin) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_get_ethernet_state(connection, &state);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_get_ethernet_state() failed.");
+ return RET_FAILED;
+ }
+
+ if (state == CONNECTION_ETHERNET_STATE_DEACTIVATED)
+ *plugin = EINA_FALSE;
+ else
+ *plugin = EINA_TRUE;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the network information.
+ *
+ * Including IP, submask and gateway.
+ *
+ * @param[in] profile The handle of the profile
+ * @param[in] info The structure of network
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_set_ip_config(
+ connection_profile_h profile,
+ struct network_info *info)
+{
+ int ret;
+
+ if (!profile || !info) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_ip_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->ip_addr);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("set ip address fail, ret: %s\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_subnet_mask(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->submask);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("set subnet mask fail. %s\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_gateway_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->gateway);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("set gateway address fail %s\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the DNS.
+ *
+ * @param[in] profile The handle of the profile
+ * @param[in] info The structure of network
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_set_dns_config(
+ connection_profile_h profile,
+ struct network_info *info)
+{
+ int ret;
+
+ if (!profile || !info) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_dns_address(profile, 1,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ info->dns);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("set dns address fail %d\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the network information.
+ *
+ * @param[in] profile The handle of the profile
+ * @param[out] info The structure of network
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_get_ip_info(
+ connection_profile_h profile,
+ struct network_info *info)
+{
+ char *str_value;
+
+ if (!profile || !info) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ if (connection_profile_get_ip_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ &str_value) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get IP address!\n");
+ strncpy(info->ip_addr, ZERO_IP, IP_STRING_MAX_SIZE);
+ } else {
+ strncpy(info->ip_addr, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ }
+
+ if (connection_profile_get_subnet_mask(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ &str_value) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get subnet mask!\n");
+ strncpy(info->submask, ZERO_IP, IP_STRING_MAX_SIZE);
+ } else {
+ strncpy(info->submask, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ }
+
+ if (connection_profile_get_gateway_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ &str_value) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get gateway!\n");
+ strncpy(info->gateway, ZERO_IP, IP_STRING_MAX_SIZE);
+ } else {
+ strncpy(info->gateway, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ }
+
+ if (connection_profile_get_dns_address(profile, 1,
+ CONNECTION_ADDRESS_FAMILY_IPV4,
+ &str_value) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get DNS1!\n");
+ strncpy(info->dns, ZERO_IP, IP_STRING_MAX_SIZE);
+ } else {
+ strncpy(info->dns, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ }
+
+ return RET_SUCCESS;
+}
--- /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 <Elementary.h>
+#include <aul.h>
+#include <ui-gadget-module.h>
+#include <net_connection.h>
+
+#include <KeyDefine.h>
+
+#include "defs.h"
+#include "dbg.h"
+#include "ip_setting_view.h"
+#include "vconf_mgr.h"
+#include "i18n.h"
+#include "util.h"
+#include "common.h"
+#include "util.h"
+#include "wifi_mgr.h"
+
+#define KEY_PRIV "priv"
+
+#define MODE_BTN_NUM 2
+#define MAX_IP_NUM 255
+#define IP_SET_MAX_NUM 4
+#define STRING_MAX_SIZE 50
+#define SETTING_MODE_OFFSET_X 448
+#define SETTING_MODE_OFFSET_Y 0
+#define SETTING_VALUE_OFFSET_X 162
+#define SETTING_VALUE_OFFSET_Y 20
+#define CENTER_ALIGN 0.5
+#define BOX_PAD_X 0
+#define BOX_PAD_Y 2
+#define RATIO 10
+
+#define IP_VALUE1 "value1"
+#define IP_VALUE2 "value2"
+#define IP_VALUE3 "value3"
+#define IP_VALUE4 "value4"
+
+#define TXT_MAKE_OTHER_NETWORK _("You can make other network"\
+ "<br>Enter the IP address to use.")
+
+enum connection_setting_enum {
+ SETTING_INVALID,
+ SETTING_IP,
+ SETTING_IP_ADDRESS,
+ SETTING_SUBNET_MASK,
+ SETTING_GATEWAY,
+ SETTING_DNS,
+ SETTING_DNS_SERVER
+};
+
+struct _priv {
+ Evas_Object *win;
+ ui_gadget_h ug;
+ struct viewmgr *vmgr;
+
+ Evas_Object *base;
+ Evas_Object *dim_ly;
+ Evas_Object *ip_mode_btn;
+ Evas_Object *ip_addr_btn;
+ Evas_Object *subnet_mask_btn;
+ Evas_Object *gateway_btn;
+ Evas_Object *dns_mode_btn;
+ Evas_Object *dns_server_btn;
+ Evas_Object *ip_mode_ly;
+ Evas_Object *dns_mode_ly;
+ Evas_Object *config_popup;
+ Evas_Object *cur_ip_btn[IP_SET_MAX_NUM];
+ Evas_Object *confirm_popup;
+ Evas_Object *ok_btn;
+ Evas_Object *cancel_btn;
+
+ struct network_info info;
+ enum setting_mode ip_mode;
+ enum setting_mode dns_mode;
+
+ enum connection_setting_enum cur_type;
+ enum network_type_enum network_type;
+
+ connection_h connection;
+ connection_profile_h profile;
+
+ wifi_ap_h ap;
+
+ char name[MAX_NAME_SIZE];
+};
+
+static void _show_confirm_popup(struct _priv *priv);
+static void _popup_dismissed_cb(void *data, Evas_Object *obj, void *ev);
+
+/**
+ * Initializes the private data.
+ *
+ * Called when the view is loaded.
+ *
+ * @return the handler of the private data;
+ */
+static struct _priv *_init_priv()
+{
+ struct _priv *priv;
+
+ priv = calloc(1, sizeof(*priv));
+
+ return priv;
+}
+
+/**
+ * Deinitializes the private data.
+ *
+ * Called when the view is deleted.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _fini_priv(struct _priv *priv)
+{
+ if (!priv)
+ return;
+
+ if (priv->dim_ly)
+ evas_object_del(priv->dim_ly);
+
+ free(priv);
+}
+
+/**
+ * Sets the cycle focus in the direction of up and down.
+ *
+ * Sets the cycle focus for an array of objects.
+ *
+ * @param[in] obj The handler of objects
+ * @param[in] count The count of objects
+ */
+static void _set_up_down_cycle_focus(Evas_Object **obj,
+ int count)
+{
+ int i;
+
+ if (!*obj || !obj)
+ return;
+
+ for (i = 0; i < count; i++) {
+ if (i == count - 1)
+ elm_object_focus_next_object_set(obj[i], obj[0],
+ ELM_FOCUS_DOWN);
+ else
+ elm_object_focus_next_object_set(obj[i], obj[i + 1],
+ ELM_FOCUS_DOWN);
+
+ if (i == 0)
+ elm_object_focus_next_object_set(obj[i], obj[count - 1],
+ ELM_FOCUS_UP);
+ else
+ elm_object_focus_next_object_set(obj[i], obj[i - 1],
+ ELM_FOCUS_UP);
+ }
+}
+
+/**
+ * Creates the basic layout of the view.
+ *
+ * @param[in] parent The parent object
+ * @return layout if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_basic_layout(Evas_Object *parent)
+{
+ Evas_Object *base;
+
+ if (!parent) {
+ _ERR("parent is NULL.");
+ return NULL;
+ }
+
+ base = elm_layout_add(parent);
+ if (!base) {
+ _ERR("elm_layout_add() failed.");
+ return NULL;
+ }
+
+ elm_layout_file_set(base, UG_NETWORK_EDJ_FILE,
+ GRP_CONNECTION_SETTING);
+
+ evas_object_show(base);
+
+ return base;
+}
+
+/**
+ * Sets the description.
+ *
+ * Sets the description for the IP setting view.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_description(struct _priv *priv)
+{
+ if (!priv || !priv->base) {
+ _ERR("priv is invalid.");
+ return;
+ }
+
+ elm_object_part_text_set(priv->base,
+ PART_CONNECTION_DESCRITION,
+ TXT_MAKE_OTHER_NETWORK);
+}
+
+/**
+ * Gets the network type.
+ *
+ * For either wired or wireless.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _get_cur_mode(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ if (priv->network_type == TYPE_WIRED) {
+ ret = vconf_mgr_get_wired_ip_mode(&priv->ip_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("get wired ip mode from vconf failed.");
+
+ ret = vconf_mgr_get_wired_dns_mode(&priv->dns_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("get wired dns mode from vconf failed.");
+ } else if (priv->network_type == TYPE_WIRELESS) {
+ ret = vconf_mgr_get_wireless_ip_mode(&priv->ip_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("get wireless ip mode from vconf failed.");
+
+ ret = vconf_mgr_get_wireless_dns_mode(&priv->dns_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("get wireless dns mode from vconf failed.");
+ } else {
+ _ERR("the network type is invalid.");
+ ret = RET_FAILED;
+ }
+
+ return ret;
+}
+
+/**
+ * Gets the network information for the profile.
+ *
+ * For wired network.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _get_connection_profile_info(struct _priv *priv)
+{
+ struct connection_info info;
+ int ret;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_mgr_get_profile_info(priv->connection, &info);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_get_profile_info() failed.");
+ return RET_FAILED;
+ }
+
+ priv->profile = info.profile;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the network information for the profile.
+ *
+ * For either wired network or wireless network.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _get_cur_ip_info(struct _priv *priv)
+{
+ struct network_info info;
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ ret = _get_connection_profile_info(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("get profile failed.");
+ return RET_FAILED;
+ }
+
+ if (priv->network_type == TYPE_WIRED) {
+ if (priv->ip_mode == MODE_AUTO) {
+ ret = connection_mgr_get_ip_info(priv->profile, &info);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_get_ip_info() failed.");
+ return ret;
+ }
+ } else if (priv->ip_mode == MODE_MAN) {
+ ret = vconf_mgr_get_wired_network_info(&info);
+ if (ret != RET_SUCCESS) {
+ _ERR("get wired network info failed.");
+ return ret;
+ }
+ } else {
+ _ERR("ip mode is invalid.");
+ return RET_FAILED;
+ }
+ } else if (priv->network_type == TYPE_WIRELESS) {
+ if (priv->ip_mode == MODE_AUTO) {
+ ret = wifi_mgr_get_ip_info(priv->ap, &info);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_get_ip_info() failed.");
+ return ret;
+ }
+ } else if (priv->ip_mode == MODE_MAN) {
+ ret = vconf_mgr_get_wireless_network_info(&info);
+ if (ret != RET_SUCCESS) {
+ _ERR("get wireless network info failed.");
+ return ret;
+ }
+ } else {
+ _ERR("ip mode is invalid.");
+ return RET_FAILED;
+ }
+ } else {
+ _ERR("network type is invalid.");
+ return RET_FAILED;
+ }
+
+ strncpy(priv->info.ip_addr, info.ip_addr, IP_STRING_MAX_SIZE);
+ strncpy(priv->info.submask, info.submask, IP_STRING_MAX_SIZE);
+ strncpy(priv->info.gateway, info.gateway, IP_STRING_MAX_SIZE);
+ strncpy(priv->info.dns, info.dns, IP_STRING_MAX_SIZE);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Shows the dim layout.
+ *
+ * Called when there is a ctxpopup.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_show(priv->dim_ly);
+}
+
+/**
+ * Hides the dim layout.
+ *
+ * Called when the existing ctxpopup is deleted.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _unset_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_hide(priv->dim_ly);
+}
+
+/**
+ * Deletes the confirm popup.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _del_confirm_popup(struct _priv *priv)
+{
+ if (!priv || !priv->confirm_popup) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_del(priv->confirm_popup);
+ priv->confirm_popup = NULL;
+
+ _unset_layout_dim(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the 'OK' or 'Cancel' button is clicked, delete the popup,
+* and set the default focus.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] event Event information
+*/
+static void _popup_ok_cancel_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _del_confirm_popup(priv);
+
+ elm_object_focus_set(priv->ok_btn, EINA_TRUE);
+}
+
+/**
+ * Keeps the focused layout for the specific button.
+ *
+ * Emits a signal to edc to keep the focused state.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _keep_button_focused(struct _priv *priv)
+{
+ Evas_Object *obj;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ switch (priv->cur_type) {
+ case SETTING_IP:
+ obj = priv->ip_mode_btn;
+ break;
+ case SETTING_IP_ADDRESS:
+ obj = priv->ip_addr_btn;
+ break;
+ case SETTING_SUBNET_MASK:
+ obj = priv->subnet_mask_btn;
+ break;
+ case SETTING_GATEWAY:
+ obj = priv->gateway_btn;
+ break;
+ case SETTING_DNS:
+ obj = priv->dns_mode_btn;
+ break;
+ case SETTING_DNS_SERVER:
+ obj = priv->dns_server_btn;
+ break;
+ default:
+ return;
+ }
+
+ elm_object_signal_emit(obj, SIG_BTN_SELECTED, PROG);
+}
+
+/**
+ * Disables the IP buttons.
+ *
+ * If the mode is automatic, the IP buttons will be disabled.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _disable_ip_btns(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ elm_object_disabled_set(priv->ip_addr_btn, EINA_TRUE);
+ elm_object_disabled_set(priv->subnet_mask_btn, EINA_TRUE);
+ elm_object_disabled_set(priv->gateway_btn, EINA_TRUE);
+}
+
+/**
+ * Eables the IP buttons.
+ *
+ * If the mode is manual, the IP buttons will be eabled.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _enable_ip_btns(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ elm_object_disabled_set(priv->ip_addr_btn, EINA_FALSE);
+ elm_object_disabled_set(priv->subnet_mask_btn, EINA_FALSE);
+ elm_object_disabled_set(priv->gateway_btn, EINA_FALSE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling dismissed event.
+*
+* When the ctxpopup is dismissed, delete the ctxpopup,
+* and set the default focus.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _popup_dismissed_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _unset_layout_dim(priv);
+
+ if (priv->confirm_popup)
+ evas_object_del(priv->confirm_popup);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the 'automatical' button is clicked, delete the popup,
+* and disable the IP buttons.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _ip_auto_mode_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _disable_ip_btns(priv);
+
+ if (priv->ip_mode_btn)
+ elm_object_part_text_set(priv->ip_mode_btn,
+ PART_VALUE, _(TXT_OBTAIN_AUTO));
+
+ evas_object_del(priv->ip_mode_ly);
+ priv->ip_mode_ly = NULL;
+ priv->ip_mode = MODE_AUTO;
+
+ _unset_layout_dim(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling dismissed event.
+*
+* When the ctxpopup is dismissed, delete the ctxpopup.
+*
+* @param[in] data User data
+* @param[in] o The corresponding object which the focus event occurred
+* @param[in] ei Event information
+*/
+static void _mode_sub_popup_dismissed_cb(void *data,
+ Evas_Object *o, void *ei)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _unset_layout_dim(priv);
+
+ if (priv->cur_type == SETTING_IP) {
+ evas_object_del(priv->ip_mode_ly);
+ priv->ip_mode_ly = NULL;
+ } else if (priv->cur_type == SETTING_DNS) {
+ evas_object_del(priv->dns_mode_ly);
+ priv->dns_mode_ly = NULL;
+ }
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete the mode ctxpopup.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] o The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _mode_sub_popup_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *o, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_LEFT) || !strcmp(ev->keyname, KEY_RIGHT)) {
+ _unset_layout_dim(priv);
+
+ if (priv->cur_type == SETTING_IP) {
+ evas_object_del(priv->ip_mode_ly);
+ priv->ip_mode_ly = NULL;
+ } else if (priv->cur_type == SETTING_DNS) {
+ evas_object_del(priv->dns_mode_ly);
+ priv->dns_mode_ly = NULL;
+ }
+ }
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the manual mode button is clicked, delete the popup,
+* and enable the IP buttons.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _ip_manual_mode_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _enable_ip_btns(priv);
+
+ elm_object_part_text_set(priv->ip_mode_btn,
+ PART_VALUE, _(TXT_ENTER_MAN));
+
+ evas_object_del(priv->ip_mode_ly);
+ priv->ip_mode_ly = NULL;
+ priv->ip_mode = MODE_MAN;
+
+ _unset_layout_dim(priv);
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete the IP value ctxpopup.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] o The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _ip_ctxpopup_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *o, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+
+ evas_object_del(priv->ip_mode_ly);
+ priv->ip_mode_ly = NULL;
+ }
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete the ctxpopup.
+ *
+ * @param[in] data User data
+ * @param[in] e Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _ctxpopup_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!data || !ei) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+ evas_object_del(obj);
+ }
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling unfocused event.
+*
+* When the ctxpopup is unfocused, hide the dim layout,
+* and delete the ctxpopup.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] source Event information
+*/
+static void _ctxpopup_unfocused_cb(void *data,
+ Evas_Object *obj, void *source)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("data is NULL.\n");
+ return;
+ }
+
+ priv = data;
+
+ _unset_layout_dim(priv);
+ evas_object_del(obj);
+}
+
+/**
+ * Creates the mode button.
+ *
+ * Uses the style of 'mode_select'.
+ *
+ * @param[in] base The parent object
+ * @param[in] txt The text in button
+ * @param[in] cb The callback for clicked event
+ * @param[in] data User data
+ * @return button if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_mode_setting_btn(Evas_Object *base,
+ char *txt, Evas_Smart_Cb cb, void *data)
+{
+ Evas_Object *btn;
+
+ if (!base || !txt || !cb || !data) {
+ _ERR("The param is invalid.\n");
+ return NULL;
+ }
+
+ btn = util_add_button(base, STYLE_MODE_SELECT_BTN, NULL, txt);
+ if (!btn) {
+ _ERR("Add btn failed.\n");
+ return NULL;
+ }
+
+ evas_object_smart_callback_add(btn, SIG_DISMISSED,
+ _mode_sub_popup_dismissed_cb, data);
+ evas_object_smart_callback_add(btn, SIG_CLICKED, cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _mode_sub_popup_key_pressed_cb, data);
+
+ return btn;
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* Creates the IP value ctxpopup.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _ip_setting_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ Evas_Object *ctxpopup;
+ Evas_Object *box;
+ Evas_Object *auto_btn;
+ Evas_Object *man_btn;
+ Evas_Coord x;
+ Evas_Coord y;
+ Evas_Coord w;
+ Evas_Coord h;
+ Evas_Object *btn[MODE_BTN_NUM];
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ priv->cur_type = SETTING_IP;
+ base = priv->base;
+
+ if (priv->ip_mode == MODE_INVALID)
+ priv->ip_mode = MODE_MAN;
+
+ ctxpopup = util_add_layout(base, UG_NETWORK_EDJ_FILE,
+ GRP_NETWORK_MODE_SETTING);
+ if (!ctxpopup) {
+ _ERR("elm_layout_add() failed.\n");
+ return;
+ }
+
+ _set_layout_dim(priv);
+ _keep_button_focused(priv);
+
+ box = util_add_box(ctxpopup, PART_SWALLOW_CONTENT);
+ if (!box) {
+ _ERR("create box failed.");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_horizontal_set(box, EINA_FALSE);
+
+ auto_btn = _create_mode_setting_btn(ctxpopup, _(TXT_OBTAIN_AUTO),
+ _ip_auto_mode_btn_clicked_cb, (void *)priv);
+ if (!auto_btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_pack_end(box, auto_btn);
+ elm_object_focus_set(auto_btn, EINA_TRUE);
+ btn[0] = auto_btn;
+
+ man_btn = _create_mode_setting_btn(ctxpopup, _(TXT_ENTER_MAN),
+ _ip_manual_mode_btn_clicked_cb, (void *)priv);
+ if (!man_btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_pack_end(box, man_btn);
+ btn[1] = man_btn;
+
+ _set_up_down_cycle_focus(btn, 2);
+
+ evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN,
+ _ip_ctxpopup_key_pressed_cb, priv);
+ evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+
+ priv->ip_mode_ly = ctxpopup;
+
+ if (priv->ip_mode == MODE_AUTO)
+ elm_object_signal_emit(auto_btn, SIG_BTN_SELECTED, PROG);
+ else if (priv->ip_mode == MODE_MAN)
+ elm_object_signal_emit(man_btn, SIG_BTN_SELECTED, PROG);
+
+ evas_object_geometry_get(priv->ip_mode_btn, &x, &y, &w, &h);
+ evas_object_move(ctxpopup, (x + SETTING_MODE_OFFSET_X) * ELM_SCALE,
+ (y + h) * ELM_SCALE);
+}
+
+/**
+ * Gets the position of IP value ctxpopup.
+ *
+ * Gets the specific position by the current type.
+ *
+ * @param[in] priv The handler of the private data
+ * @param[out] pos_x X position
+ * @param[out] pos_y Y position
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _get_value_popup_pos(struct _priv *priv,
+ Evas_Coord *pos_x, Evas_Coord *pos_y)
+{
+ Evas_Coord x;
+ Evas_Coord y;
+ Evas_Coord w;
+ Evas_Coord h;
+
+ if (!priv || !pos_x || !pos_y) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ switch (priv->cur_type) {
+ case SETTING_IP_ADDRESS:
+ evas_object_geometry_get(priv->ip_addr_btn, &x, &y, &w, &h);
+ *pos_x = x + SETTING_VALUE_OFFSET_X;
+ *pos_y = y - SETTING_VALUE_OFFSET_Y;
+ break;
+ case SETTING_SUBNET_MASK:
+ evas_object_geometry_get(priv->subnet_mask_btn, &x, &y, &w, &h);
+ *pos_x = x + SETTING_VALUE_OFFSET_X;
+ *pos_y = y - SETTING_VALUE_OFFSET_Y;
+ break;
+ case SETTING_GATEWAY:
+ evas_object_geometry_get(priv->gateway_btn, &x, &y, &w, &h);
+ *pos_x = x + SETTING_VALUE_OFFSET_X;
+ *pos_y = y - SETTING_VALUE_OFFSET_Y;
+ break;
+ case SETTING_DNS_SERVER:
+ evas_object_geometry_get(priv->dns_server_btn, &x, &y, &w, &h);
+ *pos_x = x + SETTING_VALUE_OFFSET_X;
+ *pos_y = y - 2 * SETTING_VALUE_OFFSET_Y;
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the number to the object text.
+ *
+ * @param[in] obj The handler of the object
+ * @param[in] num The number
+ */
+static void _set_text_num(Evas_Object *obj, int num)
+{
+ char value[IP_STRING_MAX_SIZE];
+
+ if (!obj) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ memset(value, 0, IP_STRING_MAX_SIZE);
+ snprintf(value, IP_STRING_MAX_SIZE - 1, "%d", num);
+ elm_object_text_set(obj, value);
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * The button responds the key, and sets the number for the button.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _ip_btn_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ const char *value;
+ int num, new_num;
+
+ if (!ei || !data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_UP)) {
+ value = elm_object_text_get(obj);
+ num = atoi(value);
+ num++;
+ if (num > MAX_IP_NUM)
+ num = 0;
+ } else if (!strcmp(ev->keyname, KEY_DOWN)) {
+ value = elm_object_text_get(obj);
+ num = atoi(value);
+ num--;
+ if (num < 0)
+ num = MAX_IP_NUM;
+ } else if (!strcmp(ev->keyname, KEY_0) ||
+ !strcmp(ev->keyname, KEY_1) ||
+ !strcmp(ev->keyname, KEY_2) ||
+ !strcmp(ev->keyname, KEY_3) ||
+ !strcmp(ev->keyname, KEY_4) ||
+ !strcmp(ev->keyname, KEY_5) ||
+ !strcmp(ev->keyname, KEY_6) ||
+ !strcmp(ev->keyname, KEY_7) ||
+ !strcmp(ev->keyname, KEY_8) ||
+ !strcmp(ev->keyname, KEY_9)) {
+ value = elm_object_text_get(obj);
+ if (!value)
+ elm_object_text_set(obj, ev->keyname);
+
+ new_num = atoi(ev->keyname);
+
+ num = atoi(value);
+ if (!num || (num * RATIO + new_num) > MAX_IP_NUM) {
+ elm_object_text_set(obj, ev->keyname);
+ return;
+ }
+
+ num = num * RATIO + new_num;
+ } else {
+ return;
+ }
+
+ _set_text_num(obj, num);
+}
+
+/**
+ * Sets the value to the object text.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_the_value(struct _priv *priv)
+{
+ Evas_Object *btn;
+ const char *value1;
+ const char *value2;
+ const char *value3;
+ const char *value4;
+ char value[IP_STRING_MAX_SIZE];
+
+ if (!priv || !priv->config_popup) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ value1 = NULL;
+ btn = evas_object_data_get(priv->config_popup, IP_VALUE1);
+ if (btn)
+ value1 = elm_object_text_get(btn);
+
+ value2 = NULL;
+ btn = evas_object_data_get(priv->config_popup, IP_VALUE2);
+ if (btn)
+ value2 = elm_object_text_get(btn);
+
+ value3 = NULL;
+ btn = evas_object_data_get(priv->config_popup, IP_VALUE3);
+ if (btn)
+ value3 = elm_object_text_get(btn);
+
+ value4 = NULL;
+ btn = evas_object_data_get(priv->config_popup, IP_VALUE4);
+ if (btn)
+ value4 = elm_object_text_get(btn);
+
+ memset(value, 0, IP_STRING_MAX_SIZE);
+ snprintf(value, IP_STRING_MAX_SIZE, "%s.%s.%s.%s",
+ value1 ? value1 : "\\0", value2 ? value2 : "\\0",
+ value3 ? value3 : "\\0", value4 ? value4 : "\\0");
+
+ switch (priv->cur_type) {
+ case SETTING_IP_ADDRESS:
+ elm_object_part_text_set(priv->ip_addr_btn,
+ PART_VALUE, value);
+ strncpy(priv->info.ip_addr, value, IP_STRING_MAX_SIZE);
+ break;
+ case SETTING_SUBNET_MASK:
+ elm_object_part_text_set(priv->subnet_mask_btn,
+ PART_VALUE, value);
+ strncpy(priv->info.submask, value, IP_STRING_MAX_SIZE);
+ break;
+ case SETTING_GATEWAY:
+ elm_object_part_text_set(priv->gateway_btn,
+ PART_VALUE, value);
+ strncpy(priv->info.gateway, value, IP_STRING_MAX_SIZE);
+ break;
+ case SETTING_DNS_SERVER:
+ elm_object_part_text_set(priv->dns_server_btn,
+ PART_VALUE, value);
+ strncpy(priv->info.dns, value, IP_STRING_MAX_SIZE);
+ break;
+ default:
+ return;
+ }
+
+ evas_object_del(priv->config_popup);
+ priv->config_popup = NULL;
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete the IP value ctxpopup.
+ * If the key is KEY_ENTER, set the value into the button.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _value_ctxpopup_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ ev = ei;
+ priv = data;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_ENTER)) {
+ _unset_layout_dim(priv);
+ _set_the_value(priv);
+ evas_object_del(obj);
+ } else if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+ evas_object_del(obj);
+ }
+}
+
+/**
+ * Sets the cycle focus in the direction of left and right.
+ *
+ * Sets the cycle focus for an array of objects.
+ *
+ * @param[in] obj The handler of objects
+ * @param[in] count The count of objects
+ */
+static void _set_left_right_cycle_focus(Evas_Object **obj, int count)
+{
+ int i;
+
+ if (!obj || !*obj) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ for (i = 0; i < count; i++) {
+ if (i == count - 1)
+ elm_object_focus_next_object_set(obj[i],
+ obj[0], ELM_FOCUS_RIGHT);
+ else
+ elm_object_focus_next_object_set(obj[i],
+ obj[i + 1], ELM_FOCUS_RIGHT);
+
+ if (i == 0)
+ elm_object_focus_next_object_set(obj[i],
+ obj[count - 1], ELM_FOCUS_LEFT);
+ else
+ elm_object_focus_next_object_set(obj[i],
+ obj[i - 1], ELM_FOCUS_LEFT);
+ }
+}
+
+/**
+ * Creates the value button for IP setting.
+ *
+ * @param[in] base The parent object
+ * @param[in] num The sequence number of the button
+ * @param[in] txt The text in the button
+ * @param[in] data User data
+ * @return button if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_value_btn(Evas_Object *base, int num,
+ char *txt, void *data)
+{
+ Evas_Object *btn;
+
+ if (!base || !txt || !data) {
+ _ERR("The param is invalid.\n");
+ return NULL;
+ }
+
+ btn = util_add_button(base, STYLE_VALUE_BTN, NULL, txt);
+ if (!btn) {
+ _ERR("add button failed.\n");
+ return NULL;
+ }
+
+ switch (num) {
+ case 0:
+ elm_object_part_content_set(base, PART_IP_FIRST, btn);
+ evas_object_data_set(base, IP_VALUE1, btn);
+ elm_object_focus_set(btn, EINA_TRUE);
+ break;
+ case 1:
+ elm_object_part_content_set(base, PART_IP_SECOND, btn);
+ evas_object_data_set(base, IP_VALUE2, btn);
+ break;
+ case 2:
+ elm_object_part_content_set(base, PART_IP_THIRD, btn);
+ evas_object_data_set(base, IP_VALUE3, btn);
+ break;
+ case 3:
+ elm_object_part_content_set(base, PART_IP_FORTH, btn);
+ evas_object_data_set(base, IP_VALUE4, btn);
+ break;
+ default:
+ break;
+ }
+
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _popup_dismissed_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _ip_btn_key_pressed_cb, data);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
+
+ return btn;
+}
+
+/**
+ * Creates value ctxpopup.
+ *
+ * User can set number in the ctxpopup.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _create_value_popup(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *ctxpopup;
+ Evas_Object *btn;
+ Evas_Coord pos_x;
+ Evas_Coord pos_y;
+ int i;
+
+ if (!priv || !priv->base) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ base = priv->base;
+
+ ctxpopup = util_add_layout(base, UG_NETWORK_EDJ_FILE,
+ GRP_NETWORK_VALUE_SETTING);
+ if (!ctxpopup) {
+ _ERR("elm_ctxpopup_add() failed.\n");
+ return;
+ }
+
+ elm_object_focus_allow_set(ctxpopup, EINA_TRUE);
+ evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ priv->config_popup = ctxpopup;
+
+ _set_layout_dim(priv);
+
+ for (i = 0; i < IP_SET_MAX_NUM; i++) {
+ btn = _create_value_btn(ctxpopup, i, _(TXT_ZERO), (void *)priv);
+ if (!btn) {
+ _ERR("_create_value_btn() failed.\n");
+ evas_object_del(ctxpopup);
+ priv->config_popup = NULL;
+ return;
+ }
+
+ priv->cur_ip_btn[i] = btn;
+ }
+
+ evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN,
+ _value_ctxpopup_key_pressed_cb, priv);
+ _set_left_right_cycle_focus(priv->cur_ip_btn, IP_SET_MAX_NUM);
+
+ _keep_button_focused(priv);
+
+ pos_x = 0;
+ pos_y = 0;
+ _get_value_popup_pos(priv, &pos_x, &pos_y);
+ evas_object_move(ctxpopup, pos_x * ELM_SCALE, pos_y * ELM_SCALE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* After the IP button is clicked, the value ctxpopup
+* will be created to set the value.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _ip_address_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ priv->cur_type = SETTING_IP_ADDRESS;
+ _create_value_popup(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* After the submask button is clicked, the value ctxpopup
+* will be created to set the value.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _sub_mask_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ priv->cur_type = SETTING_SUBNET_MASK;
+ _create_value_popup(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* After the gateway button is clicked, the value ctxpopup
+* will be created to set the value.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _gateway_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ priv->cur_type = SETTING_GATEWAY;
+ _create_value_popup(priv);
+}
+
+/**
+ * Creates setting button.
+ *
+ * @param[in] base The parent object
+ * @param[in] key The key value
+ * @param[in] txt The text in the button
+ * @param[in] cb The callback for clicked event
+ * @param[in] data User data
+ * @return button if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_setting_btn(Evas_Object *base,
+ char *key, char *txt, Evas_Smart_Cb cb, void *data)
+{
+ Evas_Object *btn;
+
+ if (!base || !key || !txt || !cb || !data) {
+ _ERR("The param is invalid.\n");
+ return NULL;
+ }
+
+ btn = util_add_key_value_button(base, NULL, key, txt);
+ if (!btn) {
+ _ERR("Add button failed.\n");
+ return NULL;
+ }
+
+ evas_object_smart_callback_add(btn, SIG_CLICKED, cb, data);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
+
+ return btn;
+}
+
+/**
+ * Creates IP setting layout.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_ip_setting(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *scroll;
+ Evas_Object *box;
+ Evas_Object *btn;
+ char mode[STRING_MAX_SIZE];
+
+ if (!priv || !priv->base) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ scroll = util_add_scroll(base, PART_CONNECTION_IP_SETTING);
+ if (!scroll) {
+ _ERR("add scroll failed.");
+ return RET_FAILED;
+ }
+
+ box = util_add_box(scroll, NULL);
+ if (!box) {
+ _ERR("add box failed.");
+ evas_object_del(scroll);
+ return RET_FAILED;
+ }
+
+ elm_box_horizontal_set(box, EINA_FALSE);
+ elm_box_padding_set(box, BOX_PAD_X, BOX_PAD_Y);
+
+ memset(mode, 0, STRING_MAX_SIZE);
+ if (priv->ip_mode == MODE_AUTO)
+ snprintf(mode, STRING_MAX_SIZE - 1,
+ "%s", _(TXT_OBTAIN_AUTO));
+ else
+ snprintf(mode, STRING_MAX_SIZE - 1,
+ "%s", _(TXT_ENTER_MAN));
+
+ btn = _create_setting_btn(base, _(TXT_IP_SETTING), mode,
+ _ip_setting_btn_clicked_cb, (void *)priv);
+ if (!btn) {
+ _ERR("Add button failed.\n");
+ evas_object_del(scroll);
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
+ elm_object_focus_set(btn, EINA_TRUE);
+ priv->ip_mode_btn = btn;
+
+ btn = _create_setting_btn(base, _(TXT_IP_ADDR), priv->info.ip_addr,
+ _ip_address_btn_clicked_cb, (void *)priv);
+ if (!btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(scroll);
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+ priv->ip_addr_btn = btn;
+
+ btn = _create_setting_btn(base, _(TXT_SUBNET_MASK), priv->info.submask,
+ _sub_mask_btn_clicked_cb, (void *)priv);
+ if (!btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(scroll);
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+ priv->subnet_mask_btn = btn;
+
+ btn = _create_setting_btn(base, _(TXT_GATEWAY), priv->info.gateway,
+ _gateway_btn_clicked_cb, (void *)priv);
+ if (!btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(scroll);
+ return RET_FAILED;
+ }
+
+ elm_object_signal_emit(btn, SIG_HIDE_BOTTOME_LINE, PROG);
+
+ elm_box_pack_end(box, btn);
+ priv->gateway_btn = btn;
+
+ elm_object_content_set(scroll, box);
+
+ if (priv->ip_mode == MODE_AUTO)
+ _disable_ip_btns(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Disables DNS setting button.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _disable_dns_btns(struct _priv *priv)
+{
+ if (!priv || !priv->dns_server_btn) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ elm_object_disabled_set(priv->dns_server_btn, EINA_TRUE);
+}
+
+/**
+ * Enables DNS setting button.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _enable_dns_btns(struct _priv *priv)
+{
+ if (!priv || !priv->dns_server_btn) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ elm_object_disabled_set(priv->dns_server_btn, EINA_FALSE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the 'automatical' button is clicked, delete the popup,
+* and disable the DNS buttons.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _dns_auto_mode_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _disable_dns_btns(priv);
+
+ elm_object_part_text_set(priv->dns_mode_btn,
+ PART_VALUE, _(TXT_OBTAIN_AUTO));
+
+ evas_object_del(priv->dns_mode_ly);
+ priv->dns_mode_ly = NULL;
+ priv->dns_mode = MODE_AUTO;
+
+ _unset_layout_dim(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the manual mode button is clicked, delete the popup,
+* and enable the DNS buttons.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _dns_manual_mode_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _enable_dns_btns(priv);
+
+ elm_object_part_text_set(priv->dns_mode_btn,
+ PART_VALUE, _(TXT_ENTER_MAN));
+
+ evas_object_del(priv->dns_mode_ly);
+ priv->dns_mode_ly = NULL;
+ priv->dns_mode = MODE_MAN;
+
+ _unset_layout_dim(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling dismissed event.
+*
+* When the ctxpopup is dismissed, delete the ctxpopup.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _dns_ctxpopup_dismissed_cb(void *data,
+ Evas_Object *obj, void *source)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _unset_layout_dim(priv);
+
+ evas_object_del(priv->dns_mode_ly);
+ priv->dns_mode_ly = NULL;
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete the DNS ctxpopup.
+ * If the key is KEY_EXIT, destroy the ug.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] o The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _dns_ctxpopup_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *o, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+ evas_object_del(priv->dns_mode_ly);
+ priv->dns_mode_ly = NULL;
+ } else if (!strcmp(ev->keyname, KEY_EXIT)) {
+ ug_destroy_me(priv->ug);
+ }
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* Creates the DNS mode ctxpopup.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _dns_setting_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ Evas_Object *ctxpopup, *box;
+ Evas_Object *btn_auto, *btn_man;
+ Evas_Coord x, y, w, h;
+ Evas_Object *btn[2];
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ priv->cur_type = SETTING_DNS;
+
+ base = priv->base;
+
+ if (priv->dns_mode == MODE_INVALID)
+ priv->dns_mode = MODE_MAN;
+
+ ctxpopup = util_add_layout(base, UG_NETWORK_EDJ_FILE,
+ GRP_NETWORK_MODE_SETTING);
+ if (!ctxpopup) {
+ _ERR("elm_layout_add() failed.\n");
+ return;
+ }
+
+ box = util_add_box(ctxpopup, PART_SWALLOW_CONTENT);
+ if (!box) {
+ _ERR("add box failed.");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_horizontal_set(box, EINA_FALSE);
+
+ btn_auto = _create_mode_setting_btn(ctxpopup, _(TXT_OBTAIN_AUTO),
+ _dns_auto_mode_btn_clicked_cb, priv);
+ if (!btn_auto) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_pack_end(box, btn_auto);
+ elm_object_focus_set(btn_auto, EINA_TRUE);
+ btn[0] = btn_auto;
+
+ btn_man = _create_mode_setting_btn(ctxpopup, _(TXT_ENTER_MAN),
+ _dns_manual_mode_btn_clicked_cb, priv);
+ if (!btn_man) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_pack_end(box, btn_man);
+ btn[1] = btn_man;
+
+ _set_up_down_cycle_focus(btn, 2);
+
+ evas_object_event_callback_add(ctxpopup,
+ EVAS_CALLBACK_KEY_DOWN,
+ _dns_ctxpopup_key_pressed_cb, priv);
+ evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_smart_callback_add(ctxpopup, SIG_DISMISSED,
+ _dns_ctxpopup_dismissed_cb, priv);
+
+ evas_object_geometry_get(priv->dns_mode_btn, &x, &y, &w, &h);
+ priv->dns_mode_ly = ctxpopup;
+
+ evas_object_move(ctxpopup, (x + SETTING_MODE_OFFSET_X) * ELM_SCALE,
+ (y + h) * ELM_SCALE);
+
+ if (priv->dns_mode == MODE_AUTO)
+ elm_object_signal_emit(btn_auto, SIG_BTN_SELECTED, PROG);
+ else if (priv->dns_mode == MODE_MAN)
+ elm_object_signal_emit(btn_man, SIG_BTN_SELECTED, PROG);
+
+ _set_layout_dim(priv);
+
+ _keep_button_focused(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* After the DNS button is clicked, the value ctxpopup
+* will be created to set the value.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _dns_server_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ priv->cur_type = SETTING_DNS_SERVER;
+ _create_value_popup(priv);
+}
+
+/**
+ * Creates DNS setting layout.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_dns_setting(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *btn;
+ Evas_Object *box;
+ char mode[STRING_MAX_SIZE];
+
+ if (!priv || !priv->base) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ box = util_add_box(base, PART_CONNECTION_DNS_SETTING);
+ if (!box) {
+ _ERR("add box failed.");
+ return RET_FAILED;
+ }
+
+ elm_box_horizontal_set(box, EINA_FALSE);
+ elm_box_padding_set(box, BOX_PAD_X, BOX_PAD_Y);
+
+ memset(mode, 0, STRING_MAX_SIZE);
+ if (priv->dns_mode == MODE_AUTO)
+ snprintf(mode, STRING_MAX_SIZE - 1,
+ "%s", _(TXT_OBTAIN_AUTO));
+ else
+ snprintf(mode, STRING_MAX_SIZE - 1,
+ "%s", _(TXT_ENTER_MAN));
+
+ btn = util_add_key_value_button(base, NULL,
+ _(TXT_DNS_SETING), mode);
+ if (!btn) {
+ _ERR("Add button failed.\n");
+ evas_object_del(box);
+ return RET_FAILED;
+ }
+
+ evas_object_smart_callback_add(btn,
+ SIG_CLICKED, _dns_setting_btn_clicked_cb, priv);
+ elm_box_pack_end(box, btn);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
+
+ priv->dns_mode_btn = btn;
+
+ btn = util_add_key_value_button(base, NULL,
+ _(TXT_DNS_SERVER), priv->info.dns);
+ if (!btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(box);
+ return RET_FAILED;
+ }
+
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _dns_server_btn_clicked_cb, priv);
+ elm_object_signal_emit(btn, SIG_HIDE_BOTTOME_LINE, PROG);
+ elm_box_pack_end(box, btn);
+
+ priv->dns_server_btn = btn;
+
+ if (priv->dns_mode == MODE_AUTO)
+ _disable_dns_btns(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Checks if IP is valid.
+ *
+ * Now only check if IP is '0.0.0.0'.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful;
+ * RET_IP_INVALID if the IP is '0.0.0.0'; RET_FAILED if failed;
+ */
+static int _check_is_ip_valid(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return RET_FAILED;
+ }
+
+ if (!strncmp(priv->info.ip_addr, ZERO_IP,
+ IP_STRING_MAX_SIZE)) {
+ _ERR("IP addr is invalid.");
+ return RET_IP_INVALID;
+ }
+
+ if (!strncmp(priv->info.submask, ZERO_IP,
+ IP_STRING_MAX_SIZE)) {
+ _ERR("submask addr is invalid.");
+ return RET_IP_INVALID;
+ }
+
+ if (!strncmp(priv->info.gateway, ZERO_IP,
+ IP_STRING_MAX_SIZE)) {
+ _ERR("gateway addr is invalid.");
+ return RET_IP_INVALID;
+ }
+
+ if (!strncmp(priv->info.dns, ZERO_IP,
+ IP_STRING_MAX_SIZE)) {
+ _ERR("dns addr is invalid.");
+ return RET_IP_INVALID;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Shows the invalid IP ctxpopup.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _show_invalid_ip_popup(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *ok_btn;
+ char content[CONTENT_TXT_SIZE];
+
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return;
+ }
+
+ if (priv->confirm_popup)
+ _del_confirm_popup(priv);
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_NETWORK_EDJ_FILE,
+ GRP_CONFIRM_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ evas_object_show(layout);
+
+ if (priv->network_type == TYPE_WIRED)
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRED_LY));
+ else
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
+
+ memset(content, 0, CONTENT_TXT_SIZE);
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s",
+ _(TXT_INVALID_IP));
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, content);
+
+ ok_btn = util_add_button(layout,
+ STYLE_SETTING_BTN, PART_OK_BTN, _(TXT_OK));
+ if (!ok_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_DOWN);
+ evas_object_smart_callback_add(ok_btn, SIG_CLICKED,
+ _popup_ok_cancel_btn_clicked_cb, priv);
+
+ elm_object_focus_set(ok_btn, EINA_TRUE);
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_pressed_cb, priv);
+
+ evas_object_move(layout, CENTER_ALIGN * (DEFAULT_WIN_WIDTH - POPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - POPUP_HEIGHT) * ELM_SCALE);
+
+ priv->confirm_popup = layout;
+}
+
+/**
+ * Sets the mode as 'manually'.
+ *
+ * Depends on the network type.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _config_network_manually(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return RET_FAILED;
+ }
+
+ ret = _check_is_ip_valid(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("the ip is invalid.");
+ _show_invalid_ip_popup(priv);
+ return ret;
+ }
+
+ _get_connection_profile_info(priv);
+
+ switch (priv->network_type) {
+ case TYPE_WIRED:
+ ret = connection_mgr_set_profile(priv->connection,
+ priv->profile, &priv->info);
+ if (ret != RET_SUCCESS) {
+ _ERR("set profile failed.");
+ return ret;
+ }
+
+ ret = vconf_mgr_save_wired_config_info(&priv->info);
+ if (ret != RET_SUCCESS) {
+ _ERR("saved wired ip info to vconf failed.");
+ return ret;
+ }
+
+ break;
+ case TYPE_WIRELESS:
+ ret = wifi_mgr_set_ip_config(priv->ap, &priv->info);
+ if (ret != RET_SUCCESS) {
+ _ERR("set wifi ip config failed.");
+ return ret;
+ }
+
+ ret = wifi_mgr_set_dns_config(priv->ap, &priv->info);
+ if (ret != RET_SUCCESS) {
+ _ERR("set wifi dns config failed.");
+ return ret;
+ }
+
+ ret = vconf_mgr_save_wireless_config_info(&priv->info);
+ if (ret != RET_SUCCESS) {
+ _ERR("saved wireless ip info to vconf failed.");
+ return ret;
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the mode as 'dynamic'.
+ *
+ * Depends on the network type.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _config_network_dynamic(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return RET_FAILED;
+ }
+
+ _get_connection_profile_info(priv);
+
+ switch (priv->network_type) {
+ case TYPE_WIRED:
+ ret = connection_mgr_ip_dynamic_config(priv->connection,
+ priv->profile);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_ip_dynamic_config() failed.");
+ return RET_FAILED;
+ }
+
+ break;
+ case TYPE_WIRELESS:
+ ret = wifi_mgr_ap_set_ip_config_type(priv->ap,
+ WIFI_IP_CONFIG_TYPE_DYNAMIC);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_ip_dynamic_config() failed.");
+ return RET_FAILED;
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Saves the mode to vconf.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _save_mode(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return;
+ }
+
+ switch (priv->network_type) {
+ case TYPE_WIRED:
+ ret = vconf_mgr_set_wired_ip_mode(priv->ip_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("vconf_mgr_set_wired_ip_mode() failed.");
+
+ ret = vconf_mgr_set_wired_dns_mode(priv->dns_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("vconf_mgr_set_wired_dns_mode() failed.");
+
+ break;
+ case TYPE_WIRELESS:
+ ret = vconf_mgr_set_wireless_ip_mode(priv->ip_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("vconf_mgr_set_wireless_ip_mode() failed.");
+
+ ret = vconf_mgr_set_wireless_dns_mode(priv->dns_mode);
+ if (ret != RET_SUCCESS)
+ _ERR("vconf_mgr_set_wireless_dns_mode() failed.");
+
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * Configs the network mode.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _config_network(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ switch (priv->ip_mode) {
+ case MODE_AUTO:
+ ret = _config_network_dynamic(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("config network automatically failed.");
+ goto error;
+ }
+
+ break;
+ case MODE_MAN:
+ ret = _config_network_manually(priv);
+ if (ret == RET_IP_INVALID) {
+ _ERR("invalid IP.");
+ return;
+ } else if (ret != RET_SUCCESS) {
+ _ERR("config network manually failed.");
+ goto error;
+ }
+
+ break;
+ default:
+ goto error;
+ }
+
+ _save_mode(priv);
+
+ viewmgr_pop(priv->vmgr);
+
+ return;
+
+error:
+ _show_confirm_popup(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the 'Retry' button is clicked, retry to connect to the network.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] event Event information
+*/
+static void _retry_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _del_confirm_popup(priv);
+
+ elm_object_focus_set(priv->ok_btn, EINA_TRUE);
+
+ _config_network(priv);
+}
+
+/**
+ * Shows the confirm ctxpopup.
+ *
+ * Decides to connect the network again or cancel it.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _show_confirm_popup(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *retry_btn, *cancel_btn;
+ char content[CONTENT_TXT_SIZE];
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return;
+ }
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_NETWORK_EDJ_FILE,
+ GRP_CONFIRM_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ priv->confirm_popup = layout;
+
+ if (priv->network_type == TYPE_WIRED)
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRED_LY));
+ else
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
+
+ memset(content, 0, CONTENT_TXT_SIZE);
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s",
+ _(TXT_FAILED_CONNECT), priv->name);
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, content);
+
+ retry_btn = util_add_button(layout,
+ STYLE_SETTING_BTN, PART_RETRY_BTN, _(TXT_RETRY));
+ if (!retry_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ cancel_btn = util_add_button(layout,
+ STYLE_SETTING_BTN, PART_CANCEL_BTN, _(TXT_CANCEL));
+ if (!cancel_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_focus_next_object_set(retry_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(cancel_btn, retry_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_DOWN);
+
+ evas_object_smart_callback_add(retry_btn, SIG_CLICKED,
+ _retry_btn_clicked_cb, priv);
+ evas_object_smart_callback_add(cancel_btn, SIG_CLICKED,
+ _popup_ok_cancel_btn_clicked_cb, priv);
+
+ elm_object_focus_set(retry_btn, EINA_TRUE);
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_pressed_cb, priv);
+
+ evas_object_move(layout, CENTER_ALIGN * (DEFAULT_WIN_WIDTH - POPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - POPUP_HEIGHT) * ELM_SCALE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* Configs the network.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _ok_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _config_network(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* Cancels to config the network, and pops the view.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ if (priv && priv->vmgr)
+ viewmgr_pop(priv->vmgr);
+}
+
+/**
+ * Creates the action buttons.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_btns(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *ok_btn;
+ Evas_Object *cancel_btn;
+
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ ok_btn = util_add_button(base, STYLE_SETTING_BTN, NULL, _(TXT_OK));
+ if (!ok_btn) {
+ _ERR("Add button failed.\n");
+ return RET_FAILED;
+ }
+
+ elm_object_part_content_set(base, PART_CONNECTION_OK_BTN, ok_btn);
+ priv->ok_btn = ok_btn;
+ evas_object_smart_callback_add(ok_btn, SIG_CLICKED,
+ _ok_btn_clicked_cb, priv);
+
+ cancel_btn = util_add_button(base, STYLE_SETTING_BTN,
+ PART_CONNECTION_CANCEL_BTN, _(TXT_CANCEL));
+ if (!cancel_btn) {
+ _ERR("Add button failed.\n");
+ evas_object_del(ok_btn);
+ return RET_FAILED;
+ }
+
+ evas_object_smart_callback_add(cancel_btn, SIG_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ priv->cancel_btn = cancel_btn;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Creates the dim layout.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_dim_layout(struct _priv *priv)
+{
+ Evas_Object *dim_ly;
+
+ if (!priv || !priv->win) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ dim_ly = util_add_layout(priv->win, UG_NETWORK_EDJ_FILE,
+ GRP_DIM_LY);
+ if (!dim_ly) {
+ _ERR("elm_layout_add() failed.\n");
+ return RET_FAILED;
+ }
+
+ priv->dim_ly = dim_ly;
+ _unset_layout_dim(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, pops the view.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _base_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ ev = ei;
+ priv = data;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ viewmgr_pop(priv->vmgr);
+ return;
+ }
+}
+
+/**
+ * Creates the layout of the view.
+ *
+ * Called when the view is pushed.
+ *
+ * @param[in] vmgr The handler of view manager
+ * @param[in] data The passed data from main view
+ * @return layout if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create(struct viewmgr *vmgr, void *data)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ struct connection_info *info;
+ int ret;
+
+ if (!vmgr || !vmgr->win || !vmgr->ug || !data) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ priv = _init_priv();
+ if (!priv) {
+ _ERR("init priv failed.");
+ return NULL;
+ }
+
+ priv->win = vmgr->win;
+ priv->ug = vmgr->ug;
+ priv->vmgr = vmgr;
+
+ info = data;
+ priv->connection = info->connection;
+ priv->network_type = info->cur_type;
+ priv->ap = info->ap;
+ strncpy(priv->name, info->name, MAX_NAME_SIZE - 1);
+
+ base = _create_basic_layout(priv->win);
+ if (!base) {
+ _ERR("Add main view failed.\n");
+ _fini_priv(priv);
+ return NULL;
+ }
+
+ evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN,
+ _base_key_pressed_cb, priv);
+
+ priv->base = base;
+
+ evas_object_data_set(base, KEY_PRIV, priv);
+
+ _set_description(priv);
+
+ ret = _get_cur_mode(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ ret = _get_cur_ip_info(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ ret = _create_dns_setting(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ ret = _create_btns(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ ret = _create_ip_setting(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ ret = _create_dim_layout(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ return base;
+
+error:
+ evas_object_del(base);
+ _fini_priv(priv);
+
+ return NULL;
+}
+
+/**
+ * Destroies the layout of the view.
+ *
+ * Called when the view is popped.
+ *
+ * @param[in] base The base layout
+ */
+static void _destroy(Evas_Object *base)
+{
+ struct _priv *priv;
+
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = evas_object_data_get(base, KEY_PRIV);
+ if (!priv)
+ return;
+
+ _fini_priv(priv);
+}
+
+/**
+ * Gets the current view type.
+ *
+ * @return view type;
+ */
+static enum view_type _get_view_type(void)
+{
+ return NETWORK_IP_SETTING_VIEW;
+}
+
+static struct view_class _vclass = {
+ .create = _create,
+ .resume = NULL,
+ .pause = NULL,
+ .terminate = _destroy,
+ .message_handler = NULL,
+ .get_view_type = _get_view_type,
+};
+
+/**
+ * Gets the current view class.
+ *
+ * @return view class;
+ */
+struct view_class *ip_setting_view_vclass_get(void)
+{
+ return &_vclass;
+}
--- /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 <Elementary.h>
+#include <aul.h>
+
+#include <KeyDefine.h>
+
+#include "defs.h"
+#include "dbg.h"
+#include "main_view.h"
+#include "vconf_mgr.h"
+#include "ip_setting_view.h"
+#include "connection_mgr.h"
+#include "i18n.h"
+#include "wifi_mgr.h"
+#include "common.h"
+#include "wifi_passcode_view.h"
+#include "util.h"
+
+#define BTN_ACT 4
+#define BTN_TYPE 2
+#define TIMER_INTERNAL 0.1
+
+#define KEY_PRIV "priv"
+
+#define TYPE_POPUP_X_OFFSET 190
+
+enum action_btn_enum {
+ CONNECT,
+ REFRESH,
+ OTHER,
+ CLOSE
+};
+
+static char *action_button[] = {
+ [CONNECT] = TXT_CONNECT_BTN,
+ [REFRESH] = TXT_REFRESH_BTN,
+ [OTHER] = TXT_OTHER_BTN,
+ [CLOSE] = TXT_CLOSE_BTN
+};
+
+static char *button_swallow[] = {
+ [CONNECT] = PART_CONNECT_BTN,
+ [REFRESH] = PART_REFRESH_BTN,
+ [OTHER] = PART_OTHER_BTN,
+ [CLOSE] = PART_CLOSE_BTN
+};
+
+static char *popup_button[] = {
+ [TYPE_WIRELESS] = TXT_WIRELESS,
+ [TYPE_WIRED] = TXT_WIRED
+};
+
+struct _priv {
+ ui_gadget_h ug;
+ struct viewmgr *vmgr;
+
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *type_btn;
+ Evas_Object *network_ctxpopup;
+ Evas_Object *dim_ly;
+ Evas_Object *connect_btn;
+ Evas_Object *refresh_btn;
+ Evas_Object *other_btn;
+ Evas_Object *close_btn;
+ Evas_Object *genlist;
+ Evas_Object *wired_con_box;
+ Evas_Object *wireless_discon_ly;
+ Evas_Object *wired_discon_ly;
+ Evas_Object *status_popup;
+
+ Elm_Genlist_Item_Class *lock_ic;
+ Elm_Genlist_Item_Class *nolock_ic;
+ Elm_Object_Item *last_item;
+
+ Eina_List *ap_list;
+ Ecore_Timer *timer;
+
+ enum network_type_enum network_type;
+ enum view_type cur_view;
+
+ int wifi_init;
+ Eina_Bool wifi_conn;
+ Eina_Bool wired_conn;
+
+ connection_h connection;
+ connection_profile_h profile;
+ char profile_name[MAX_NAME_SIZE];
+
+ wifi_ap_h ap;
+ char *ap_name;
+ char *ap_pwd;
+};
+
+static void _show_confirm_popup(struct _priv *priv);
+static void _show_progress_popup(struct _priv *priv);
+
+/**
+* Initialize the priv
+*
+* Called when initialize the network
+*
+* @return the _priv object initialized
+*/
+static struct _priv *_init_priv()
+{
+ struct _priv *priv;
+
+ priv = calloc(1, sizeof(*priv));
+ if (!priv) {
+ _ERR("calloc priv failed.");
+ return NULL;
+ }
+
+ return priv;
+}
+
+/**
+* Finalize the priv
+*
+* Called when app is destroyed
+*
+* @param[in] priv the _priv object
+*/
+static void _fini_priv(struct _priv *priv)
+{
+ void *data;
+
+ if (!priv)
+ return;
+
+ if (priv->lock_ic)
+ elm_genlist_item_class_free(priv->lock_ic);
+
+ if (priv->nolock_ic)
+ elm_genlist_item_class_free(priv->nolock_ic);
+
+ if (priv->ap_list)
+ EINA_LIST_FREE(priv->ap_list, data)
+ free(data);
+
+ if (priv->dim_ly)
+ evas_object_del(priv->dim_ly);
+
+ if (priv->timer)
+ ecore_timer_del(priv->timer);
+
+ connection_mgr_destroy(priv->connection);
+
+ if (priv->ap)
+ wifi_mgr_ap_destroy(priv->ap);
+
+ free(priv->ap_name);
+ free(priv->ap_pwd);
+
+ wifi_mgr_deinit();
+
+ free(priv);
+}
+
+/**
+* Eable the "Connect" button
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _enable_connect_btn(struct _priv *priv)
+{
+ if (!priv || !priv->connect_btn) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ elm_object_disabled_set(priv->connect_btn, EINA_FALSE);
+}
+
+/**
+* Disable the "Connect" button
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _disable_connect_btn(struct _priv *priv)
+{
+ if (!priv || !priv->connect_btn) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ elm_object_disabled_set(priv->connect_btn, EINA_TRUE);
+}
+
+/**
+* Enable the "Other" button
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _enable_other_btn(struct _priv *priv)
+{
+ if (!priv || !priv->other_btn) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ elm_object_disabled_set(priv->other_btn, EINA_FALSE);
+}
+
+/**
+* Disable the "Other" button
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _disable_other_btn(struct _priv *priv)
+{
+ if (!priv || !priv->other_btn) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ elm_object_disabled_set(priv->other_btn, EINA_TRUE);
+}
+
+/**
+* Enable the dim effect
+*
+* Called when popup is displayed
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _set_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_show(priv->dim_ly);
+}
+
+/**
+* Disable the dim effect
+*
+* This function is the opposite action of the set_layout_dim
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _unset_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_hide(priv->dim_ly);
+}
+
+/**
+* Evas_object_Event_Cb type callback for handling delection event
+*
+* @param[in] data the user data
+* @param[in] e evas handler
+* @param[in] obj the corresponding object which clicked event occurred
+* @param[in] ei event information
+*/
+static void _ctxpopup_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!data || !ei || !obj) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+ evas_object_del(obj);
+ }
+}
+
+/**
+* Delete the connection progress popup when connection successed or failed
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _del_status_popup(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("priv is NULL.");
+ return;
+ }
+
+ _unset_layout_dim(priv);
+
+ if (priv->status_popup)
+ evas_object_del(priv->status_popup);
+
+ priv->status_popup = NULL;
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling back event
+*
+* This function delete the ug when EVAS_CALLBACK_KEY_DOWN happens
+*
+* @param[in] data the user data
+* @param[in] e evas handler
+* @param[in] obj the corresponding object which clicked event occurred
+* @param[in] ei event information
+*/
+static void _main_ly_key_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!data || !ei) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!priv->ug)
+ return;
+
+ if (!strcmp(ev->keyname, KEY_BACK))
+ ug_destroy_me(priv->ug);
+}
+
+/**
+* Create the base layout
+*
+* Called by _create when network is invoked
+*
+* @param[in] priv _priv object bypassed
+*/
+static Evas_Object *_create_main_layout(struct _priv *priv)
+{
+ Evas_Object *base;
+
+ if (!priv) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ base = util_add_layout(priv->win, UG_NETWORK_EDJ_FILE, GRP_MAIN);
+ if (!base) {
+ _ERR("Add pannel view failed.\n");
+ return NULL;
+ }
+
+ evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN,
+ _main_ly_key_pressed_cb, priv);
+
+ evas_object_show(base);
+
+ return base;
+}
+
+/**
+* Refresh the object of the defined part
+*
+* @param[in] priv _priv object bypassed
+* @param[in] obj the Evas_Object to be setted to the part
+*/
+static void _fill_content_part(struct _priv *priv, Evas_Object *obj)
+{
+ Evas_Object *old_obj;
+
+ if (!priv || !obj || !priv->base) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ old_obj = elm_object_part_content_get(priv->base, PART_NETLIST_PANNEL);
+ if (old_obj == obj) {
+ _ERR("PART_NETLIST_PANNEL already filled with this object.");
+ return;
+ }
+
+ if (old_obj) {
+ elm_object_part_content_unset(priv->base, PART_NETLIST_PANNEL);
+ evas_object_hide(old_obj);
+ }
+
+ elm_object_part_content_set(priv->base, PART_NETLIST_PANNEL, obj);
+
+ evas_object_show(obj);
+}
+
+/**
+* Refresh the buttons of the correct position
+*
+* Called when the view type is changed
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _set_action_btn_pos(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *btn;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ base = priv->base;
+
+ btn = elm_object_part_content_get(base, button_swallow[CONNECT]);
+ if (!btn) {
+ elm_object_part_content_set(base, button_swallow[CONNECT],
+ priv->connect_btn);
+ evas_object_show(priv->connect_btn);
+ }
+
+ btn = elm_object_part_content_get(base, button_swallow[REFRESH]);
+ if (btn) {
+ elm_object_part_content_unset(base, button_swallow[REFRESH]);
+ evas_object_hide(btn);
+ }
+
+ btn = elm_object_part_content_get(base, button_swallow[OTHER]);
+ if (btn) {
+ elm_object_part_content_unset(base, button_swallow[OTHER]);
+ evas_object_hide(btn);
+ }
+
+ btn = elm_object_part_content_get(base, button_swallow[CLOSE]);
+ if (btn) {
+ elm_object_part_content_unset(base, button_swallow[CLOSE]);
+ evas_object_hide(btn);
+ }
+
+ if (priv->network_type == TYPE_WIRELESS) {
+ if (!priv->wifi_conn) {
+ elm_object_part_content_set(base,
+ button_swallow[REFRESH],
+ priv->other_btn);
+ evas_object_show(priv->other_btn);
+
+ elm_object_part_content_set(base, button_swallow[OTHER],
+ priv->close_btn);
+ evas_object_show(priv->close_btn);
+ } else {
+ elm_object_part_content_set(base,
+ button_swallow[REFRESH],
+ priv->refresh_btn);
+ evas_object_show(priv->refresh_btn);
+
+ elm_object_part_content_set(base, button_swallow[OTHER],
+ priv->other_btn);
+ evas_object_show(priv->other_btn);
+
+ elm_object_part_content_set(base, button_swallow[CLOSE],
+ priv->close_btn);
+ evas_object_show(priv->close_btn);
+ }
+
+ if (priv->ap) {
+ elm_object_disabled_set(priv->other_btn, EINA_FALSE);
+ elm_object_disabled_set(priv->connect_btn, EINA_FALSE);
+ } else {
+ elm_object_disabled_set(priv->connect_btn, EINA_TRUE);
+ elm_object_disabled_set(priv->other_btn, EINA_TRUE);
+ }
+ } else if (priv->network_type == TYPE_WIRED) {
+ if (!priv->wired_conn) {
+ elm_object_disabled_set(priv->connect_btn, EINA_TRUE);
+ elm_object_disabled_set(priv->other_btn, EINA_TRUE);
+ } else {
+ elm_object_disabled_set(priv->connect_btn, EINA_FALSE);
+ elm_object_disabled_set(priv->other_btn, EINA_FALSE);
+ }
+
+ elm_object_part_content_set(base, button_swallow[REFRESH],
+ priv->other_btn);
+ evas_object_show(priv->other_btn);
+
+ elm_object_part_content_set(base, button_swallow[OTHER],
+ priv->close_btn);
+ evas_object_show(priv->close_btn);
+ }
+}
+
+/**
+* Get the connection profile infomation
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _get_connection_profile_info(struct _priv *priv)
+{
+ struct connection_info info;
+ int ret;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = connection_mgr_get_profile_info(priv->connection, &info);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_get_profile_info() failed.");
+ return RET_FAILED;
+ }
+
+ priv->profile = info.profile;
+ strncpy(priv->profile_name, info.name, MAX_NAME_SIZE - 1);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Callback function to set content to list panel
+*
+* Depending on different ethernet, set corresponding connection state
+* view to the list panel
+*
+* @param[in] priv _priv object bypassed
+*/
+#if 0
+static void _connection_ethernet_state_callback(
+ connection_ethernet_cable_state_e state, void *data)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("data is NULL.");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->network_type != TYPE_WIRED) {
+ _ERR("cur network type is wireless, return.");
+ return;
+ }
+
+ if (state == CONNECTION_ETHERNET_CABLE_ATTACHED) {
+ _fill_content_part(priv, priv->wired_con_box);
+ } else if (state == CONNECTION_ETHERNET_CABLE_DETACHED) {
+ _fill_content_part(priv, priv->wired_discon_ly);
+
+ priv->wired_conn = EINA_FALSE;
+ }
+
+ _set_action_btn_pos(priv);
+}
+#endif
+
+/**
+* Initialize the connection information
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _init_connection(struct _priv *priv)
+{
+ int ret = RET_FAILED;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ priv->connection = connection_mgr_create();
+ if (!priv->connection) {
+ _ERR("connection_mgr_create() failed.");
+ return RET_FAILED;
+ }
+
+#if 0
+ ret = connection_mgr_register_ethernet_state_cb
+ (priv->connection,
+ _connection_ethernet_state_callback,
+ priv);
+#endif
+ if (ret != RET_SUCCESS) {
+ _ERR("register_ethernet_state_cb() failed.");
+ return RET_FAILED;
+ }
+
+ ret = _get_connection_profile_info(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("_get_connection_profile_info() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Create the layout when no network cable plugin
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _create_wired_disconnect_part(struct _priv *priv)
+{
+ Evas_Object *disconnect_ly;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is NULL.\n");
+ return RET_FAILED;
+ }
+
+ disconnect_ly = util_add_layout(priv->base,
+ UG_NETWORK_EDJ_FILE, GRP_WIRED_DISCONNECTED_LY);
+ if (!disconnect_ly) {
+ _ERR("call elm_layout_add() failed.\n");
+ return RET_FAILED;
+ }
+
+ elm_object_part_text_set(disconnect_ly, PART_DISCONNECT_TEXT,
+ _(TXT_PLUG_CABLE));
+
+ evas_object_hide(disconnect_ly);
+
+ priv->wired_discon_ly = disconnect_ly;
+
+ return RET_SUCCESS;
+}
+
+/**
+* Callback function when profile button is clicked
+*
+* This function disable/enable the relating buttons according to the connection state
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which clicked event occurred
+* @param[in] event_inf event information
+*/
+static void _profie_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event_inf)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->wired_conn) {
+ elm_object_signal_emit(obj, SIG_STATE_UNSELECTED, ELM);
+ priv->wired_conn = EINA_FALSE;
+ _disable_connect_btn(priv);
+ _disable_other_btn(priv);
+ } else {
+ elm_object_signal_emit(obj, SIG_STATE_SELECTED, ELM);
+ priv->wired_conn = EINA_TRUE;
+ _enable_connect_btn(priv);
+ _enable_other_btn(priv);
+ }
+}
+
+/**
+* Create the layout when wired connect successful
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _create_wired_connect_part(struct _priv *priv)
+{
+ Evas_Object *box;
+ Evas_Object *btn;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is NULL.\n");
+ return RET_FAILED;
+ }
+
+ box = util_add_box(priv->base, NULL);
+ if (!box) {
+ _ERR("add wired connect box failed.");
+ return RET_FAILED;
+ }
+
+ elm_box_horizontal_set(box, EINA_FALSE);
+
+ btn = util_add_button(box, STYLE_WIRED_LIST_BTN, NULL,
+ _(priv->profile_name));
+ if (!btn) {
+ _ERR("elm_button_add failed.\n");
+ evas_object_del(box);
+ return RET_FAILED;
+ }
+
+ evas_object_size_hint_align_set(btn, 0, 0);
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _profie_btn_clicked_cb, priv);
+ if (priv->wired_conn)
+ elm_object_signal_emit(btn, SIG_STATE_SELECTED, ELM);
+ elm_box_pack_end(box, btn);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
+ evas_object_hide(box);
+
+ priv->wired_con_box = box;
+
+ return RET_SUCCESS;
+}
+
+/**
+* Display the wired view when select the wired network type
+*
+* This fuction is called when the wired of the network type popup is clicked
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _display_wired_setting(struct _priv *priv)
+{
+ Eina_Bool plugin;
+ int ret;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ _create_wired_connect_part(priv);
+
+ _create_wired_disconnect_part(priv);
+
+ ret = connection_mgr_get_ethernet_state(priv->connection,
+ &plugin);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_get_ethernet_state() failed.");
+ plugin = EINA_FALSE;
+ }
+
+ if (plugin) {
+ _fill_content_part(priv, priv->wired_con_box);
+ } else {
+ priv->wired_conn = EINA_FALSE;
+ _fill_content_part(priv, priv->wired_discon_ly);
+ }
+
+ _set_action_btn_pos(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Create the layout when wireless connect successful
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static void _create_wireless_disconnect_part(struct _priv *priv)
+{
+ Evas_Object *disconnect_ly;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ if (priv->wireless_discon_ly)
+ return;
+
+ disconnect_ly = util_add_layout(priv->base,
+ UG_NETWORK_EDJ_FILE, GRP_WIRELESS_DISCONNECT_LY);
+ if (!disconnect_ly) {
+ _ERR("call elm_layout_add() failed.\n");
+ return;
+ }
+
+ elm_object_part_text_set(disconnect_ly, PART_DISCONNECT_TEXT,
+ TXT_NO_NETWORK);
+
+ evas_object_hide(disconnect_ly);
+
+ priv->wireless_discon_ly = disconnect_ly;
+}
+
+/**
+* Callback funcion called to get the text name of the added item
+*
+* This function return the strdup'()ed string of the added genlist item
+*
+* @param[in] data the user data
+* @param[in] obj the genlist object
+* @param[in] part the part text
+* @return strdup'()ed string on success ,NULL otherwise
+*/
+static char *_item_ap_name_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct wifi_ap_info *ap_info;
+
+ if (!data || !obj || !part) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ ap_info = data;
+
+ if (!strcmp(part, PART_ELM_TEXT))
+ return strdup(ap_info->essid);
+
+ return NULL;
+}
+
+/**
+* Create a new genlist item class in a given genlist widget
+*
+* @param[in] style the genlist style set to the item
+* @return new allocated genlist item class
+*/
+static Elm_Genlist_Item_Class *_create_item_class(char *style)
+{
+ Elm_Genlist_Item_Class *ic;
+
+ if (!style) {
+ _ERR("the param is invalid.");
+ return NULL;
+ }
+
+ ic = elm_genlist_item_class_new();
+ if (!ic) {
+ _ERR("elm_genlist_item_class_new() failed.");
+ return NULL;
+ }
+
+ ic->item_style = style;
+ ic->func.text_get = _item_ap_name_get;
+ ic->func.content_get = NULL;
+ ic->func.state_get = NULL;
+ ic->func.del = NULL;
+
+ return ic;
+}
+
+/**
+* Create the genlist item class for both locked and unlocked
+*
+* @param[in] priv the data _priv structure bypassed
+*/
+static void _create_genlist_item_class(struct _priv *priv)
+{
+ Elm_Genlist_Item_Class *ic;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ ic = _create_item_class(STYLE_ITEM_LOCK);
+ if (!ic) {
+ _ERR("get item class failed.");
+ return;
+ }
+
+ priv->lock_ic = ic;
+
+ ic = _create_item_class(STYLE_ITEM_NOLOCK);
+ if (!ic) {
+ _ERR("get item class failed.");
+ return;
+ }
+
+ priv->nolock_ic = ic;
+}
+
+/**
+* Create the genlist view
+*
+* This function create the genlist item class and genlist widget
+*
+* @param[in] priv _priv object bypassed
+* @return the genlist object in success,NULL otherwise
+*/
+static Evas_Object *_create_genlist_view(struct _priv *priv)
+{
+ Evas_Object *genlist;
+
+ if (!priv) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ _create_genlist_item_class(priv);
+
+ genlist = util_add_genlist(priv->base);
+ if (!genlist) {
+ _ERR("util_add_genlist() failed.\n");
+ return NULL;
+ }
+
+ priv->genlist = genlist;
+
+ elm_object_focus_next_object_set(genlist, genlist, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(genlist, priv->close_btn,
+ ELM_FOCUS_RIGHT);
+
+ return genlist;
+}
+
+/**
+* Callback function called when a certain genlist item is clicked
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding item which clicked event occurred
+* @param[in] event_inf event information
+*/
+static void _item_select_cb(void *data, Evas_Object *obj, void *ei)
+{
+ struct _priv *priv;
+ Elm_Object_Item *gen_item;
+ struct wifi_ap_info *ap_info;
+ int index;
+
+ if (!data || !ei) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ gen_item = ei;
+
+ if (priv->last_item == gen_item) {
+ elm_object_item_signal_emit(gen_item, SIG_STATE_UNSELECTED, ELM);
+
+ _disable_connect_btn(priv);
+ _disable_other_btn(priv);
+
+ priv->last_item = NULL;
+
+ return;
+ }
+
+ elm_object_item_signal_emit(gen_item, SIG_STATE_SELECTED, ELM);
+ if (priv->last_item)
+ elm_object_item_signal_emit(priv->last_item,
+ SIG_STATE_UNSELECTED, ELM);
+ priv->last_item = gen_item;
+
+ _enable_connect_btn(priv);
+ _enable_other_btn(priv);
+
+ index = elm_genlist_item_index_get(priv->last_item);
+ if (index < 0) {
+ _ERR("the index of item is invalid.");
+ return;
+ }
+
+ ap_info = eina_list_nth(priv->ap_list, index);
+ if (!ap_info) {
+ _ERR("ap info is NULL.");
+ return;
+ }
+
+ if (priv->ap_name) {
+ free(priv->ap_name);
+ priv->ap_name = NULL;
+ }
+
+ priv->ap_name = strdup(ap_info->essid);
+ if (!priv->ap_name) {
+ _ERR("ap name gets failed.");
+ return;
+ }
+
+ if (priv->ap) {
+ wifi_mgr_ap_destroy(priv->ap);
+ priv->ap = NULL;
+ }
+
+ wifi_mgr_ap_clone(&priv->ap, ap_info->ap);
+ if (!priv->ap) {
+ _ERR("ap clone failed.");
+ return;
+ }
+
+ if (ap_info->secure_type == WIFI_SECURITY_TYPE_NONE) {
+ if (priv->ap_pwd) {
+ free(priv->ap_pwd);
+ priv->ap_pwd = NULL;
+ }
+ }
+}
+
+/**
+* Effect the connected state when timer is empired
+*
+* @param[in]data the user data
+* @return ECORE_CALLBACK_CANCEL returns to finish time
+*/
+static Eina_Bool _select_connected_cb(void *data)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ priv = data;
+
+ elm_object_item_signal_emit(priv->last_item, SIG_STATE_SELECTED, ELM);
+ _enable_connect_btn(priv);
+ _enable_other_btn(priv);
+
+ priv->timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+/**
+*This is a callback function called when you get the found access point repeatedly
+*
+* The ap valid only here. if use outside the function, must wifi_mgr_ap_clone() to clone it
+*
+* @param[in] ap the access point
+* @param[in] data the user data
+* @return 0 to continue with the next iterator of the loop,-1 to break
+*/
+static bool _wifi_found_ap_cb(wifi_ap_h ap, void *data)
+{
+ int ret;
+ bool state;
+ struct _priv *priv;
+ struct wifi_ap_info *ap_info;
+ Elm_Object_Item *item;
+
+ if (!ap || !data) {
+ _ERR("Parameter error!");
+ return EINA_FALSE;
+ }
+
+ priv = data;
+
+ ret = wifi_mgr_is_activated(&state);
+ if (ret != WIFI_ERROR_NONE || state == 0) {
+ _ERR("failt to wifi_is_activated");
+ return EINA_FALSE;
+ }
+
+ ap_info = calloc(1, sizeof(*ap_info));
+ if (!ap_info) {
+ _ERR("calloc failed");
+ return EINA_FALSE;
+ }
+
+ wifi_mgr_get_ap_info(ap, ap_info);
+
+ ap_info->ap = ap;
+ ap_info->user_data = priv;
+ priv->ap_list = eina_list_append(priv->ap_list, ap_info);
+
+ _fill_content_part(priv, priv->genlist);
+
+ if (ap_info->secure_type == WIFI_SECURITY_TYPE_NONE)
+ item = elm_genlist_item_append(priv->genlist, priv->nolock_ic,
+ ap_info, NULL, ELM_GENLIST_ITEM_NONE,
+ _item_select_cb, priv);
+ else
+ item = elm_genlist_item_append(priv->genlist, priv->lock_ic,
+ ap_info, NULL, ELM_GENLIST_ITEM_NONE,
+ _item_select_cb, priv);
+ if (!item) {
+ _ERR("genlist append item failed.");
+ return EINA_FALSE;
+ }
+
+ if (ap_info->state == WIFI_CONNECTION_STATE_CONNECTED) {
+ priv->last_item = item;
+ if (priv->ap) {
+ wifi_mgr_ap_destroy(priv->ap);
+ priv->ap = NULL;
+ }
+
+ wifi_mgr_ap_clone(&priv->ap, ap);
+
+ priv->timer = ecore_timer_add(TIMER_INTERNAL,
+ _select_connected_cb, priv);
+ if (!priv->timer) {
+ _ERR("add timer failed.");
+ return EINA_FALSE;
+ }
+ }
+
+ return EINA_TRUE;
+}
+
+/**
+* Scan the wifi access point
+*
+* @param[in] error_code the wifi error type
+* @param[in] data the user data
+*/
+static void _wifi_scan_request_cb(wifi_error_e error_code, void *data)
+{
+ int ret;
+
+ if (!data) {
+ _ERR("data is NULL.");
+ return;
+ }
+
+ ret = wifi_mgr_foreach_found_aps(_wifi_found_ap_cb, data);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_foreach_found_aps() failed.");
+ return;
+ }
+}
+
+/**
+* Callback function briefly called after wifi activated successfully
+*
+* @param[in] error_code the wifi activation error type
+* @param[in] data the user data
+*/
+static void _wifi_activated_cb(wifi_error_e result, void *data)
+{
+ struct _priv *priv;
+ int ret;
+
+ if (result != WIFI_ERROR_NONE) {
+ _ERR("Wi-Fi Activation Failed! error ==%s.\n",
+ wifi_mgr_error_dbg(result));
+ return;
+ }
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ ret = wifi_mgr_scan_request(_wifi_scan_request_cb, data);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_scan_request() failed.");
+ _fill_content_part(priv, priv->wireless_discon_ly);
+ _set_action_btn_pos(priv);
+ return;
+ }
+
+ priv->wifi_conn = EINA_TRUE;
+
+ _set_action_btn_pos(priv);
+
+ _fill_content_part(priv, priv->genlist);
+}
+
+/**
+* Clear the genlist item list.
+*
+* Called when need clear the ap list,eg.refrsh button is clicked
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _clear_genlist_item_list(struct _priv *priv)
+{
+ void *temp;
+
+ if (!priv || !priv->genlist) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ elm_genlist_clear(priv->genlist);
+
+ if (priv->ap_list)
+ EINA_LIST_FREE(priv->ap_list, temp)
+ free(temp);
+}
+
+/**
+* Display the wireless view when select the wireless network type
+*
+* Called when the wireless of the network type popup is clicked
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _display_wireless_setting(struct _priv *priv)
+{
+ Evas_Object *obj;
+ bool activated;
+ int ret;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ _create_wireless_disconnect_part(priv);
+
+ if (!priv->wifi_init) {
+ obj = _create_genlist_view(priv);
+ if (!obj) {
+ _ERR("fail to create genlist");
+ return RET_FAILED;
+ }
+
+ ret = wifi_mgr_init();
+ if (ret != RET_SUCCESS) {
+ _ERR("fail to init wifi network");
+ return RET_FAILED;
+ }
+
+ priv->wifi_init = 1;
+ }
+
+ _clear_genlist_item_list(priv);
+
+ activated = EINA_FALSE;
+ ret = wifi_mgr_is_activated(&activated);
+ if (ret != RET_SUCCESS) {
+ _ERR("the wifi is not activated.");
+ return RET_FAILED;
+ }
+
+ if (activated) {
+ if (priv->ap) {
+ wifi_mgr_ap_destroy(priv->ap);
+ priv->ap = NULL;
+ }
+
+ ret = wifi_mgr_scan_request(_wifi_scan_request_cb,
+ (void *)priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_scan_request() failed.");
+ goto _wireless_finish;
+ }
+
+ priv->wifi_conn = EINA_TRUE;
+ } else {
+ priv->wifi_conn = EINA_FALSE;
+
+ ret = wifi_mgr_activate(_wifi_activated_cb, (void *)priv);
+ if (ret != RET_SUCCESS)
+ _ERR("wifi_mgr_activate() failed.");
+ }
+
+_wireless_finish:
+ _fill_content_part(priv, priv->wireless_discon_ly);
+ _set_action_btn_pos(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Refresh the text content below the network type button
+*
+* Called to set the network type name according to the network type currently
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _refresh_network_type_text(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ switch (priv->network_type) {
+ case TYPE_WIRELESS:
+ elm_object_part_text_set(priv->base,
+ PART_CUR_TYPE_TEXT,
+ _(TXT_WIRELESS_NETWORK));
+ elm_object_part_text_set(priv->type_btn,
+ PART_NETWORK_TYPE_SELECTED,
+ _(TXT_WIRELESS));
+ break;
+ case TYPE_WIRED:
+ elm_object_part_text_set(priv->base,
+ PART_CUR_TYPE_TEXT, _(TXT_WIRED_NETWORK));
+ elm_object_part_text_set(priv->type_btn,
+ PART_NETWORK_TYPE_SELECTED, _(TXT_WIRED));
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+* Callback function when popup type button is clicked
+*
+* This fuction set the current network type according to the clicked button text
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _type_select_btn_cb(void *data,
+ Evas_Object *obj, void *event_inf)
+{
+ struct _priv *priv;
+ const char *value;
+
+ if (!data || !obj) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ value = elm_object_text_get(obj);
+ if (!value) {
+ _ERR("get text from network type btn is NULL.");
+ return;
+ }
+
+ if ((!strcmp(value, _(popup_button[TYPE_WIRELESS])))
+ && priv->network_type == TYPE_WIRED) {
+ priv->network_type = TYPE_WIRELESS;
+
+ _display_wireless_setting(priv);
+ vconf_mgr_set_network_type(TYPE_WIRELESS);
+ } else if ((!strcmp(value, _(popup_button[TYPE_WIRED])))
+ && priv->network_type == TYPE_WIRELESS) {
+ priv->network_type = TYPE_WIRED;
+
+ _display_wired_setting(priv);
+ vconf_mgr_set_network_type(TYPE_WIRED);
+ }
+
+ _refresh_network_type_text(priv);
+
+ if (priv->network_ctxpopup) {
+ evas_object_del(priv->network_ctxpopup);
+ priv->network_ctxpopup = NULL;
+ }
+
+ _unset_layout_dim(priv);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling back event
+*
+* @param[in] data the user data
+* @param[in] e evas handler
+* @param[in] o the corresponding object which clicked event occurred
+* @param[in] ei event information
+*/
+static void _type_key_pressed_cb(void *data,
+ Evas *evas, Evas_Object *o, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+
+ if (priv->network_ctxpopup) {
+ evas_object_del(priv->network_ctxpopup);
+ priv->network_ctxpopup = NULL;
+ }
+
+ return;
+ }
+}
+
+/**
+* Evas_Smart_Cb type callback for handling clicked event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which clicked event occurred
+* @param[in] event_inf event information
+*/
+static void _network_type_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event_inf)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ Evas_Object *layout, *box;
+ Evas_Object *btn[BTN_TYPE];
+ Evas_Coord x;
+ Evas_Coord y;
+ Evas_Coord w;
+ Evas_Coord h;
+ int i;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ base = priv->base;
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(base, UG_NETWORK_EDJ_FILE,
+ GRP_NETWORK_TYPE_SELECT);
+ if (!layout) {
+ _ERR("util_add_layout() failed.\n");
+ return;
+ }
+
+ box = util_add_box(layout, PART_SWALLOW_CONTENT);
+ if (!box) {
+ evas_object_del(layout);
+ return;
+ }
+
+ evas_object_size_hint_weight_set(box,
+ EVAS_HINT_EXPAND, 0);
+
+ for (i = 0; i < BTN_TYPE; i++) {
+ btn[i] = util_add_button(box, STYLE_POPUP_BTN, NULL,
+ _(popup_button[i]));
+ if (!btn[i]) {
+ evas_object_del(layout);
+ return;
+ }
+
+ elm_box_pack_end(box, btn[i]);
+
+ evas_object_smart_callback_add(btn[i], SIG_CLICKED,
+ _type_select_btn_cb, priv);
+ }
+
+ if (priv->network_type == TYPE_WIRELESS)
+ elm_object_signal_emit(btn[TYPE_WIRELESS],
+ SIG_BTN_SELECTED, PROG);
+ else
+ elm_object_signal_emit(btn[TYPE_WIRED],
+ SIG_BTN_SELECTED, PROG);
+
+ elm_object_part_content_set(layout, PART_SWALLOW_CONTENT, box);
+
+ elm_object_focus_next_object_set(btn[1], btn[0], ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(btn[0], btn[1], ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn[1], btn[0], ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn[0], btn[1], ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(btn[0], btn[0], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(btn[0], btn[0], ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(btn[1], btn[1], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(btn[1], btn[1], ELM_FOCUS_RIGHT);
+
+ x = 0;
+ y = 0;
+ w = 0;
+ h = 0;
+ evas_object_geometry_get(priv->type_btn, &x, &y, &w, &h);
+ evas_object_move(layout, (x + w - TYPE_POPUP_X_OFFSET) * ELM_SCALE,
+ (y + h) * ELM_SCALE);
+
+ priv->network_ctxpopup = layout;
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _type_key_pressed_cb, priv);
+
+ elm_object_focus_set(btn[0], EINA_TRUE);
+ evas_object_show(layout);
+}
+
+/**
+* Create the upper part for the base view
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,-1 otherwise
+*/
+static int _create_upper_layout(struct _priv *priv)
+{
+ Evas_Object *type_btn;
+ Evas_Object *base;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ elm_object_part_text_set(base, PART_SELECT_TEXT, _(TXT_NETWORK_DISC));
+
+ type_btn = util_add_button(base, STYLE_TYPE_BTN, PART_NETWORK_TYPE,
+ _(TXT_TYPE_BTN));
+ if (!type_btn)
+ return RET_FAILED;
+
+ evas_object_smart_callback_add(type_btn, SIG_CLICKED,
+ _network_type_btn_clicked_cb, priv);
+
+ elm_object_focus_next_object_set(type_btn, type_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(type_btn, type_btn, ELM_FOCUS_LEFT);
+
+ priv->type_btn = type_btn;
+
+ elm_object_focus_set(type_btn, EINA_TRUE);
+
+ _refresh_network_type_text(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Callback function briefly called after wifi connected successfully
+*
+* @param[in] error_code the wifi activation error type
+* @param[in] user_data the user data
+*/
+static void _wifi_connected_cb(wifi_error_e error_code, void *user_data)
+{
+ struct _priv *priv;
+
+ if (!user_data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = user_data;
+
+ if (!priv->status_popup)
+ return;
+
+ if (error_code != WIFI_ERROR_NONE) {
+ _ERR("connect AP failed.");
+ _show_confirm_popup(priv);
+ return;
+ }
+
+ ug_destroy_me(priv->ug);
+}
+
+/**
+* Connect to the selected wifi access point
+*
+* @param[in] priv _priv object bypassed
+* @param[in] index the index of the access point
+* @return 0 on success, otherwise -1
+*/
+static int _wifi_connect_ap(struct _priv *priv, int index)
+{
+ struct wifi_ap_info *ap_info;
+ int ret;
+
+ if (!priv || index < 0) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ _show_progress_popup(priv);
+
+ ap_info = eina_list_nth(priv->ap_list, index);
+ if (!ap_info) {
+ _ERR("ap info is NULL.");
+ return RET_FAILED;
+ }
+
+ if (priv->ap_name) {
+ free(priv->ap_name);
+ priv->ap_name = NULL;
+ }
+
+ priv->ap_name = strdup(ap_info->essid);
+ if (!priv->ap_name) {
+ _ERR("ap name gets failed.");
+ return RET_FAILED;
+ }
+
+ if (ap_info->secure_type == WIFI_SECURITY_TYPE_NONE) {
+ if (priv->ap_pwd) {
+ free(priv->ap_pwd);
+ priv->ap_pwd = NULL;
+ }
+ } else {
+ priv->cur_view = NETWORK_WIFI_PASSCODE_VIEW;
+ viewmgr_push(priv->vmgr,
+ wifi_passcode_view_vclass_get(),
+ ap_info);
+
+ return RET_SUCCESS;
+ }
+
+ ret = wifi_mgr_forget_last_ap();
+ if (ret != RET_SUCCESS) {
+ _ERR("forget last ap failed.");
+ return RET_FAILED;
+ }
+
+ if (priv->ap_pwd) {
+ ret = wifi_mgr_set_passphrase(priv->ap,
+ priv->ap_pwd);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_set_passphrase() failed.");
+ return RET_FAILED;
+ }
+ }
+
+ ret = wifi_mgr_connect(priv->ap, _wifi_connected_cb, priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("Fail to connection request.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Convert connection error type code to the corresponding string
+*
+* @param[in] err_code the connection error type
+* @return the error description string
+*/
+#if 0
+static const char *_convert_error_to_string(connection_error_e err_type)
+{
+ switch (err_type) {
+ case CONNECTION_ERROR_NONE:
+ return "NONE";
+ case CONNECTION_ERROR_INVALID_PARAMETER:
+ return "INVALID_PARAMETER";
+ case CONNECTION_ERROR_OUT_OF_MEMORY:
+ return "OUT_OF_MEMORY";
+ case CONNECTION_ERROR_INVALID_OPERATION:
+ return "INVALID_OPERATION";
+ case CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+ return "ADDRESS_FAMILY_NOT_SUPPORTED";
+ case CONNECTION_ERROR_OPERATION_FAILED:
+ return "OPERATION_FAILED";
+ case CONNECTION_ERROR_ITERATOR_END:
+ return "ITERATOR_END";
+ case CONNECTION_ERROR_NO_CONNECTION:
+ return "NO_CONNECTION";
+ case CONNECTION_ERROR_NOW_IN_PROGRESS:
+ return "NOW_IN_PROGRESS";
+ case CONNECTION_ERROR_ALREADY_EXISTS:
+ return "ALREADY_EXISTS";
+ case CONNECTION_ERROR_OPERATION_ABORTED:
+ return "OPERATION_ABORTED";
+ case CONNECTION_ERROR_DHCP_FAILED:
+ return "DHCP_FAILED";
+ case CONNECTION_ERROR_INVALID_KEY:
+ return "INVALID_KEY";
+ case CONNECTION_ERROR_NO_REPLY:
+ return "NO_REPLY";
+ case CONNECTION_ERROR_NO_KEYWORD:
+ return "NO_KEYWORD";
+ case CONNECTION_ERROR_TCP_RST:
+ return "RST_IN_TCP_RESPONSE";
+ case CONNECTION_ERROR_TCP_SYN_TIMEOUT:
+ return "TCP_SYN_TIMEOUT";
+ case CONNECTION_ERROR_OFFLINE:
+ return "CONNECTION_OFFLINE";
+ case CONNECTION_ERROR_NETWORK_MONITOR_FAILURE:
+ return "monitor failer";
+ case CONNECTION_ERROR_INVALID_GATEWAY:
+ return "invalid gateway";
+ case CONNECTION_ERROR_INVALID_MACADDRESS:
+ return "invalid mac addr";
+ default:
+ break;
+ }
+
+ return "Unknown";
+}
+#endif
+
+/**
+* Callback function called by _connection_check_gateway_async_cb()
+*
+* Called after checking whether the profile can access to the internet asynchronously
+*
+* @param[in] result the connection error type
+* @param[in] data the user data
+*/
+#if 0
+static void _connection_get_is_online_async_cb(
+ connection_error_e result, void *data)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ if (result != CONNECTION_ERROR_NONE) {
+ _ERR("connection result: %s.",
+ _convert_error_to_string(result));
+ _show_confirm_popup(priv);
+ } else {
+ ug_destroy_me(priv->ug);
+ }
+}
+
+/**
+* Check whether the profile can access to the internet asynchronously
+*
+* @param[in] result the connection error type
+* @param[in] data the user data
+*/
+static void _connection_check_gateway_async_cb(
+ connection_error_e result, void *data)
+{
+ struct _priv *priv;
+ int ret;
+
+ if (!data) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ if (result != CONNECTION_ERROR_NONE) {
+ _ERR("connection result: %s.",
+ _convert_error_to_string(result));
+ _show_confirm_popup(priv);
+ } else {
+ ret = connection_mgr_get_is_online_async(priv->connection,
+ _connection_get_is_online_async_cb,
+ (void *)priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_get_is_online_async() failed.");
+ return;
+ }
+ }
+}
+#endif
+
+/**
+* Write the connection information saved last time to the profile
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success, otherwize -1
+*/
+static int _connection_set_last_network(struct _priv *priv)
+{
+ int ret;
+ enum setting_mode ip_mode;
+ struct network_info info;
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = vconf_mgr_get_wired_ip_mode(&ip_mode);
+ if (ret != RET_SUCCESS) {
+ _ERR("get wired ip mode from vconf failed.");
+ return ret;
+ }
+
+ if (ip_mode == MODE_AUTO) {
+ ret = connection_mgr_ip_dynamic_config(priv->connection,
+ priv->profile);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_ip_dynamic_config() failed.");
+ return ret;
+ }
+ } else {
+ ret = vconf_mgr_get_wired_network_info(&info);
+ if (ret != RET_SUCCESS) {
+ _ERR("vconf_mgr_get_wired_network_info() failed.");
+ return ret;
+ }
+
+ ret = connection_mgr_set_profile(priv->connection,
+ priv->profile, &info);
+ if (ret != RET_SUCCESS) {
+ _ERR("set profile failed.");
+ return ret;
+ }
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Proccess the wired network connection
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success, otherwise -1
+*/
+static int _wired_connect_proc(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return RET_FAILED;
+ }
+
+ _show_progress_popup(priv);
+
+ _get_connection_profile_info(priv);
+
+ ret = _connection_set_last_network(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("_connection_set_last_network() failed.");
+ return ret;
+ }
+
+ _DBG("Not Yet");
+#if 0
+ ret = connection_mgr_check_gateway_async(priv->profile,
+ _connection_check_gateway_async_cb, (void *)priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("connection_mgr_get_is_online_async() failed.");
+ return ret;
+ }
+#endif
+
+ return RET_SUCCESS;
+}
+
+/**
+* Process the network connection
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _connect_network(struct _priv *priv)
+{
+ int index;
+ int ret;
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return;
+ }
+
+ if (priv->network_type == TYPE_WIRELESS) {
+ if (priv->last_item) {
+ index = elm_genlist_item_index_get(priv->last_item);
+
+ ret = _wifi_connect_ap(priv, index);
+ if (ret != RET_SUCCESS) {
+ _ERR("connect ap");
+ _show_confirm_popup(priv);
+ return;
+ }
+ }
+ } else {
+ ret = _wired_connect_proc(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("connect ap");
+ _show_confirm_popup(priv);
+ return;
+ }
+ }
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _retry_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _del_status_popup(priv);
+
+ _connect_network(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _cancel_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _del_status_popup(priv);
+
+ elm_object_focus_set(priv->connect_btn, EINA_TRUE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling unfocus event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the unfocus event occurred
+* @param[in] source event information
+*/
+static void _ctxpopup_unfocused_cb(void *data,
+ Evas_Object *obj, void *source)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("data is NULL.\n");
+ return;
+ }
+
+ priv = data;
+
+ _unset_layout_dim(priv);
+
+ evas_object_del(obj);
+}
+
+/**
+* Called when confirm information popup is shown
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _show_confirm_popup(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *retry_btn;
+ Evas_Object *cancel_btn;
+ // Evas_Coord w;
+ // Evas_Coord h;
+ char content[CONTENT_TXT_SIZE];
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return;
+ }
+
+ if (priv->status_popup)
+ _del_status_popup(priv);
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_NETWORK_EDJ_FILE,
+ GRP_CONFIRM_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ evas_object_show(layout);
+
+ memset(content, 0, CONTENT_TXT_SIZE);
+ if (priv->network_type == TYPE_WIRED) {
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRED_LY));
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s",
+ _(TXT_FAILED_CONNECT), _(priv->profile_name));
+ } else {
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s",
+ _(TXT_FAILED_CONNECT), priv->ap_name);
+ }
+
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, content);
+
+ retry_btn = util_add_button(layout, STYLE_SETTING_BTN,
+ PART_RETRY_BTN, _(TXT_RETRY));
+ if (!retry_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ cancel_btn = util_add_button(layout, STYLE_SETTING_BTN,
+ PART_CANCEL_BTN, _(TXT_CANCEL));
+ if (!cancel_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_focus_next_object_set(retry_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(cancel_btn, retry_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_DOWN);
+
+ evas_object_smart_callback_add(retry_btn, SIG_CLICKED,
+ _retry_btn_clicked_cb, priv);
+ evas_object_smart_callback_add(cancel_btn, SIG_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ elm_object_focus_set(retry_btn, EINA_TRUE);
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_pressed_cb, priv);
+
+ evas_object_move(layout, CENTER_ALIGN * (DEFAULT_WIN_WIDTH - POPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - POPUP_HEIGHT) * ELM_SCALE);
+
+ priv->status_popup = layout;
+}
+
+/**
+* Called when connect a wifi device and show connection progress
+*
+* @param[in] priv _priv object to be finalized
+*/
+static void _show_progress_popup(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *cancel_btn;
+ char content[CONTENT_TXT_SIZE];
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return;
+ }
+
+ if (priv->status_popup)
+ _del_status_popup(priv);
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_NETWORK_EDJ_FILE,
+ GRP_PROCESSING_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ evas_object_show(layout);
+
+ priv->status_popup = layout;
+
+ memset(content, 0, CONTENT_TXT_SIZE);
+ if (priv->network_type == TYPE_WIRED) {
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRED_LY));
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s",
+ _(TXT_CONNECTTING), _(priv->profile_name));
+ } else {
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s",
+ _(TXT_CONNECTTING), priv->ap_name);
+ }
+
+ elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
+
+ cancel_btn = util_add_button(layout, STYLE_SETTING_BTN,
+ PART_CANCEL_BTN, _(TXT_CANCEL));
+ if (!cancel_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ evas_object_show(cancel_btn);
+
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_DOWN);
+
+ evas_object_smart_callback_add(cancel_btn, SIG_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ elm_object_focus_set(cancel_btn, EINA_TRUE);
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_pressed_cb, priv);
+
+ evas_object_move(layout, CENTER_ALIGN * (DEFAULT_WIN_WIDTH - POPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - POPUP_HEIGHT) * ELM_SCALE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _connect_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _connect_network(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _refresh_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _clear_genlist_item_list(priv);
+
+ _display_wireless_setting(priv);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _other_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ struct connection_info info;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ priv->cur_view = NETWORK_IP_SETTING_VIEW;
+
+ info.cur_type = priv->network_type;
+ info.connection = priv->connection;
+
+ if (priv->network_type == TYPE_WIRED) {
+ strncpy(info.name, priv->profile_name,
+ MAX_NAME_SIZE - 1);
+ } else {
+ if (!priv->ap) {
+ _ERR("selected ap is NULL.");
+ return;
+ }
+
+ info.ap = priv->ap;
+
+ if (priv->ap_name)
+ strncpy(info.name, priv->ap_name,
+ MAX_NAME_SIZE - 1);
+ }
+
+ base = viewmgr_push(priv->vmgr,
+ ip_setting_view_vclass_get(), &info);
+ if (!base)
+ _ERR("add connection layout failed.");
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _close_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->ug)
+ return;
+
+ ug_destroy_me(priv->ug);
+}
+
+/**
+* Create the action buttons such as "Connect" button and set to defined part
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _create_action_btns(struct _priv *priv)
+{
+ Evas_Object *bt[BTN_ACT];
+ Evas_Object *base;
+ int i;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ for (i = 0; i < BTN_ACT; i++) {
+ bt[i] = util_add_button(base, STYLE_ACTION_BTN,
+ button_swallow[i], _(action_button[i]));
+ if (!bt[i])
+ return RET_FAILED;
+ }
+
+ priv->connect_btn = bt[CONNECT];
+ priv->refresh_btn = bt[REFRESH];
+ priv->other_btn = bt[OTHER];
+ priv->close_btn = bt[CLOSE];
+
+ evas_object_hide(priv->refresh_btn);
+
+ evas_object_smart_callback_add(bt[CONNECT], SIG_CLICKED,
+ _connect_btn_clicked_cb, priv);
+ evas_object_smart_callback_add(bt[REFRESH], SIG_CLICKED,
+ _refresh_btn_clicked_cb, priv);
+ evas_object_smart_callback_add(bt[OTHER], SIG_CLICKED,
+ _other_btn_clicked_cb, priv);
+ evas_object_smart_callback_add(bt[CLOSE], SIG_CLICKED,
+ _close_btn_clicked_cb, priv);
+
+ _set_action_btn_pos(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Create the dim layout but didn't show it
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _create_dim_layout(struct _priv *priv)
+{
+ Evas_Object *dim_ly;
+
+ if (!priv || !priv->win) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ dim_ly = util_add_layout(priv->win, UG_NETWORK_EDJ_FILE, GRP_DIM_LY);
+ if (!dim_ly) {
+ _ERR("elm_layout_add() failed.\n");
+ return RET_FAILED;
+ }
+
+ priv->dim_ly = dim_ly;
+
+ _unset_layout_dim(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Create the base layout and initialize the network
+*
+* Called at the start of the application for initializing before the main loop start up
+*
+* @param[in] vmgr view manager object
+* @param[in] data the user data passed from the callback registration function
+* @return the base layout of network setting
+*/
+static Evas_Object *_create(struct viewmgr *vmgr, void *data)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ int ret;
+
+ if (!vmgr || !vmgr->win || !vmgr->ug) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ priv = _init_priv();
+ if (!priv) {
+ _ERR("init priv failed.");
+ return NULL;
+ }
+
+ priv->win = vmgr->win;
+ priv->ug = vmgr->ug;
+ priv->vmgr = vmgr;
+
+ ret = _init_connection(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("create connection failed.");
+ _fini_priv(priv);
+ return NULL;
+ }
+
+ base = _create_main_layout(priv);
+ if (!base) {
+ _ERR("Add main view failed.\n");
+ _fini_priv(priv);
+ return NULL;
+ }
+
+ priv->base = base;
+
+ evas_object_data_set(base, KEY_PRIV, priv);
+
+ vconf_mgr_get_network_type(&priv->network_type);
+
+ ret = _create_upper_layout(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("create network type button failed.");
+ goto error;
+ }
+
+ if (priv->network_type == TYPE_WIRELESS)
+ ret = _display_wireless_setting(priv);
+ else if (priv->network_type == TYPE_WIRED)
+ ret = _display_wired_setting(priv);
+ else
+ ret = RET_FAILED;
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ ret = _create_action_btns(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ ret = _create_dim_layout(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ return base;
+
+error:
+ evas_object_del(priv->base);
+ _fini_priv(priv);
+
+ return NULL;
+}
+
+/**
+* Resume the network ug
+*
+* @param[in] base the base layout which was initilized in the _create()
+*/
+static void _resume(Evas_Object *base)
+{
+ struct _priv *priv;
+
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = evas_object_data_get(base, KEY_PRIV);
+ if (!priv) {
+ _ERR("priv got from base is NULL.");
+ return;
+ }
+
+ evas_object_show(base);
+
+ switch (priv->cur_view) {
+ case NETWORK_IP_SETTING_VIEW:
+ elm_object_focus_set(priv->other_btn, EINA_TRUE);
+ break;
+ case NETWORK_WIFI_PASSCODE_VIEW:
+ elm_object_focus_set(priv->connect_btn, EINA_TRUE);
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+* Handle the message sended
+*
+* @param[in] base the base layout which was initilized in the _create()
+* @param[in] message_id the id of the message sended
+* @param[in] data the user data
+*/
+static void _message_handler(Evas_Object *base,
+ enum message_id msg_id, void *data)
+{
+ struct _priv *priv;
+
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = evas_object_data_get(base, KEY_PRIV);
+ if (!priv) {
+ _ERR("priv got from base is NULL.");
+ return;
+ }
+
+ if (msg_id == PASSCODE_DEVIVER) {
+ if (priv->ap_pwd)
+ free(priv->ap_pwd);
+ priv->ap_pwd = strdup((char *)data);
+ }
+}
+
+/**
+* Pause the network ug
+*
+* @param[in] base the base layout which was initilized in the _create()
+*/
+static void _pause(Evas_Object *base)
+{
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ evas_object_hide(base);
+}
+
+/**
+* Destroy the network ug and release the resource
+*
+* @param[in] base the base layout which was initilized in the _create()
+*/
+static void _destroy(Evas_Object *base)
+{
+ struct _priv *priv;
+
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = evas_object_data_get(base, KEY_PRIV);
+
+ _fini_priv(priv);
+}
+
+/**
+* Get the view type
+*
+* @return the view type
+*/
+static enum view_type _get_view_type(void)
+{
+ return NETWORK_MAIN_VIEW;
+}
+
+static struct view_class _vclass = {
+ .create = _create,
+ .pause = _pause,
+ .resume = _resume,
+ .terminate = _destroy,
+ .message_handler = _message_handler,
+ .get_view_type = _get_view_type,
+};
+
+/**
+* Get the network view class
+*
+* @return the view class
+*/
+struct view_class *main_view_vclass_get(void)
+{
+ return &_vclass;
+}
--- /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 <Elementary.h>
+#include <Eina.h>
+
+#include "network_viewmgr.h"
+#include "defs.h"
+#include "dbg.h"
+
+struct _viewinfo {
+ struct view_class *vclass;
+ Evas_Object *base;
+ enum view_type view_type;
+};
+
+/**
+ * Create and initialize the view manager.
+ *
+ * Called when app is created.
+ *
+ * @return View manager object
+ */
+struct viewmgr *viewmgr_init()
+{
+ struct viewmgr *vmgr;
+
+ vmgr = calloc(1, sizeof(*vmgr));
+ if (!vmgr) {
+ _ERR("calloc vmgr failed.");
+ return NULL;
+ }
+
+ return vmgr;
+}
+
+/**
+ * Finalize the view manager.
+ *
+ * Called when app is about to destroyed.
+ *
+ * @param[in] vmgr View manager object
+ */
+void viewmgr_fini(struct viewmgr *vmgr)
+{
+ int i;
+
+ if (!vmgr)
+ return;
+
+ for (i = eina_list_count(vmgr->vlist); i > 0; i--)
+ viewmgr_pop(vmgr);
+
+ free(vmgr);
+}
+
+/**
+ * Callback function for the view deleted event.
+ *
+ * Called when the view is deleted.
+ *
+ * @param[in] data The pointer to view class object
+ * @param[in] e The pointer of the evas canvas
+ * @param[in] obj The object that is deleted
+ * @param[in] ev The pointer of event info
+ */
+static void _view_deleted(void *data, Evas *e, Evas_Object *obj, void *ev)
+{
+ struct view_class *vclass;
+
+ if (!data || !obj)
+ return;
+
+ vclass = data;
+ if (vclass->terminate)
+ vclass->terminate(obj);
+}
+
+/**
+ * Push a view to the view manager.
+ *
+ * Called when one new view is to be pushed.
+ *
+ * @param[in] vmgr View manager object
+ * @param[in] vclass The specific view class for the view to be pushed
+ * @param[in] data User data
+ * @return base if the view is created successfully; NULL if failed;
+ */
+Evas_Object *viewmgr_push(struct viewmgr *vmgr,
+ struct view_class *vclass, void *data)
+{
+ struct _viewinfo *vinfo, *vinfo_pre;
+ Evas_Object *base;
+
+ if (!vmgr || !vmgr->win || !vclass || !vclass->create)
+ return NULL;
+
+ vinfo = calloc(1, sizeof(*vinfo));
+ if (!vinfo)
+ return NULL;
+
+ base = vclass->create(vmgr, data);
+ if (!base) {
+ free(vinfo);
+ return NULL;
+ }
+ evas_object_event_callback_add(base, EVAS_CALLBACK_DEL,
+ _view_deleted, vclass);
+
+ vinfo->base = base;
+ vinfo->vclass = vclass;
+ vinfo->view_type = vclass->get_view_type();
+
+ vinfo_pre = eina_list_data_get(vmgr->vlist);
+ if (vinfo_pre && vinfo_pre->base
+ && vinfo_pre->vclass->pause)
+ vinfo_pre->vclass->pause(vinfo_pre->base);
+
+ vmgr->vlist = eina_list_prepend(vmgr->vlist, vinfo);
+
+ return base;
+}
+
+/**
+ * Send a message between the views.
+ *
+ * Called when there is the information to pass.
+ *
+ * @param[in] vmgr View manager object
+ * @param[in] view_type The view type
+ * @param[in] msg_id Message ID
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int viewmgr_send_message(struct viewmgr *vmgr,
+ enum view_type view_type,
+ enum message_id msg_id, void *data)
+{
+ struct _viewinfo *vinfo;
+ struct view_class *vclass;
+ Eina_List *list, *list_next;
+
+ if (!vmgr) {
+ _ERR("vmgr is NULL.");
+ return RET_FAILED;
+ }
+
+ EINA_LIST_FOREACH_SAFE(vmgr->vlist, list, list_next, vinfo) {
+ if (!vinfo) {
+ _ERR("vinfo is NULL.");
+ continue;
+ }
+
+ vclass = vinfo->vclass;
+
+ if (vinfo->view_type == view_type) {
+ if (vclass && vclass->message_handler)
+ vclass->message_handler(vinfo->base,
+ msg_id, data);
+
+ /*only support single message now, so break.*/
+ break;
+ }
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Pop a view from the view manager.
+ *
+ * Called when the top view is to be poped.
+ *
+ * @param[in] vmgr View manager object
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int viewmgr_pop(struct viewmgr *vmgr)
+{
+ struct _viewinfo *vinfo;
+
+ if (!vmgr || !vmgr->vlist) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ vinfo = eina_list_data_get(vmgr->vlist);
+ if (!vinfo) {
+ _ERR("eina_list_data_get() failed.");
+ return RET_FAILED;
+ }
+
+ vmgr->vlist = eina_list_remove_list(vmgr->vlist, vmgr->vlist);
+ viewmgr_resume(vmgr);
+
+ evas_object_del(vinfo->base);
+
+ free(vinfo);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Resume a view with the view manager.
+ *
+ * When the top view is poped, and the next view has some
+ * specific state to be show, the function is called.
+ *
+ * @param[in] vmgr View manager object
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int viewmgr_resume(struct viewmgr *vmgr)
+{
+ struct _viewinfo *vinfo;
+ struct view_class *vclass;
+
+ if (!vmgr || !vmgr->vlist) {
+ _ERR("param is invalid.");
+ return RET_FAILED;
+ }
+
+ vinfo = eina_list_data_get(vmgr->vlist);
+ if (!vinfo || !vinfo->vclass || !vinfo->base) {
+ _ERR("vinfo, vinfo->vclass, or vinfo->base is NULL.");
+ return RET_FAILED;
+ }
+
+ vclass = vinfo->vclass;
+ if (vclass->resume)
+ vclass->resume(vinfo->base);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Get the pointer of window.
+ *
+ * @param[in] vmgr View manager object
+ * @return win if the operation is successful; NULL if failed;
+ */
+Evas_Object *viewmgr_win_get(struct viewmgr *vmgr)
+{
+ if (!vmgr)
+ return NULL;
+
+ return vmgr->win;
+}
#define UG_MODULE_API __attribute__ ((visibility("default")))
#endif
+#include <Elementary.h>
#include <ui-gadget-module.h>
#include "i18n.h"
#include "defs.h"
-#include <AppCommon.h>
-
-#include "wifi.h"
-#include "NetworkMainView.h"
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
+#include "dbg.h"
+#include "main_view.h"
+#include "network_viewmgr.h"
struct _ug_data {
Evas_Object *win;
Evas_Object *base;
ui_gadget_h ug;
- CViewMgr *pViewMgr;
- CNetworkMainView *pNetworkMainView;
+ struct viewmgr *vmgr;
};
/**
service_h service, void *priv)
{
struct _ug_data *ugd;
+ Evas_Object *base;
Evas_Object *win;
+ struct viewmgr *vmgr;
if (!ug || !priv) {
_ERR("Parameter error!");
return NULL;
}
- ugd = (struct _ug_data *) priv;
+ ugd = priv;
ugd->ug = ug;
elm_theme_extension_add(NULL, UG_NETWORK_EDJ_THEME);
- win = (Evas_Object *) ug_get_window();
+ win = ug_get_window();
if (!win) {
_ERR("window get failed");
return NULL;
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
elm_win_focus_highlight_style_set(win, "invisible");
- CViewMgr::Initialize(ugd->win, NULL);
- ugd->pViewMgr = CViewMgr::GetInstance();
- if(!ugd->pViewMgr) {
- CViewMgr::Finalize();
- _ERR("Fail to get CViewMgr instance");
+ vmgr = viewmgr_init();
+ if (!vmgr) {
+ _ERR("init view mgr failed.\n");
return NULL;
}
- ugd->pNetworkMainView = new CNetworkMainView(NETWORK_MAINVIEW);
- if(!ugd->pViewMgr->AddView(ugd->pNetworkMainView)) {
- _ERR("Fail to add pFbBaseView");
- CViewMgr::Finalize();
- return false;
+ ugd->vmgr = vmgr;
+
+ vmgr->ug = ug;
+ vmgr->win = win;
+
+ base = viewmgr_push(vmgr, main_view_vclass_get(), NULL);
+ if (!base) {
+ _ERR("add base layout failed.");
+ viewmgr_fini(vmgr);
+ return NULL;
}
- ugd->pViewMgr->PushView(NETWORK_MAINVIEW, NULL);
- ugd->base = ugd->pNetworkMainView->Base();
- evas_object_raise(ugd->base);
+ ugd->base = base;
+ evas_object_raise(base);
- return ugd->base;
+ return base;
}
/**
*/
static void _on_destroy(ui_gadget_h ug, service_h service, void *priv)
{
- CViewMgr::Finalize();
+ struct _ug_data *ugd = priv;
+
+ if (!ug || !priv) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ if (!ugd || !ugd->base)
+ return;
+
+ viewmgr_fini(ugd->vmgr);
}
/**
if (!ops)
return -1;
- ugd = (struct _ug_data *) calloc(1, sizeof(*ugd));
+ ugd = calloc(1, sizeof(*ugd));
if (!ugd)
return -1;
if (!ops)
return;
- ugd = (struct _ug_data *) ops->priv;
+ ugd = ops->priv;
free(ugd);
}
-
-#if defined (__cplusplus)
-};
-#endif
#include <aul.h>
#include "i18n.h"
#include "defs.h"
-#include <MacroDefine.h>
+#include "dbg.h"
#include "util.h"
/**
--- /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 "defs.h"
+#include "dbg.h"
+#include "vconf_mgr.h"
+#include "i18n.h"
+
+static const char *WIRED_DNS_LAST_MODE = "db/menu/network/wired_dns_mode";
+static const char *WIRED_IP_LAST_MODE = "db/menu/network/wired_ip_mode";
+static const char *WIRED_IP_KEY = "db/menu/network/wired_ip";
+static const char *WIRED_SUBMASK_KEY = "db/menu/network/wired_subnet";
+static const char *WIRED_GATEWAY_KEY = "db/menu/network/wired_gateway";
+static const char *WIRED_DNS_KEY = "db/menu/network/wired_dns";
+
+static const char *WIRELESS_IP_LAST_MODE = "db/menu/network/wireless_ip_mode";
+static const char *WIRELESS_DNS_LAST_MODE = "db/menu/network/wireless_dns_mode";
+static const char *WIRELESS_IP_KEY = "db/menu/network/wireless_ip";
+static const char *WIRELESS_SUBMASK_KEY = "db/menu/network/wireless_subnet";
+static const char *WIRELESS_GATEWAY_KEY = "db/menu/network/wireless_gateway";
+static const char *WIRELESS_DNS_KEY = "db/menu/network/wireless_dns";
+
+static const char *SELECTED_NETWORK_TYPE_KEY = "db/menu/network/network_type";
+
+/**
+ * Gets the network type.
+ *
+ * Gets the last network type from vconf.
+ *
+ * @param[out] network_type Network type
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_network_type(enum network_type_enum *network_type)
+{
+ const char *str;
+
+ if (!network_type) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ str = vconf_get_str(SELECTED_NETWORK_TYPE_KEY);
+ if (str && !strcmp(str, TXT_WIRED))
+ *network_type = TYPE_WIRED;
+ else
+ *network_type = TYPE_WIRELESS;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the network type.
+ *
+ * Sets the network type into vconf, so it can be used
+ * next time by calling vconf_mgr_get_network_type.
+ *
+ * @param[in] network_type Network type
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_set_network_type(enum network_type_enum network_type)
+{
+ switch (network_type) {
+ case TYPE_WIRED:
+ vconf_set_str(SELECTED_NETWORK_TYPE_KEY, TXT_WIRED);
+ break;
+ case TYPE_WIRELESS:
+ vconf_set_str(SELECTED_NETWORK_TYPE_KEY, TXT_WIRELESS);
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the string value from the vconf.
+ *
+ * @param[out] des The string value
+ * @param[in] key Vconf key
+ */
+static void _get_info(char *des, const char *key)
+{
+ const char *str;
+
+ if (!des || !key)
+ return;
+
+ str = vconf_get_str(key);
+ if (!str)
+ return;
+
+ if (str == '\0' || !strncmp(str, NULL_STRING, IP_STRING_MAX_SIZE))
+ strncpy(des, _(ZERO_IP), IP_STRING_MAX_SIZE);
+ else
+ strncpy(des, str, IP_STRING_MAX_SIZE);
+}
+
+/**
+ * Gets wired network information.
+ *
+ * Including IP, submask, gateway and DNS.
+ *
+ * @param[out] info The structure of network information
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_wired_network_info(struct network_info *info)
+{
+ if (!info) {
+ _ERR("the param is NULL.");
+ return RET_FAILED;
+ }
+
+ _get_info(info->ip_addr, WIRED_IP_KEY);
+ _get_info(info->submask, WIRED_SUBMASK_KEY);
+ _get_info(info->gateway, WIRED_GATEWAY_KEY);
+ _get_info(info->dns, WIRED_DNS_KEY);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets wireless network information.
+ *
+ * Including IP, submask, gateway and DNS.
+ *
+ * @param[out] info The structure of network information
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_wireless_network_info(struct network_info *info)
+{
+ if (!info) {
+ _ERR("the param is NULL.");
+ return RET_FAILED;
+ }
+
+ _get_info(info->ip_addr, WIRELESS_IP_KEY);
+ _get_info(info->submask, WIRELESS_SUBMASK_KEY);
+ _get_info(info->gateway, WIRELESS_GATEWAY_KEY);
+ _get_info(info->dns, WIRELESS_DNS_KEY);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Saves wired network information into vconf.
+ *
+ * Including IP, submask, gateway and DNS.
+ *
+ * @param[in] info The structure of network information
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_save_wired_config_info(struct network_info *info)
+{
+ if (!info) {
+ _ERR("the param is NULL.");
+ return RET_FAILED;
+ }
+
+ vconf_set_str(WIRED_IP_KEY, info->ip_addr);
+ vconf_set_str(WIRED_SUBMASK_KEY, info->submask);
+ vconf_set_str(WIRED_GATEWAY_KEY, info->gateway);
+ vconf_set_str(WIRED_DNS_KEY, info->dns);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Saves wireless network information into vconf.
+ *
+ * Including IP, submask, gateway and DNS.
+ *
+ * @param[in] info The structure of network information
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_save_wireless_config_info(struct network_info *info)
+{
+ if (!info) {
+ _ERR("the param is NULL.");
+ return RET_FAILED;
+ }
+
+ vconf_set_str(WIRELESS_IP_KEY, info->ip_addr);
+ vconf_set_str(WIRELESS_SUBMASK_KEY, info->submask);
+ vconf_set_str(WIRELESS_GATEWAY_KEY, info->gateway);
+ vconf_set_str(WIRELESS_DNS_KEY, info->dns);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the wired IP mode from vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[out] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_wired_ip_mode(enum setting_mode *mode)
+{
+ const char *str;
+
+ if (!mode) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ str = vconf_get_str(WIRED_IP_LAST_MODE);
+ if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
+ *mode = MODE_AUTO;
+ else
+ *mode = MODE_MAN;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the wired IP mode into vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[in] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_set_wired_ip_mode(enum setting_mode mode)
+{
+ switch (mode) {
+ case MODE_AUTO:
+ vconf_set_str(WIRED_IP_LAST_MODE, _(TXT_OBTAIN_AUTO));
+ break;
+ case MODE_MAN:
+ vconf_set_str(WIRED_IP_LAST_MODE, _(TXT_ENTER_MAN));
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the wired DNS mode from vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[out] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_wired_dns_mode(enum setting_mode *mode)
+{
+ char *str;
+
+ if (!mode) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ str = vconf_get_str(WIRED_DNS_LAST_MODE);
+ if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
+ *mode = MODE_AUTO;
+ else
+ *mode = MODE_MAN;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the wired DNS mode into vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[in] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_set_wired_dns_mode(enum setting_mode mode)
+{
+ switch (mode) {
+ case MODE_AUTO:
+ vconf_set_str(WIRED_DNS_LAST_MODE, _(TXT_OBTAIN_AUTO));
+ break;
+ case MODE_MAN:
+ vconf_set_str(WIRED_DNS_LAST_MODE, _(TXT_ENTER_MAN));
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the wireless IP mode from vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[out] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_wireless_ip_mode(enum setting_mode *mode)
+{
+ char *str;
+
+ if (!mode) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ str = vconf_get_str(WIRELESS_IP_LAST_MODE);
+ if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
+ *mode = MODE_AUTO;
+ else
+ *mode = MODE_MAN;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the wireless IP mode into vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[in] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_set_wireless_ip_mode(enum setting_mode mode)
+{
+ switch (mode) {
+ case MODE_AUTO:
+ vconf_set_str(WIRELESS_IP_LAST_MODE, _(TXT_OBTAIN_AUTO));
+ break;
+ case MODE_MAN:
+ vconf_set_str(WIRELESS_IP_LAST_MODE, _(TXT_ENTER_MAN));
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the wireless DNS mode from vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[out] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_wireless_dns_mode(enum setting_mode *mode)
+{
+ char *str;
+
+ if (!mode) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ str = vconf_get_str(WIRELESS_DNS_LAST_MODE);
+ if (str && !strcmp(str, _(TXT_OBTAIN_AUTO)))
+ *mode = MODE_AUTO;
+ else
+ *mode = MODE_MAN;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the wireless DNS mode into vconf.
+ *
+ * The mode includes automatical and manual.
+ *
+ * @param[in] mode The enum of setting mode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_set_wireless_dns_mode(enum setting_mode mode)
+{
+ switch (mode) {
+ case MODE_AUTO:
+ vconf_set_str(WIRELESS_DNS_LAST_MODE,
+ _(TXT_OBTAIN_AUTO));
+ break;
+ case MODE_MAN:
+ vconf_set_str(WIRELESS_DNS_LAST_MODE,
+ _(TXT_ENTER_MAN));
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
--- /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 <stdlib.h>
+#include "defs.h"
+#include "dbg.h"
+#include "wifi_mgr.h"
+
+/**
+ * Converts the error type to string information.
+ *
+ * @param[in] err_type Error type
+ * @return error string information;
+ */
+const char *wifi_mgr_error_dbg(wifi_error_e err_type)
+{
+ switch (err_type) {
+ case WIFI_ERROR_NONE:
+ return "NONE";
+ case WIFI_ERROR_INVALID_PARAMETER:
+ return "INVALID_PARAMETER";
+ case WIFI_ERROR_OUT_OF_MEMORY:
+ return "OUT_OF_MEMORY";
+ case WIFI_ERROR_INVALID_OPERATION:
+ return "INVALID_OPERATION";
+ case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+ return "ADDRESS_FAMILY_NOT_SUPPORTED";
+ case WIFI_ERROR_OPERATION_FAILED:
+ return "OPERATION_FAILED";
+ case WIFI_ERROR_NO_CONNECTION:
+ return "NO_CONNECTION";
+ case WIFI_ERROR_NOW_IN_PROGRESS:
+ return "NOW_IN_PROGRESS";
+ case WIFI_ERROR_ALREADY_EXISTS:
+ return "ALREADY_EXISTS";
+ case WIFI_ERROR_OPERATION_ABORTED:
+ return "OPERATION_ABORTED";
+ case WIFI_ERROR_DHCP_FAILED:
+ return "DHCP_FAILED";
+ case WIFI_ERROR_INVALID_KEY:
+ return "INVALID_KEY";
+ case WIFI_ERROR_NO_REPLY:
+ return "NO_REPLY";
+ case WIFI_ERROR_SECURITY_RESTRICTED:
+ return "SECURITY_RESTRICTED";
+ default:
+ break;
+ }
+
+ return "UNKNOWN";
+}
+
+/**
+ * Initializes Wi-Fi.
+ *
+ * Called before using wifi APIs.
+ *
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_init(void)
+{
+ int ret;
+
+ ret = wifi_initialize();
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to wifi_initialize.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Deinitializes Wi-Fi.
+ *
+ * Called when network setting is destroyed.
+ *
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_deinit(void)
+{
+ int ret;
+
+ ret = wifi_deinitialize();
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to wifi_deinitialize.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Checks whether Wi-Fi is activated.
+ *
+ * @param[out] activated The activated value of wifi
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_is_activated(bool *activated)
+{
+ int ret;
+
+ ret = wifi_is_activated(activated);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to wifi_is_activated %s\n",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Starts scan, asynchronously.
+ *
+ * Called if you want to get the ap list.
+ *
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_scan_request(wifi_scan_finished_cb cb, void *data)
+{
+ int ret;
+
+ if (!cb || !data) {
+ _ERR("null pointer");
+ return RET_FAILED;
+ }
+
+ ret = wifi_scan(cb, data);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Scan request failed [%s]\n",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the result of scan.
+ *
+ * Called in the callback of wifi_scan().
+ *
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_foreach_found_aps(wifi_found_ap_cb cb, void *data)
+{
+ int ret;
+
+ if (!cb || !data) {
+ _ERR("null pointer");
+ return RET_FAILED;
+ }
+
+ ret = wifi_foreach_found_aps(cb, data);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to get AP list %s.\n", wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Activates Wi-Fi, asynchronously.
+ *
+ * If the wireless adaptor is not activated, you should activate it first.
+ *
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_activate(wifi_activated_cb cb, void *data)
+{
+ int ret;
+
+ if (!cb || !data) {
+ _ERR("null pointer");
+ return RET_FAILED;
+ }
+
+ ret = wifi_activate(cb, data);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to wifi_activate %s\n",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the handle of connected access point.
+ *
+ * You can get the connected access point and its configuration.
+ *
+ * @param[out] ap The handle of access point
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_get_connected_ap(wifi_ap_h *ap)
+{
+ int ret;
+
+ if (!ap) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_get_connected_ap(ap);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_get_connected_ap() failed.");
+ return ret;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Destroys the handle of access point.
+ *
+ * when you cloned an ap and don't use it later, you should destroy it.
+ *
+ * @param[in] ap The handle of access point
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_ap_destroy(wifi_ap_h ap)
+{
+ int ret;
+
+ if (!ap) {
+ _ERR("the ap is already NULL.");
+ return RET_SUCCESS;
+ }
+
+ ret = wifi_ap_destroy(ap);
+ if (ret != WIFI_ERROR_NONE)
+ ret = RET_FAILED;
+ else
+ ret = RET_SUCCESS;
+
+ return ret;
+}
+
+/**
+ * Clones the handle of access point.
+ *
+ * Copy the data of an ap.
+ *
+ * @param[out] cloned_ap The handle of access point to clone
+ * @param[in] origin The handle of access point to be cloned
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_ap_clone(wifi_ap_h *cloned_ap, wifi_ap_h origin)
+{
+ int ret;
+
+ if (!cloned_ap || !origin) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_ap_clone(cloned_ap, origin);
+ if (ret != WIFI_ERROR_NONE)
+ ret = RET_FAILED;
+ else
+ ret = RET_SUCCESS;
+
+ return ret;
+}
+
+/**
+ * Gets the data of access point.
+ *
+ * @param[in] ap The handle of access point
+ * @param[out] ap_info The structue to store the data of access point
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_get_ap_info(wifi_ap_h ap, struct wifi_ap_info *ap_info)
+{
+ char *str;
+
+ if (!ap || !ap_info) {
+ _ERR("null pointer");
+ return RET_FAILED;
+ }
+
+ str = NULL;
+ if (wifi_ap_get_essid(ap, &str) == WIFI_ERROR_NONE) {
+ _ERR("ESSID : %s\n", str);
+ strncpy(ap_info->essid, str, SSID_MAX_LENTH - 1);
+ free(str);
+ } else {
+ _ERR("Fail to get ESSID\n");
+ return RET_FAILED;
+ }
+
+ if (wifi_ap_get_connection_state(ap,
+ &ap_info->state) != WIFI_ERROR_NONE) {
+ _ERR("Fail to get Connection State\n");
+ return RET_FAILED;
+ }
+
+ if (wifi_ap_get_security_type(ap,
+ &ap_info->secure_type) != WIFI_ERROR_NONE) {
+ _ERR("Fail to get Security type\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Deletes the information of stored access point and disconnects it when it is connected.
+ *
+ * If an AP is connected, then connection information will be stored.
+ * This information is used when a connection to that AP is established automatically.
+ * If you want to connect another access point, you should desconnect the connected one.
+ *
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_forget_last_ap(void)
+{
+ int ret;
+ wifi_ap_h ap;
+ char *name;
+
+ ret = wifi_get_connected_ap(&ap);
+ if (ret == WIFI_ERROR_NO_CONNECTION) {
+ return RET_SUCCESS;
+ } else if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to get connected AP [%s]\n",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ ret = wifi_ap_get_essid(ap, &name);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to wifi_ap_get_essid AP [%s]\n",
+ wifi_mgr_error_dbg(ret));
+ wifi_ap_destroy(ap);
+ return RET_FAILED;
+ }
+
+ ret = wifi_forget_ap(ap);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to forget [%s],[%s].\n", name,
+ wifi_mgr_error_dbg(ret));
+ wifi_ap_destroy(ap);
+ free(name);
+ return RET_FAILED;
+ }
+
+ free(name);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the passphrase.
+ *
+ * When the access point is locked, you should set passphrase first.
+ *
+ * @param[in] ap The handle of access point
+ * @param[in] passcode The passcode
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_set_passphrase(wifi_ap_h ap, const char *passcode)
+{
+ int ret;
+
+ if (!ap || !passcode) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_ap_set_passphrase(ap, passcode);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("failed to set passcode. ret: %s.",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Connects the access point, asynchronously.
+ *
+ * After you make the preprarion, such as setting passphrase,
+ * forgetting the connected ap, then you can connect the ap.
+ *
+ * @param[in] ap The handle of access point
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_connect(wifi_ap_h ap, wifi_connected_cb cb, void *data)
+{
+ int ret;
+
+ if (!cb || !ap || !data) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_connect(ap, cb, data);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("failed to connect ap. ret: %s.",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the config type of IP.
+ *
+ * Only support IPV4 now.
+ *
+ * @param[in] ap The handle of access point
+ * @param[in] type The type of IP config
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_ap_set_ip_config_type(wifi_ap_h ap,
+ wifi_ip_config_type_e type)
+{
+ int ret;
+
+ if (!ap) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_ap_set_ip_config_type(ap, WIFI_ADDRESS_FAMILY_IPV4, type);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("failed to connect ap. ret: %s.",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the data of access point.
+ *
+ * Get ip, dns, submask, and gateway info.
+ *
+ * @param[in] ap The handle of access point
+ * @param[out] info The structure to store ip info
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_get_ip_info(wifi_ap_h ap, struct network_info *info)
+{
+ char *str_value;
+
+ if (!info || !ap) {
+ _ERR("null pointer");
+ return RET_FAILED;
+ }
+
+ str_value = NULL;
+ if (wifi_ap_get_ip_address(ap, WIFI_ADDRESS_FAMILY_IPV4,
+ &str_value) == WIFI_ERROR_NONE) {
+ strncpy(info->ip_addr, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ } else {
+ strncpy(info->ip_addr, ZERO_IP, IP_STRING_MAX_SIZE);
+ _ERR("Fail to get Gateway\n");
+ }
+
+ str_value = NULL;
+ if (wifi_ap_get_subnet_mask(ap, WIFI_ADDRESS_FAMILY_IPV4,
+ &str_value) == WIFI_ERROR_NONE) {
+ strncpy(info->submask, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ } else {
+ strncpy(info->submask, ZERO_IP, IP_STRING_MAX_SIZE);
+ _ERR("Fail to get Gateway\n");
+ }
+
+ str_value = NULL;
+ if (wifi_ap_get_gateway_address(ap, WIFI_ADDRESS_FAMILY_IPV4,
+ &str_value) == WIFI_ERROR_NONE) {
+ strncpy(info->gateway, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ } else {
+ strncpy(info->gateway, ZERO_IP, IP_STRING_MAX_SIZE);
+ _ERR("Fail to get Gateway\n");
+ }
+
+ str_value = NULL;
+ if (wifi_ap_get_dns_address(ap, 1, WIFI_ADDRESS_FAMILY_IPV4,
+ &str_value) == WIFI_ERROR_NONE) {
+ strncpy(info->dns, str_value, IP_STRING_MAX_SIZE);
+ free(str_value);
+ } else {
+ strncpy(info->dns, ZERO_IP, IP_STRING_MAX_SIZE);
+ _ERR("Fail to get DNS1\n");
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the data of access point.
+ *
+ * Set ip, submask, and gateway info.
+ *
+ * @param[in] ap The handle of access point
+ * @param[in] info The structure of ip info
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_set_ip_config(wifi_ap_h ap, struct network_info *info)
+{
+ int ret;
+
+ if (!info || !ap) {
+ _ERR("null pointer");
+ return RET_FAILED;
+ }
+
+ ret = wifi_ap_set_ip_address(ap, WIFI_ADDRESS_FAMILY_IPV4,
+ info->ip_addr);
+ if (ret != WIFI_ERROR_NONE)
+ _ERR("Fail to set ip address[%s]\n",
+ wifi_mgr_error_dbg(ret));
+
+ ret = wifi_ap_set_subnet_mask(ap, WIFI_ADDRESS_FAMILY_IPV4,
+ info->submask);
+ if (ret != WIFI_ERROR_NONE)
+ _ERR("Fail to set subnet mask[%s]\n",
+ wifi_mgr_error_dbg(ret));
+
+ ret = wifi_ap_set_gateway_address(ap, WIFI_ADDRESS_FAMILY_IPV4,
+ info->gateway);
+ if (ret != WIFI_ERROR_NONE)
+ _ERR("Fail to set gateway address[%s]\n",
+ wifi_mgr_error_dbg(ret));
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets dns of access point.
+ *
+ * @param[in] ap The handle of access point
+ * @param[in] info The structure of ip info
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_set_dns_config(wifi_ap_h ap, struct network_info *info)
+{
+ int ret;
+
+ if (!info || !ap) {
+ _ERR("null pointer");
+ return RET_FAILED;
+ }
+
+ ret = wifi_ap_set_dns_address(ap, 1, WIFI_ADDRESS_FAMILY_IPV4,
+ info->dns);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to set dns address[%s]\n",
+ wifi_mgr_error_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets whether Wi-Fi can access to the internet asynchronously.
+ *
+ * @param[in] cb The callback function to be called
+ * @param[in] data User data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+#if 0
+int wifi_mgr_get_is_online_async(wifi_get_is_online_async_cb cb,
+ void *data)
+{
+ int ret;
+
+ if (!cb || !data) {
+ _ERR("the param is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_get_is_online_async(cb, data);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_get_is_online_async() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+#endif
--- /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 <Elementary.h>
+#include <aul.h>
+#include <ui-gadget-module.h>
+#include <string.h>
+
+#include <KeyDefine.h>
+
+#include "defs.h"
+#include "dbg.h"
+#include "i18n.h"
+#include "util.h"
+#include "common.h"
+#include "wifi_passcode_view.h"
+#include "util.h"
+#include "wifi_mgr.h"
+
+#define KEY_PRIV "priv"
+#define KEY_NETWORK_ENTER "Select"
+
+#define AP_NAME_LENTH 256
+
+#define TXT_PASSCODE "Network passcode"
+#define TXT_ENTER_PASSCODE "Enter the network password"
+
+#define STYLE_ENTRY_FOCUS "focus"
+#define STYLE_ENTRY_TXT "DEFAULT='font_size=30 linesize=40'"
+
+struct _priv {
+ Evas_Object *win;
+ ui_gadget_h ug;
+ struct viewmgr *vmgr;
+ Evas_Object *base;
+ Evas_Object *entry;
+ Evas_Object *dim_ly;
+ Evas_Object *ctxpopup;
+ char ap_name[AP_NAME_LENTH + 1];
+ char *ap_pwd;
+};
+
+static int _wifi_connect_ap(struct _priv *priv);
+static void _show_confirm_popup(struct _priv *priv);
+static void _show_progress_popup(struct _priv *priv);
+
+/**
+ * Initializes the private data.
+ *
+ * Called when the view is loaded.
+ *
+ * @return the handler of the private data;
+ */
+static struct _priv *_init_priv(void)
+{
+ struct _priv *priv;
+
+ priv = calloc(1, sizeof(*priv));
+
+ return priv;
+}
+
+/**
+ * Deinitializes the private data.
+ *
+ * Called when the view is deleted.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _fini_priv(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("priv is already NULL.");
+ return;
+ }
+
+ if (priv->dim_ly)
+ evas_object_del(priv->dim_ly);
+
+ free(priv->ap_pwd);
+ free(priv);
+}
+
+/**
+ * Shows the dim layout.
+ *
+ * Called when there is a ctxpopup.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_show(priv->dim_ly);
+}
+
+/**
+ * Hides the dim layout.
+ *
+ * Called when the existing ctxpopup is deleted.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _unset_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_hide(priv->dim_ly);
+}
+
+/**
+ * Creates the dim layout.
+ *
+ * Called when the view is created.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_dim_layout(struct _priv *priv)
+{
+ Evas_Object *dim_ly;
+
+ if (!priv || !priv->win) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ dim_ly = util_add_layout(priv->win, UG_NETWORK_EDJ_FILE, GRP_DIM_LY);
+ if (!dim_ly) {
+ _ERR("elm_layout_add() failed.\n");
+ return RET_FAILED;
+ }
+
+ priv->dim_ly = dim_ly;
+
+ _unset_layout_dim(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete this view.
+ *
+ * @param[in] data User data
+ * @param[in] e Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _base_key_press_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("ei or data is NULL");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK))
+ viewmgr_pop(priv->vmgr);
+}
+
+/**
+ * Sets the description.
+ *
+ * Sets the description for the passcode view.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_description(struct _priv *priv)
+{
+ if (!priv || !priv->base) {
+ _ERR("priv is invalid.");
+ return;
+ }
+
+ elm_object_part_text_set(priv->base, PART_WIFI_PASSCODE_TITLE,
+ _(TXT_PASSCODE));
+ elm_object_part_text_set(priv->base, PART_WIFI_PASSCODE_TEXT,
+ _(TXT_ENTER_PASSCODE));
+ elm_object_part_text_set(priv->base, PART_WIFI_PASSCODE_AP_NAME,
+ priv->ap_name);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event.
+*
+* When the 'OK' button is clicked, delete the popup,
+* and set the default focus.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] event Event information
+*/
+static void _popup_ok_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ elm_object_focus_set(priv->entry, EINA_TRUE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling unfocused event.
+*
+* When the ctxpopup is unfocused, hide the dim layout,
+* and delete the ctxpopup.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] source Event information
+*/
+static void _ctxpopup_unfocused_cb(void *data,
+ Evas_Object *obj, void *source)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("data is NULL.\n");
+ return;
+ }
+
+ priv = data;
+
+ _unset_layout_dim(priv);
+
+ evas_object_del(obj);
+}
+
+/**
+* @Evas_Object_Event_Cb type callback for handling pressed event.
+*
+* When KEY_BACK is pressed in the ctxpopup, delete the ctxpopup.
+*
+* @param[in] data User data
+* @param[in] e Evas handler
+* @param[in] obj The corresponding object which the deletion event occurred
+* @param[in] ei Event information
+*/
+static void _ctxpopup_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!data || !ei || !obj) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+ evas_object_del(obj);
+
+ elm_object_focus_set(priv->entry, EINA_TRUE);
+ }
+}
+
+/**
+ * Shows the invalid ctxpopup.
+ *
+ * The ctxpopup will show the invalid passcode information.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _show_invalid_pwd_popup(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *ok_btn;
+ char content[CONTENT_TXT_SIZE];
+
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return;
+ }
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_NETWORK_EDJ_FILE,
+ GRP_CONFIRM_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
+
+ memset(content, 0, CONTENT_TXT_SIZE);
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s",
+ _(TXT_INVALID_PWD));
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, content);
+
+ ok_btn = util_add_button(layout, STYLE_SETTING_BTN,
+ PART_OK_BTN, _(TXT_OK));
+ if (!ok_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(ok_btn, ok_btn, ELM_FOCUS_DOWN);
+ evas_object_smart_callback_add(ok_btn, SIG_CLICKED,
+ _popup_ok_btn_clicked_cb, priv);
+
+ elm_object_focus_set(ok_btn, EINA_TRUE);
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_pressed_cb, priv);
+
+ evas_object_move(layout, CENTER_ALIGN * (DEFAULT_WIN_WIDTH - POPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - POPUP_HEIGHT) * ELM_SCALE);
+
+ priv->ctxpopup = layout;
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicking event.
+*
+* When the 'Retry' button is clicked, retry to connect the ap.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] event Event information
+*/
+static void _retry_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+ int ret;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _unset_layout_dim(priv);
+
+ ret = _wifi_connect_ap(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("connect ap");
+ _show_confirm_popup(priv);
+ return;
+ }
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicking event.
+*
+* When the 'Cancel' button is clicked, delete the ctxpopup
+* where the button is located.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] event Event information
+*/
+static void _cancel_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _unset_layout_dim(priv);
+
+ elm_object_focus_set(priv->entry, EINA_TRUE);
+}
+
+/**
+ * Shows the confirm ctxpopup.
+ *
+ * The ctxpopup will show the result of connectting the ap.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _show_confirm_popup(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *retry_btn;
+ Evas_Object *cancel_btn;
+ char content[CONTENT_TXT_SIZE];
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return;
+ }
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_NETWORK_EDJ_FILE,
+ GRP_CONFIRM_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ memset(content, 0, CONTENT_TXT_SIZE);
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s",
+ _(TXT_FAILED_CONNECT), priv->ap_name);
+
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, content);
+
+ retry_btn = util_add_button(layout, STYLE_SETTING_BTN,
+ PART_RETRY_BTN, _(TXT_RETRY));
+ if (!retry_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ cancel_btn = util_add_button(layout, STYLE_SETTING_BTN,
+ PART_CANCEL_BTN, _(TXT_CANCEL));
+ if (!cancel_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_focus_next_object_set(retry_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(cancel_btn, retry_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(retry_btn, retry_btn,
+ ELM_FOCUS_DOWN);
+
+ evas_object_smart_callback_add(retry_btn, SIG_CLICKED,
+ _retry_btn_clicked_cb, priv);
+ evas_object_smart_callback_add(cancel_btn, SIG_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ elm_object_focus_set(retry_btn, EINA_TRUE);
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_pressed_cb, priv);
+
+ evas_object_move(layout, CENTER_ALIGN * (DEFAULT_WIN_WIDTH - POPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - POPUP_HEIGHT) * ELM_SCALE);
+
+ priv->ctxpopup = layout;
+}
+
+/**
+ * Shows the progress ctxpopup.
+ *
+ * The ctxpopup will show the progress of connectting the ap.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _show_progress_popup(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *cancel_btn;
+ char content[CONTENT_TXT_SIZE];
+
+ if (!priv) {
+ _ERR("the param is NULL.");
+ return;
+ }
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_NETWORK_EDJ_FILE,
+ GRP_PROCESSING_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ memset(content, 0, CONTENT_TXT_SIZE);
+ elm_object_part_text_set(layout,
+ PART_TEXT_TITLE, _(TXT_WIRELESS_LY));
+ snprintf(content, CONTENT_TXT_SIZE - 1, "%s %s",
+ _(TXT_CONNECTTING), priv->ap_name);
+ elm_object_part_text_set(layout, PART_TEXT_CONTENT, content);
+
+ cancel_btn = util_add_button(layout, STYLE_SETTING_BTN,
+ PART_CANCEL_BTN, _(TXT_CANCEL));
+ if (!cancel_btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(cancel_btn, cancel_btn,
+ ELM_FOCUS_DOWN);
+
+ evas_object_smart_callback_add(cancel_btn, SIG_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ elm_object_focus_set(cancel_btn, EINA_TRUE);
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_pressed_cb, priv);
+
+ evas_object_move(layout, CENTER_ALIGN * (DEFAULT_WIN_WIDTH - POPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - POPUP_HEIGHT) * ELM_SCALE);
+
+ priv->ctxpopup = layout;
+}
+
+/**
+ * The callback of wifi connection.
+ *
+ * The result is in the error code.
+ *
+ * @param[in] error_code Error code
+ * @param[in] user_data User data
+ */
+static void _wifi_connected_cb(wifi_error_e error_code, void *user_data)
+{
+ struct _priv *priv;
+
+ if (!user_data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = user_data;
+
+ if (!priv->ctxpopup)
+ return;
+
+ if (error_code != WIFI_ERROR_NONE) {
+ _ERR("connect AP failed, ret: %s.",
+ wifi_mgr_error_dbg(error_code));
+ _show_confirm_popup(priv);
+ return;
+ }
+
+ ug_destroy_me(priv->ug);
+}
+
+/**
+ * The callback of finding ap.
+ *
+ * The callback will be called the same times as the ap count.
+ *
+ * @param[in] ap The hander of ap
+ * @param[in] data User data
+ */
+static bool _wifi_found_ap_cb(wifi_ap_h ap, void *data)
+{
+ int ret;
+ struct _priv *priv;
+ struct wifi_ap_info ap_info;
+
+ if (!ap || !data) {
+ _ERR("Parameter error!");
+ return false;
+ }
+
+ priv = data;
+
+ wifi_mgr_get_ap_info(ap, &ap_info);
+
+ if (!strncmp(priv->ap_name, ap_info.essid, AP_NAME_LENTH)) {
+ ret = wifi_mgr_set_passphrase(ap, priv->ap_pwd);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_set_passphrase() failed.");
+ _show_confirm_popup(priv);
+ return false;
+ }
+
+ ret = wifi_mgr_connect(ap, _wifi_connected_cb, priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("Fail to connection request.\n");
+ _show_confirm_popup(priv);
+ return false;
+ }
+
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * The callback of ap scanning request.
+ *
+ * The callback will be called the same times as the ap count.
+ *
+ * @param[in] error_code Error code
+ * @param[in] data User data
+ */
+static void _wifi_scan_request_cb(wifi_error_e error_code, void *data)
+{
+ int ret;
+
+ if (!data) {
+ _ERR("data is NULL.");
+ return;
+ }
+
+ ret = wifi_mgr_foreach_found_aps(_wifi_found_ap_cb, data);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_foreach_found_aps() failed.");
+ _show_confirm_popup(data);
+ return;
+ }
+}
+
+/**
+ * Connects the ap.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _wifi_connect_ap(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv || !priv->ap_pwd) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ _show_progress_popup(priv);
+
+ ret = wifi_mgr_forget_last_ap();
+ if (ret != RET_SUCCESS) {
+ _ERR("forget last ap failed.");
+ return false;
+ }
+
+ ret = wifi_mgr_scan_request(_wifi_scan_request_cb, priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_scan_request() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is 'Select', connect the ap.
+ *
+ * @param[in] data User data
+ * @param[in] e Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _entry_key_press_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+ int ret;
+
+ if (!ei || !data) {
+ _ERR("ei or data is NULL");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_NETWORK_ENTER)) {
+ if (priv->ap_pwd) {
+ free(priv->ap_pwd);
+ priv->ap_pwd = NULL;
+ }
+
+ priv->ap_pwd = strdup(elm_entry_entry_get(obj));
+ if (!priv->ap_pwd) {
+ _ERR("the passcode in entry is NULL.");
+ _show_invalid_pwd_popup(priv);
+ return;
+ }
+
+ ret = _wifi_connect_ap(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("connect ap");
+ _show_confirm_popup(priv);
+ return;
+ }
+ }
+}
+
+/**
+ * Creates the entry.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _add_entry(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *entry;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ base = priv->base;
+
+ entry = util_add_entry(base, STYLE_ENTRY_FOCUS,
+ PART_WIFI_PASSCODE_ENTRY);
+ if (!entry) {
+ _ERR("util_add_entry failed.");
+ evas_object_del(base);
+ _fini_priv(priv);
+ return;
+ }
+
+ elm_entry_password_set(entry, EINA_TRUE);
+ elm_entry_text_style_user_push(entry, STYLE_ENTRY_TXT);
+ evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN,
+ _entry_key_press_cb, priv);
+
+ elm_entry_input_panel_enabled_set(entry, EINA_TRUE);
+
+ elm_object_focus_next_object_set(entry, entry, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(entry, entry, ELM_FOCUS_LEFT);
+
+ elm_object_focus_set(entry, EINA_TRUE);
+
+ priv->entry = entry;
+}
+
+/**
+ * Creates the layout of the view.
+ *
+ * Called when the view is pushed.
+ *
+ * @param[in] vmgr View manager
+ * @param[in] data User data
+ * @return layout if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create(struct viewmgr *vmgr, void *data)
+{
+ struct _priv *priv;
+ struct wifi_ap_info *ap_info;
+ Evas_Object *base;
+
+ if (!vmgr || !vmgr->win || !vmgr->ug || !data) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ priv = _init_priv();
+ if (!priv) {
+ _ERR("init priv failed.");
+ return NULL;
+ }
+
+ priv->win = vmgr->win;
+ priv->ug = vmgr->ug;
+ priv->vmgr = vmgr;
+
+ ap_info = data;
+ strncpy(priv->ap_name, ap_info->essid, AP_NAME_LENTH);
+
+ base = util_add_layout(priv->win, UG_NETWORK_EDJ_FILE,
+ GRP_WIFI_PASSCODE_BASE);
+ if (!base) {
+ _ERR("util_add_layout failed.");
+ _fini_priv(priv);
+ return NULL;
+ }
+
+ evas_object_data_set(base, KEY_PRIV, priv);
+
+ evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN,
+ _base_key_press_cb, priv);
+
+ priv->base = base;
+
+ _set_description(priv);
+
+ _add_entry(priv);
+
+ _create_dim_layout(priv);
+
+ return base;
+}
+
+/**
+ * Destroies the layout of the view.
+ *
+ * Called when the view is popped.
+ *
+ * @param[in] base The base layout
+ */
+static void _destroy(Evas_Object *base)
+{
+ struct _priv *priv;
+
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = evas_object_data_get(base, KEY_PRIV);
+ if (!priv)
+ return;
+
+ _fini_priv(priv);
+}
+
+/**
+ * Gets the current view type.
+ *
+ * @return view type;
+ */
+static enum view_type _get_view_type(void)
+{
+ return NETWORK_WIFI_PASSCODE_VIEW;
+}
+
+
+static struct view_class _vclass = {
+ .create = _create,
+ .resume = NULL,
+ .terminate = _destroy,
+ .message_handler = NULL,
+ .get_view_type = _get_view_type,
+};
+
+/**
+ * Gets the current view class.
+ *
+ * @return view class;
+ */
+struct view_class *wifi_passcode_view_vclass_get(void)
+{
+ return &_vclass;
+}
INCLUDE(FindPkgConfig)
pkg_check_modules(UG_PROXY_PKGS REQUIRED
+ dlog
eina
edje
evas
capi-network-wifi
capi-network-connection
)
+ #ecore-x
+
SET(PKGS_LDFLAGS "${PKGS_LDFLAGS} ${UG_PROXY_PKGS_LDFLAGS}")
FOREACH(FLAG ${UG_PROXY_PKGS_CFLAGS})
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
SET(SRCS
- src/ug_proxy_settings.cpp
- src/ProxyMainView.cpp
- src/util.cpp
- ../src/WifiMgr.cpp
- ../src/NetConMgr.cpp
+ src/ug_proxy_settings.c
+ src/main_view.c
+ src/vconf_mgr.c
+ src/connection_mgr.c
+ src/wifi_mgr.c
+ src/util.c
)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../include)
-
ADD_DEFINITIONS("-DPKGNAME=\"${PROJECT_NAME}\"")
ADD_DEFINITIONS("-DUG_PROXY_EDJ_FILE=\"${UG_PROXY_EDJE_DIR}/${UG_PROXY_EDJ_FILE}\"")
+++ /dev/null
-#ifndef __PROXY_MAIN_VIEW_H__
-#define __PROXY_MAIN_VIEW_H__
-
-#include "UgCommon.h"
-
-class CProxyMainView : public CBaseView, public IMouseClickedListener, public IUnfocusedListener {
-private :
- struct SProxyMainView *m;
-
- bool m_InitConnection(void);
- void m_FinalizeConnection(void);
- Evas_Object* m_CreateMainLayout(void);
-
- Evas_Object *m_CreateValueBtn(Evas_Object *parent, int num, char *txt);
- bool m_SetWifiProxy(void);
- bool m_SetConnectionProxy(void);
- bool m_SetProxy(void);
- void m_MethodBtnClicked(EProxyMethod method);
- void m_SetupDownCycleFocus(Evas_Object **obj, int count);
- void m_SetTheValue(void);
- void m_SetLeftRightCycleFocus(Evas_Object **obj, int count);
- void m_CreateValuePopup(void);
- void m_CreateInputEntry(void);
- void m_ShowInvalidInfoPopup(int status);
- bool m_CreateMethodBoxBtn(Evas_Object *btn, const char *key, char *value, int line);
-
- bool m_CreateMethodAutoBtn(void);
- bool m_CreateMethodManualBtn(void);
- bool m_CreateMethodNoneBtn(void);
-
- bool m_CreateDimLayout(void);
- bool m_CreateActionBtns(void);
- bool m_GetProxyMethod(void);
- bool m_CreateProxyLayout(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CProxyMainView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), IUnfocusedListener(this), m(0) {}
- virtual ~CProxyMainView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
-};
-
-#endif /* __PROXY_MAIN_VIEW_H__ */
-
--- /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 __PROXY_COMMON_H__
+#define __PROXY_COMMON_H__
+
+#define MOTHED_STRING_LEN 15
+#define IP_STRING_LEN 15
+#define MOTHED_URL_LEN 100
+#define STRING_MAX_LEN 100
+#define METHOD_NUM 3
+
+#define IP_ZERO "0.0.0.0"
+#define URL_BLANK ""
+
+enum method_enum {
+ METHOD_NONE = 0,
+ METHOD_MAN,
+ METHOD_AUTO
+};
+
+#endif /* __PROXY_COMMON_H__ */
--- /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 __CONNECTION_MGR_H__
+#define __CONNECTION_MGR_H__
+
+#include <net_connection.h>
+#include <connection_mgr.h>
+#include "common.h"
+
+connection_h connection_mgr_create(void);
+int connection_mgr_destroy(connection_h connection);
+int connection_mgr_get_profile_info(connection_h connection,
+ connection_profile_h *out_proflie);
+int connection_mgr_set_proxy_type(connection_h connection,
+ enum method_enum method);
+int connection_mgr_get_proxy_type(connection_h connection,
+ enum method_enum *method);
+int connection_mgr_set_proxy_address(connection_h connection,
+ const char *ip);
+int connection_mgr_get_proxy_address(connection_h connection,
+ char **ip);
+
+#endif /* __CONNECTION_MGR_H__ */
--- /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 __DBG_H__
+#define __DBG_H__
+
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "ug-network-settings"
+
+#ifndef _ERR
+#define _ERR(fmt, args...) (LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#ifndef _DBG
+#define _DBG(fmt, args...) (LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#ifndef _INFO
+#define _INFO(fmt, args...) \
+ (LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args))
+#endif
+
+#endif /* __DBG_H__ */
#ifndef __DEFS_H__
#define __DEFS_H__
-/* View */
-#define PROXY_MAINVIEW "PROXY_MAINVIEW"
-
-/* Common */
-#define MOTHED_STRING_LEN 15
-#define IP_STRING_LEN 15
-#define MOTHED_URL_LEN 100
-#define STRING_MAX_LEN 100
-#define METHOD_NUM 3
-
-#define IP_ZERO "0.0.0.0"
-#define URL_BLANK ""
-
#define ELM_SCALE elm_config_scale_get()
#define RET_SUCCESS 0
#define PART_TEXT_CONTENT "content.txt"
#define PART_ENTRY "part.entry"
-/* Width Height */
+/* Key defines */
+#define KEY_UP "Up"
+#define KEY_DOWN "Down"
+#define KEY_LEFT "Left"
+#define KEY_RIGHT "Right"
+#define KEY_ENTER "Return"
+#define KEY_EXIT "XF86Close"
+
+#define KEY_0 "0"
+#define KEY_1 "1"
+#define KEY_2 "2"
+#define KEY_3 "3"
+#define KEY_4 "4"
+#define KEY_5 "5"
+#define KEY_6 "6"
+#define KEY_7 "7"
+#define KEY_8 "8"
+#define KEY_9 "9"
+
+/* FIXME: do not pre-define */
#define DEFAULT_WIN_WIDTH 1920
#define DEFAULT_WIN_HEIGHT 1080
+
#endif /* __DEFS_H__ */
--- /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 __MAIN_VIEW_H__
+#define __MAIN_VIEW_H__
+
+#include <Elementary.h>
+
+Evas_Object *create_main_view(Evas_Object *win, ui_gadget_h ug);
+void destroy_main_view(Evas_Object *base);
+
+#endif /* __MAIN_VIEW_H__ */
#ifndef __UTIL_H__
#define __UTIL_H__
-Evas_Object *util_add_layout(Evas_Object *parent, const char *file, const char *group);
-Evas_Object *util_add_button(Evas_Object *parent, const char *style, const char *part, const char *text);
-Evas_Object *util_add_key_value_button(Evas_Object *parent, const char *style, const char *part, const char *text_key, const char *text_value);
+Evas_Object *util_add_layout(Evas_Object *parent, const char *file,
+ const char *group);
+Evas_Object *util_add_button(Evas_Object *parent, const char *style,
+ const char *part, const char *text);
+Evas_Object *util_add_key_value_button(Evas_Object *parent,
+ const char *style, const char *part,
+ const char *text_key, const char *text_value);
Evas_Object *util_add_box(Evas_Object *parent, const char *part);
-Evas_Object *util_add_entry(Evas_Object *parent, const char *style, const char *part);
+Evas_Object *util_add_entry(Evas_Object *parent,
+ const char *style, const char *part);
void util_set_focus_next_self(Evas_Object *obj);
#endif /* __UTIL_H__ */
--- /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 __VCONF_MGR_H__
+#define __VCONF_MGR_H__
+
+#include <vconf.h>
+#include "common.h"
+
+char *vconf_mgr_get_string_value(const char *key);
+int vconf_mgr_set_string_value(const char *key, const char *value);
+int vconf_mgr_get_int_value(const char *key, int *value);
+int vconf_mgr_set_int_value(const char *key, const int value);
+
+#endif /* __VCONF_MGR_H__ */
--- /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 __WIFI_MGR_H__
+#define __WIFI_MGR_H__
+
+#include <wifi.h>
+#include "common.h"
+
+int wifi_mgr_init(void);
+int wifi_mgr_deinit(void);
+int wifi_mgr_get_connected_ap(wifi_ap_h *ap);
+int wifi_mgr_set_proxy_type(enum method_enum method);
+int wifi_mgr_get_proxy_type(enum method_enum *method);
+int wifi_mgr_set_proxy_address(const char *ip);
+int wifi_mgr_get_proxy_address(char **ip);
+
+#endif /* __WIFI_MGR_H__ */
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <vconf.h>
-#include "defs.h"
-#include <AppCommon.h>
-#include "i18n.h"
-#include "util.h"
-
-#include "UgCommon.h"
-#include "WifiMgr.h"
-#include "NetConMgr.h"
-
-#include "ProxyMainView.h"
-
-#define KEY_PRIV "priv"
-#define KEY_PROXY_ENTER "Select"
-#define IP_VALUE1 "value1"
-#define IP_VALUE2 "value2"
-#define IP_VALUE3 "value3"
-#define IP_VALUE4 "value4"
-
-static const char *VCONF_NETWORK_TYPE = "db/menu/network/network_type";
-static const char *VCONF_PROXY_METHOD = "db/menu/proxy/method";
-static const char *VCONF_PROXY_IP = "db/menu/proxy/ip";
-static const char *VCONF_PROXY_URL = "db/menu/proxy/url";
-
-#define METHOD_CTXPOPUP_OFFSET_X 448
-#define VALUE_CTXPOPUP_OFFSET_X 162
-#define VALUE_CTXPOPUP_OFFSET_Y 20
-#define PROXY_CONFIG_MAX_NUM 4
-#define IP_MAX_NUM 255
-#define IP_RATIO 10
-#define PORT_MAX_NUM 65535
-#define PORT_INVALID_NUM 65536
-#define PORT_NO_NEED 65537
-#define CENTER_ALIGN 0.5
-#define CTXPOPUP_WIDTH 688
-#define CTXPOPUP_HEIGHT 411
-#define BTN_ONE_LINE 1
-#define BTN_TWO_LINE 2
-#define LINE_PAD 2
-#define ALIGH_RATIO 1.5
-
-enum network_type_enum {
- TYPE_WIRELESS = 0,
- TYPE_WIRED
-};
-
-struct SProxyMainView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *dim_ly;
- Evas_Object *box;
- Evas_Object *method_btn;
- Evas_Object *proxy_btn;
- Evas_Object *url_btn;
- Evas_Object *ok_btn;
- Evas_Object *cancel_btn;
- Evas_Object *ctxpopup;
- Evas_Object *vaule_btns[PROXY_CONFIG_MAX_NUM];
-
- enum network_type_enum net_type;
-
- char ip[IP_STRING_LEN + 1];
- char url[MOTHED_URL_LEN + 1];
-
- enum EProxyMethod eMethod;
-
- CWifiMgr *pWifiMgr;
- CNetConMgr *pNetConMgr;
- CViewMgr *pViewMgr;
-};
-
-bool CProxyMainView::m_InitConnection(void)
-{
- bool ret = false;
-
- if(!CWifiMgr::Initialize()) {
- _ERR("Fail to initialize WifiMgr");
- return false;
- }
-
- m->pWifiMgr = CWifiMgr::GetInstance();
- if(!m->pWifiMgr) {
- _ERR("Fail to get instance");
- return false;
- }
-
- ret = CNetConMgr::Initialize();
- if(ret != true) {
- _ERR("Fail to initialize NetConMgr");
- return false;
- }
-
- m->pNetConMgr = CNetConMgr::GetInstance();
- if(!m->pNetConMgr) {
- _ERR("Fail to get instance");
- return false;
- }
-
- return true;
-}
-
-
-void CProxyMainView::m_FinalizeConnection()
-{
- CNetConMgr::Finalize();
- CWifiMgr::Finalize();
- m->pNetConMgr = NULL;
- m->pWifiMgr = NULL;
-}
-
-
-Evas_Object* CProxyMainView::m_CreateMainLayout(void)
-{
- Evas_Object *base;
-
- base = util_add_layout(m->win, UG_PROXY_EDJ_FILE, GRP_MAIN_VIEW);
- if (!base) {
- _ERR("elm_layout_add() failed.");
- return NULL;
- }
-
- //evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN, _base_key_pressed_cb, priv);
- Connect(base, 0);
-
- evas_object_show(base);
-
- return base;
-}
-
-
-Evas_Object * CProxyMainView::m_CreateValueBtn(Evas_Object *parent, int num, char *txt)
-{
- Evas_Object *btn;
-
- btn = util_add_button(parent, STYLE_VALUE_BTN, NULL, txt);
- if (!btn) {
- _ERR("add button failed.");
- return NULL;
- }
-
- switch (num) {
- case 0:
- elm_object_part_content_set(parent, PART_IP_FIRST, btn);
- evas_object_data_set(parent, IP_VALUE1, btn);
- elm_object_focus_set(btn, EINA_TRUE);
- break;
- case 1:
- elm_object_part_content_set(parent, PART_IP_SECOND, btn);
- evas_object_data_set(parent, IP_VALUE2, btn);
- break;
- case 2:
- elm_object_part_content_set(parent, PART_IP_THIRD, btn);
- evas_object_data_set(parent, IP_VALUE3, btn);
- break;
- case 3:
- elm_object_part_content_set(parent, PART_IP_FORTH, btn);
- evas_object_data_set(parent, IP_VALUE4, btn);
- break;
- default:
- break;
- }
-
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _value_key_pressed_cb, data);
- Connect(btn, 14);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
-
- return btn;
-
-}
-
-
-bool CProxyMainView::m_SetWifiProxy(void)
-{
- bool ret = false;
-
- if (!m->pWifiMgr) {
- _ERR("WifiMgr is not initialized.");
- return false;
- }
-
- CWifiAp ap(NULL);
- ap.AllocConnectedAp();
- ret = ap.SetProxyType(m->eMethod);
- if (ret != true) {
- _ERR("wifi_mgr_get_proxy_type() failed.");
- return ret;
- }
-
- switch (m->eMethod) {
- case PROXY_METHOD_NONE:
- ap.SetProxyAddr(NULL);
- break;
- case PROXY_METHOD_MANUAL:
- if (m->ip)
- ap.SetProxyAddr(m->ip);
- break;
- case PROXY_METHOD_AUTO:
- if (m->url)
- ap.SetProxyAddr(m->url);
- //m->pWifiMgr->SetProxyAddr(m->url);
- break;
- default:
- return false;
- }
-
- return true;
-}
-
-
-bool CProxyMainView::m_SetConnectionProxy(void)
-{
- bool ret;
- ret = m->pNetConMgr->SetProxyType(m->eMethod);
- if (ret != true) {
- _ERR("wifi_mgr_get_proxy_type() failed.");
- return false;
- }
-
- switch (m->eMethod) {
- case PROXY_METHOD_NONE:
- break;
- case PROXY_METHOD_MANUAL:
- if (m->ip)
- m->pNetConMgr->SetProxyAddr(m->ip);
- break;
- case PROXY_METHOD_AUTO:
- if (m->url)
- m->pNetConMgr->SetProxyAddr(m->url);
- break;
- default:
- return false;
- }
-
- return true;
-}
-
-
-bool CProxyMainView::m_SetProxy(void)
-{
- bool ret = false;
-
- if (m->net_type == TYPE_WIRED) {
- ret = m_SetConnectionProxy();
- if (ret != true) {
- _ERR("the ip or port is invalid.");
- return ret;
- }
- } else if (m->net_type == TYPE_WIRELESS) {
- ret = m_SetWifiProxy();
- if (ret != true) {
- _ERR("the ip or port is invalid.");
- return ret;
- }
- }
-
- return true;
-
-}
-
-
-void CProxyMainView::m_MethodBtnClicked(EProxyMethod method)
-{
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- m->eMethod = method;
-
- elm_box_clear(m->box);
-
- m->method_btn = NULL;
- m->proxy_btn= NULL;
- m->url_btn = NULL;
-
- switch (m->eMethod) {
- case PROXY_METHOD_NONE:
- m_CreateMethodNoneBtn();
- break;
- case PROXY_METHOD_MANUAL:
- m_CreateMethodManualBtn();
- break;
- case PROXY_METHOD_AUTO:
- m_CreateMethodAutoBtn();
- break;
- default:
- break;
- }
-
- elm_object_focus_set(m->method_btn, EINA_TRUE);
-}
-
-
-void CProxyMainView::m_SetupDownCycleFocus(Evas_Object **obj, int count)
-{
- for (int i = 0; i < count; i++) {
- if (i == count - 1)
- elm_object_focus_next_object_set(obj[i], obj[0], ELM_FOCUS_DOWN);
- else
- elm_object_focus_next_object_set(obj[i], obj[i + 1], ELM_FOCUS_DOWN);
-
- if (i == 0)
- elm_object_focus_next_object_set(obj[i], obj[count - 1], ELM_FOCUS_UP);
- else
- elm_object_focus_next_object_set(obj[i], obj[i - 1], ELM_FOCUS_UP);
- }
-}
-
-
-void CProxyMainView::m_SetTheValue(void)
-{
- Evas_Object *btn;
- const char *value1;
- const char *value2;
- const char *value3;
- const char *value4;
- char ip[IP_STRING_LEN + 1];
-
- value1 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->ctxpopup, IP_VALUE1);
- if (btn)
- value1 = elm_object_text_get(btn);
-
- value2 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->ctxpopup, IP_VALUE2);
- if (btn)
- value2 = elm_object_text_get(btn);
-
- value3 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->ctxpopup, IP_VALUE3);
- if (btn)
- value3 = elm_object_text_get(btn);
-
- value4 = NULL;
- btn = (Evas_Object *) evas_object_data_get(m->ctxpopup, IP_VALUE4);
- if (btn)
- value4 = elm_object_text_get(btn);
-
- memset(ip, 0, IP_STRING_LEN + 1);
- snprintf(ip, IP_STRING_LEN, "%s.%s.%s.%s",
- value1 ? value1 : "\\0", value2 ? value2 : "\\0",
- value3 ? value3 : "\\0", value4 ? value4 : "\\0");
-
- strncpy(m->ip, ip, IP_STRING_LEN);
- elm_object_part_text_set(m->proxy_btn, PART_VALUE, ip);
-
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
-}
-
-
-void CProxyMainView::m_SetLeftRightCycleFocus(Evas_Object **obj, int count)
-{
- int i;
-
- if (!obj || !*obj) {
- _ERR("the param is invalid.");
- return;
- }
-
- for (i = 0; i < count; i++) {
- if (i == count - 1)
- elm_object_focus_next_object_set(obj[i], obj[0], ELM_FOCUS_RIGHT);
- else
- elm_object_focus_next_object_set(obj[i], obj[i + 1], ELM_FOCUS_RIGHT);
-
- if (i == 0)
- elm_object_focus_next_object_set(obj[i], obj[count - 1], ELM_FOCUS_LEFT);
- else
- elm_object_focus_next_object_set(obj[i], obj[i - 1], ELM_FOCUS_LEFT);
- }
-}
-
-
-void CProxyMainView::m_CreateValuePopup(void)
-{
- Evas_Object *ctxpopup;
- Evas_Object *btn;
- Evas_Coord pos_x;
- Evas_Coord pos_y;
- int i;
-
- ctxpopup = util_add_layout(m->base, UG_PROXY_EDJ_FILE, GRP_PROXY_VALUE_SETTING);
- if (!ctxpopup) {
- _ERR("elm_ctxpopup_add() failed.");
- return;
- }
-
- m->ctxpopup = ctxpopup;
-
- evas_object_show(m->dim_ly);
-
- for (i = 0; i < PROXY_CONFIG_MAX_NUM; i++) {
- btn = m_CreateValueBtn(ctxpopup, i, _(TXT_ZERO));
- if (!btn) {
- _ERR("m_CreateValueBtn() failed.");
- evas_object_del(ctxpopup);
- return;
- }
-
- m->vaule_btns[i] = btn;
- }
-
- elm_object_part_text_set(ctxpopup, PART_TXT_SEPERATOR, _(TXT_COLON));
- //evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN, _value_ctxpopup_key_pressed_cb, priv);
- Connect(ctxpopup, 10);
- m_SetLeftRightCycleFocus(m->vaule_btns, PROXY_CONFIG_MAX_NUM);
-
- pos_x = 0;
- pos_y = 0;
-
- Evas_Coord x;
- Evas_Coord y;
- evas_object_geometry_get(m->proxy_btn, &x, &y, NULL, NULL);
- pos_x = x + VALUE_CTXPOPUP_OFFSET_X;
- pos_y = y - VALUE_CTXPOPUP_OFFSET_Y;
-
- evas_object_move(ctxpopup, pos_x * ELM_SCALE, pos_y * ELM_SCALE);
-}
-
-
-void CProxyMainView::m_CreateInputEntry(void)
-{
- Evas_Object *entry;
- Evas_Object *layout;
-
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- layout = util_add_layout(m->base, UG_PROXY_EDJ_FILE, GRP_ENTRY_POPUP);
- if (!layout) {
- _ERR("create layout fail.");
- return;
- }
-
- entry = util_add_entry(layout, STYLE_ENTRY, PART_ENTRY);
- if (!entry) {
- _ERR("add entry failed.");
- evas_object_del(layout);
- return;
- }
-
- util_set_focus_next_self(entry);
- //evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, _entry_key_pressed_cb, priv);
- Connect(entry, 9);
- elm_object_focus_set(entry, EINA_TRUE);
-
- evas_object_show(m->dim_ly);
-
- m->ctxpopup = layout;
-}
-
-
-void CProxyMainView::m_ShowInvalidInfoPopup(int status)
-{
- Evas_Object *layout;
- Evas_Object *btn;
- Evas_Coord w;
- Evas_Coord h;
-
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_PROXY_EDJ_FILE, GRP_CONFIRM_LAYOUT);
- if (!layout) {
- _ERR("add layout failed.");
- evas_object_hide(m->dim_ly);
- return;
- }
-
- switch (m->eMethod) {
- case PROXY_METHOD_MANUAL:
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_MANUAL_TITLE));
- break;
- case PROXY_METHOD_AUTO:
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_AUTO_TITLE));
- break;
- default:
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_MANUAL_TITLE));
-
- if (status == RET_IP_INVALID)
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, _(TXT_IP_INVALID));
- else if (status == RET_VCONF_FAILED)
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, _(TXT_VCONF_FAILED));
- else if (status == RET_WIRED_PROXY_FAILED)
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, _(TXT_WIRED_FAILED));
- else if (status == RET_WIRELESS_PROXY_FAILED)
- elm_object_part_text_set(layout, PART_TEXT_CONTENT, _(TXT_WIRELESS_FAILED));
-
- btn = util_add_button(layout, STYLE_ACTION_BTN, PART_OK_BTN, _(TXT_OK));
- if (!btn) {
- _ERR("util add button failed.");
- evas_object_del(layout);
- evas_object_hide(m->dim_ly);
- return;
- }
-
- elm_object_focus_set(btn, EINA_TRUE);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
-
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _ctxpopup_ok_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(layout, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_key_pressed_cb, priv);
- Connect(btn, 7);
- Connect(layout, 8);
-
- w = DEFAULT_WIN_WIDTH;
- h = DEFAULT_WIN_HEIGHT;
-
- evas_object_move(layout, CENTER_ALIGN * (w - CTXPOPUP_WIDTH) * ELM_SCALE, CENTER_ALIGN * (h - CTXPOPUP_HEIGHT) * ELM_SCALE);
-
- m->ctxpopup = layout;
-}
-
-
-bool CProxyMainView::m_CreateMethodBoxBtn(Evas_Object *btn, const char *key, char *value, int line)
-{
- if (btn) {
- evas_object_show(btn);
- elm_object_part_text_set(btn, PART_VALUE, value);
- } else {
- if (line == BTN_TWO_LINE)
- btn = util_add_key_value_button(m->box, STYLE_KEY_VALUE_TWO_LINES, NULL, key, value);
- else
- btn = util_add_key_value_button(m->box, STYLE_KEY_VALUE_BTN, NULL, key, value);
-
- if (!btn) {
- _ERR("add method btn failed.");
- return false;
- }
- }
- return true;
-}
-
-
-bool CProxyMainView::m_CreateMethodAutoBtn(void)
-{
- Evas_Object *box;
- box = m->box;
-
- if(!m_CreateMethodBoxBtn(m->method_btn, _(TXT_MOTHED), _(TXT_MOTHED_AUTO), BTN_ONE_LINE)) {
- _ERR("add method btn failed.");
- return false;
- }
- ASSERT(m->method_btn);
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _method_btn_clicked_cb, priv);
- Connect(m->method_btn, 3);
- elm_object_focus_next_object_set(m->method_btn, m->method_btn, ELM_FOCUS_LEFT);
- elm_box_pack_end(box, m->method_btn);
-
- if(!m_CreateMethodBoxBtn(m->url_btn, _(TXT_CONFIG_URL), _(m->url), BTN_TWO_LINE)) {
- _ERR("add url btn failed.");
- return false;
- }
- ASSERT(m->url_btn);
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _url_btn_clicked_cb, priv);
- Connect(m->url_btn, 4);
- elm_object_focus_next_object_set(m->url_btn, m->url_btn, ELM_FOCUS_LEFT);
- elm_box_pack_end(box, m->url_btn);
-
- return true;
-}
-
-
-bool CProxyMainView::m_CreateMethodManualBtn(void)
-{
- Evas_Object *box;
- box = m->box;
-
- if(!m_CreateMethodBoxBtn(m->method_btn, _(TXT_MOTHED), _(TXT_MOTHED_MAN), BTN_ONE_LINE)) {
- _ERR("add method btn failed.");
- return false;
- }
- ASSERT(m->method_btn);
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _method_btn_clicked_cb, priv);
- Connect(m->method_btn, 3);
- elm_object_focus_next_object_set(m->method_btn, m->method_btn, ELM_FOCUS_LEFT);
- elm_box_pack_end(box, m->method_btn);
-
- if(!m_CreateMethodBoxBtn(m->proxy_btn, _(TXT_PROXY_IP), _(m->ip), BTN_ONE_LINE)) {
- _ERR("add http btn failed.");
- return false;
- }
- ASSERT(m->proxy_btn);
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _proxy_ip_btn_clicked_cb, priv);
- Connect(m->proxy_btn, 5);
- elm_object_focus_next_object_set(m->proxy_btn, m->proxy_btn, ELM_FOCUS_LEFT);
- elm_box_pack_end(box, m->proxy_btn);
-
- return true;
-}
-
-
-bool CProxyMainView::m_CreateMethodNoneBtn(void)
-{
- if(!m_CreateMethodBoxBtn(m->method_btn, _(TXT_MOTHED), _(TXT_MOTHED_NONE), BTN_ONE_LINE)) {
- _ERR("add method btn failed.");
- return false;
- }
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _method_btn_clicked_cb, priv);
- Connect(m->method_btn, 3);
- elm_object_focus_next_object_set(m->method_btn, m->method_btn, ELM_FOCUS_LEFT);
- elm_box_pack_end(m->box, m->method_btn);
-
- return true;
-}
-
-
-bool CProxyMainView::m_CreateDimLayout(void)
-{
- Evas_Object *dim_ly;
-
- dim_ly = util_add_layout(m->base, UG_PROXY_EDJ_FILE, GRP_DIM_LY);
- if (!dim_ly) {
- _ERR("elm_layout_add() failed.");
- return false;
- }
-
- m->dim_ly = dim_ly;
- evas_object_hide(m->dim_ly);
-
- return true;
-}
-
-
-bool CProxyMainView::m_CreateActionBtns(void)
-{
- Evas_Object *btn;
-
- btn = util_add_button(m->base, STYLE_ACTION_BTN, PART_OK_BTN, _(TXT_OK));
- if (!btn) {
- _ERR("add ok button failed.");
- return false;
- }
-
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _ok_btn_clicked_cb, priv);
- Connect(btn, 1);
-
- elm_object_focus_set(btn, EINA_TRUE);
-
- btn = util_add_button(m->base, STYLE_ACTION_BTN, PART_CANCEL_BTN, _(TXT_CANCEL));
- if (!btn) {
- _ERR("add cancel button failed.");
- return false;
- }
-
- //evas_object_smart_callback_add(btn, SIG_CLICKED, _cancel_btn_clicked_cb, priv);
- Connect(btn, 2);
-
- return true;
-}
-
-
-bool CProxyMainView::m_GetProxyMethod(void)
-{
- int value;
- int ret;
- char *str;
-
- str = vconf_get_str(VCONF_NETWORK_TYPE);
- if (str && !strcmp(str, TXT_WIRED))
- m->net_type = TYPE_WIRED;
- else
- m->net_type = TYPE_WIRELESS;
-
- value = 0;
- ret = vconf_get_int((char*) VCONF_PROXY_METHOD, &value);
- if (ret != true) {
- _ERR("vconf_get_int() failed.");
- return false;
- }
-
- switch (value) {
- case 0:
- m->eMethod = PROXY_METHOD_NONE;
- break;
- case 1:
- m->eMethod = PROXY_METHOD_MANUAL;
- break;
- case 2:
- m->eMethod = PROXY_METHOD_AUTO;
- break;
- default:
- return false;
- }
-
- char *ip = NULL;
- ip = vconf_get_str(VCONF_PROXY_IP);
- if (!ip)
- snprintf(m->ip, IP_STRING_LEN, "%s", IP_ZERO);
- else
- snprintf(m->ip, IP_STRING_LEN, "%s", ip);
-
- str = vconf_get_str(VCONF_PROXY_URL);
- if (!str)
- snprintf(m->url, MOTHED_URL_LEN, "%s", URL_BLANK);
- else
- snprintf(m->url, MOTHED_URL_LEN, "%s", str);
-
- return true;
-}
-
-
-bool CProxyMainView::m_CreateProxyLayout(void)
-{
- Evas_Object *box;
- int ret;
-
- box = util_add_box(m->base, PART_PROXY_SETTING);
- if (!box) {
- _ERR("add box failed.");
- return false;
- }
-
- m->box = box;
-
- switch (m->eMethod) {
- case PROXY_METHOD_NONE:
- ret = m_CreateMethodNoneBtn();
- if (ret != true) {
- _ERR("add method none failed.");
- evas_object_del(box);
- return false;
- }
-
- break;
- case PROXY_METHOD_MANUAL:
- ret = m_CreateMethodManualBtn();
- if (ret != true) {
- _ERR("add method manual failed.");
- evas_object_del(box);
- return false;
- }
-
- break;
- case PROXY_METHOD_AUTO:
- ret = m_CreateMethodAutoBtn();
- if (ret != true) {
- _ERR("add method manual failed.");
- evas_object_del(box);
- return false;
- }
-
- break;
- default:
- break;
- }
-
- return true;
-}
-
-
-void CProxyMainView::t_OnShow()
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CProxyMainView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-
-#if 0
- switch (m->cur_view) {
- case NETWORK_IP_SETTING_VIEW:
- elm_object_focus_set(m->other_btn, EINA_TRUE);
- break;
- case NETWORK_WIFI_PASSCODE_VIEW:
- elm_object_focus_set(m->connect_btn, EINA_TRUE);
- break;
- default:
- break;
- }
-#endif
-}
-
-
-void CProxyMainView::t_OnHide()
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CProxyMainView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- _CREATE_BEGIN{
- _CHECK(m = new SProxyMainView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m_InitConnection())
- _CHECK(m->base = m_CreateMainLayout())
- _CHECK(m_GetProxyMethod())
- _CHECK(m_CreateProxyLayout())
- _CHECK(m_CreateActionBtns())
- _CHECK(m_CreateDimLayout())
-
- _WHEN_SUCCESS {
- elm_object_part_text_set(m->base, PART_PROXY_DESCRITION, _(TXT_PROXY_DESCRIPTION));
- elm_object_focus_set(m->method_btn, EINA_TRUE);
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{/* m_CreateDimLayout() */}
- _CHECK_FAIL{/* m_CreateActionBtns() */}
- _CHECK_FAIL{/* m_CreateProxyLayout() */}
- _CHECK_FAIL{/* m_GetProxyMethod() */}
- _CHECK_FAIL{evas_object_del(m->base);}
- _CHECK_FAIL{m_FinalizeConnection();}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-void CProxyMainView::Destroy()
-{
- ASSERT(m);
- _DBG();
-
- CBaseView::Destroy();
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CProxyMainView::Base()
-{
- ASSERT(m);
- _DBG();
-
- return m->base;
-}
-
-
-void CProxyMainView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- /* ID list */
- /* 0 m->base */
- /* 1 action ok_btn */
- /* 2 action cancel_btn */
- /* 3 method_btn */
- /* 4 url_btn */
- /* 5 proxy_btn */
- /* 6 ctxpopup */
- /* 7 invalidinfo popup ok_btn */
- /* 8 invalidinfo popup layout */
- /* 9 input entry */
- /* 10 value popup */
-
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 0:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- ug_destroy_me(m->ug);
- return;
- }
- break;
- case 6:
- case 8:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
- }
- break;
- case 9:
- elm_entry_input_panel_show(obj);
-
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
- evas_object_hide(m->dim_ly);
- } else if (!strcmp(ev->keyname, KEY_PROXY_ENTER)) {
- const char *value;
- value = elm_entry_entry_get(obj);
- elm_object_part_text_set(m->url_btn, PART_VALUE, value);
- memset(m->url, 0, MOTHED_URL_LEN + 1);
- strncpy(m->url, value, MOTHED_URL_LEN);
-
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- elm_object_focus_set(m->url_btn, EINA_TRUE);
- evas_object_hide(m->dim_ly);
- }
- break;
- case 10:
- if (!strcmp(ev->keyname, KEY_ENTER) || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
- evas_object_show(m->dim_ly);
- m_SetTheValue();
- evas_object_del(obj);
- } else if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- evas_object_hide(m->dim_ly);
- evas_object_del(obj);
- }
- break;
- case 14:
- const char *value;
- int num, new_num, max_num;
- max_num = IP_MAX_NUM;
-
- if (!strcmp(ev->keyname, KEY_UP)) {
- value = elm_object_text_get(obj);
- num = atoi(value);
- num++;
- if (num > max_num)
- num = 0;
- } else if (!strcmp(ev->keyname, KEY_DOWN)) {
- value = elm_object_text_get(obj);
- num = atoi(value);
- num--;
- if (num < 0)
- num = max_num;
- } else if (!strcmp(ev->keyname, KEY_0) ||
- !strcmp(ev->keyname, KEY_1) ||
- !strcmp(ev->keyname, KEY_2) ||
- !strcmp(ev->keyname, KEY_3) ||
- !strcmp(ev->keyname, KEY_4) ||
- !strcmp(ev->keyname, KEY_5) ||
- !strcmp(ev->keyname, KEY_6) ||
- !strcmp(ev->keyname, KEY_7) ||
- !strcmp(ev->keyname, KEY_8) ||
- !strcmp(ev->keyname, KEY_9)) {
- value = elm_object_text_get(obj);
- if (!value)
- elm_object_text_set(obj, ev->keyname);
-
- new_num = atoi(ev->keyname);
-
- num = atoi(value);
- if (!num || (num * IP_RATIO + new_num) > max_num) {
- elm_object_text_set(obj, ev->keyname);
- return;
- }
-
- num = num * IP_RATIO + new_num;
- } else {
- return;
- }
-
- char temp_value[MOTHED_STRING_LEN];
-
- if (!obj) {
- _ERR("The param is invalid.");
- return;
- }
-
- memset(temp_value, 0, MOTHED_STRING_LEN);
- snprintf(temp_value, MOTHED_STRING_LEN - 1, "%d", num);
- elm_object_text_set(obj, temp_value);
- break;
- default:
- break;
- }
-}
-
-
-void CProxyMainView::OnMouseClicked(int id, Evas_Object *obj)
-{
- bool ret = false;
-
- switch(id) {
- case 1:
- ret = m_SetProxy();
- if (ret != true) {
- _ERR("the ip or port is invalid.");
- m_ShowInvalidInfoPopup(ret);
- return;
- }
-
- vconf_set_int((char*)VCONF_PROXY_METHOD, m->eMethod);
-
- if (m->eMethod == PROXY_METHOD_MANUAL) {
- if (!strncmp(m->ip, IP_ZERO, IP_STRING_LEN)) {
- _ERR("IP addr is invalid.");
- }
- vconf_set_str((char*)VCONF_PROXY_IP, m->ip);
- }
- else if(m->eMethod == PROXY_METHOD_AUTO) {
- vconf_set_str((char*)VCONF_PROXY_URL, m->url);
- }
- ug_destroy_me(m->ug);
- break;
- case 2:
- ug_destroy_me(m->ug);
- break;
- case 3:
- Evas_Object *ctxpopup;
- Evas_Object *box;
- Evas_Object *none_btn;
- Evas_Object *man_btn;
- Evas_Object *auto_btn;
- Evas_Object *btn[METHOD_NUM];
- Evas_Coord x;
- Evas_Coord y;
- Evas_Coord w;
- Evas_Coord h;
-
- ctxpopup = util_add_layout(m->base, UG_PROXY_EDJ_FILE, GRP_METHOD_SETTING);
- if (!ctxpopup) {
- _ERR("add method ctxpopup failed.");
- return;
- }
-
- //evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED, _ctxpopup_unfocused_cb, priv);
- //evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_key_pressed_cb, priv);
- Connect(ctxpopup, 6);
-
- m->ctxpopup = ctxpopup;
-
- elm_object_signal_emit(m->method_btn, SIG_BTN_SELECTED, PROG);
- evas_object_show(m->dim_ly);
-
- box = util_add_box(ctxpopup, PART_SWALLOW_CONTENT);
- if (!box) {
- _ERR("create box failed.");
- evas_object_del(ctxpopup);
- return;
- }
-
- none_btn = util_add_button(ctxpopup, STYLE_METHOD_SET, NULL, _(TXT_MOTHED_NONE));
- if (!none_btn) {
- _ERR("Add btn failed.");
- evas_object_del(ctxpopup);
- return;
- }
- //evas_object_smart_callback_add(none_btn, SIG_CLICKED, _method_none_btn_clicked_cb, NULL);
- Connect(none_btn, 11);
-
- elm_box_pack_end(box, none_btn);
- elm_object_focus_set(none_btn, EINA_TRUE);
- btn[PROXY_METHOD_NONE] = none_btn;
-
- man_btn = util_add_button(ctxpopup, STYLE_METHOD_SET, NULL, _(TXT_MOTHED_MAN));
- if (!man_btn) {
- _ERR("Add btn failed.");
- evas_object_del(ctxpopup);
- return;
- }
- //evas_object_smart_callback_add(man_btn, SIG_CLICKED, _method_man_btn_clicked_cb, NULL);
- Connect(man_btn, 12);
-
- elm_box_pack_end(box, man_btn);
- btn[PROXY_METHOD_MANUAL] = man_btn;
-
- auto_btn = util_add_button(ctxpopup, STYLE_METHOD_SET, NULL, _(TXT_MOTHED_AUTO));
- if (!auto_btn) {
- _ERR("Add btn failed.");
- evas_object_del(ctxpopup);
- return;
- }
- //evas_object_smart_callback_add(auto_btn, SIG_CLICKED, _method_auto_btn_clicked_cb, NULL);
- Connect(auto_btn, 13);
- elm_box_pack_end(box, auto_btn);
- btn[PROXY_METHOD_AUTO] = auto_btn;
- m_SetupDownCycleFocus(btn, METHOD_NUM);
- m_SetLeftRightCycleFocus(btn, METHOD_NUM);
-
- switch (m->eMethod) {
- case PROXY_METHOD_NONE:
- elm_object_signal_emit(none_btn, SIG_BTN_SELECTED, PROG);
- break;
- case PROXY_METHOD_MANUAL:
- elm_object_signal_emit(man_btn, SIG_BTN_SELECTED, PROG);
- break;
- case PROXY_METHOD_AUTO:
- elm_object_signal_emit(auto_btn, SIG_BTN_SELECTED, PROG);
- break;
- default:
- break;
- }
-
- evas_object_geometry_get(m->method_btn, &x, &y, &w, &h);
- evas_object_move(ctxpopup, (x + METHOD_CTXPOPUP_OFFSET_X) * ELM_SCALE, (y + ALIGH_RATIO * h + LINE_PAD) * ELM_SCALE);
- break;
- case 4:
- m_CreateInputEntry();
- break;
- case 5:
- elm_object_signal_emit(m->proxy_btn, SIG_BTN_SELECTED, PROG);
- m_CreateValuePopup();
- break;
- case 7:
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
- evas_object_hide(m->dim_ly);
- elm_object_focus_set(m->ok_btn, EINA_TRUE);
- break;
- case 11:
- m_MethodBtnClicked(PROXY_METHOD_NONE);
- break;
- case 12:
- m_MethodBtnClicked(PROXY_METHOD_MANUAL);
- break;
- case 13:
- m_MethodBtnClicked(PROXY_METHOD_AUTO);
- break;
- default:
- break;
- }
-}
-
-
-void CProxyMainView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- switch(id) {
- case 0:
- break;
- case 6:
- case 8:
- case 10:
- evas_object_hide(m->dim_ly);
- if (m->ctxpopup) {
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
- break;
- default:
- break;
- }
-}
--- /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 <Elementary.h>
+#include <aul.h>
+#include "defs.h"
+#include "dbg.h"
+#include "connection_mgr.h"
+
+/**
+ * Converts the error type to string information.
+ *
+ * @param[in] err_type Error type
+ * @return error string information;
+ */
+static const char *_convert_error_to_string(connection_error_e err_type)
+{
+ _DBG("Not Yet");
+#if 0
+ switch (err_type) {
+ case CONNECTION_ERROR_NONE:
+ return "NONE";
+ case CONNECTION_ERROR_INVALID_PARAMETER:
+ return "INVALID_PARAMETER";
+ case CONNECTION_ERROR_OUT_OF_MEMORY:
+ return "OUT_OF_MEMORY";
+ case CONNECTION_ERROR_INVALID_OPERATION:
+ return "INVALID_OPERATION";
+ case CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+ return "ADDRESS_FAMILY_NOT_SUPPORTED";
+ case CONNECTION_ERROR_OPERATION_FAILED:
+ return "OPERATION_FAILED";
+ case CONNECTION_ERROR_ITERATOR_END:
+ return "ITERATOR_END";
+ case CONNECTION_ERROR_NO_CONNECTION:
+ return "NO_CONNECTION";
+ case CONNECTION_ERROR_NOW_IN_PROGRESS:
+ return "NOW_IN_PROGRESS";
+ case CONNECTION_ERROR_ALREADY_EXISTS:
+ return "ALREADY_EXISTS";
+ case CONNECTION_ERROR_OPERATION_ABORTED:
+ return "OPERATION_ABORTED";
+ case CONNECTION_ERROR_DHCP_FAILED:
+ return "DHCP_FAILED";
+ case CONNECTION_ERROR_INVALID_KEY:
+ return "INVALID_KEY";
+ case CONNECTION_ERROR_NO_REPLY:
+ return "NO_REPLY";
+ case CONNECTION_ERROR_NO_KEYWORD:
+ return "NO_KEYWORD";
+ case CONNECTION_ERROR_TCP_RST:
+ return "RST_IN_TCP_RESPONSE";
+ case CONNECTION_ERROR_TCP_SYN_TIMEOUT:
+ return "TCP_SYN_TIMEOUT";
+ case CONNECTION_ERROR_OFFLINE:
+ return "CONNECTION_OFFLINE";
+ case CONNECTION_ERROR_NETWORK_MONITOR_FAILURE:
+ return "monitor failer";
+ case CONNECTION_ERROR_INVALID_GATEWAY:
+ return "invalid gateway";
+ case CONNECTION_ERROR_INVALID_MACADDRESS:
+ return "invalid mac addr";
+ default:
+ break;
+ }
+
+#endif
+ return "Unknown";
+}
+
+/**
+ * Creates a handle for managing data connections.
+ *
+ * The handle must be released with connection_destroy().
+ *
+ * @return connetcion if the operation is successful; NULL if failed;
+ */
+connection_h connection_mgr_create(void)
+{
+ int ret;
+ connection_h connection;
+
+ connection = NULL;
+ ret = connection_create(&connection);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_create failed");
+ connection = NULL;
+ }
+
+ return connection;
+}
+
+/**
+ * Destroys the connection handle.
+ *
+ * @param[in] connection The handle of the connection
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_destroy(connection_h connection)
+{
+ int ret;
+
+ if (!connection) {
+ _ERR("connection is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = connection_destroy(connection);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_destroy() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the ethernet profile information.
+ *
+ * Iterates all the profile in the connection, and gets the ethernet one.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[out] info The structure to store profile information
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_get_profile_info(connection_h connection,
+ connection_profile_h *out_profile)
+{
+ connection_profile_iterator_h iter;
+ connection_profile_h profile;
+ connection_profile_type_e type;
+ char *name;
+ int ret;
+
+ if (!connection || !out_profile) {
+ _ERR("param is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = connection_get_profile_iterator(connection,
+ CONNECTION_ITERATOR_TYPE_REGISTERED, &iter);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile iterator: %s.\n",
+ _convert_error_to_string(ret));
+ return RET_FAILED;
+ }
+
+ while (connection_profile_iterator_has_next(iter)) {
+ profile = NULL;
+ if (connection_profile_iterator_next(iter,
+ &profile) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile handle\n");
+ return RET_FAILED;
+ }
+
+ if (!profile) {
+ _ERR("get profile failed.");
+ return RET_FAILED;
+ }
+
+ if (connection_profile_get_type(profile,
+ &type) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile type\n");
+ return RET_FAILED;
+ }
+
+ name = NULL;
+ if (connection_profile_get_name(profile,
+ &name) != CONNECTION_ERROR_NONE) {
+ _ERR("Fail to get profile name\n");
+ return RET_FAILED;
+ }
+
+ if (!name) {
+ _ERR("get name failed.");
+ return RET_FAILED;
+ }
+
+ if (type == CONNECTION_PROFILE_TYPE_ETHERNET)
+ *out_profile = profile;
+
+ free(name);
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the Proxy type.
+ *
+ * If you set Proxy type to #WIFI_PROXY_TYPE_AUTO or
+ * #WIFI_PROXY_TYPE_MANUAL, then Proxy will be restored.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[in] method The proxy type
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_set_proxy_type(connection_h connection,
+ enum method_enum method)
+{
+ connection_profile_h profile;
+ connection_proxy_type_e type;
+ int ret;
+
+ if (!connection) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ profile = NULL;
+ ret = connection_mgr_get_profile_info(connection, &profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_mgr_get_profile_info() failed.\n");
+ return RET_FAILED;
+ }
+
+ switch (method) {
+ case METHOD_NONE:
+ type = CONNECTION_PROXY_TYPE_DIRECT;
+ break;
+ case METHOD_MAN:
+ type = CONNECTION_PROXY_TYPE_MANUAL;
+ break;
+ case METHOD_AUTO:
+ type = CONNECTION_PROXY_TYPE_AUTO;
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_proxy_type(profile, type);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_profile_set_proxy_type() failed.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the Proxy type.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[out] method The proxy type
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_get_proxy_type(connection_h connection,
+ enum method_enum *method)
+{
+ connection_profile_h profile;
+ connection_proxy_type_e type;
+ int ret;
+
+ if (!connection || !method) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ profile = NULL;
+ ret = connection_mgr_get_profile_info(connection, &profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_mgr_get_profile_info() failed.\n");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_get_proxy_type(profile, &type);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_profile_get_proxy_type() failed.\n");
+ return RET_FAILED;
+ }
+
+ switch (type) {
+ case CONNECTION_PROXY_TYPE_DIRECT:
+ *method = METHOD_NONE;
+ break;
+ case CONNECTION_PROXY_TYPE_MANUAL:
+ *method = METHOD_MAN;
+ break;
+ case CONNECTION_PROXY_TYPE_AUTO:
+ *method = METHOD_AUTO;
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the Proxy address.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[in] ip IP address
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_set_proxy_address(connection_h connection,
+ const char *ip)
+{
+ connection_profile_h profile;
+ int ret;
+
+ if (!connection) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ profile = NULL;
+ ret = connection_mgr_get_profile_info(connection, &profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_mgr_get_profile_info() failed.\n");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_set_proxy_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4, ip);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_profile_set_proxy_address() failed.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the Proxy address.
+ *
+ * @param[in] connection The handle of the connection
+ * @param[out] ip IP address
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int connection_mgr_get_proxy_address(connection_h connection, char **ip)
+{
+ connection_profile_h profile;
+ int ret;
+
+ if (!connection || !ip || !*ip) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ profile = NULL;
+ ret = connection_mgr_get_profile_info(connection, &profile);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_mgr_get_profile_info() failed.\n");
+ return RET_FAILED;
+ }
+
+ ret = connection_profile_get_proxy_address(profile,
+ CONNECTION_ADDRESS_FAMILY_IPV4, ip);
+ if (ret != CONNECTION_ERROR_NONE) {
+ _ERR("connection_profile_get_proxy_address() failed.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
--- /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 <Elementary.h>
+#include <ui-gadget-module.h>
+
+#include <KeyDefine.h>
+
+#include "defs.h"
+#include "dbg.h"
+#include "main_view.h"
+#include "vconf_mgr.h"
+#include "wifi_mgr.h"
+#include "connection_mgr.h"
+#include "i18n.h"
+#include "util.h"
+#include "common.h"
+
+#define KEY_PRIV "priv"
+#define KEY_PROXY_ENTER "Select"
+#define IP_VALUE1 "value1"
+#define IP_VALUE2 "value2"
+#define IP_VALUE3 "value3"
+#define IP_VALUE4 "value4"
+
+static const char *VCONF_NETWORK_TYPE = "db/menu/network/network_type";
+static const char *VCONF_PROXY_METHOD = "db/menu/proxy/method";
+static const char *VCONF_PROXY_IP = "db/menu/proxy/ip";
+static const char *VCONF_PROXY_URL = "db/menu/proxy/url";
+
+#define METHOD_CTXPOPUP_OFFSET_X 448
+#define VALUE_CTXPOPUP_OFFSET_X 162
+#define VALUE_CTXPOPUP_OFFSET_Y 20
+#define PROXY_CONFIG_MAX_NUM 4
+#define IP_MAX_NUM 255
+#define IP_RATIO 10
+#define PORT_MAX_NUM 65535
+#define PORT_INVALID_NUM 65536
+#define PORT_NO_NEED 65537
+#define CENTER_ALIGN 0.5
+#define CTXPOPUP_WIDTH 688
+#define CTXPOPUP_HEIGHT 411
+#define BTN_ONE_LINE 1
+#define BTN_TWO_LINE 2
+#define LINE_PAD 2
+#define ALIGH_RATIO 1.5
+
+enum network_type_enum {
+ TYPE_WIRELESS = 0,
+ TYPE_WIRED
+};
+
+struct _priv {
+ Evas_Object *win;
+ ui_gadget_h ug;
+
+ Evas_Object *base;
+ Evas_Object *dim_ly;
+ Evas_Object *box;
+ Evas_Object *method_btn;
+ Evas_Object *proxy_btn;
+ Evas_Object *url_btn;
+ Evas_Object *ok_btn;
+ Evas_Object *cancel_btn;
+ Evas_Object *ctxpopup;
+ Evas_Object *vaule_btns[PROXY_CONFIG_MAX_NUM];
+
+ enum method_enum method;
+ enum network_type_enum net_type;
+
+ connection_h connection;
+
+ char ip[IP_STRING_LEN + 1];
+ char url[MOTHED_URL_LEN + 1];
+};
+
+static int _create_method_none_btn(struct _priv *priv);
+static int _create_method_manual_btns(struct _priv *priv);
+static int _create_method_auto_btns(struct _priv *priv);
+
+/**
+ * Initializes WI-FI for wireless network.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _init_wifi(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ wifi_mgr_init();
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Initializes connection for wired network.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _init_connection(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ priv->connection = connection_mgr_create();
+ if (!priv->connection) {
+ _ERR("connection_mgr_create() failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Deinitializes WI-FI for wireless network.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _fini_wifi(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ wifi_mgr_deinit();
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Deinitializes connection for wired network.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _fini_connection(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ if (priv->connection)
+ connection_mgr_destroy(priv->connection);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Initializes the private data.
+ *
+ * Called when the view is loaded.
+ *
+ * @return the handler of the private data;
+ */
+static struct _priv *_init_priv()
+{
+ struct _priv *priv;
+
+ priv = calloc(1, sizeof(*priv));
+ if (!priv) {
+ _ERR("calloc priv failed.");
+ return NULL;
+ }
+
+ _init_wifi(priv);
+ _init_connection(priv);
+
+ return priv;
+}
+
+/**
+ * Deinitializes the private data.
+ *
+ * Called when the view is deleted.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _fini_priv(struct _priv *priv)
+{
+ if (!priv)
+ return;
+
+ _fini_wifi(priv);
+ _fini_connection(priv);
+
+ if (priv->base)
+ evas_object_del(priv->base);
+
+ free(priv);
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, destroies the ug.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _base_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ ev = ei;
+ priv = data;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ ug_destroy_me(priv->ug);
+ return;
+ }
+}
+
+/**
+ * Shows the dim layout.
+ *
+ * Called when there is a ctxpopup.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_show(priv->dim_ly);
+}
+
+/**
+ * Hides the dim layout.
+ *
+ * Called when the existing ctxpopup is deleted.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _unset_layout_dim(struct _priv *priv)
+{
+ if (!priv || !priv->dim_ly) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ evas_object_hide(priv->dim_ly);
+}
+
+/**
+ * Sets the cycle focus in the direction of up and down.
+ *
+ * Sets the cycle focus for an array of objects.
+ *
+ * @param[in] obj The handler of objects
+ * @param[in] count The count of objects
+ */
+static void _set_up_down_cycle_focus(Evas_Object **obj,
+ int count)
+{
+ int i;
+
+ if (!*obj || !obj)
+ return;
+
+ for (i = 0; i < count; i++) {
+ if (i == count - 1)
+ elm_object_focus_next_object_set(obj[i], obj[0],
+ ELM_FOCUS_DOWN);
+ else
+ elm_object_focus_next_object_set(obj[i], obj[i + 1],
+ ELM_FOCUS_DOWN);
+
+ if (i == 0)
+ elm_object_focus_next_object_set(obj[i], obj[count - 1],
+ ELM_FOCUS_UP);
+ else
+ elm_object_focus_next_object_set(obj[i], obj[i - 1],
+ ELM_FOCUS_UP);
+ }
+}
+
+/**
+ * Sets the cycle focus in the direction of left and right.
+ *
+ * Sets the cycle focus for an array of objects.
+ *
+ * @param[in] obj The handler of objects
+ * @param[in] count The count of objects
+ */
+static void _set_left_right_cycle_focus(Evas_Object **obj, int count)
+{
+ int i;
+
+ if (!obj || !*obj) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ for (i = 0; i < count; i++) {
+ if (i == count - 1)
+ elm_object_focus_next_object_set(obj[i],
+ obj[0], ELM_FOCUS_RIGHT);
+ else
+ elm_object_focus_next_object_set(obj[i],
+ obj[i + 1], ELM_FOCUS_RIGHT);
+
+ if (i == 0)
+ elm_object_focus_next_object_set(obj[i],
+ obj[count - 1], ELM_FOCUS_LEFT);
+ else
+ elm_object_focus_next_object_set(obj[i],
+ obj[i - 1], ELM_FOCUS_LEFT);
+ }
+}
+
+/**
+ * Creates the basic layout of the view.
+ *
+ * @param[in] parent The parent object
+ * @return layout if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_basic_layout(struct _priv *priv)
+{
+ Evas_Object *base;
+
+ if (!priv || !priv->win) {
+ _ERR("priv is NULL.");
+ return NULL;
+ }
+
+ base = util_add_layout(priv->win, UG_PROXY_EDJ_FILE, GRP_MAIN_VIEW);
+ if (!base) {
+ _ERR("elm_layout_add() failed.");
+ return NULL;
+ }
+
+ evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN,
+ _base_key_pressed_cb, priv);
+
+ evas_object_show(base);
+
+ return base;
+}
+
+/**
+ * Sets the description.
+ *
+ * Sets the description for the proxy setting view.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_description(struct _priv *priv)
+{
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ elm_object_part_text_set(priv->base, PART_PROXY_DESCRITION,
+ _(TXT_PROXY_DESCRIPTION));
+}
+
+/**
+ * Gets proxy IP from vconf.
+ *
+ * @param[out] des_ip Destination IP
+ * @param[in] key_ip The vconf key
+ */
+static void _get_man_saved_value(char *des_ip,
+ const char *key_ip)
+{
+ char *ip;
+
+ if (!des_ip || !key_ip) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ ip = vconf_mgr_get_string_value(key_ip);
+ if (!ip)
+ snprintf(des_ip, IP_STRING_LEN, "%s", IP_ZERO);
+ else
+ snprintf(des_ip, IP_STRING_LEN, "%s", ip);
+}
+
+/**
+ * Gets the proxy method from vconf.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _get_proxy_method(struct _priv *priv)
+{
+ int value;
+ int ret;
+ char *str;
+
+ if (!priv) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ str = vconf_mgr_get_string_value(VCONF_NETWORK_TYPE);
+ if (str && !strcmp(str, TXT_WIRED))
+ priv->net_type = TYPE_WIRED;
+ else
+ priv->net_type = TYPE_WIRELESS;
+
+ value = 0;
+ ret = vconf_mgr_get_int_value(VCONF_PROXY_METHOD, &value);
+ if (ret != RET_SUCCESS) {
+ _ERR("vconf_mgr_get_int_value() failed.");
+ return RET_FAILED;
+ }
+
+ switch (value) {
+ case 0:
+ priv->method = METHOD_NONE;
+ break;
+ case 1:
+ priv->method = METHOD_MAN;
+ break;
+ case 2:
+ priv->method = METHOD_AUTO;
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ _get_man_saved_value(priv->ip, VCONF_PROXY_IP);
+
+ str = vconf_mgr_get_string_value(VCONF_PROXY_URL);
+ if (!str)
+ snprintf(priv->url, MOTHED_URL_LEN, "%s", URL_BLANK);
+ else
+ snprintf(priv->url, MOTHED_URL_LEN, "%s", str);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Keeps the focused state for the button.
+ *
+ * @param[in] btn The object button
+ */
+static void _keep_btn_dim_focused(Evas_Object *btn)
+{
+ if (!btn) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ elm_object_signal_emit(btn, SIG_BTN_SELECTED, PROG);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling unfocused event.
+*
+* When the ctxpopup is unfocused, hide the dim layout,
+* and delete the ctxpopup.
+*
+* @param[in] data User data
+* @param[in] o The corresponding object which the focus event occurred
+* @param[in] ei Event information
+*/
+static void _ctxpopup_unfocused_cb(void *data,
+ Evas_Object *o, void *ei)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ _unset_layout_dim(priv);
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+}
+
+/**
+ * Clears the buttons in the box.
+ *
+ * When the method is changed, clear the box firstly.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _clear_method_btns(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ elm_box_clear(priv->box);
+
+ priv->method_btn = NULL;
+ priv->proxy_btn= NULL;
+ priv->url_btn = NULL;
+}
+
+/**
+ * Creates the method select button.
+ *
+ * Uses the style of 'method_select'.
+ *
+ * @param[in] base The parent object
+ * @param[in] txt The text in button
+ * @param[in] cb The callback for clicked event
+ * @param[in] data User data
+ * @return button if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_method_select_btn(Evas_Object *base,
+ char *txt, Evas_Smart_Cb cb, void *data)
+{
+ Evas_Object *btn;
+
+ if (!base || !txt || !cb || !data) {
+ _ERR("The param is invalid.\n");
+ return NULL;
+ }
+
+ btn = util_add_button(base, STYLE_METHOD_SET, NULL, txt);
+ if (!btn) {
+ _ERR("Add btn failed.\n");
+ return NULL;
+ }
+
+ evas_object_smart_callback_add(btn, SIG_CLICKED, cb, data);
+
+ return btn;
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete the ctxpopup.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] o The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _ctxpopup_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *o, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+ }
+}
+
+/**
+ * Handles the process of clicked event.
+ *
+ * According to the method.
+ *
+ * @param[in] priv The handler of the private data
+ * @param[in] method The proxy method
+ */
+static void _method_btn_click_proc(struct _priv *priv,
+ enum method_enum method)
+{
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ priv->method = method;
+
+ _clear_method_btns(priv);
+
+ switch (priv->method) {
+ case METHOD_NONE:
+ _create_method_none_btn(priv);
+ break;
+ case METHOD_MAN:
+ _create_method_manual_btns(priv);
+ break;
+ case METHOD_AUTO:
+ _create_method_auto_btns(priv);
+ break;
+ default:
+ break;
+ }
+
+ elm_object_focus_set(priv->method_btn, EINA_TRUE);
+
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* For the 'METHOD_NONE' button.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _method_none_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _method_btn_click_proc(priv, METHOD_NONE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* For the 'METHOD_MAN' button.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _method_man_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _method_btn_click_proc(priv, METHOD_MAN);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* For the 'METHOD_AUTO' button.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _method_auto_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _method_btn_click_proc(priv, METHOD_AUTO);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* For the method select button.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _method_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ Evas_Object *ctxpopup;
+ Evas_Object *box;
+ Evas_Object *none_btn;
+ Evas_Object *man_btn;
+ Evas_Object *auto_btn;
+ Evas_Object *btn[METHOD_NUM];
+ Evas_Coord x;
+ Evas_Coord y;
+ Evas_Coord w;
+ Evas_Coord h;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+ base = priv->base;
+
+ ctxpopup = util_add_layout(base, UG_PROXY_EDJ_FILE,
+ GRP_METHOD_SETTING);
+ if (!ctxpopup) {
+ _ERR("add method ctxpopup failed.\n");
+ return;
+ }
+
+ evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_key_pressed_cb, priv);
+
+ priv->ctxpopup = ctxpopup;
+
+ _keep_btn_dim_focused(priv->method_btn);
+ _set_layout_dim(priv);
+
+ box = util_add_box(ctxpopup, PART_SWALLOW_CONTENT);
+ if (!box) {
+ _ERR("create box failed.");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ none_btn = _create_method_select_btn(ctxpopup, _(TXT_MOTHED_NONE),
+ _method_none_btn_clicked_cb, priv);
+ if (!none_btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_pack_end(box, none_btn);
+ elm_object_focus_set(none_btn, EINA_TRUE);
+ btn[METHOD_NONE] = none_btn;
+
+ man_btn = _create_method_select_btn(ctxpopup, _(TXT_MOTHED_MAN),
+ _method_man_btn_clicked_cb, priv);
+ if (!man_btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_pack_end(box, man_btn);
+ btn[METHOD_MAN] = man_btn;
+
+ auto_btn = _create_method_select_btn(ctxpopup, _(TXT_MOTHED_AUTO),
+ _method_auto_btn_clicked_cb, priv);
+ if (!auto_btn) {
+ _ERR("Add btn failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ elm_box_pack_end(box, auto_btn);
+ btn[METHOD_AUTO] = auto_btn;
+
+ _set_up_down_cycle_focus(btn, METHOD_NUM);
+ _set_left_right_cycle_focus(btn, METHOD_NUM);
+
+ switch (priv->method) {
+ case METHOD_NONE:
+ elm_object_signal_emit(none_btn, SIG_BTN_SELECTED, PROG);
+ break;
+ case METHOD_MAN:
+ elm_object_signal_emit(man_btn, SIG_BTN_SELECTED, PROG);
+ break;
+ case METHOD_AUTO:
+ elm_object_signal_emit(auto_btn, SIG_BTN_SELECTED, PROG);
+ break;
+ default:
+ break;
+ }
+
+ evas_object_geometry_get(priv->method_btn, &x, &y, &w, &h);
+ evas_object_move(ctxpopup, (x + METHOD_CTXPOPUP_OFFSET_X) * ELM_SCALE,
+ (y + ALIGH_RATIO * h + LINE_PAD) * ELM_SCALE);
+}
+
+/**
+ * Gets the position of IP value ctxpopup.
+ *
+ * @param[in] priv The handler of the private data
+ * @param[out] pos_x X position
+ * @param[out] pos_y Y position
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _get_value_popup_pos(struct _priv *priv,
+ Evas_Coord *pos_x, Evas_Coord *pos_y)
+{
+ Evas_Coord x;
+ Evas_Coord y;
+
+ if (!priv || !pos_x || !pos_y) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ evas_object_geometry_get(priv->proxy_btn, &x, &y, NULL, NULL);
+ *pos_x = x + VALUE_CTXPOPUP_OFFSET_X;
+ *pos_y = y - VALUE_CTXPOPUP_OFFSET_Y;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the number to the object text.
+ *
+ * @param[in] obj The handler of the object
+ * @param[in] num The number
+ */
+static void _set_btn_vaule(Evas_Object *obj, int num)
+{
+ char value[MOTHED_STRING_LEN];
+
+ if (!obj) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ memset(value, 0, MOTHED_STRING_LEN);
+ snprintf(value, MOTHED_STRING_LEN - 1, "%d", num);
+ elm_object_text_set(obj, value);
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_UP, increase the value.
+ * If the key is KEY_DOWN, decrease the value.
+ * If the key is a number, append the number.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _value_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ const char *value;
+ int num, new_num, max_num;
+
+ if (!ei || !data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ max_num = IP_MAX_NUM;
+
+ if (!strcmp(ev->keyname, KEY_UP)) {
+ value = elm_object_text_get(obj);
+ num = atoi(value);
+ num++;
+ if (num > max_num)
+ num = 0;
+ } else if (!strcmp(ev->keyname, KEY_DOWN)) {
+ value = elm_object_text_get(obj);
+ num = atoi(value);
+ num--;
+ if (num < 0)
+ num = max_num;
+ } else if (!strcmp(ev->keyname, KEY_0) ||
+ !strcmp(ev->keyname, KEY_1) ||
+ !strcmp(ev->keyname, KEY_2) ||
+ !strcmp(ev->keyname, KEY_3) ||
+ !strcmp(ev->keyname, KEY_4) ||
+ !strcmp(ev->keyname, KEY_5) ||
+ !strcmp(ev->keyname, KEY_6) ||
+ !strcmp(ev->keyname, KEY_7) ||
+ !strcmp(ev->keyname, KEY_8) ||
+ !strcmp(ev->keyname, KEY_9)) {
+ value = elm_object_text_get(obj);
+ if (!value)
+ elm_object_text_set(obj, ev->keyname);
+
+ new_num = atoi(ev->keyname);
+
+ num = atoi(value);
+ if (!num || (num * IP_RATIO + new_num) > max_num) {
+ elm_object_text_set(obj, ev->keyname);
+ return;
+ }
+
+ num = num * IP_RATIO + new_num;
+ } else {
+ return;
+ }
+
+ _set_btn_vaule(obj, num);
+}
+
+/**
+ * Creates the value button for IP setting.
+ *
+ * @param[in] parent The parent object
+ * @param[in] num The sequence number of the button
+ * @param[in] txt The text in the button
+ * @param[in] data User data
+ * @return button if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_value_btn(Evas_Object *parent, int num,
+ char *txt, void *data)
+{
+ Evas_Object *btn;
+
+ if (!parent || !txt || !data) {
+ _ERR("The param is invalid.\n");
+ return NULL;
+ }
+
+ btn = util_add_button(parent, STYLE_VALUE_BTN, NULL, txt);
+ if (!btn) {
+ _ERR("add button failed.\n");
+ return NULL;
+ }
+
+ switch (num) {
+ case 0:
+ elm_object_part_content_set(parent, PART_IP_FIRST, btn);
+ evas_object_data_set(parent, IP_VALUE1, btn);
+ elm_object_focus_set(btn, EINA_TRUE);
+ break;
+ case 1:
+ elm_object_part_content_set(parent, PART_IP_SECOND, btn);
+ evas_object_data_set(parent, IP_VALUE2, btn);
+ break;
+ case 2:
+ elm_object_part_content_set(parent, PART_IP_THIRD, btn);
+ evas_object_data_set(parent, IP_VALUE3, btn);
+ break;
+ case 3:
+ elm_object_part_content_set(parent, PART_IP_FORTH, btn);
+ evas_object_data_set(parent, IP_VALUE4, btn);
+ break;
+ default:
+ break;
+ }
+
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _value_key_pressed_cb, data);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
+
+ return btn;
+}
+
+/**
+ * Sets the value to the object text.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _set_the_value(struct _priv *priv)
+{
+ Evas_Object *btn;
+ const char *value1;
+ const char *value2;
+ const char *value3;
+ const char *value4;
+ char ip[IP_STRING_LEN + 1];
+
+ if (!priv || !priv->ctxpopup) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ value1 = NULL;
+ btn = evas_object_data_get(priv->ctxpopup, IP_VALUE1);
+ if (btn)
+ value1 = elm_object_text_get(btn);
+
+ value2 = NULL;
+ btn = evas_object_data_get(priv->ctxpopup, IP_VALUE2);
+ if (btn)
+ value2 = elm_object_text_get(btn);
+
+ value3 = NULL;
+ btn = evas_object_data_get(priv->ctxpopup, IP_VALUE3);
+ if (btn)
+ value3 = elm_object_text_get(btn);
+
+ value4 = NULL;
+ btn = evas_object_data_get(priv->ctxpopup, IP_VALUE4);
+ if (btn)
+ value4 = elm_object_text_get(btn);
+
+ memset(ip, 0, IP_STRING_LEN + 1);
+ snprintf(ip, IP_STRING_LEN, "%s.%s.%s.%s",
+ value1 ? value1 : "\\0", value2 ? value2 : "\\0",
+ value3 ? value3 : "\\0", value4 ? value4 : "\\0");
+
+ strncpy(priv->ip, ip, IP_STRING_LEN);
+ elm_object_part_text_set(priv->proxy_btn, PART_VALUE, ip);
+
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is KEY_BACK, delete the IP value ctxpopup.
+ * If the key is KEY_ENTER, set the value into the button.
+ *
+ * @param[in] data User data
+ * @param[in] evas Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _value_ctxpopup_key_pressed_cb(void *data, Evas *evas,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!ei || !data) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ ev = ei;
+ priv = data;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_ENTER)) {
+ _unset_layout_dim(priv);
+ _set_the_value(priv);
+ evas_object_del(obj);
+ } else if (!strcmp(ev->keyname, KEY_BACK)) {
+ _unset_layout_dim(priv);
+ evas_object_del(obj);
+ }
+}
+
+/**
+ * Creates value ctxpopup.
+ *
+ * User can set number in the ctxpopup.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _create_value_popup(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *ctxpopup;
+ Evas_Object *btn;
+ Evas_Coord pos_x;
+ Evas_Coord pos_y;
+ int i;
+
+ if (!priv || !priv->base) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ base = priv->base;
+
+ ctxpopup = util_add_layout(base, UG_PROXY_EDJ_FILE,
+ GRP_PROXY_VALUE_SETTING);
+ if (!ctxpopup) {
+ _ERR("elm_ctxpopup_add() failed.\n");
+ return;
+ }
+
+ priv->ctxpopup = ctxpopup;
+
+ _set_layout_dim(priv);
+
+ for (i = 0; i < PROXY_CONFIG_MAX_NUM; i++) {
+ btn = _create_value_btn(ctxpopup, i, _(TXT_ZERO), priv);
+ if (!btn) {
+ _ERR("_create_value_btn() failed.\n");
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ priv->vaule_btns[i] = btn;
+ }
+
+ elm_object_part_text_set(ctxpopup, PART_TXT_SEPERATOR, _(TXT_COLON));
+ evas_object_smart_callback_add(ctxpopup, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN,
+ _value_ctxpopup_key_pressed_cb, priv);
+ _set_left_right_cycle_focus(priv->vaule_btns, PROXY_CONFIG_MAX_NUM);
+
+ pos_x = 0;
+ pos_y = 0;
+ _get_value_popup_pos(priv, &pos_x, &pos_y);
+ evas_object_move(ctxpopup, pos_x * ELM_SCALE, pos_y * ELM_SCALE);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* After the proxy button is clicked, the value ctxpopup
+* will be created to set the value.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _proxy_ip_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _keep_btn_dim_focused(priv->proxy_btn);
+
+ _create_value_popup(priv);
+}
+
+/**
+ * Callback for key pressed event.
+ *
+ * If the key is 'Select', save the passcode.
+ * If the key is KEY_BACK, delete the layout.
+ *
+ * @param[in] data User data
+ * @param[in] e Evas handler
+ * @param[in] obj The corresponding object which the deletion event occurred
+ * @param[in] ei Event information
+ */
+static void _entry_key_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+ const char *value;
+
+ if (!data || !ei) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ elm_entry_input_panel_show(obj);
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _unset_layout_dim(priv);
+ } else if (!strcmp(ev->keyname, KEY_PROXY_ENTER)) {
+ value = elm_entry_entry_get(obj);
+ elm_object_part_text_set(priv->url_btn, PART_VALUE, value);
+ memset(priv->url, 0, MOTHED_URL_LEN + 1);
+ strncpy(priv->url, value, MOTHED_URL_LEN);
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ elm_object_focus_set(priv->url_btn, EINA_TRUE);
+
+ _unset_layout_dim(priv);
+ }
+}
+
+/**
+ * Creates the entry to input passcode.
+ *
+ * @param[in] priv The handler of the private data
+ */
+static void _create_input_entry(struct _priv *priv)
+{
+ Evas_Object *entry;
+ Evas_Object *layout;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is NULL.");
+ return;
+ }
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ layout = util_add_layout(priv->base, UG_PROXY_EDJ_FILE,
+ GRP_ENTRY_POPUP);
+ if (!layout) {
+ _ERR("create layout fail.\n");
+ return;
+ }
+
+ entry = util_add_entry(layout, STYLE_ENTRY, PART_ENTRY);
+ if (!entry) {
+ _ERR("add entry failed.");
+ evas_object_del(layout);
+ return;
+ }
+
+ util_set_focus_next_self(entry);
+ evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN,
+ _entry_key_pressed_cb, priv);
+ elm_object_focus_set(entry, EINA_TRUE);
+
+ _set_layout_dim(priv);
+
+ priv->ctxpopup = layout;
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* After the URL button is clicked, the layout will be
+ * created to input the passcode.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _url_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ _create_input_entry(priv);
+}
+
+/**
+ * Creates the method button.
+ *
+ * The common API for method button.
+ *
+ * @param[in] priv The handler of the private data
+ * @param[in] btn The handle of the button to be created
+ * @param[in] key The key value
+ * @param[in] value The value
+ * @param[in] line The number of lines
+ * @param[in] cb The callback for clicked event
+ * @return button if the operation is successful; NULL if failed;
+ */
+static Evas_Object *_create_method_box_btn(struct _priv *priv, Evas_Object *btn,
+ const char *key, char *value, int line, Evas_Smart_Cb cb)
+{
+ if (!priv || !priv->box || !key || !value || !cb) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ if (btn) {
+ evas_object_show(btn);
+ elm_object_part_text_set(btn, PART_VALUE, value);
+ } else {
+ if (line == BTN_TWO_LINE)
+ btn = util_add_key_value_button(priv->box,
+ STYLE_KEY_VALUE_TWO_LINES,
+ NULL, key, value);
+ else
+ btn = util_add_key_value_button(priv->box,
+ STYLE_KEY_VALUE_BTN, NULL, key, value);
+ if (!btn) {
+ _ERR("add method btn failed.");
+ return NULL;
+ }
+
+ evas_object_smart_callback_add(btn, SIG_CLICKED, cb, priv);
+ }
+
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
+
+ return btn;
+}
+
+/**
+ * Creates method none button.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_method_none_btn(struct _priv *priv)
+{
+ Evas_Object *box;
+ Evas_Object *btn;
+
+ if (!priv || !priv->box) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ box = priv->box;
+
+ btn = _create_method_box_btn(priv, priv->method_btn,
+ _(TXT_MOTHED), _(TXT_MOTHED_NONE),
+ BTN_ONE_LINE, _method_btn_clicked_cb);
+ if (!btn) {
+ _ERR("add method btn failed.");
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+
+ priv->method_btn = btn;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Creates method manual button.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_method_manual_btns(struct _priv *priv)
+{
+ Evas_Object *box;
+ Evas_Object *btn;
+
+ if (!priv || !priv->box) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ box = priv->box;
+
+ btn = _create_method_box_btn(priv, priv->method_btn,
+ _(TXT_MOTHED), _(TXT_MOTHED_MAN),
+ BTN_ONE_LINE, _method_btn_clicked_cb);
+ if (!btn) {
+ _ERR("add method btn failed.");
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+ priv->method_btn = btn;
+
+ btn = _create_method_box_btn(priv, priv->proxy_btn,
+ _(TXT_PROXY_IP), _(priv->ip),
+ BTN_ONE_LINE, _proxy_ip_btn_clicked_cb);
+ if (!btn) {
+ _ERR("add http btn failed.");
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+ priv->proxy_btn = btn;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Creates method auto button.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_method_auto_btns(struct _priv *priv)
+{
+ Evas_Object *box;
+ Evas_Object *btn;
+
+ if (!priv || !priv->box) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ box = priv->box;
+
+ btn = _create_method_box_btn(priv, priv->method_btn,
+ _(TXT_MOTHED), _(TXT_MOTHED_AUTO),
+ BTN_ONE_LINE, _method_btn_clicked_cb);
+ if (!btn) {
+ _ERR("add method btn failed.");
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+ priv->method_btn = btn;
+
+ btn = _create_method_box_btn(priv, priv->url_btn,
+ _(TXT_CONFIG_URL), _(priv->url),
+ BTN_TWO_LINE, _url_btn_clicked_cb);
+ if (!btn) {
+ _ERR("add url btn failed.");
+ return RET_FAILED;
+ }
+
+ elm_box_pack_end(box, btn);
+ priv->url_btn = btn;
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Creates the proxy layout.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_proxy_ly(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *box;
+ int ret;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ box = util_add_box(base, PART_PROXY_SETTING);
+ if (!box) {
+ _ERR("add box failed.");
+ return RET_FAILED;
+ }
+
+ priv->box = box;
+
+ switch (priv->method) {
+ case METHOD_NONE:
+ ret = _create_method_none_btn(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("add method none failed.");
+ goto error;
+ }
+
+ break;
+ case METHOD_MAN:
+ ret = _create_method_manual_btns(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("add method manual failed.");
+ goto error;
+ }
+
+ break;
+ case METHOD_AUTO:
+ ret = _create_method_auto_btns(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("add method manual failed.");
+ goto error;
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ return RET_SUCCESS;
+
+error:
+ evas_object_del(box);
+
+ return RET_FAILED;
+}
+
+/**
+ * Checks if IP is valid.
+ *
+ * Now only check if IP is '0.0.0.0'.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful;
+ * RET_IP_INVALID if the IP is '0.0.0.0'; RET_FAILED if failed;
+ */
+static int _check_ip_is_valid(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return RET_FAILED;
+ }
+
+ if (!strncmp(priv->ip, IP_ZERO, IP_STRING_LEN)) {
+ _ERR("IP addr is invalid.");
+ return RET_IP_INVALID;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the 'OK' button is clicked, delete the popup,
+* and set the default focus.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] event Event information
+*/
+static void _ctxpopup_ok_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _unset_layout_dim(priv);
+
+ elm_object_focus_set(priv->ok_btn, EINA_TRUE);
+}
+
+/**
+ * Shows the invalid IP ctxpopup according to return value.
+ *
+ * @param[in] priv The handler of the private data
+ * @param[in] ret The return value from
+ */
+static void _show_invalid_info_ctxpopup(struct _priv *priv, int ret)
+{
+ Evas_Object *layout;
+ Evas_Object *btn;
+ // Evas_Coord w;
+ // Evas_Coord h;
+
+ if (!priv) {
+ _ERR("The param is NULL.\n");
+ return;
+ }
+
+ if (priv->ctxpopup) {
+ evas_object_del(priv->ctxpopup);
+ priv->ctxpopup = NULL;
+ }
+
+ _set_layout_dim(priv);
+
+ layout = util_add_layout(priv->base, UG_PROXY_EDJ_FILE,
+ GRP_CONFIRM_LAYOUT);
+ if (!layout) {
+ _ERR("add layout failed.");
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ switch (priv->method) {
+ case METHOD_MAN:
+ elm_object_part_text_set(layout, PART_TEXT_TITLE,
+ _(TXT_MANUAL_TITLE));
+ break;
+ case METHOD_AUTO:
+ elm_object_part_text_set(layout, PART_TEXT_TITLE,
+ _(TXT_AUTO_TITLE));
+ break;
+ default:
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_part_text_set(layout, PART_TEXT_TITLE, _(TXT_MANUAL_TITLE));
+
+ if (ret == RET_IP_INVALID)
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, _(TXT_IP_INVALID));
+ else if (ret == RET_VCONF_FAILED)
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, _(TXT_VCONF_FAILED));
+ else if (ret == RET_WIRED_PROXY_FAILED)
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, _(TXT_WIRED_FAILED));
+ else if (ret == RET_WIRELESS_PROXY_FAILED)
+ elm_object_part_text_set(layout,
+ PART_TEXT_CONTENT, _(TXT_WIRELESS_FAILED));
+
+ btn = util_add_button(layout,
+ STYLE_ACTION_BTN, PART_OK_BTN, _(TXT_OK));
+ if (!btn) {
+ _ERR("util add button failed.");
+ evas_object_del(layout);
+ _unset_layout_dim(priv);
+ return;
+ }
+
+ elm_object_focus_set(btn, EINA_TRUE);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _ctxpopup_ok_btn_clicked_cb, priv);
+
+ evas_object_smart_callback_add(layout, SIG_UNFOCUSED,
+ _ctxpopup_unfocused_cb, priv);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _ctxpopup_key_pressed_cb, priv);
+
+ // w = DEFAULT_WIN_WIDTH;
+ // h = DEFAULT_WIN_HEIGHT;
+ evas_object_move(layout,
+ CENTER_ALIGN * (DEFAULT_WIN_WIDTH - CTXPOPUP_WIDTH) * ELM_SCALE,
+ CENTER_ALIGN * (DEFAULT_WIN_HEIGHT - CTXPOPUP_HEIGHT) * ELM_SCALE);
+
+ priv->ctxpopup = layout;
+}
+
+/**
+ * Saves the proxy information to vconf.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _save_to_vconf(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return RET_SUCCESS;
+ }
+
+ vconf_mgr_set_int_value(VCONF_PROXY_METHOD, priv->method);
+
+ switch (priv->method) {
+ case METHOD_NONE:
+ break;
+ case METHOD_MAN:
+ _check_ip_is_valid(priv);
+
+ vconf_mgr_set_string_value(VCONF_PROXY_IP, priv->ip);
+
+ break;
+ case METHOD_AUTO:
+ vconf_mgr_set_string_value(VCONF_PROXY_URL, priv->url);
+
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the proxy information with connection api.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _set_connection_proxy(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ ret = connection_mgr_set_proxy_type(priv->connection, priv->method);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_get_proxy_type() failed.");
+ return ret;
+ }
+
+ switch (priv->method) {
+ case METHOD_NONE:
+ connection_mgr_set_proxy_address(priv->connection,
+ NULL);
+ break;
+ case METHOD_MAN:
+ if (priv->ip)
+ connection_mgr_set_proxy_address(priv->connection,
+ priv->ip);
+ break;
+ case METHOD_AUTO:
+ if (priv->url)
+ connection_mgr_set_proxy_address(priv->connection,
+ priv->url);
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the proxy information with wifi api.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _set_wifi_proxy(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ ret = wifi_mgr_set_proxy_type(priv->method);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi_mgr_get_proxy_type() failed.");
+ return ret;
+ }
+
+ switch (priv->method) {
+ case METHOD_NONE:
+ wifi_mgr_set_proxy_address(NULL);
+ break;
+ case METHOD_MAN:
+ if (priv->ip)
+ wifi_mgr_set_proxy_address(priv->ip);
+ break;
+ case METHOD_AUTO:
+ if (priv->url)
+ wifi_mgr_set_proxy_address(priv->url);
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the proxy information.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _set_proxy(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("The param is invalid.\n");
+ return RET_FAILED;
+ }
+
+ if (priv->net_type == TYPE_WIRED) {
+ ret = _set_connection_proxy(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("the ip or port is invalid.");
+ return ret;
+ }
+ } else if (priv->net_type == TYPE_WIRELESS) {
+ ret = _set_wifi_proxy(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("the ip or port is invalid.");
+ return ret;
+ }
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the 'OK' button is clicked, save the proxy information,
+* and destroy the ug.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _ok_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+ int ret;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ ret = _set_proxy(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("the ip or port is invalid.");
+ _show_invalid_info_ctxpopup(priv, ret);
+ return;
+ }
+
+ ret = _save_to_vconf(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("the ip or port is invalid.");
+ _show_invalid_info_ctxpopup(priv, ret);
+ return;
+ }
+
+ ug_destroy_me(priv->ug);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling clicked event.
+*
+* When the 'OK' button is clicked, don't save the proxy information,
+* and destroy the ug.
+*
+* @param[in] data User data
+* @param[in] obj The corresponding object which the focus event occurred
+* @param[in] ev Event information
+*/
+static void _cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ ug_destroy_me(priv->ug);
+}
+
+/**
+ * Creates the action buttons.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_action_btns(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *btn;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ btn = util_add_button(base, STYLE_ACTION_BTN, PART_OK_BTN, _(TXT_OK));
+ if (!btn) {
+ _ERR("add ok button failed.");
+ return RET_FAILED;
+ }
+
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _ok_btn_clicked_cb, priv);
+
+ elm_object_focus_set(btn, EINA_TRUE);
+
+ btn = util_add_button(base, STYLE_ACTION_BTN,
+ PART_CANCEL_BTN, _(TXT_CANCEL));
+ if (!btn) {
+ _ERR("add cancel button failed.");
+ return RET_FAILED;
+ }
+
+ evas_object_smart_callback_add(btn, SIG_CLICKED,
+ _cancel_btn_clicked_cb, priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Creates the dim layout.
+ *
+ * @param[in] priv The handler of the private data
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+static int _create_dim_layout(struct _priv *priv)
+{
+ Evas_Object *dim_ly;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ dim_ly = util_add_layout(priv->base, UG_PROXY_EDJ_FILE,
+ GRP_DIM_LY);
+ if (!dim_ly) {
+ _ERR("elm_layout_add() failed.\n");
+ return RET_FAILED;
+ }
+
+ priv->dim_ly = dim_ly;
+ _unset_layout_dim(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Creates the layout of the view.
+ *
+ * Called when the ug is launched.
+ *
+ * @param[in] win The handler of view manager
+ * @param[in] data The passed data from main view
+ * @return layout if the operation is successful; NULL if failed;
+ */
+Evas_Object *create_main_view(Evas_Object *win, ui_gadget_h ug)
+{
+ struct _priv *priv;
+ Evas_Object *base;
+ int ret;
+
+ if (!win || !ug) {
+ _ERR("Parameter error!");
+ return NULL;
+ }
+
+ priv = _init_priv();
+ if (!priv) {
+ _ERR("init priv failed.");
+ return NULL;
+ }
+
+ priv->win = win;
+ priv->ug = ug;
+
+ base = _create_basic_layout(priv);
+ if (!base) {
+ _ERR("Add main view failed.\n");
+ _fini_priv(priv);
+ return NULL;
+ }
+
+ priv->base = base;
+
+ _set_description(priv);
+
+ ret = _get_proxy_method(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("get proxy method failed.\n");
+ goto error;
+ }
+
+ ret = _create_proxy_ly(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("get proxy method failed.\n");
+ goto error;
+ }
+
+ ret = _create_action_btns(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("create action buttons failed.\n");
+ goto error;
+ }
+
+ ret = _create_dim_layout(priv);
+ if (ret != RET_SUCCESS)
+ goto error;
+
+ elm_object_focus_set(priv->method_btn, EINA_TRUE);
+ evas_object_data_set(base, KEY_PRIV, priv);
+
+ return base;
+
+error:
+ _fini_priv(priv);
+ return NULL;
+}
+
+/**
+ * Destroies the layout of the view.
+ *
+ * Called when the ug is destroied.
+ *
+ * @param[in] base The base layout
+ */
+void destroy_main_view(Evas_Object *base)
+{
+ struct _priv *priv;
+
+ if (!base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = evas_object_data_get(base, KEY_PRIV);
+ if (!priv)
+ return;
+
+ _fini_priv(priv);
+}
#define UG_MODULE_API __attribute__ ((visibility("default")))
#endif
+#include <Elementary.h>
#include <ui-gadget-module.h>
+#include "main_view.h"
#include "i18n.h"
#include "defs.h"
-#include <AppCommon.h>
-
-#include "wifi.h"
-#include "ProxyMainView.h"
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
+#include "dbg.h"
struct _ug_data {
- ui_gadget_h ug;
-
Evas_Object *win;
Evas_Object *base;
-
- CViewMgr *pViewMgr;
- CProxyMainView *pProxyMainView;
+ ui_gadget_h ug;
};
/**
service_h service, void *priv)
{
struct _ug_data *ugd;
+ Evas_Object *base;
Evas_Object *win;
if (!ug || !priv) {
return NULL;
}
- ugd = (struct _ug_data *) priv;
+ ugd = priv;
ugd->ug = ug;
elm_theme_extension_add(NULL, UG_PROXY_EDJ_THEME);
- win = (Evas_Object *) ug_get_window();
+ win = ug_get_window();
if (!win) {
_ERR("window get failed");
return NULL;
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
elm_win_focus_highlight_style_set(win, "invisible");
- CViewMgr::Initialize(ugd->win, NULL);
- ugd->pViewMgr = CViewMgr::GetInstance();
- if(!ugd->pViewMgr) {
- CViewMgr::Finalize();
- _ERR("Fail to get CViewMgr instance");
+ base = create_main_view(win, ug);
+ if (!base) {
+ _ERR("add base layout failed.");
return NULL;
}
- ugd->pProxyMainView = new CProxyMainView(PROXY_MAINVIEW);
- if(!ugd->pViewMgr->AddView(ugd->pProxyMainView)) {
- _ERR("Fail to add pFbBaseView");
- CViewMgr::Finalize();
- return false;
- }
- ugd->pViewMgr->PushView(PROXY_MAINVIEW, NULL);
- ugd->base = ugd->pProxyMainView->Base();
+ ugd->base = base;
+ evas_object_raise(base);
- return ugd->base;
+ return base;
}
/**
*/
static void _on_destroy(ui_gadget_h ug, service_h service, void *priv)
{
- CViewMgr::Finalize();
+ struct _ug_data *ugd = priv;
+
+ if (!ug || !priv) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ if (!ugd || !ugd->base)
+ return;
+
+ destroy_main_view(ugd->base);
}
/**
if (!ops)
return -1;
- ugd = (struct _ug_data *) calloc(1, sizeof(*ugd));
+ ugd = calloc(1, sizeof(*ugd));
if (!ugd)
return -1;
if (!ops)
return;
- ugd = (struct _ug_data *) ops->priv;
+ ugd = ops->priv;
free(ugd);
}
-
-#if defined (__cplusplus)
-};
-#endif
#include <aul.h>
#include "i18n.h"
#include "defs.h"
-#include <MacroDefine.h>
+#include "dbg.h"
#include "util.h"
#define ALIGN_CENTER 0.5
--- /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 "defs.h"
+#include "dbg.h"
+#include "vconf_mgr.h"
+#include "i18n.h"
+
+/**
+ * Gets the string value from vconf.
+ *
+ * @param[in] key Vconf key
+ * @return the value in vconf;
+ */
+char *vconf_mgr_get_string_value(const char *key)
+{
+ if (!key) {
+ _ERR("the param is invalid.");
+ return NULL;
+ }
+
+ return vconf_get_str(key);
+}
+
+/**
+ * Sets the string value to vconf.
+ *
+ * @param[in] key Vconf key
+ * @param[in] value The value
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_set_string_value(const char *key, const char *value)
+{
+ int ret;
+
+ if (!key || !value) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = vconf_set_str(key, value);
+ if (ret != 0) {
+ _ERR("vconf set str failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the integer value from vconf.
+ *
+ * @param[in] key Vconf key
+ * @param[out] value The value
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_get_int_value(const char *key, int *value)
+{
+ int ret;
+
+ if (!key || !value) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = vconf_get_int(key, value);
+ if (ret != 0) {
+ _ERR("vconf get int failed");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the integer value to vconf.
+ *
+ * @param[in] key Vconf key
+ * @param[in] value The value
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int vconf_mgr_set_int_value(const char *key, const int value)
+{
+ int ret;
+
+ if (!key) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = vconf_set_int(key, value);
+ if (ret != 0) {
+ _ERR("vconf set int failed.");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
--- /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 <stdlib.h>
+#include "defs.h"
+#include "dbg.h"
+#include "wifi_mgr.h"
+
+/**
+ * Converts the error type to string information.
+ *
+ * @param[in] err_type Error type
+ * @return error string information;
+ */
+const char *wifi_mgr_error_dbg(wifi_error_e err_type)
+{
+ switch (err_type) {
+ case WIFI_ERROR_NONE:
+ return "NONE";
+ case WIFI_ERROR_INVALID_PARAMETER:
+ return "INVALID_PARAMETER";
+ case WIFI_ERROR_OUT_OF_MEMORY:
+ return "OUT_OF_MEMORY";
+ case WIFI_ERROR_INVALID_OPERATION:
+ return "INVALID_OPERATION";
+ case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+ return "ADDRESS_FAMILY_NOT_SUPPORTED";
+ case WIFI_ERROR_OPERATION_FAILED:
+ return "OPERATION_FAILED";
+ case WIFI_ERROR_NO_CONNECTION:
+ return "NO_CONNECTION";
+ case WIFI_ERROR_NOW_IN_PROGRESS:
+ return "NOW_IN_PROGRESS";
+ case WIFI_ERROR_ALREADY_EXISTS:
+ return "ALREADY_EXISTS";
+ case WIFI_ERROR_OPERATION_ABORTED:
+ return "OPERATION_ABORTED";
+ case WIFI_ERROR_DHCP_FAILED:
+ return "DHCP_FAILED";
+ case WIFI_ERROR_INVALID_KEY:
+ return "INVALID_KEY";
+ case WIFI_ERROR_NO_REPLY:
+ return "NO_REPLY";
+ case WIFI_ERROR_SECURITY_RESTRICTED:
+ return "SECURITY_RESTRICTED";
+ default:
+ break;
+ }
+
+ return "UNKNOWN";
+}
+
+/**
+ * Initializes Wi-Fi.
+ *
+ * Called before using wifi APIs.
+ *
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_init(void)
+{
+ int ret;
+
+ ret = wifi_initialize();
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to wifi_initialize.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Deinitializes Wi-Fi.
+ *
+ * Called when network setting is destroyed.
+ *
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_deinit(void)
+{
+ int ret;
+
+ ret = wifi_deinitialize();
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("Fail to wifi_deinitialize.\n");
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the handle of connected access point.
+ *
+ * You can get the connected access point and its configuration.
+ *
+ * @param[out] ap The handle of access point
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_get_connected_ap(wifi_ap_h *ap)
+{
+ int ret;
+
+ if (!ap) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_get_connected_ap(ap);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_get_connected_ap() failed.");
+ return ret;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Sets the Proxy type.
+ *
+ * If you set Proxy type to #WIFI_PROXY_TYPE_AUTO or
+ * #WIFI_PROXY_TYPE_MANUAL, then Proxy will be restored.
+ *
+ * @param[in] method The proxy method
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_set_proxy_type(enum method_enum method)
+{
+ wifi_proxy_type_e type;
+ wifi_ap_h ap;
+ int ret;
+
+ if (method < 0 || method >= METHOD_NUM) {
+ _ERR("method is invalid.");
+ return RET_FAILED;
+ }
+
+ ap = NULL;
+ ret = wifi_get_connected_ap(ap);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_get_connected_ap() failed.");
+ return ret;
+ }
+
+ switch (method) {
+ case METHOD_NONE:
+ type = WIFI_PROXY_TYPE_DIRECT;
+ break;
+ case METHOD_MAN:
+ type = WIFI_PROXY_TYPE_MANUAL;
+ break;
+ case METHOD_AUTO:
+ type = WIFI_PROXY_TYPE_AUTO;
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ ret = wifi_ap_set_proxy_type(ap, type);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_ap_set_proxy_type() failed.");
+ return ret;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the Proxy type.
+ *
+ * @param[out] method The proxy method
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_get_proxy_type(enum method_enum *method)
+{
+ wifi_proxy_type_e type;
+ wifi_ap_h ap;
+ int ret;
+
+ if (!method) {
+ _ERR("method is invalid.");
+ return RET_FAILED;
+ }
+
+ ap = NULL;
+ ret = wifi_get_connected_ap(ap);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_get_connected_ap() failed.");
+ return ret;
+ }
+
+ ret = wifi_ap_get_proxy_type(ap, &type);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_ap_get_proxy_type() failed.");
+ return ret;
+ }
+
+ switch (type) {
+ case WIFI_PROXY_TYPE_DIRECT:
+ *method = METHOD_NONE;
+ break;
+ case WIFI_PROXY_TYPE_MANUAL:
+ *method = METHOD_MAN;
+ break;
+ case WIFI_PROXY_TYPE_AUTO:
+ *method = METHOD_AUTO;
+ break;
+ default:
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+
+}
+
+/**
+ * Sets the proxy address.
+ *
+ * @param[in] ip The IP address
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_set_proxy_address(const char *ip)
+{
+ wifi_ap_h ap;
+ int ret;
+
+ ap = NULL;
+ ret = wifi_get_connected_ap(ap);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_get_connected_ap() failed.");
+ return ret;
+ }
+
+ ret = wifi_ap_set_proxy_address(ap, WIFI_ADDRESS_FAMILY_IPV4, ip);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_ap_set_proxy_address() failed.");
+ return ret;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+ * Gets the proxy address.
+ *
+ * @param[out] ip The IP address
+ * @return RET_SUCCESS if the operation is successful; RET_FAILED if failed;
+ */
+int wifi_mgr_get_proxy_address(char **ip)
+{
+ wifi_ap_h ap;
+ int ret;
+
+ if (!ip || !*ip) {
+ _ERR("ip is invalid.");
+ return RET_FAILED;
+ }
+
+ ap = NULL;
+ ret = wifi_get_connected_ap(ap);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_get_connected_ap() failed.");
+ return ret;
+ }
+
+ ret = wifi_ap_get_proxy_address(ap, WIFI_ADDRESS_FAMILY_IPV4, ip);
+ if (ret != WIFI_ERROR_NONE) {
+ _ERR("wifi_ap_get_proxy_address() failed.");
+ return ret;
+ }
+
+ return RET_SUCCESS;
+}
+++ /dev/null
-#include <AppCommon.h>
-#include "NetConMgr.h"
-
-#define IP_STRING_MAX_SIZE 20
-#define MAX_NAME_SIZE 256
-#define CONTENT_TXT_SIZE 500
-#define ZERO_IP "0.0.0.0"
-
-CNetConMgr *CNetConMgr::instance = NULL;
-
-struct SNetConMgr {
- connection_h handle;
- connection_profile_h ethernet_profile_h;
- void(*ip_changed_cb)(bool change_state, void *data);
-};
-
-
-void CNetConMgr::sm_CbIpAddrChanged(const char *ipv4, const char *ipv6, void* data)
-{
- _DBG("IP addr is changed!! [IPv4:%s] [IPv6:%s]", ipv4, ipv6);
-
- CNetConMgr::GetInstance()->m_OnIpAddrChanged(data);
-}
-
-
-void CNetConMgr::m_OnIpAddrChanged(void *data)
-{
- if(m->ip_changed_cb)
- m->ip_changed_cb(true, data);
-}
-
-
-void CNetConMgr::sm_CbProfileStateChanged(connection_profile_state_e state, void *data)
-{
-
- _DBG("Profile is changed!!!!!!!!!!!!!!!!!!!!!!!!!");
-
- /* TODO : check the flow again */
- CNetConMgr::GetInstance()->RefreshEthernetProfile();
-}
-
-
-bool CNetConMgr::m_GetEthernetProfile(void)
-{
- ASSERT(m);
-
- connection_profile_iterator_h iter = NULL;
- connection_profile_type_e type;
-
- int ret;
- char name[MAX_NAME_SIZE] = {0};
-
- ret = connection_get_profile_iterator(m->handle, CONNECTION_ITERATOR_TYPE_REGISTERED, &iter);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get profile iterator: %s", GetErrorMsg((connection_error_e) ret));
- return false;
- }
-
- while (connection_profile_iterator_has_next(iter)) {
-
- m->ethernet_profile_h = NULL;
-
- if (connection_profile_iterator_next(iter, &m->ethernet_profile_h) != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get profile handle");
- break;
- }
-
- if (connection_profile_get_type(m->ethernet_profile_h, &type) != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get profile type");
- break;
- }
-
- if (type == CONNECTION_PROFILE_TYPE_ETHERNET)
- {
- /* FIXME : should check when there are same ethernet profiles. */
- break;
- }
- }
-
- if(!m->ethernet_profile_h) {
- _ERR("ethernet_profile_h is NULL");
- return false;
- }
-
- GetProfileName(name);
- _DBG("GetProfileName = %s", name);
-
- ret = connection_profile_set_state_changed_cb( m->ethernet_profile_h, sm_CbProfileStateChanged, (void *)instance);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_profile_set_state_changed_cb() failed.");
- return false;
- }
-
- return true;
-}
-
-
-bool CNetConMgr::m_UpdateProfile(void)
-{
- ASSERT(m);
-
- int ret = -1;
-
- ret = connection_update_profile( m->handle, m->ethernet_profile_h);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_update_profile failed");
- return false;
- }
-
- return true;
-}
-
-
-bool CNetConMgr::Initialize(void)
-{
- ASSERT(!instance);
-
- instance = new CNetConMgr;
- if(!instance) {
- _ERR("Fail to allocate memory");
- return false;
- }
-
- instance->m = new SNetConMgr;
- if(!instance->m) {
- _ERR("Fail to allocate memory");
- delete (instance);
- return false;
- }
-
- int ret = 0;
- ret = connection_create(&instance->m->handle);
- if( ret != CONNECTION_ERROR_NONE) {
- _ERR("Fail to create connection : error = %s", instance->GetErrorMsg((connection_error_e) ret));
- delete (instance->m);
- delete (instance);
- instance = NULL;
- return false;
- }
-
- if(!instance->m_GetEthernetProfile()) {
- _ERR("Fail to get ethernet_profile");
- }
-
- return true;
-}
-
-
-void CNetConMgr::Finalize(void)
-{
- if(!instance)
- return;
-
- ASSERT(instance->m);
-
- int ret = 0;
- ret = connection_destroy(instance->m->handle);
- if( ret != CONNECTION_ERROR_NONE) {
- _ERR("Fail to destroy connection : error = %s", instance->GetErrorMsg((connection_error_e) ret));
- }
-
- delete (instance->m);
- delete (instance);
- instance = NULL;
-}
-
-
-CNetConMgr *CNetConMgr::GetInstance(void)
-{
- return instance;
-}
-
-
-void CNetConMgr::RefreshEthernetProfile(void)
-{
- ASSERT(m);
-
- if(!m_GetEthernetProfile()) {
- _ERR("Fail to get ethernet_profile");
- }
-}
-
-
-bool CNetConMgr::GetEthernetState(bool *out_state)
-{
- ASSERT(m);
-
- int ret = -1;
- connection_ethernet_state_e state;
-
- if (!out_state) {
- _ERR("the param is invalid.");
- return false;
- }
-
- ret = connection_get_ethernet_state(m->handle, &state);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_get_ethernet_state() failed.");
- return false;
- }
-
- if (state == CONNECTION_ETHERNET_STATE_DEACTIVATED)
- *out_state = false;
- else
- *out_state = true;
-
- return true;
-}
-
-
-bool CNetConMgr::GetProfileName(char *out_name)
-{
- ASSERT(m);
-
- char *name;
-
- if(!m->ethernet_profile_h) {
- _ERR("There is no ethernet profile Try to call RefreshEthernetProfile()");
- return false;
- }
-
- if (connection_profile_get_name(m->ethernet_profile_h, &name) != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get profile name\n");
- return false;
- }
-
- strncpy(out_name, name, MAX_NAME_SIZE - 1);
-
- delete (name);
- return true;
-}
-
-
-bool CNetConMgr::IsConnected(void)
-{
- ASSERT(m);
-
- int ret;
- connection_ethernet_state_e state;
-
- ret = connection_get_ethernet_state(m->handle, &state);
- if (ret == CONNECTION_ERROR_NONE && state == CONNECTION_ETHERNET_STATE_CONNECTED)
- return true;
-
- return false;
-}
-
-
-bool CNetConMgr::SetIpConfType(connection_ip_config_type_e type)
-{
- ASSERT(m);
-
- if(!m_UpdateProfile()) return false;
-
- int ret = -1;
-
- ret = connection_profile_set_ip_config_type( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, type);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_profile_set_ip_config_type() failed.");
- return false;
- }
-
- if(!m_UpdateProfile()) return false;
-
- return true;
-}
-
-
-bool CNetConMgr::SetIpAddr(char *ip)
-{
- ASSERT(m);
-
- if(!m_UpdateProfile()) return false;
- if(!SetIpConfType(CONNECTION_IP_CONFIG_TYPE_STATIC)) return false;
-
- int ret = -1;
- ret = connection_profile_set_ip_address( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, ip);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_profile_set_ip_address() failed.");
- return false;
- }
-
- if(!m_UpdateProfile()) return false;
-
- return true;
-}
-
-
-bool CNetConMgr::SetSubnetMask(char *submask)
-{
- ASSERT(m);
-
- if(!m_UpdateProfile()) return false;
- if(!SetIpConfType(CONNECTION_IP_CONFIG_TYPE_STATIC)) return false;
-
- int ret = -1;
- ret = connection_profile_set_subnet_mask( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, submask);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("fail to set_subnet_mask");
- return false;
- }
-
- if(!m_UpdateProfile()) return false;
- return true;
-}
-
-
-bool CNetConMgr::SetGateway(char *gateway)
-{
- ASSERT(m);
-
- if(!m_UpdateProfile()) return false;
- if(!SetIpConfType(CONNECTION_IP_CONFIG_TYPE_STATIC)) return false;
-
- int ret = -1;
- ret = connection_profile_set_gateway_address( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, gateway);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("fail to set_gateway_address");
- return false;
- }
-
- if(!m_UpdateProfile()) return false;
- return true;
-}
-
-
-bool CNetConMgr::SetDNS(char *dns)
-{
- ASSERT(m);
-
- if(!m_UpdateProfile()) return false;
- if(!SetIpConfType(CONNECTION_IP_CONFIG_TYPE_STATIC)) return false;
-
- int ret = -1;
- ret = connection_profile_set_dns_address( m->ethernet_profile_h, 1, CONNECTION_ADDRESS_FAMILY_IPV4, dns);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("fail to set_dns_address");
- return false;
- }
-
- if(!m_UpdateProfile()) return false;
- return true;
-}
-
-
-bool CNetConMgr::GetIpAddr(char *ip)
-{
- ASSERT(m);
-
- if(!ip) {
- _ERR("Invalid parameter");
- return false;
- }
-
- char *str_value;
-
- if (connection_profile_get_ip_address( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, &str_value) != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get IP address!");
- strncpy(ip, ZERO_IP, IP_STRING_MAX_SIZE);
- } else {
- strncpy(ip, str_value, IP_STRING_MAX_SIZE);
- delete(str_value);
- }
-
- return true;
-}
-
-
-bool CNetConMgr::GetSubnetMask(char *submask)
-{
- ASSERT(m);
-
- if(!submask) {
- _ERR("Invalid parameter");
- return false;
- }
-
- char *str_value;
- if (connection_profile_get_subnet_mask( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, &str_value) != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get subnet mask!");
- strncpy(submask, ZERO_IP, IP_STRING_MAX_SIZE);
- } else {
- strncpy(submask, str_value, IP_STRING_MAX_SIZE);
- delete(str_value);
- }
-
- return true;
-}
-
-
-bool CNetConMgr::GetGateway(char *gateway)
-{
- ASSERT(m);
-
- if(!gateway) {
- _ERR("Invalid parameter");
- return false;
- }
-
- char *str_value;
- if (connection_profile_get_gateway_address( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, &str_value) != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get gateway!");
- strncpy(gateway, ZERO_IP, IP_STRING_MAX_SIZE);
- } else {
- strncpy(gateway, str_value, IP_STRING_MAX_SIZE);
- delete(str_value);
- }
-
- return true;
-}
-
-
-bool CNetConMgr::GetDNS(char *dns)
-{
- ASSERT(m);
-
- if(!dns) {
- _ERR("Invalid parameter");
- return false;
- }
-
- char *str_value;
- if (connection_profile_get_dns_address( m->ethernet_profile_h, 1, CONNECTION_ADDRESS_FAMILY_IPV4, &str_value) != CONNECTION_ERROR_NONE) {
- _ERR("Fail to get DNS1!");
- strncpy(dns, ZERO_IP, IP_STRING_MAX_SIZE);
- } else {
- strncpy(dns, str_value, IP_STRING_MAX_SIZE);
- delete(str_value);
- }
-
- return true;
-}
-
-
-bool CNetConMgr::SetProxyType(EProxyMethod method)
-{
- ASSERT(m);
- if(!m->ethernet_profile_h) {
- _ERR("There is no ethernet profile Try to call RefreshEthernetProfile()");
- return false;
- }
-
- connection_proxy_type_e type;
-
- int ret;
-
- switch (method) {
- case PROXY_METHOD_NONE:
- type = CONNECTION_PROXY_TYPE_DIRECT;
- break;
- case PROXY_METHOD_MANUAL:
- type = CONNECTION_PROXY_TYPE_MANUAL;
- break;
- case PROXY_METHOD_AUTO:
- type = CONNECTION_PROXY_TYPE_AUTO;
- break;
- default:
- return false;
- }
-
- ret = connection_profile_set_proxy_type( m->ethernet_profile_h, type);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_profile_set_proxy_type() failed");
- return false;
- }
-
- return true;
-}
-
-
-bool CNetConMgr::GetProxyType(EProxyMethod *method)
-{
- ASSERT(m);
- if(!m->ethernet_profile_h) {
- _ERR("There is no ethernet profile Try to call RefreshEthernetProfile()");
- return false;
- }
-
- connection_proxy_type_e type;
-
- int ret;
-
- if (!method) {
- _ERR("the param is invalid.");
- return false;
- }
-
- ret = connection_profile_get_proxy_type( m->ethernet_profile_h, &type);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_profile_get_proxy_type() failed");
- return false;
- }
-
- switch (type) {
- case CONNECTION_PROXY_TYPE_DIRECT:
- *method = PROXY_METHOD_NONE;
- break;
- case CONNECTION_PROXY_TYPE_MANUAL:
- *method = PROXY_METHOD_MANUAL;
- break;
- case CONNECTION_PROXY_TYPE_AUTO:
- *method = PROXY_METHOD_AUTO;
- break;
- default:
- return false;
- }
-
- return true;
-}
-
-
-bool CNetConMgr::SetProxyAddr(char *ip)
-{
- ASSERT(m);
- if(!m->ethernet_profile_h) {
- _ERR("There is no ethernet profile Try to call RefreshEthernetProfile()");
- return false;
- }
-
- int ret;
-
- ret = connection_profile_set_proxy_address( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, ip);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_profile_set_proxy_address() failed");
- return false;
- }
-
- return true;
-}
-
-
-bool CNetConMgr::GetProxyAddr(char *ip)
-{
- ASSERT(m);
- if(!m->ethernet_profile_h) {
- _ERR("There is no ethernet profile Try to call RefreshEthernetProfile()");
- return false;
- }
-
- int ret;
- char *str;
-
- if (!ip) {
- _ERR("the param is invalid.");
- return false;
- }
-
- ret = connection_profile_get_proxy_address( m->ethernet_profile_h, CONNECTION_ADDRESS_FAMILY_IPV4, &str);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_profile_get_proxy_address() failed");
- return false;
- }
-
- strncpy(ip, str, IP_STRING_MAX_SIZE );
- delete (str);
-
- return true;
-}
-
-
-const char *CNetConMgr::GetErrorMsg(connection_error_e err)
-{
- switch (err) {
- case CONNECTION_ERROR_NONE:
- return "NONE";
- case CONNECTION_ERROR_INVALID_PARAMETER:
- return "INVALID_PARAMETER";
- case CONNECTION_ERROR_OUT_OF_MEMORY:
- return "OUT_OF_MEMORY";
- case CONNECTION_ERROR_INVALID_OPERATION:
- return "INVALID_OPERATION";
- case CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
- return "ADDRESS_FAMILY_NOT_SUPPORTED";
- case CONNECTION_ERROR_OPERATION_FAILED:
- return "OPERATION_FAILED";
- case CONNECTION_ERROR_ITERATOR_END:
- return "ITERATOR_END";
- case CONNECTION_ERROR_NO_CONNECTION:
- return "NO_CONNECTION";
- case CONNECTION_ERROR_NOW_IN_PROGRESS:
- return "NOW_IN_PROGRESS";
- case CONNECTION_ERROR_ALREADY_EXISTS:
- return "ALREADY_EXISTS";
- case CONNECTION_ERROR_OPERATION_ABORTED:
- return "OPERATION_ABORTED";
- case CONNECTION_ERROR_DHCP_FAILED:
- return "DHCP_FAILED";
- case CONNECTION_ERROR_INVALID_KEY:
- return "INVALID_KEY";
- case CONNECTION_ERROR_NO_REPLY:
- return "NO_REPLY";
- default:
- break;
- }
-
- return "Unknown";
-}
-
-
-bool CNetConMgr::RegisterIpChangedCallback(void(*ip_changed_cb)(bool connected, void *data), void *data)
-{
- ASSERT(m);
-
- int ret = -1;
-
- ret = connection_set_ip_address_changed_cb( m->handle, sm_CbIpAddrChanged, data);
- if (ret != CONNECTION_ERROR_NONE) {
- _ERR("connection_set_ip_address_changed_cb() failed.");
- return false;
- }
- m->ip_changed_cb = ip_changed_cb;
-
- return true;
-}
+++ /dev/null
-#include <cstdlib>
-#include <Ecore.h>
-#include <AppCommon.h>
-//#include "tv_service_proxy.h"
-
-#include "TVServiceMgr.h"
-
-#define SIGNAL_HANDLER_INTERVAL 0.1
-
-CTVServiceMgr *CTVServiceMgr::instance = NULL;
-
-enum tv_scan_state {
- SCAN_STATE_READY,
- SCAN_STATE_SEARCHING,
- SCAN_STATE_PAUSED,
- SCAN_STATE_STOPPING,
- SCAN_STATE_MAX
-};
-
-
-struct tv_scan_result {
- unsigned int air_dtv;
- unsigned int cable_dtv;
- unsigned int air_atv;
- unsigned int cable_atv;
-};
-
-
-struct STVServiceMgr {
- //struct tv_scan_cbs cbs;
- enum tv_scan_state state;
- enum antenna_mode set_mode;
-#if 0
- TvServiceScan service_scan;
- TvServiceScanType scan_type;
-#endif
- int ch_count;
- int ch_num;
- int total_ch;
- struct tv_scan_result res;
- int is_stopped;
- Eina_List *signal_queue;
- Ecore_Timer *signal_timer;
-};
-
-struct _signal_info {
-#if 0
- TvServiceScanType scan_type;
- TvServiceScanEvent signal;
- TvServiceScanEventData signal_data;
-#endif
-};
-
-
-bool CTVServiceMgr::Initialize(void)
-{
- ASSERT(!instance);
-
- instance = new CTVServiceMgr;
- if(!instance)
- return false;
-
- instance->m = new STVServiceMgr;
- if(instance->m == NULL) return false;
-
-#if 0
- struct tv_scan *tvs;
- TvServiceScan scan;
- TvServiceScanType type;
- gint result;
- int r;
-
- tvs = calloc(1, sizeof(*tvs));
- if (!tvs) {
- _ERR("calloc failed");
- return NULL;
- }
-
- r = _get_scan_mode(mode, &type);
- if (r == -1) {
- _ERR("Get scan mode failed");
- free(tvs);
- return NULL;
- }
-
- result = tv_service_scan_create(&scan, type);
- if (result != TVS_ERROR_OK) {
- _ERR("Create Scan failed");
- free(tvs);
- return NULL;
- }
-
- tvs->service_scan = scan;
- tvs->scan_type = type;
- tvs->set_mode = mode;
- tvs->state = SCAN_STATE_READY;
-
- return tvs;
-#endif
- return NULL;
-
-}
-
-
-void CTVServiceMgr::Finalize(void)
-{
- if(!instance)
- return;
- ASSERT(instance->m);
-#if 0
- struct _signal_info *sinfo;
-
- if (!tvs) {
- _ERR("Invalid argument");
- return -1;
- }
-
- if (tvs->state != SCAN_STATE_READY)
- tv_scan_stop(tvs);
-
- if (tvs->signal_timer)
- ecore_timer_del(tvs->signal_timer);
-
- EINA_LIST_FREE(tvs->signal_queue, sinfo)
- free(sinfo);
-
- tv_service_scan_destroy(tvs->service_scan);
- free(tvs);
-
-#endif
- delete instance->m;
- delete instance;
- instance = NULL;
-}
-
-
-CTVServiceMgr *CTVServiceMgr::GetInstance(void)
-{
- return instance;
-}
-
-
-bool CTVServiceMgr::Start(void)
-{
- ASSERT(m);
-#if 0
- gint result;
-
- if (!tvs || !tvs->service_scan) {
- _ERR("Invalid argument");
- return -1;
- }
-
- if (tvs->state != SCAN_STATE_READY) {
- _ERR("unable state to start scan");
- return -1;
- }
-
- result = tv_service_scan_register_callback(tvs->service_scan,
- _signal_received, (gpointer)tvs);
- if (result != TVS_ERROR_OK) {
- _ERR("register callback failed");
- return -1;
- }
-
- result = tv_service_scan_start(tvs->service_scan);
- if (result != TVS_ERROR_OK) {
- _ERR("scan start failed");
- return -1;
- }
-
- tvs->state = SCAN_STATE_SEARCHING;
- tvs->is_stopped = 0;
- tvs->ch_count = 0;
- memset(&tvs->res, 0x00, sizeof(tvs->res));
-
- return 0;
-#endif
- return false;
-}
-
-
-bool CTVServiceMgr::Pause(void)
-{
- ASSERT(m);
-#if 0
- gint result;
-
- if (!tvs || !tvs->service_scan) {
- _ERR("Invalid argument");
- return -1;
- }
-
- if (tvs->state != SCAN_STATE_SEARCHING) {
- _ERR("unable state to pause scan");
- return -1;
- }
-
- result = tv_service_scan_pause(tvs->service_scan);
- if (result != TVS_ERROR_OK) {
- _ERR("Pause Scan failed");
- return -1;
- }
-
- tvs->state = SCAN_STATE_PAUSED;
-
-#endif
- return false;
-}
-
-
-bool CTVServiceMgr::Resume(void)
-{
- ASSERT(m);
-#if 0
- gint result;
-
- if (!tvs || !tvs->service_scan) {
- _ERR("Invalid argument");
- return -1;
- }
-
- if (tvs->state != SCAN_STATE_PAUSED) {
- _ERR("unable state to resume scan");
- return -1;
- }
-
- result = tv_service_scan_resume(tvs->service_scan);
- if (result != TVS_ERROR_OK) {
- _ERR("resume Scan failed");
- return -1;
- }
-
- tvs->state = SCAN_STATE_SEARCHING;
-
-#endif
- return false;
-}
-
-
-bool CTVServiceMgr::Stop(void)
-{
- ASSERT(m);
-#if 0
- gint result;
-
- if (!tvs) {
- _ERR("Invalid argument");
- return -1;
- }
-
- if (tvs->state == SCAN_STATE_READY) {
- _ERR("unable state to stop scan");
- return -1;
- }
-
- result = tv_service_scan_stop(tvs->service_scan);
- if (result != TVS_ERROR_OK) {
- _ERR("Create Scan failed");
- return -1;
- }
-
- tvs->state = SCAN_STATE_STOPPING;
- tvs->is_stopped = 1;
-
-#endif
- return false;
-}
-
-
-bool CTVServiceMgr::GetAllChannel(void)
-{
- ASSERT(m);
-
- return m->total_ch;
-}
-
-
-unsigned int CTVServiceMgr::GetServiceType(void)
-{
- ASSERT(m);
-
-#if 0
- return &tvs->res;
-#endif
- return -1;
-}
-
-
-bool CTVServiceMgr::IsStopped(void)
-{
- ASSERT(m);
-
- return m->is_stopped;
-}
+++ /dev/null
-#include "defs.h"
-#include <AppCommon.h>
-#include "WifiMgr.h"
-#include "WifiDirectMgr.h"
-
-#define LOCAL_MAX_CLIENT 8
-
-#define WIFI_DIRECT_DISCOVERY_LISTEN_AND_SCAN 0
-#define WIFI_DIRECT_SCAN_TIMEOUT 3
-
-CWifiDirectMgr *CWifiDirectMgr::instance = NULL;
-
-struct SWifiDirectMgr {
- CWifiMgr *pWifiMgr;
-};
-
-bool CWifiDirectMgr::Initialize()
-{
- ASSERT(!instance);
-
- instance = new CWifiDirectMgr;
- if(!instance)
- return false;
-
- instance->m = new SWifiDirectMgr;
- if(instance->m == NULL) return false;
-
-
- if(CWifiMgr::Initialize()) {
- _ERR("Fail to init wifi");
- return false;
- }
-
- int ret = -1;
- ret = wifi_direct_initialize();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_initialize failed, ret:%s.", instance->GetErrorMsg(ret));
- CWifiMgr::Finalize();
- delete instance->m;
- delete instance;
- instance = NULL;
- return false;
- }
-
- return true;
-}
-
-
-void CWifiDirectMgr::Finalize()
-{
- if(!instance)
- return;
- ASSERT(instance->m);
-
- int ret = -1;
- ret = wifi_direct_deinitialize();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_deinitialize failed, ret:%s.", instance->GetErrorMsg(ret));
- }
-
- CWifiMgr::Finalize();
-
- delete instance->m;
- delete instance;
- instance = NULL;
-}
-
-
-CWifiDirectMgr * CWifiDirectMgr::GetInstance()
-{
- return instance;
-}
-
-
-char* CWifiDirectMgr::GetDevieName(void)
-{
- int ret;
- char *name = NULL;
-
- ret = wifi_direct_get_device_name(&name);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("get device name failed, ret: %s.", GetErrorMsg(ret));
- return NULL;
- }
-
- return name;
-}
-
-
-char* CWifiDirectMgr::GetMacAddr(void)
-{
- int ret;
- char *mac_addr = NULL;
-
- ret = wifi_direct_get_mac_address(&mac_addr);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("get mac address failed, ret: %s.", GetErrorMsg(ret));
- return NULL;
- }
-
- return mac_addr;
-}
-
-
-bool CWifiDirectMgr::GetState(wifi_direct_state_e *status)
-{
- int ret;
-
- if (!status) {
- _ERR("The param is NULL.");
- return false;
- }
-
- ret = wifi_direct_get_state(status);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("get state failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::Activate(void)
-{
- int ret;
-
- ret = wifi_direct_activate();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_activate failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::Deactivate(void)
-{
- int ret;
-
- ret = wifi_direct_deactivate();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_deactivate failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::SetMaxClient(void)
-{
- int ret;
-
- ret = wifi_direct_set_max_clients(LOCAL_MAX_CLIENT);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("set max client failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::GetAllDicoveredPeerInfo(wifi_direct_discovered_peer_cb cb, void *data)
-{
- int ret;
-
- if (!cb || !data) {
- _ERR("The parameter is NULL.");
- return false;
- }
-
- ret = wifi_direct_foreach_discovered_peers(cb, data);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("foreach connected pees failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::GetAllConnectedPeerInfo(wifi_direct_connected_peer_cb cb, void *data)
-{
- int ret;
-
- if (!cb || !data) {
- _ERR("The parameter is NULL.");
- return false;
- }
-
- ret = wifi_direct_foreach_connected_peers(cb, data);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("foreach connected peers failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::StartDiscovery(void)
-{
- int ret;
-
- ret = wifi_direct_start_discovery(WIFI_DIRECT_DISCOVERY_LISTEN_AND_SCAN, WIFI_DIRECT_SCAN_TIMEOUT);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("start discovery failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::CancelDiscovery(void)
-{
- int ret;
-
- ret = wifi_direct_cancel_discovery();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_cancel_discovery failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::Connect(const char *macaddr)
-{
- int ret;
-
- if (!macaddr) {
- _ERR("mac_address is NULL");
- return false;
- }
-
- ret = wifi_direct_connect(macaddr);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_connect failed,%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::Disconnect(const char *macaddr)
-{
- int ret;
-
- if (!macaddr) {
- _ERR("mac_address is NULL");
- return false;
- }
-
- ret = wifi_direct_disconnect(macaddr);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_disconnect failed,%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::AcceptConnection(char *macaddr)
-{
- int ret;
-
- if (!macaddr) {
- _ERR("mac_address is NULL");
- return false;
- }
-
- ret = wifi_direct_accept_connection(macaddr);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_accept_connection failed,%s.", GetErrorMsg(ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMgr::GetWPStype(Eina_Bool *is_pbc)
-{
- _DBG("Not Yet");
-#if 0
- wifi_direct_wps_type_e type;
-
- if (!is_pbc) {
- _ERR("Parameter is NULL");
- return false;
- }
-
- int ret;
- ret = wifi_direct_get_wps_type(&type);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_get_wps_type failed,%s.",
- wifi_direct_mgr_err_dbg(ret));
- return false;
- }
-
- if ((type & WIFI_DIRECT_WPS_TYPE_PBC) == WIFI_DIRECT_WPS_TYPE_PBC)
- *is_pbc = EINA_TRUE;
- else
- *is_pbc = EINA_FALSE;
-
- return true;
-#endif
- return false;
-}
-
-
-bool CWifiDirectMgr::SetWPStype(wifi_direct_wps_type_e *type)
-{
- if (!type) {
- _ERR("Parameter is NULL");
- return false;
- }
-
- _DBG("Not Yet");
-#if 0
- int ret;
- ret = wifi_direct_set_wps_type(*type);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_get_wps_type failed,%s.",
- wifi_direct_mgr_err_dbg(ret));
- return false;
- }
-#endif
-
- return true;
-}
-
-
-bool CWifiDirectMgr::SetDeviceStateChangedCb(wifi_direct_device_state_changed_cb cb, void *data)
-{
- int ret = -1;
- ret = wifi_direct_set_device_state_changed_cb(cb, data);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("set device state changed cb failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
- return true;
-}
-
-
-bool CWifiDirectMgr::UnSetDeviceStateChangedCb(void)
-{
- int ret = -1;
- ret = wifi_direct_unset_device_state_changed_cb();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("unset device state changed cb failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
- return true;
-}
-
-
-bool CWifiDirectMgr::SetDiscoveryStateChangedCb(wifi_direct_discovery_state_chagned_cb cb, void *data)
-{
- int ret = -1;
- ret = wifi_direct_set_discovery_state_changed_cb(cb, data);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("set discovery state changed cb failed ret:%s.", GetErrorMsg(ret));
- wifi_direct_unset_device_state_changed_cb();
- return false;
- }
- return true;
-}
-
-
-bool CWifiDirectMgr::UnSetDiscoveryStateChangedCb(void)
-{
- int ret = -1;
- ret = wifi_direct_unset_discovery_state_changed_cb();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("unset discovery state changed cb failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
- return true;
-}
-
-
-bool CWifiDirectMgr::SetConnectionStateChangedCb(wifi_direct_connection_state_changed_cb cb, void *data)
-{
- int ret = -1;
- ret = wifi_direct_set_connection_state_changed_cb(cb, data);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("set connection state changed cb failed ret:%s.", GetErrorMsg(ret));
- wifi_direct_unset_device_state_changed_cb();
- wifi_direct_unset_discovery_state_changed_cb();
- return false;
- }
- return true;
-}
-
-
-bool CWifiDirectMgr::UnSetConnectionStateChangedCb(void)
-{
- int ret = -1;
- ret = wifi_direct_unset_connection_state_changed_cb();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("unset connection state changed cb failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
- return true;
-}
-
-
-bool CWifiDirectMgr::UnSetClientIpAddrAssignedCb(void)
-{
- int ret = -1;
- ret = wifi_direct_unset_client_ip_address_assigned_cb();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("unset device state changed cb failed ret:%s.", GetErrorMsg(ret));
- return false;
- }
- return true;
-}
-
-
-const char *CWifiDirectMgr::GetErrorMsg(int err)
-{
- switch (err) {
- case WIFI_DIRECT_ERROR_OUT_OF_MEMORY:
- return "WIFI_DIRECT_ERROR_OUT_OF_MEMORY";
- break;
- case WIFI_DIRECT_ERROR_NOT_PERMITTED:
- return "WIFI_DIRECT_ERROR_NOT_PERMITTED";
- break;
- case WIFI_DIRECT_ERROR_INVALID_PARAMETER:
- return "WIFI_DIRECT_ERROR_INVALID_PARAMETER";
- break;
- case WIFI_DIRECT_ERROR_RESOURCE_BUSY:
- return "WIFI_DIRECT_ERROR_RESOURCE_BUSY";
- break;
- case WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT:
- return "WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT";
- break;
- case WIFI_DIRECT_ERROR_NOT_INITIALIZED:
- return "WIFI_DIRECT_ERROR_NOT_INITIALIZED";
- break;
- case WIFI_DIRECT_ERROR_COMMUNICATION_FAILED:
- return "WIFI_DIRECT_ERROR_COMMUNICATION_FAILED";
- break;
- case WIFI_DIRECT_ERROR_WIFI_USED:
- return "WIFI_DIRECT_ERROR_WIFI_USED";
- break;
- case WIFI_DIRECT_ERROR_MOBILE_AP_USED:
- return "WIFI_DIRECT_ERROR_MOBILE_AP_USED";
- break;
- case WIFI_DIRECT_ERROR_CONNECTION_FAILED:
- return "WIFI_DIRECT_ERROR_CONNECTION_FAILED";
- break;
- case WIFI_DIRECT_ERROR_AUTH_FAILED:
- return "WIFI_DIRECT_ERROR_AUTH_FAILED";
- break;
- case WIFI_DIRECT_ERROR_OPERATION_FAILED:
- return "WIFI_DIRECT_ERROR_OPERATION_FAILED";
- break;
- case WIFI_DIRECT_ERROR_TOO_MANY_CLIENT:
- return "WIFI_DIRECT_ERROR_TOO_MANY_CLIENT";
- break;
- default:
- break;
- }
-
- return "UNKNOWN";
-}
-
+++ /dev/null
-#include <cstdlib>
-#include <wifi.h>
-#include <AppCommon.h>
-#include "WifiMgr.h"
-
-
-#define IP_STRING_MAX_SIZE 20
-#define MAX_NAME_SIZE 256
-#define CONTENT_TXT_SIZE 500
-#define ZERO_IP "0.0.0.0"
-
-
-bool CWifiAp::m_CheckErr(const char *func, int ret)
-{
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to wifi_get_connected_ap %s", CWifiMgr::ErrorMsg((wifi_error_e)ret));
- }
-
- return ret == WIFI_ERROR_NONE ? true : false;
-}
-
-
-void CWifiAp::t_SetHandle(wifi_ap_h handle)
-{
- m_handle = handle;
-}
-
-
-CWifiAp::CWifiAp(wifi_ap_h handle)
-{
- m_handle = handle;
-
- int ret = wifi_ap_clone(&m_handle, handle);
- m_CheckErr(__FUNCTION__, ret);
-}
-
-
-CWifiAp::~CWifiAp()
-{
- wifi_ap_destroy(m_handle);
- m_handle = NULL;
-}
-
-
-#define WIFI_CHECK_RET(EXP) return m_CheckErr(__FUNCTION__, EXP);
-#define WIFI_CHECK(EXP) m_CheckErr(__FUNCTION__, EXP);
-
-
-wifi_ap_h CWifiAp::Handle(void)
-{
- return m_handle;
-}
-
-
-bool CWifiAp::AllocConnectedAp(void)
-{
- ASSERT(m_handle == NULL);
-
- WIFI_CHECK_RET(wifi_get_connected_ap(&m_handle));
-}
-
-
-void CWifiAp::Destroy(void)
-{
- if (m_handle == NULL)
- return;
-
- WIFI_CHECK(wifi_ap_destroy(m_handle));
- m_handle = NULL;
-}
-
-
-bool CWifiAp::GetEssid(char *essid, int size)
-{
- ASSERT(m_handle);
-
- char *str = NULL;
- int ret = wifi_ap_get_essid(m_handle, &str);
- if (ret == WIFI_ERROR_NONE) {
- strncpy(essid, str, size);
- _DBG("str : %s , ESSID : %s", str, essid);
- free(str);
- }
- else {
- _ERR("Fail to get ESSID");
- }
-
- return ret == WIFI_ERROR_NONE ? true : false;
-}
-
-
-bool CWifiAp::GetConnectionState(wifi_connection_state_e *state)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_get_connection_state(m_handle, state));
-}
-
-
-bool CWifiAp::GetSecurityType(wifi_security_type_e *type)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_get_security_type(m_handle, type));
-}
-
-
-bool CWifiAp::SetPassPhrase(const char *passcode)
-{
- ASSERT(m_handle);
- ASSERT(passcode);
-
- WIFI_CHECK_RET(wifi_ap_set_passphrase(m_handle, passcode));
-}
-
-
-bool CWifiAp::Connect(void(*wifi_connected_cb)(wifi_error_e err, void *data), void *data)
-{
- ASSERT(m_handle);
- ASSERT(wifi_connected_cb);
-
- WIFI_CHECK_RET(wifi_connect(m_handle, wifi_connected_cb, data));
-}
-
-
-bool CWifiAp::SetIpType(wifi_ip_config_type_e type)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_set_ip_config_type(m_handle, WIFI_ADDRESS_FAMILY_IPV4, type));
-}
-
-
-bool CWifiAp::GetIp(char *ip, int size)
-{
- ASSERT(m_handle);
-
- char *str_value = NULL;
- int ret = wifi_ap_get_ip_address(m_handle, WIFI_ADDRESS_FAMILY_IPV4, &str_value);
- if (ret == WIFI_ERROR_NONE) {
- strncpy(ip, str_value, IP_STRING_MAX_SIZE < size);
- free(str_value);
- }
- else {
- strncpy(ip, ZERO_IP, IP_STRING_MAX_SIZE);
- _ERR("Fail to get Gateway");
- }
- return ret == WIFI_ERROR_NONE ? true : false;
-}
-
-
-bool CWifiAp::GetSubnetMask(char *submask)
-{
- ASSERT(m_handle);
-
- char *str_value = NULL;
- int ret = wifi_ap_get_subnet_mask(m_handle, WIFI_ADDRESS_FAMILY_IPV4, &str_value);
- if (ret == WIFI_ERROR_NONE) {
- strncpy(submask, str_value, IP_STRING_MAX_SIZE);
- free(str_value);
- }
- else {
- strncpy(submask, ZERO_IP, IP_STRING_MAX_SIZE);
- _ERR("Fail to get Gateway");
- }
- return ret == WIFI_ERROR_NONE ? true : false;
-}
-
-
-bool CWifiAp::GetGateway(char *gateway)
-{
- ASSERT(m_handle);
-
- char *str_value;
-
- str_value = NULL;
- if (wifi_ap_get_gateway_address(m_handle, WIFI_ADDRESS_FAMILY_IPV4, &str_value) == WIFI_ERROR_NONE) {
- strncpy(gateway, str_value, IP_STRING_MAX_SIZE);
- free(str_value);
- return true;
- }
- else {
- strncpy(gateway, ZERO_IP, IP_STRING_MAX_SIZE);
- _ERR("Fail to get Gateway");
- return false;
- }
-}
-
-
-bool CWifiAp::GetDNS(char *dns)
-{
- ASSERT(m_handle);
-
- char *str_value;
-
- str_value = NULL;
- if (wifi_ap_get_dns_address(m_handle, 1, WIFI_ADDRESS_FAMILY_IPV4, &str_value) == WIFI_ERROR_NONE) {
- strncpy(dns, str_value, IP_STRING_MAX_SIZE);
- free(str_value);
- return true;
- }
- else {
- strncpy(dns, ZERO_IP, IP_STRING_MAX_SIZE);
- _ERR("Fail to get DNS1");
- return false;
- }
-}
-
-
-bool CWifiAp::SetIp(char *ip)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_set_ip_address(m_handle, WIFI_ADDRESS_FAMILY_IPV4, ip));
-}
-
-
-bool CWifiAp::SetSubnetMask(char *submask)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_set_subnet_mask(m_handle, WIFI_ADDRESS_FAMILY_IPV4, submask));
-}
-
-
-bool CWifiAp::SetGateway(char *gateway)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_set_gateway_address(m_handle, WIFI_ADDRESS_FAMILY_IPV4, gateway));
-}
-
-
-bool CWifiAp::SetDNS(char *dns)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_set_dns_address(m_handle, 1, WIFI_ADDRESS_FAMILY_IPV4, dns));
-}
-
-
-bool CWifiAp::CloneAP(wifi_ap_h *cloned_ap, wifi_ap_h origin)
-{
- int ret;
-
- if (!cloned_ap || !origin) {
- _ERR("the param is invalid.");
- return false;
- }
-
- ret = wifi_ap_clone(cloned_ap, origin);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to wifi_ap_clone %s", CWifiMgr::ErrorMsg((wifi_error_e)ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiAp::ForgetAP(void)
-{
- int ret;
- wifi_ap_h handle;
- char *name;
-
- ret = wifi_get_connected_ap(&handle);
- if (ret == WIFI_ERROR_NO_CONNECTION) {
- return true;
- }
- else if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to get connected AP [%s]", CWifiMgr::ErrorMsg((wifi_error_e)ret));
- return false;
- }
-
- ret = wifi_ap_get_essid(handle, &name);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to wifi_ap_get_essid AP [%s]", CWifiMgr::ErrorMsg((wifi_error_e)ret));
- wifi_ap_destroy(handle);
- return false;
- }
-
- ret = wifi_forget_ap(handle);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to forget [%s],[%s].", name, CWifiMgr::ErrorMsg((wifi_error_e)ret));
- }
-
- wifi_ap_destroy(handle);
- free(name);
-
- return ret == WIFI_ERROR_NONE ? true : false;
-}
-
-
-bool CWifiAp::SetProxyType(EProxyMethod pm)
-{
- ASSERT(m_handle);
-
- wifi_proxy_type_e type;
-
- switch (pm) {
- case PROXY_METHOD_NONE:
- type = WIFI_PROXY_TYPE_DIRECT;
- break;
-
- case PROXY_METHOD_MANUAL:
- type = WIFI_PROXY_TYPE_MANUAL;
- break;
-
- case PROXY_METHOD_AUTO:
- type = WIFI_PROXY_TYPE_AUTO;
- break;
-
- default:
- return false;
- }
-
- int ret = wifi_ap_set_proxy_type(m_handle, type);
- return ret = WIFI_ERROR_NONE ? true : false;
-}
-
-
-bool CWifiAp::GetProxyType(EProxyMethod *pm)
-{
- ASSERT(m_handle);
-
- wifi_proxy_type_e type;
-
- int ret = wifi_ap_get_proxy_type(m_handle, &type);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("wifi_ap_get_proxy_type() failed.");
- return false;
- }
-
- switch (type) {
- case WIFI_PROXY_TYPE_DIRECT:
- *pm = PROXY_METHOD_NONE;
- break;
-
- case WIFI_PROXY_TYPE_MANUAL:
- *pm = PROXY_METHOD_MANUAL;
- break;
-
- case WIFI_PROXY_TYPE_AUTO:
- *pm = PROXY_METHOD_AUTO;
- break;
-
- default:
- return false;
- }
-
- return ret;
-}
-
-
-bool CWifiAp::SetProxyAddr(const char *addr)
-{
- ASSERT(m_handle);
-
- WIFI_CHECK_RET(wifi_ap_set_proxy_address(m_handle, WIFI_ADDRESS_FAMILY_IPV4, addr));
-}
-
-
-bool CWifiAp::GetProxyAddr(char **addr)
-{
- ASSERT(m_handle);
- ASSERT(addr);
-
- WIFI_CHECK_RET(wifi_ap_get_proxy_address(m_handle, WIFI_ADDRESS_FAMILY_IPV4, addr));
-}
-
-
-CWifiMgr *CWifiMgr::instance = NULL;
-
-
-struct SWifiMgr {
- int a;
-};
-
-
-bool CWifiMgr::Initialize(void)
-{
- ASSERT(!instance);
-
- _CREATE_BEGIN{
- _CHECK(instance = new CWifiMgr);
- _CHECK(instance->m = new SWifiMgr);
- _CHECK(wifi_initialize() == WIFI_ERROR_NONE);
-
- _CHECK_FAIL{ wifi_deinitialize(); }
- _CHECK_FAIL{ delete instance->m; }
- _CHECK_FAIL{ delete instance; instance = NULL; }
- } _CREATE_END_AND_CATCH { return false; }
-
- return true;
-}
-
-
-void CWifiMgr::Finalize(void)
-{
- ASSERT(instance);
- ASSERT(instance->m);
-
- wifi_deinitialize();
-
- delete instance->m;
- delete instance;
- instance = NULL;
-}
-
-
-CWifiMgr *CWifiMgr::GetInstance(void)
-{
- return instance;
-}
-
-
-bool CWifiMgr::Activate(void (*cbActivated)(wifi_error_e err, void *data), void *data)
-{
- ASSERT(cbActivated);
-
- int ret = wifi_activate(cbActivated, data);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to wifi_activate %s", CWifiMgr::ErrorMsg((wifi_error_e) ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiMgr::IsActivated(bool *activated)
-{
- int ret;
-
- ret = wifi_is_activated(activated);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to wifi_is_activated %s",CWifiMgr::ErrorMsg((wifi_error_e) ret));
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiMgr::Scan(void(*cbFinish)(wifi_error_e err, void* data), void *data)
-{
- ASSERT(cbFinish);
-
- int ret = wifi_scan(cbFinish, data);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Scan request failed [%s]", CWifiMgr::ErrorMsg((wifi_error_e) ret));
- return false;
- }
-
- return true;
-}
-
-
-struct SUserData
-{
- bool(*cb)(CWifiAp *ap, void *data);
- void *data;
- SUserData(bool(*c)(CWifiAp *ap, void *data), void *d) {
- cb = c;
- data = data;
- }
-};
-
-
-static bool g_CbFound(wifi_ap_h ap, void *data)
-{
- SUserData *ud = (SUserData*)data;
- CWifiAp ins(ap);
- ud->cb(&ins, ud->data);
- delete ud;
-
- return false;
-}
-
-
-bool CWifiMgr::FoundAps(bool(*cbFound)(CWifiAp *ap, void *data), void *data)
-{
- ASSERT(cbFound);
-
- SUserData *ud = new SUserData(cbFound, data);
- int ret = wifi_foreach_found_aps(g_CbFound, ud);
- if (ret != WIFI_ERROR_NONE) {
- _ERR("Fail to get AP list %s.", CWifiMgr::ErrorMsg((wifi_error_e) ret));
- return false;
- }
-
- return true;
-}
-
-
-const char * CWifiMgr::ErrorMsg(wifi_error_e err_type)
-{
- switch (err_type) {
- case WIFI_ERROR_NONE:
- return "NONE";
- case WIFI_ERROR_INVALID_PARAMETER:
- return "INVALID_PARAMETER";
- case WIFI_ERROR_OUT_OF_MEMORY:
- return "OUT_OF_MEMORY";
- case WIFI_ERROR_INVALID_OPERATION:
- return "INVALID_OPERATION";
- case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
- return "ADDRESS_FAMILY_NOT_SUPPORTED";
- case WIFI_ERROR_OPERATION_FAILED:
- return "OPERATION_FAILED";
- case WIFI_ERROR_NO_CONNECTION:
- return "NO_CONNECTION";
- case WIFI_ERROR_NOW_IN_PROGRESS:
- return "NOW_IN_PROGRESS";
- case WIFI_ERROR_ALREADY_EXISTS:
- return "ALREADY_EXISTS";
- case WIFI_ERROR_OPERATION_ABORTED:
- return "OPERATION_ABORTED";
- case WIFI_ERROR_DHCP_FAILED:
- return "DHCP_FAILED";
- case WIFI_ERROR_INVALID_KEY:
- return "INVALID_KEY";
- case WIFI_ERROR_NO_REPLY:
- return "NO_REPLY";
- case WIFI_ERROR_SECURITY_RESTRICTED:
- return "SECURITY_RESTRICTED";
- default:
- break;
- }
-
- return "UNKNOWN";
-}
INCLUDE(FindPkgConfig)
pkg_check_modules(UG_CLOCK_PKGS REQUIRED
+ dlog
eina
edje
evas
ui-gadget-1
sysman
)
+ #ecore-x
SET(PKGS_LDFLAGS "${PKGS_LDFLAGS} ${UG_CLOCK_PKGS_LDFLAGS}")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fvisibility=hidden -Wall")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
SET(SRCS
- src/ug_clock.cpp
- src/util.cpp
- src/ClockMainView.cpp
- src/ClockSublistView.cpp
- src/ClockSpinControlView.cpp
- src/ClockTimeSpinControlView.cpp
+ src/ug_clock.c
+ src/ug_clock_spin_control.c
+ src/ug_clock_sublist.c
+ src/ug_clock_utils.c
+ src/ug_clock_time_spin_control.c
)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../include)
ADD_DEFINITIONS("-DUG_CLOCK_EDJFILE=\"${UG_CLOCK_EDJE_DIR}/${UG_CLOCK_EDJ_FILE}\"")
ADD_DEFINITIONS("-DUG_CLOCK_EDJTHEME=\"${UG_CLOCK_EDJE_DIR}/${UG_CLOCK_EDJ_THEME}\"")
* limitations under the License.
*/
-#include "../include/defs.h"
+#include "../include/ug_clock_define.h"
collections {
group {
* limitations under the License.
*/
-#include "../include/defs.h"
+#include "../include/ug_clock_define.h"
collections {
#include "widgets/button.edc"
+++ /dev/null
-#ifndef __CLOCK_MAIN_VIEW_H__
-#define __CLOCK_MAIN_VIEW_H__
-
-class CClockMainView : public CBaseView, public IMouseClickedListener {
-private :
- struct SClockMainView *m;
-
- bool m_AddCloseBtn(void);
- bool m_AddClockSublist(void);
- void m_RefreshTimeBtnText(Evas_Object *btn, int *time);
- void m_RefreshBtnText(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CClockMainView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), m(0) {}
- virtual ~CClockMainView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
-};
-
-#endif /* __CLOCK_MAIN_VIEW_H__ */
-
+++ /dev/null
-#ifndef __CLOCK_SPINCONTROL_VIEW_H__
-#define __CLOCK_SPINCONTROL_VIEW_H__
-
-class CClockSpinControlView : public CBaseView, public IMouseClickedListener {
-private :
- struct SClockSpinControlView *m;
-
- Evas_Object *m_AddArrowBtn(Evas_Object *obj, int flag);
- bool m_AddDateSpin(void);
- void m_InitDateSpin(void);
-
- void m_UpdateDateValue(Evas_Object *spin, int spin_idx);
- bool m_AddSpin(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CClockSpinControlView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), m(0) {}
- virtual ~CClockSpinControlView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev);
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
-};
-
-#endif /* __CLOCK_SPINCONTROL_VIEW_H__ */
+++ /dev/null
-#ifndef __CLOCK_SUBLIST_VIEW_H__
-#define __CLOCK_SUBLIST_VIEW_H__
-
-class CClockSublistView : public CBaseView, public IMouseClickedListener {
-private :
- struct SClockSublistView *m;
-
- bool m_AddSublist(void);
- bool m_AddSublistBtns(void);
- void m_SetSublistInitValue(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CClockSublistView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), m(0) {}
- virtual ~CClockSublistView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev);
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
-};
-
-#endif /* __CLOCK_SUBLIST_VIEW_H__ */
+++ /dev/null
-#ifndef __CLOCK_TIME_SPINCONTROL_VIEW_H__
-#define __CLOCK_TIME_SPINCONTROL_VIEW_H__
-
-class CClockTimeSpinControlView : public CBaseView, public IMouseClickedListener {
-private :
- struct SClockTimeSpinControlView *m;
-
- Evas_Object *m_AddArrowBtn(Evas_Object *obj, int flag);
- void m_UpdateTimeValue(Evas_Object *btn, int btn_idx);
- bool m_AddTimeSpinWithAMPM(void);
- bool m_AddTimeSpinWithoutAMPM(void);
- bool m_AddTimeSpinBtns(void);
- bool m_AddTimeSpin(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CClockTimeSpinControlView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), m(0) {}
- virtual ~CClockTimeSpinControlView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev);
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
-};
-
-#endif /* __CLOCK_TIME_TimeSpinControl_VIEW_H__ */
--- /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 __DBG_H__
+
+#include <dlog.h>
+
+#ifndef _ERR
+#define _ERR(fmt, args...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _DBG
+#define _DBG(fmt, args...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _INFO
+#define _INFO(fmt, args...) LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#endif /* __DBG_H__ */
#include <Elementary.h>
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
void view_ug_clock_refresh(Evas_Object *base, unsigned int *date, int *time);
-#if defined (__cplusplus)
-};
-#endif
-
#endif /* __UG_CLOCK_H__ */
#define AM "AM"
#define PM "PM"
-/* view */
-#define CLOCK_MAIN_VIEW "CLOCK_MAIN_VIEW"
-#define CLOCK_SUBLIST_VIEW "CLOCK_SUBLIST_VIEW"
-#define CLOCK_SPINCONTROL_VIEW "CLOCK_SPINCONTROL_VIEW"
-#define CLOCK_TIME_SPINCONTROL_VIEW "CLOCK_TIME_SPINCONTROL_VIEW"
-
/* definitions for ug_clock.edc */
/* UG_CLOCK_GRP */
#define UG_CLOCK_GRP "main"
#define SIG_SRC_FOC_HIDE_ICON "focus_hide_icon"
#define SIG_NAME_SUBLIST "sublist"
+/* Key defines */
+#define KEY_UP "Up"
+#define KEY_DOWN "Down"
+#define KEY_LEFT "Left"
+#define KEY_RIGHT "Right"
+
+#define KEY_0 "0"
+#define KEY_1 "1"
+#define KEY_2 "2"
+#define KEY_3 "3"
+#define KEY_4 "4"
+#define KEY_5 "5"
+#define KEY_6 "6"
+#define KEY_7 "7"
+#define KEY_8 "8"
+#define KEY_9 "9"
+
#endif /* __UG_CLOCK_DEFINE_H__ */
--- /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 __UG_CLOCK_SPIN_CONTROL_H__
+#define __UG_CLOCK_SPIN_CONTROL_H__
+
+#include <Elementary.h>
+
+void view_spin_control_create(Evas_Object *win,
+ Evas_Object *ug_base);
+
+#endif /* __UG_CLOCK_SPIN_CONTROL_H__ */
--- /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 __UG_CLOCK_SUBLIST_H__
+#define __UG_CLOCK_SUBLIST_H__
+
+#include <Elementary.h>
+
+void view_sublist_create(Evas_Object *win, Evas_Object *ug_base);
+
+#endif /* __UG_CLOCK_SUBLIST_H__ */
--- /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 __UG_CLOCK_TIME_SPIN_CONTROL_H__
+#define __UG_CLOCK_TIME_SPIN_CONTROL_H__
+
+#include <Elementary.h>
+
+void view_time_spin_ctrl_create(Evas_Object *win,
+ Evas_Object *ug_base);
+
+#endif /* __UG_CLOCK_TIME_SPIN_CONTROL_H__ */
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <AppCommon.h>
-#include "defs.h"
-#include "util.h"
-
-#include "ClockMainView.h"
-
-#define CLOCK_SUBLIST_NULL_BTNS 2
-#define UG_CLOCK_DATA_ID "ug_clock_data"
-
-struct SClockMainView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *close_btn;
- Evas_Object *date_btn;
- Evas_Object *switch_btn;
- Evas_Object *time_btn;
- Evas_Object *sublist_box;
- Evas_Object *cur_btn;
-
- unsigned int date[DATE_MAX];
- int mode;
- int time[TIME_MAX];
-
- CViewMgr *pViewMgr;
-};
-
-
-bool CClockMainView::m_AddCloseBtn(void)
-{
- m->close_btn = utils_add_button(m->base);
- if (!m->close_btn) {
- _ERR("elm add button failed.");
- return false;
- }
-
- elm_object_style_set(m->close_btn, BTN_STYLE_CLOSE_BTN);
- elm_object_text_set(m->close_btn, BTN_TEXT_CLOSE);
- elm_object_part_content_set(m->base, SWALLOW_CLOSE_BTN, m->close_btn);
-
- //evas_object_smart_callback_add(m->close_btn, "clicked", _close_btn_clicked_cb, data);
- //evas_object_event_callback_add(m->close_btn, EVAS_CALLBACK_KEY_DOWN, _key_down_on_close_btn_cb, data);
- Connect(m->close_btn, 1, TYPE_CLICKED | TYPE_KEY_DOWN);
-#if 0
- evas_object_event_callback_add(m->close_btn, EVAS_CALLBACK_MOUSE_IN, _close_btn_mouse_in_cb, data);
- evas_object_event_callback_add(m->close_btn, EVAS_CALLBACK_MOUSE_OUT, _close_btn_mouse_out_cb, data);
-#endif
- return true;
-}
-
-
-bool CClockMainView::m_AddClockSublist(void)
-{
- m->sublist_box = utils_add_box(m->base);
- if (!m->sublist_box) {
- _ERR("add clock sublist box failed.");
- return false;
- }
-
- m->date_btn = utils_add_button(m->base);
- if (!m->date_btn) {
- _ERR("add button failed.");
- evas_object_del(m->sublist_box);
- return NULL;
- }
-
- elm_object_style_set(m->date_btn, BTN_STYLE_LIST_BTN);
- elm_object_text_set(m->date_btn, BTN_TEXT_DATE);
-
- elm_box_pack_end(m->sublist_box, m->date_btn);
- elm_object_focus_set(m->date_btn, EINA_TRUE);
- utils_get_date_value(m->date);
-
- char buf[BUF_SIZE];
- snprintf(buf, sizeof(buf), "%02d / %02d / %04d", m->date[DATE_MONTH], m->date[DATE_DAY], m->date[DATE_YEAR]);
- elm_object_part_text_set(m->date_btn, BTN_PART_VALUE, (const char *)buf);
-
- //evas_object_event_callback_add(m->date_btn, EVAS_CALLBACK_KEY_DOWN, _key_down_on_btns_cb, data);
- //evas_object_smart_callback_add(m->date_btn, "clicked", _date_btn_clicked_cb, data);
- Connect(m->date_btn, 2, TYPE_CLICKED | TYPE_KEY_DOWN);
-#if 0
- evas_object_event_callback_add(m->date_btn, EVAS_CALLBACK_MOUSE_IN, _date_btn_mouse_in_cb, NULL);
- evas_object_event_callback_add(m->date_btn, EVAS_CALLBACK_MOUSE_OUT, _date_btn_mouse_out_cb, NULL);
-#endif
-
- m->switch_btn = utils_add_button(m->base);
- if (!m->switch_btn) {
- _ERR("add button failed.");
- evas_object_del(m->date_btn);
- evas_object_del(m->sublist_box);
- return NULL;
- }
-
- elm_object_style_set(m->switch_btn, BTN_STYLE_LIST_BTN);
- elm_object_text_set(m->switch_btn, BTN_TEXT_24HOUR_TIME);
-
- elm_box_pack_end(m->sublist_box, m->switch_btn);
-
- /* Set ON/OFF for switch button. */
- if(utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &m->mode)) {
- _ERR("vconf get value failed.");
- return false;
- }
-
- if (!m->mode)
- elm_object_part_text_set(m->switch_btn, BTN_PART_VALUE, OFF);
- else
- elm_object_part_text_set(m->switch_btn, BTN_PART_VALUE, ON);
-
- //evas_object_event_callback_add(m->switch_btn, EVAS_CALLBACK_KEY_DOWN, _key_down_on_btns_cb, data);
- //evas_object_smart_callback_add(m->switch_btn, "clicked", _switch_btn_clicked_cb, data);
- Connect(m->switch_btn, 3, TYPE_CLICKED | TYPE_KEY_DOWN);
-
-#if 0
- evas_object_event_callback_add(switch_btn, EVAS_CALLBACK_MOUSE_IN, _switch_btn_mouse_in_cb, NULL);
- evas_object_event_callback_add(switch_btn, EVAS_CALLBACK_MOUSE_OUT, _switch_btn_mouse_out_cb, NULL);
-#endif
-
- m->time_btn = utils_add_button(m->base);
- if (!m->time_btn) {
- _ERR("add time button failed.");
- evas_object_del(m->switch_btn);
- evas_object_del(m->date_btn);
- evas_object_del(m->sublist_box);
- return NULL;
- }
-
- elm_object_style_set(m->time_btn, BTN_STYLE_LIST_BTN);
- elm_object_text_set(m->time_btn, BTN_TEXT_TIME);
-
- elm_box_pack_end(m->sublist_box, m->time_btn);
-
- /* Set hour : minute : AM/PM for time button. */
- utils_get_time_value(m->time);
-
- m_RefreshTimeBtnText(m->time_btn, m->time);
-
- //evas_object_event_callback_add(m->time_btn, EVAS_CALLBACK_KEY_DOWN, _key_down_on_btns_cb, data);
- //evas_object_smart_callback_add(m->time_btn, "clicked", _time_btn_clicked_cb, data);
- Connect(m->time_btn, 4, TYPE_CLICKED | TYPE_KEY_DOWN);
-#if 0
- evas_object_event_callback_add(m->time_btn, EVAS_CALLBACK_MOUSE_IN, _time_btn_mouse_in_cb, NULL);
- evas_object_event_callback_add(m->time_btn, EVAS_CALLBACK_MOUSE_OUT, _time_btn_mouse_out_cb, NULL);
-#endif
-
- Evas_Object *null_btn;
- Evas_Object *last_btn;
-
- for (int idx = 0; idx < CLOCK_SUBLIST_NULL_BTNS; idx++) {
- null_btn = utils_add_button(m->base);
- if (!null_btn) {
- _ERR("add null button failed.");
- evas_object_del(m->time_btn);
- evas_object_del(m->switch_btn);
- evas_object_del(m->date_btn);
- evas_object_del(m->sublist_box);
- }
-
- elm_object_style_set(null_btn, BTN_STYLE_LIST_BTN);
- elm_box_pack_end(m->sublist_box, null_btn);
- }
-
- last_btn = utils_add_button(m->base);
- if (!last_btn) {
- _ERR("add last button failed.");
- evas_object_del(m->time_btn);
- evas_object_del(m->switch_btn);
- evas_object_del(m->date_btn);
- evas_object_del(m->sublist_box);
- }
-
- elm_object_style_set(last_btn, BTN_STYE_LAST_BTN);
- elm_object_part_content_set(m->base, SWALLOW_CLOCK_LAST, last_btn);
-
- Evas_Object *dbtn, *sbtn, *tbtn, *cbtn;
-
- dbtn = m->date_btn;
- sbtn = m->switch_btn;
- tbtn = m->time_btn;
- cbtn = m->close_btn;
-
- elm_object_focus_next_object_set(dbtn, dbtn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(dbtn, dbtn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(dbtn, sbtn, ELM_FOCUS_DOWN);
- /* Maybe it's not necessary to set ELM_FOCUS_RIGHT for date_btn */
- elm_object_focus_next_object_set(dbtn, cbtn, ELM_FOCUS_RIGHT);
-
- elm_object_focus_next_object_set(sbtn, tbtn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(sbtn, dbtn, ELM_FOCUS_UP);
- /* Maybe it's not necessary to set ELM_FOCUS_RIGHT for switch_btn */
- elm_object_focus_next_object_set(sbtn, cbtn, ELM_FOCUS_RIGHT);
-
- elm_object_focus_next_object_set(tbtn, tbtn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(tbtn, sbtn, ELM_FOCUS_UP);
- /* Maybe it's not necessary to set ELM_FOCUS_RIGHT for time_btn */
- elm_object_focus_next_object_set(tbtn, cbtn, ELM_FOCUS_RIGHT);
-
- elm_object_focus_next_object_set(cbtn, cbtn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(cbtn, cbtn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(cbtn, dbtn, ELM_FOCUS_LEFT);
- elm_object_part_content_set(m->base, SWALLOW_CLOCK_LIST, m->sublist_box);
-
- return true;
-}
-
-
-void CClockMainView::m_RefreshTimeBtnText(Evas_Object *btn, int *time)
-{
- int mode;
- char buf[BUF_SIZE];
- int ret;
-
- if (!btn || !time)
- return;
-
- mode = 0;
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return;
- }
-
- if (mode) {
- snprintf(buf, sizeof(buf), "%02d : %02d", time[TIME_HOUR], time[TIME_MINUTE]);
- } else {
- if (time[TIME_HOUR] >= 12) {
- time[TIME_HOUR] -= 12;
- time[TIME_AMPM] = 1;
- } else {
- time[TIME_AMPM] = 0;
- }
-
- snprintf(buf, sizeof(buf), "%02d : %02d : %s", time[TIME_HOUR], time[TIME_MINUTE], time[TIME_AMPM] == 1 ? PM : AM);
- }
-
- elm_object_part_text_set(btn, BTN_PART_VALUE, (const char *)buf);
-}
-
-
-void CClockMainView::m_RefreshBtnText(void)
-{
- int ret, mode;
- char buf[BUF_SIZE];
-
- if (m->date_btn == m->cur_btn) {
- snprintf(buf, sizeof(buf), "%02d / %02d / %04d", m->date[DATE_MONTH], m->date[DATE_DAY], m->date[DATE_YEAR]);
- elm_object_part_text_set(m->cur_btn, BTN_PART_VALUE, (const char *)buf);
- } else if (m->switch_btn == m->cur_btn) {
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &m->mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return;
- }
-
- if (m->mode)
- elm_object_part_text_set(m->cur_btn, BTN_PART_VALUE, ON);
- else
- elm_object_part_text_set(m->cur_btn, BTN_PART_VALUE, OFF);
-
- utils_get_time_value(m->time);
-
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return;
- }
-
- if (mode)
- snprintf(buf, sizeof(buf), "%02d : %02d", m->time[TIME_HOUR], m->time[TIME_MINUTE]);
- else
- snprintf(buf, sizeof(buf), "%02d : %02d : %s", m->time[TIME_HOUR], m->time[TIME_MINUTE], m->time[TIME_AMPM] == 1 ? PM : AM);
-
- elm_object_part_text_set(m->time_btn, BTN_PART_VALUE, (const char *)buf);
- } else {
- m_RefreshTimeBtnText(m->cur_btn, m->time);
- }
-}
-
-
-void CClockMainView::t_OnShow(void)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CClockMainView::t_OnUpdate(void *data)
-{
- _DBG();
- unsigned int *date = NULL;
- int *time = NULL;
- int idx = -1;
-
- if(!data) {
- _ERR("Invlid Parameter");
- return ;
- }
-
- date = (unsigned int *) data;
-
- elm_object_focus_set(m->cur_btn, EINA_TRUE);
-
- if (date)
- for (idx = DATE_MONTH; idx < DATE_MAX; idx++)
- m->date[idx] = date[idx];
-
- if (time)
- for (idx = TIME_HOUR; idx < TIME_MAX; idx++)
- m->time[idx] = time[idx];
-
- m_RefreshBtnText();
-
- evas_object_show(m->base);
-}
-
-
-void CClockMainView::t_OnHide(void)
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CClockMainView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- ui_gadget_h ug;
- if (!data) {
- _ERR("Invalid argument");
- return false;
- }
- ug = (ui_gadget_h)data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SClockMainView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m->base = utils_add_layout(m->win))
- _COMMAND{
- elm_layout_file_set(m->base, UG_CLOCK_EDJFILE, UG_CLOCK_GRP);
- elm_object_part_text_set(m->base, TEXT_INTRO, STRINGS_INTRO);
-
- }
- _CHECK(m_AddCloseBtn())
- _CHECK(m_AddClockSublist())
-
- _WHEN_SUCCESS {
-#if 0
- evas_object_data_set(m->base, UG_CLOCK_DATA_ID, data);
-#endif
- m->ug = ug;
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{evas_object_del(m->sublist_box);}
- _CHECK_FAIL{evas_object_del(m->close_btn);}
- _CHECK_FAIL{evas_object_del(m->base);}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CClockMainView::Destroy(void)
-{
- ASSERT(m);
-
- if(m->sublist_box)
- evas_object_del(m->sublist_box);
-
- if(m->close_btn)
- evas_object_del(m->close_btn);
-
- if(m->base)
- evas_object_del(m->base);
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CClockMainView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-void CClockMainView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname NULL!");
- return;
- }
-
- switch(id) {
- case 1:
- case 2:
- case 3:
- case 4:
- ug_destroy_me(m->ug);
- break;
- }
-}
-
-
-void CClockMainView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 1:
- ug_destroy_me(m->ug);
- break;
- case 2:
- {
- m->cur_btn = obj;
-#if 0
- view_spin_control_create(m->win, m->base);
-#endif
- m->pViewMgr->PushView(CLOCK_SPINCONTROL_VIEW, NULL);
- elm_object_signal_emit(obj, SIGNAL_NAME_AFTER_CLICK, SIGNAL_SOURCE_BTN);
- }
- break;
- case 3:
- {
- m->cur_btn = obj;
-
-#if 0
- view_sublist_create(data->win, data->base);
-#endif
- m->pViewMgr->PushView(CLOCK_SUBLIST_VIEW, NULL);
-
- elm_object_signal_emit(obj, SIGNAL_NAME_AFTER_CLICK, SIGNAL_SOURCE_BTN);
- }
- break;
- case 4:
- {
- m->cur_btn = obj;
-#if 0
- view_time_spin_ctrl_create(m->win, m->base);
-#endif
- m->pViewMgr->PushView(CLOCK_TIME_SPINCONTROL_VIEW, NULL);
- elm_object_signal_emit(obj, SIGNAL_NAME_AFTER_CLICK, SIGNAL_SOURCE_BTN);
- }
- break;
- default:
- break;
- }
-}
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <AppCommon.h>
-#include "defs.h"
-#include "util.h"
-
-#include "ClockSpinControlView.h"
-
-#define ARROW_BTN_DATA_ID "arrow_btn_data_id"
-#define DATE_SPIN_DATA_ID "spin_ctrl_data"
-#define YEAR_BTN (2)
-
-#define UP_ARROW (1)
-#define DOWN_ARROW (0)
-
-static const int days[] = {
- 31,
- 28,
- 31,
- 30,
- 31,
- 30,
- 31,
- 31,
- 30,
- 31,
- 30,
- 31
-};
-
-struct SClockSpinControlView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
-
- unsigned int date[DATE_MAX];
- int entry[DATE_MAX];
-
- Eina_Array *spin_array;
- CViewMgr *pViewMgr;
-};
-
-
-Evas_Object * CClockSpinControlView::m_AddArrowBtn(Evas_Object *obj, int flag)
-{
- Evas_Object *btn;
-
- btn = utils_add_button(m->base);
- if (!btn) {
- _ERR("utils add button failed.");
- return NULL;
- }
-
- elm_object_style_set(btn, BTN_STYLE_ARROW_BTN);
-
- if (flag == UP_ARROW)
- elm_object_part_content_set(obj, UP_ARROW_SWALLOW, btn);
- else
- elm_object_part_content_set(obj, DOWN_ARROW_SWALLOW, btn);
-
- elm_object_focus_allow_set(btn, EINA_FALSE);
-
- evas_object_data_set(btn, ARROW_BTN_DATA_ID, obj);
- evas_object_raise(btn);
- evas_object_repeat_events_set(btn, EINA_FALSE);
-
- return btn;
-}
-
-
-bool CClockSpinControlView::m_AddDateSpin(void)
-{
- Evas_Object *btn, *uparrow, *downarrow;
- char buf[BUF_SIZE];
- int idx;
-
- m->spin_array = eina_array_new(1);
- if (!m->spin_array) {
- _ERR("new eina array failed.");
- return false;
- }
-
- for (idx = DATE_MONTH; idx < DATE_MAX; idx++) {
- btn = utils_add_button(m->base);
- if (!btn) {
- _ERR("add spin control button failed.");
- return false;
- }
-
- elm_object_style_set(btn, BTN_STYLE_SPIN_CTRL_BTN);
- if (idx == YEAR_BTN)
- elm_object_style_set(btn, BTN_STYLE_SPIN_CTRL_YEAR_BTN);
-
- snprintf(buf, sizeof(buf), "spin_ctrl_%d_swallow", idx + 1);
- elm_object_part_content_set(m->base, (const char *)buf, btn);
-
- eina_array_push(m->spin_array, btn);
-
- uparrow = m_AddArrowBtn( btn, UP_ARROW);
- if (!uparrow) {
- _ERR("add up arrow button failed.");
- evas_object_del(btn);
- return false;
- }
- //evas_object_smart_callback_add(btn, "clicked", _arrow_btn_clicked_cb, data);
- Connect(uparrow, 1, TYPE_CLICKED);
-
- downarrow = m_AddArrowBtn( btn, DOWN_ARROW);
- if (!downarrow) {
- _ERR("add down arrow button failed.");
- evas_object_del(btn);
- evas_object_del(uparrow);
- return false;
- }
- Connect(downarrow, 2, TYPE_CLICKED);
- }
-
- elm_object_focus_set((Evas_Object *) eina_array_data_get(m->spin_array, 0), EINA_TRUE);
-
- return true;
-}
-
-
-void CClockSpinControlView::m_InitDateSpin(void)
-{
- Evas_Object *spin;
- char buf[BUF_SIZE];
-
- utils_get_date_value(m->date);
-
- spin = (Evas_Object *) eina_array_data_get(m->spin_array, 0);
- if (!spin) {
- _ERR("month button is null.");
- return;
- }
-
- snprintf(buf, sizeof(buf), "%02d", m->date[DATE_MONTH]);
- elm_object_text_set(spin, buf);
-
- spin = (Evas_Object *) eina_array_data_get(m->spin_array, 1);
- if (!spin) {
- _ERR("month button is null.");
- return;
- }
-
- snprintf(buf, sizeof(buf), "%02d", m->date[DATE_DAY]);
- elm_object_text_set(spin, buf);
-
- spin = (Evas_Object *) eina_array_data_get(m->spin_array, 2);
- if (!spin) {
- _ERR("month button is null.");
- return;
- }
-
- m->date[DATE_YEAR] = m->date[DATE_YEAR] < 2000 ? 2000 : m->date[DATE_YEAR];
- snprintf(buf, sizeof(buf), "%04d", m->date[DATE_YEAR]);
- elm_object_text_set(spin, buf);
-
- int idx;
-
- for (idx = DATE_MONTH; idx < DATE_MAX; idx++) {
- spin = (Evas_Object *) eina_array_data_get(m->spin_array, idx);
- if (!spin) {
- _ERR("there is no button. idx: %d", idx);
- return;
- }
-
- elm_object_focus_next_object_set(spin, spin, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(spin, spin, ELM_FOCUS_DOWN);
-
- if (idx == DATE_MONTH) {
- elm_object_focus_next_object_set(spin, (Evas_Object *) eina_array_data_get(m->spin_array, idx+1), ELM_FOCUS_NEXT);
- elm_object_focus_next_object_set(spin, spin, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(spin, (Evas_Object *) eina_array_data_get(m->spin_array, idx + 1), ELM_FOCUS_RIGHT);
- } else if (idx == DATE_YEAR) {
- elm_object_focus_next_object_set(spin, spin, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(spin, (Evas_Object *) eina_array_data_get(m->spin_array, idx - 1), ELM_FOCUS_LEFT);
- } else {
- elm_object_focus_next_object_set(spin, (Evas_Object *) eina_array_data_get(m->spin_array, idx + 1), ELM_FOCUS_NEXT);
- elm_object_focus_next_object_set(spin, (Evas_Object *) eina_array_data_get(m->spin_array, idx + 1), ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(spin, (Evas_Object *) eina_array_data_get(m->spin_array, idx - 1), ELM_FOCUS_LEFT);
- }
- }
-}
-
-
-void CClockSpinControlView::m_UpdateDateValue(Evas_Object *spin, int spin_idx)
-{
- char buf[BUF_SIZE];
-
- if (!spin)
- return;
- if (spin_idx < DATE_MONTH || spin_idx >= DATE_MAX)
- return;
-
- if (spin_idx == DATE_MONTH) {
- if (m->date[spin_idx] > 12)
- m->date[spin_idx] = 1;
- if (m->date[spin_idx] <= 0)
- m->date[spin_idx] = 12;
-
- snprintf(buf, sizeof(buf), "%02d", m->date[spin_idx]);
- } else if (spin_idx == DATE_DAY) {
- if ((int)m->date[spin_idx] > days[m->date[DATE_MONTH] - 1])
- m->date[spin_idx] = 1;
- if (m->date[spin_idx] <= 0)
- m->date[spin_idx] = days[m->date[DATE_MONTH] - 1];
-
- snprintf(buf, sizeof(buf), "%02d", m->date[spin_idx]);
- } else {
- if (m->date[spin_idx] > 2037)
- m->date[spin_idx] = 2000;
- if (m->date[spin_idx] < 2000)
- m->date[spin_idx] = 2037;
-
- snprintf(buf, sizeof(buf), "%04d", m->date[spin_idx]);
- }
-
- elm_object_text_set(spin, buf);
-}
-
-
-bool CClockSpinControlView::m_AddSpin(void)
-{
- if(!m_AddDateSpin()) {
- _ERR("add spin control buttons failed.");
- return false;
- }
-
- m_InitDateSpin();
-
- Evas_Object *spin;
-
- for (int idx = DATE_MONTH; idx < DATE_MAX; idx++) {
- spin = (Evas_Object *) eina_array_data_get(m->spin_array, idx);
- if (!spin) {
- _ERR("eina m->spin_array data get failed. spin index: %d", idx);
- return false;
- }
-
- //evas_object_smart_callback_add(spin, CLICKED, _date_spin_clicked_cb, data);
- //evas_object_event_callback_add(spin, EVAS_CALLBACK_KEY_DOWN, _date_spin_keydown_cb, data);
- Connect(spin, 100+idx, TYPE_CLICKED | TYPE_KEY_DOWN | TYPE_KEY_UP);
-#if 0
- evas_object_event_callback_add(spin, EVAS_CALLBACK_MOUSE_IN, _date_spin_mousein_cb, NULL);
- evas_object_event_callback_add(spin, EVAS_CALLBACK_MOUSE_OUT, _date_spin_mouseout_cb, NULL);
-#endif
- }
-
- return true;
-}
-
-
-void CClockSpinControlView::t_OnShow(void)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CClockSpinControlView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-}
-
-
-void CClockSpinControlView::t_OnHide(void)
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CClockSpinControlView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- ui_gadget_h ug;
- if (!data) {
- _ERR("Invalid argument");
- return false;
- }
- ug = (ui_gadget_h)data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SClockSpinControlView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m->base = utils_add_layout(m->win))
- _CHECK(m_AddSpin())
-
- _WHEN_SUCCESS {
- elm_layout_file_set(m->base, UG_CLOCK_EDJFILE, SPIN_CTRL_GRP);
-#if 0
- evas_object_data_set(m->base, DATE_SPIN_DATA_ID, data);
-#endif
- m->ug = ug;
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{if(m->spin_array) eina_array_free(m->spin_array);}
- _CHECK_FAIL{if(m->base) evas_object_del(m->base);}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CClockSpinControlView::Destroy(void)
-{
- ASSERT(m);
-
- if(m->spin_array)
- eina_array_free(m->spin_array);
-
- if(m->base)
- evas_object_del(m->base);
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CClockSpinControlView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-void CClockSpinControlView::OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 100:
- case 101:
- case 102:
- {
- Evas_Object *spin;
- int idx = -1;
-
- for (int i = DATE_MONTH; i < DATE_MAX; i++) {
- spin = (Evas_Object *) eina_array_data_get(m->spin_array, i);
- if (!spin)
- return;
-
- if (obj == spin) {
- idx = i;
- break;
- }
- }
-
- if (idx == -1) {
- _ERR("can't get the right spin.");
- return;
- }
- if (!strncmp(ev->keyname, KEY_UP, strlen(ev->keyname))) {
- m->date[idx]++;
- m_UpdateDateValue(obj, idx);
- }
- }
- break;
- default:
- break;
- }
-}
-
-
-void CClockSpinControlView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 100:
- case 101:
- case 102:
- {
- int idx = -1;
- Evas_Object *spin;
- char buf[BUF_SIZE];
-
- for (int i = DATE_MONTH; i < DATE_MAX; i++) {
- spin = (Evas_Object *) eina_array_data_get(m->spin_array, i);
- if (!spin)
- return;
-
- if (obj == spin) {
- idx = i;
- break;
- }
- }
-
- if (idx == -1) {
- _ERR("can't get the right spin.");
- return;
- }
-
- if (!strncmp(ev->keyname, KEY_DOWN, strlen(ev->keyname))) {
- m->date[idx]--;
- m_UpdateDateValue(obj, idx);
- } else if (!strncmp(ev->keyname, KEY_0, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_1, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_2, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_3, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_4, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_5, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_6, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_7, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_8, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_9, strlen(ev->keyname))) {
- if (idx != DATE_YEAR) {
- if (m->entry[idx] == 0) {
- m->entry[idx]++;
- m->date[idx] = atoi(ev->keyname);
- } else {
- m->entry[idx]++;
- m->date[idx] = m->date[idx] * 10 + atoi(ev->keyname);
- m->entry[idx] = 0;
- elm_object_focus_next(obj, ELM_FOCUS_NEXT);
- }
- } else {
- if (m->entry[idx] == 0) {
- m->entry[idx]++;
- m->date[idx] = atoi(ev->keyname);
- snprintf(buf, sizeof(buf), "%04d", m->date[idx]);
- elm_object_text_set(obj, buf);
- return;
- } else if (m->entry[idx] == 3) {
- m->date[idx] = m->date[idx] * 10 + atoi(ev->keyname);
- m->entry[idx] = 0;
- } else {
- m->entry[idx]++;
- m->date[idx] = m->date[idx] * 10 + atoi(ev->keyname);
- snprintf(buf, sizeof(buf), "%04d", m->date[idx]);
- elm_object_text_set(obj, buf);
- return;
- }
- }
- m_UpdateDateValue(obj, idx);
- } else if (!strncmp(ev->keyname, KEY_RIGHT, strlen(ev->keyname)) || !strncmp(ev->keyname, KEY_LEFT, strlen(ev->keyname))) {
- m->entry[idx] = 0;
- } else if (!strncmp(ev->keyname, KEY_BACK, strlen(ev->keyname)) || !strncmp(ev->keyname, KEY_BACK_REMOTE, strlen(ev->keyname))) {
- Destroy();
- }
- }
- break;
- default:
- break;
- }
-}
-
-
-void CClockSpinControlView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 1:
- case 2:
- {
- Evas_Object *cur_btn, *btn, *up_btn;
- int idx;
-
- cur_btn = (Evas_Object *) evas_object_data_get(obj, ARROW_BTN_DATA_ID);
- if (!cur_btn) {
- _ERR("evas object data get failed. ID: %s", ARROW_BTN_DATA_ID);
- return;
- }
-
- up_btn = elm_object_part_content_get(cur_btn, UP_ARROW_SWALLOW);
- if (!up_btn) {
- _ERR("part %s content get failed.", UP_ARROW_SWALLOW);
- return;
- }
-
- idx = 0;
- for (int i = DATE_DAY; i < DATE_MAX; i++) {
- btn = (Evas_Object *) eina_array_data_get(m->spin_array, i);
- if (!btn) {
- _ERR("eina array data get failed. button index: %d", i);
- return;
- }
-
- if (cur_btn == btn) {
- idx = i;
- break;
- }
- }
-
- if (obj == up_btn)
- m->date[idx]++;
- else
- m->date[idx]--;
-
- m_UpdateDateValue(cur_btn, idx);
- }
- break;
- case 100:
- case 101:
- case 102:
- {
- utils_set_date_value(m->date);
-#if 0
- view_ug_clock_refresh(m->ug_base, m->date, NULL);
-#endif
- m->pViewMgr->UpdateView(CLOCK_MAIN_VIEW, m->date);
- Destroy();
- }
- break;
- default:
- break;
- }
-}
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <AppCommon.h>
-#include "defs.h"
-#include "util.h"
-
-#include "ClockSublistView.h"
-
-#define SUBLIST_BTN_NUM 2
-#define SUBLIST_DATA_ID "sublist_data"
-
-#define BOX_HPADDING 0
-#define BOX_VPADDING 2
-
-#define CLICKED "clicked"
-
-struct SClockSublistView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *box;
-
- unsigned int mode;
-
- Eina_Array *array;
- CViewMgr *pViewMgr;
-};
-
-bool CClockSublistView::m_AddSublist(void)
-{
- m->box = utils_add_box(m->base);
- if (!m->box) {
- _ERR("add sublist m->box failed.");
- return false;
- }
-
- if(!m_AddSublistBtns()) {
- _ERR("add sublist buttons failed.");
- evas_object_del(m->box);
- m->box = NULL;
- return false;
- }
-
- m_SetSublistInitValue();
-
- return true;
-}
-
-
-bool CClockSublistView::m_AddSublistBtns(void)
-{
- Evas_Object *btn;
-
- elm_box_padding_set(m->box, BOX_HPADDING, BOX_VPADDING);
-
- m->array = eina_array_new(1);
- if (!m->array) {
- _ERR("new array for sublist buttons failed.");
- return false;
- }
-
- for (int idx = 0; idx < SUBLIST_BTN_NUM; idx++) {
- btn = utils_add_button(m->base);
- if (!btn) {
- _ERR("add button failed.");
- eina_array_free(m->array);
- return false;
- }
-
- //evas_object_smart_callback_add(btn, CLICKED, _sublist_btn_clicked_cb, data);
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _key_down_on_sublist_btn_cb, data);
- Connect(btn, 100+idx, TYPE_CLICKED | TYPE_KEY_DOWN | TYPE_KEY_UP);
-#if 0
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN, _sublist_btn_mouse_in_cb, NULL);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT, _sublist_btn_mouse_out_cb, NULL);
-#endif
-
- elm_object_style_set(btn, BTN_STYLE_SUBLIST_BTN);
-
- elm_box_pack_end(m->box, btn);
- eina_array_push(m->array, btn);
- }
-
- elm_object_part_content_set(m->base, SWALLOW_SUBLIST, m->box);
-
- return true;
-}
-
-
-void CClockSublistView::m_SetSublistInitValue(void)
-{
- Evas_Object *on_btn, *off_btn;
- int mode = 0;
- int ret;
-
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return;
- }
-
- on_btn = (Evas_Object *) eina_array_data_get(m->array, 0);
- off_btn = (Evas_Object *) eina_array_data_get(m->array, 1);
- if (!on_btn || !off_btn) {
- _ERR("there is no button in sublist array.");
- return;
- }
-
- elm_object_focus_set(on_btn, EINA_TRUE);
-
- elm_object_text_set(on_btn, ON);
- elm_object_text_set(off_btn, OFF);
-
- if (mode) {
- elm_object_signal_emit(on_btn, SIG_SRC_FOC_SHOW_ICON, SIG_NAME_SUBLIST);
- elm_object_signal_emit(off_btn, SIG_SRC_UNFOC_HIDE_ICON, SIG_NAME_SUBLIST);
- } else {
- elm_object_signal_emit(off_btn, SIG_SRC_UNFOC_SHOW_ICON, SIG_NAME_SUBLIST);
- elm_object_signal_emit(on_btn, SIG_SRC_FOC_HIDE_ICON, SIG_NAME_SUBLIST);
- }
-
- elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(on_btn, off_btn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_RIGHT);
-
- elm_object_focus_next_object_set(off_btn, on_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(off_btn, off_btn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(off_btn, off_btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(off_btn, off_btn, ELM_FOCUS_RIGHT);
-}
-
-
-void CClockSublistView::t_OnShow(void)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CClockSublistView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-}
-
-
-void CClockSublistView::t_OnHide(void)
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CClockSublistView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- ui_gadget_h ug;
- if (!data) {
- _ERR("Invalid argument");
- return false;
- }
- ug = (ui_gadget_h)data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SClockSublistView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m->base = utils_add_layout(m->win))
- _CHECK(m_AddSublist())
- _COMMAND{
- elm_layout_file_set(m->base, UG_CLOCK_EDJFILE, SUBLIST_GRP);
- }
-
- _WHEN_SUCCESS {
-#if 0
- evas_object_data_set(m->base, SUBLIST_DATA_ID, data);
-#endif
- m->ug = ug;
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{if(m->array) eina_array_free(m->array); if(m->box) evas_object_del(m->box);}
- _CHECK_FAIL{evas_object_del(m->base);}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CClockSublistView::Destroy(void)
-{
- ASSERT(m);
-
- if(m->array)
- eina_array_free(m->array);
-
- if(m->box)
- evas_object_del(m->box);
-
- if(m->base)
- evas_object_del(m->base);
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CClockSublistView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-void CClockSublistView::OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 100:
- case 101:
- {
- Evas_Object *on_btn = NULL;
- int mode, ret = -1;
- on_btn = (Evas_Object *) eina_array_data_get(m->array, 0);
-
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return;
- }
-
- if (!strncmp(ev->keyname, KEY_UP, strlen(ev->keyname))) {
-
- if (obj == on_btn)
- return;
-
- elm_object_focus_set(on_btn, EINA_TRUE);
-
- if (mode) {
- elm_object_signal_emit(on_btn, SIG_SRC_FOC_SHOW_ICON, SIG_NAME_SUBLIST);
- elm_object_signal_emit(obj, SIG_SRC_UNFOC_HIDE_ICON, SIG_NAME_SUBLIST);
- } else {
- elm_object_signal_emit(obj, SIG_SRC_UNFOC_SHOW_ICON, SIG_NAME_SUBLIST);
- elm_object_signal_emit(on_btn, SIG_SRC_FOC_HIDE_ICON, SIG_NAME_SUBLIST);
- }
- }
- }
- break;
- }
-}
-
-
-void CClockSublistView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 100:
- case 101:
- {
- Evas_Object *on_btn, *off_btn;
- Eina_Array *array = NULL;
- int mode;
- int ret;
-
- on_btn = (Evas_Object *) eina_array_data_get(array, 0);
- off_btn = (Evas_Object *) eina_array_data_get(array, 1);
- if (!on_btn || !off_btn) {
- _ERR("ON button or OFF button is null.");
- return;
- }
-
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return;
- }
-
- if (!strcmp(ev->keyname, KEY_DOWN)) {
- if (obj != on_btn)
- return;
-
- elm_object_focus_set(off_btn, EINA_TRUE);
-
- if (mode) {
- elm_object_signal_emit(obj, SIG_SRC_UNFOC_SHOW_ICON, SIG_NAME_SUBLIST);
- elm_object_signal_emit(off_btn, SIG_SRC_FOC_HIDE_ICON, SIG_NAME_SUBLIST);
- } else {
- elm_object_signal_emit(obj, SIG_SRC_UNFOC_HIDE_ICON, SIG_NAME_SUBLIST);
- elm_object_signal_emit(off_btn, SIG_SRC_FOC_SHOW_ICON, SIG_NAME_SUBLIST);
- }
- } else if (!strncmp(ev->keyname, KEY_BACK, strlen(ev->keyname)) || !strncmp(ev->keyname, KEY_BACK_REMOTE, strlen(ev->keyname))) {
- Destroy();
- }
- }
- break;
- }
-}
-
-
-void CClockSublistView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 100:
- case 101:
- {
- Evas_Object *on_btn, *off_btn;
- int ret;
-
- if (!m->array)
- return;
-
- on_btn = (Evas_Object *) eina_array_data_get(m->array, 0);
- off_btn = (Evas_Object *) eina_array_data_get(m->array, 1);
- if (!on_btn || !off_btn) {
- _ERR("ON button or OFF button is null.");
- return;
- }
-
- if (obj == on_btn)
- ret = utils_set_vconf_value(VCONF_KEY_24HOUR_MODE, 1);
- else
- ret = utils_set_vconf_value(VCONF_KEY_24HOUR_MODE, 0);
-
- if (ret != 0) {
- _ERR("set 24hour mode failed.");
- return;
- }
-
-#if 0
- view_ug_clock_refresh(data->ug_base, NULL, NULL);
-#endif
- m->pViewMgr->UpdateView(CLOCK_MAIN_VIEW, NULL);
-
- Destroy();
- }
- break;
- }
-}
+++ /dev/null
-#include <ui-gadget-module.h>
-#include <AppCommon.h>
-#include "defs.h"
-#include "util.h"
-
-#include "ClockTimeSpinControlView.h"
-
-#define ARROW_BTN_DATA_ID "arrow_btn_data_id"
-#define TIME_SPIN_DATA_ID "time_spin_ctrl_data"
-
-#define BOX_HPADDING 2
-#define BOX_VPADDING 122
-
-#define UP_ARROW (1)
-#define DOWN_ARROW (0)
-
-struct SClockTimeSpinControlView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *ug_base;
- Evas_Object *spin_box;
-
- int time[TIME_MAX];
- int entry[TIME_MAX];
-
- Eina_Array *spin_array;
-
- CViewMgr *pViewMgr;
-};
-
-
-Evas_Object * CClockTimeSpinControlView::m_AddArrowBtn(Evas_Object *obj, int flag)
-{
- Evas_Object *btn;
-
- btn = utils_add_button(m->base);
- if (!btn) {
- _ERR("utils add button failed.");
- return NULL;
- }
-
- elm_object_style_set(btn, BTN_STYLE_ARROW_BTN);
-
- if (flag == UP_ARROW)
- elm_object_part_content_set(obj, UP_ARROW_SWALLOW, btn);
- else
- elm_object_part_content_set(obj, DOWN_ARROW_SWALLOW, btn);
-
- elm_object_focus_allow_set(btn, EINA_FALSE);
-
- evas_object_data_set(btn, ARROW_BTN_DATA_ID, obj);
- evas_object_raise(btn);
- evas_object_repeat_events_set(btn, EINA_FALSE);
-
- return btn;
-}
-
-
-void CClockTimeSpinControlView::m_UpdateTimeValue(Evas_Object *btn, int btn_idx)
-{
- int mode;
- char buf[BUF_SIZE];
- int ret;
-
- if (!btn)
- return;
- if (btn_idx < TIME_HOUR || btn_idx >= TIME_MAX)
- return;
-
- mode = 0;
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return;
- }
-
- if (btn_idx == TIME_HOUR) {
- if (mode) {
- if (m->time[btn_idx] > 23)
- m->time[btn_idx] = 0;
- if (m->time[btn_idx] < 0)
- m->time[btn_idx] = 23;
- } else {
- if (m->time[btn_idx] > 11)
- m->time[btn_idx] = 0;
- if (m->time[btn_idx] < 0)
- m->time[btn_idx] = 11;
- }
-
- snprintf(buf, sizeof(buf), "%02d", m->time[btn_idx]);
- } else if (btn_idx == TIME_MINUTE) {
- if (m->time[btn_idx] > 59)
- m->time[btn_idx] = 0;
- if (m->time[btn_idx] < 0)
- m->time[btn_idx] = 59;
-
- snprintf(buf, sizeof(buf), "%02d", m->time[btn_idx]);
- } else {
- if (m->time[btn_idx])
- snprintf(buf, sizeof(buf), "%s", PM);
- else
- snprintf(buf, sizeof(buf), "%s", AM);
- }
-
- elm_object_text_set(btn, buf);
-}
-
-
-bool CClockTimeSpinControlView::m_AddTimeSpinWithAMPM(void)
-{
- Evas_Object *btn;
- Evas_Object *uparrow, *downarrow;
- char buf[BUF_SIZE];
-
- elm_box_horizontal_set(m->spin_box, EINA_TRUE);
- elm_box_padding_set(m->spin_box, BOX_HPADDING, BOX_VPADDING);
-
- m->spin_array = eina_array_new(1);
- if (!m->spin_array) {
- _ERR("new eina m->spin_array failed.");
- return false;
- }
-
- for (int idx = TIME_HOUR; idx < TIME_AMPM; idx++) {
- btn = utils_add_button(m->base);
- if (!btn) {
- _ERR("add time spin control button failed.");
- return false;
- }
-
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _time_spin_keydown_cb, data);
- //evas_object_smart_callback_add(btn, "clicked", _time_spin_click_cb, data);
- Connect(btn, 100+idx, TYPE_CLICKED | TYPE_KEY_DOWN);
-#if 0
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN, _time_spin_mousein_cb, NULL);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT, _time_spin_mouseout_cb, NULL);
-#endif
- elm_object_style_set(btn, BTN_STYLE_TIME_SPIN_BTN);
-
- snprintf(buf, sizeof(buf), "%02d", m->time[idx]);
- elm_object_text_set(btn, buf);
-
- eina_array_push(m->spin_array, btn);
- elm_box_pack_end(m->spin_box, btn);
-
- uparrow = m_AddArrowBtn(btn, UP_ARROW);
- if (!uparrow) {
- _ERR("add up arrow button failed.");
- evas_object_del(btn);
- return false;
- }
-
- downarrow = m_AddArrowBtn(btn, DOWN_ARROW);
- if (!downarrow) {
- _ERR("add down arrow button failed.");
- evas_object_del(btn);
- evas_object_del(uparrow);
- return false;
- }
- }
-
- elm_object_focus_set((Evas_Object *) eina_array_data_get(m->spin_array, TIME_HOUR), EINA_TRUE);
- elm_object_part_content_set(m->base, SWALLOW_TIME_SPIN_2, m->spin_box);
-
- return true;
-}
-
-
-bool CClockTimeSpinControlView::m_AddTimeSpinWithoutAMPM(void)
-{
- Evas_Object *btn;
- Evas_Object *uparrow, *downarrow;
- char buf[BUF_SIZE];
-
- elm_box_horizontal_set(m->spin_box, EINA_TRUE);
- elm_box_padding_set(m->spin_box, BOX_HPADDING, BOX_VPADDING);
-
- m->spin_array = eina_array_new(1);
- if (!m->spin_array) {
- _ERR("new eina m->spin_array failed.");
- return false;
- }
-
- for (int idx = TIME_HOUR; idx < TIME_AMPM; idx++) {
- btn = utils_add_button(m->base);
- if (!btn) {
- _ERR("add time spin control button failed.");
- return false;
- }
-
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _time_spin_keydown_cb, data);
- //evas_object_smart_callback_add(btn, "clicked", _time_spin_click_cb, data);
- Connect(btn, 100+idx, TYPE_CLICKED | TYPE_KEY_DOWN);
-#if 0
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN, _time_spin_mousein_cb, NULL);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT, _time_spin_mouseout_cb, NULL);
-#endif
-
- elm_object_style_set(btn, BTN_STYLE_TIME_SPIN_BTN);
-
- snprintf(buf, sizeof(buf), "%02d", m->time[idx]);
- elm_object_text_set(btn, buf);
-
- eina_array_push(m->spin_array, btn);
-
- elm_box_pack_end(m->spin_box, btn);
-
- uparrow = m_AddArrowBtn(btn, UP_ARROW);
- if (!uparrow) {
- _ERR("add up arrow button failed.");
- evas_object_del(btn);
- return false;
- }
- //evas_object_smart_callback_add(btn, "clicked", _arrow_btn_clicked_cb, data);
- Connect(uparrow, 1, TYPE_CLICKED);
-
- downarrow = m_AddArrowBtn(btn, DOWN_ARROW);
- if (!downarrow) {
- _ERR("add down arrow button failed.");
- evas_object_del(btn);
- evas_object_del(uparrow);
- return false;
- }
- Connect(downarrow, 2, TYPE_CLICKED);
- }
-
- elm_object_focus_set((Evas_Object *) eina_array_data_get(m->spin_array, TIME_HOUR), EINA_TRUE);
-
- elm_object_part_content_set( m->base, SWALLOW_TIME_SPIN_2, m->spin_box);
-
- return true;
-}
-
-
-bool CClockTimeSpinControlView::m_AddTimeSpinBtns(void)
-{
- int mode;
- int ret;
-
- utils_get_time_value(m->time);
-
- mode = 0;
- ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
- if (ret != 0) {
- _ERR("vconf get value failed.");
- return false;
- }
-
- if (mode) {
- ret = m_AddTimeSpinWithoutAMPM();
- if (ret != 0) {
- _ERR("add buttons without ampm failed.");
- return false;
- }
- } else {
- ret = m_AddTimeSpinWithAMPM();
- if (ret != 0) {
- _ERR("add buttons with ampm failed.");
- return false;
- }
- }
-
- return true;
-}
-
-
-bool CClockTimeSpinControlView::m_AddTimeSpin(void)
-{
- Evas_Object *btn;
- unsigned int count;
- int idx;
-
- m->spin_box = utils_add_box(m->base);
- if (!m->spin_box) {
- _ERR("add time spin control box failed.");
- return false;
- }
-
- if(!m_AddTimeSpinBtns()) {
- _ERR("add time spin control buttons failed.");
- return false;
- }
-
-
- count = eina_array_count(m->spin_array);
-
- for (idx = TIME_HOUR; idx < (int)count; idx++) {
- btn = (Evas_Object *) eina_array_data_get(m->spin_array, idx);
- if (!btn) {
- _ERR("there is no button. idx: %d", idx);
- return false;
- }
-
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
-
- if (idx == TIME_HOUR) {
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(btn, (Evas_Object *) eina_array_data_get(m->spin_array, idx + 1),
- ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(btn, (Evas_Object *) eina_array_data_get(m->spin_array, idx + 1),
- ELM_FOCUS_NEXT);
- } else if (idx == (int)count - 1) {
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(btn, (Evas_Object *) eina_array_data_get(m->spin_array, idx - 1), ELM_FOCUS_LEFT);
- } else {
- elm_object_focus_next_object_set(btn, (Evas_Object *) eina_array_data_get(m->spin_array, idx + 1), ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(btn, (Evas_Object *) eina_array_data_get(m->spin_array, idx + 1), ELM_FOCUS_NEXT);
- elm_object_focus_next_object_set(btn, (Evas_Object *) eina_array_data_get(m->spin_array, idx - 1), ELM_FOCUS_LEFT);
- }
- }
- return true;
-}
-
-
-void CClockTimeSpinControlView::t_OnShow(void)
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CClockTimeSpinControlView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-}
-
-
-void CClockTimeSpinControlView::t_OnHide(void)
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-bool CClockTimeSpinControlView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- bool ret = false;
-
- ui_gadget_h ug;
- if (!data) {
- _ERR("Invalid argument");
- return false;
- }
- ug = (ui_gadget_h)data;
-
- _CREATE_BEGIN{
- _CHECK(m = new SClockTimeSpinControlView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m->base = utils_add_layout(m->win))
- _COMMAND {
- int onoff = 0;
- ret = true;
- if(utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &onoff) != 0) {
- _ERR("vconf get value failed.");
- ret = false;
- }
-
- if (onoff)
- elm_object_signal_emit(m->base, SIGNAL_NAME_TIME_SPIN_2, SIGNAL_SOURCE_TIME_SPIN);
- else
- elm_object_signal_emit(m->base, SIGNAL_NAME_TIME_SPIN_1, SIGNAL_SOURCE_TIME_SPIN);
-
- }
- _CHECK(ret)
- _CHECK(m_AddTimeSpin())
-
- _WHEN_SUCCESS {
- elm_layout_file_set(m->base, UG_CLOCK_EDJFILE, TIME_SPIN_CTRL_GRP);
-#if 0
- evas_object_data_set(m->base, TIME_SPIN_DATA_ID, data);
-#endif
- m->ug = ug;
- m->pViewMgr = CViewMgr::GetInstance();
- }
-
- _CHECK_FAIL{if(m->spin_array) eina_array_free(m->spin_array); if(m->spin_box) evas_object_del(m->spin_box);}
- _CHECK_FAIL{/* ret */}
- _CHECK_FAIL{if(m->base) evas_object_del(m->base);}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CClockTimeSpinControlView::Destroy(void)
-{
- ASSERT(m);
-
- if(m->spin_array)
- eina_array_free(m->spin_array);
-
- if(m->spin_box)
- evas_object_del(m->spin_box);
-
- if(m->base)
- evas_object_del(m->base);
-
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CClockTimeSpinControlView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-void CClockTimeSpinControlView::OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 100:
- case 101:
- {
- Evas_Object *hour_btn, *minute_btn;
-
- hour_btn = (Evas_Object *) eina_array_data_get(m->spin_array, TIME_HOUR);
- minute_btn = (Evas_Object *) eina_array_data_get(m->spin_array, TIME_MINUTE);
- if (!hour_btn || !minute_btn) {
- _ERR("eina m->spin_array data get failed.");
- return;
- }
-
- if (!strncmp(ev->keyname, KEY_UP, strlen(ev->keyname))) {
- if (obj == hour_btn) {
- m->time[TIME_HOUR]++;
- m_UpdateTimeValue(obj, TIME_HOUR);
- } else if (obj == minute_btn) {
- m->time[TIME_MINUTE]++;
- m_UpdateTimeValue(obj, TIME_MINUTE);
- } else {
- if (m->time[TIME_AMPM] == 0)
- m->time[TIME_AMPM] = 1;
- else
- m->time[TIME_AMPM] = 0;
- m_UpdateTimeValue(obj, TIME_AMPM);
- }
- }
- }
- break;
- default:
- break;
- }
-}
-
-
-void CClockTimeSpinControlView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 100:
- case 101:
- {
- Evas_Object *hour_btn, *minute_btn;
-
- hour_btn = (Evas_Object *) eina_array_data_get(m->spin_array, TIME_HOUR);
- minute_btn = (Evas_Object *) eina_array_data_get(m->spin_array, TIME_MINUTE);
- if (!hour_btn || !minute_btn) {
- _ERR("eina m->spin_array data get failed.");
- return;
- }
-
- if (!strncmp(ev->keyname, KEY_DOWN, strlen(ev->keyname))) {
- if (obj == hour_btn) {
- m->time[TIME_HOUR]--;
- m_UpdateTimeValue(obj, TIME_HOUR);
- } else if (obj == minute_btn) {
- m->time[TIME_MINUTE]--;
- m_UpdateTimeValue(obj, TIME_MINUTE);
- } else {
- if (m->time[TIME_AMPM] == 0)
- m->time[TIME_AMPM] = 1;
- else
- m->time[TIME_AMPM] = 0;
- m_UpdateTimeValue(obj, TIME_AMPM);
- }
- } else if (!strncmp(ev->keyname, KEY_0, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_1, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_2, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_3, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_4, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_5, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_6, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_7, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_8, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_9, strlen(ev->keyname))) {
- if (obj == hour_btn) {
- if (m->entry[TIME_HOUR] == 0) {
- m->entry[TIME_HOUR]++;
- m->time[TIME_HOUR] = atoi(ev->keyname);
- } else {
- m->entry[TIME_HOUR]++;
- m->time[TIME_HOUR] =
- (m->time[TIME_HOUR] * 10) + atoi(ev->keyname);
- m->entry[TIME_HOUR] = 0;
-
- elm_object_focus_next(obj, ELM_FOCUS_NEXT);
- }
- m_UpdateTimeValue(obj, TIME_HOUR);
- } else if (obj == minute_btn) {
- if (m->entry[TIME_MINUTE] == 0) {
- m->entry[TIME_MINUTE]++;
- m->time[TIME_MINUTE] = atoi(ev->keyname);
- } else {
- m->entry[TIME_MINUTE]++;
- m->time[TIME_MINUTE] =
- (m->time[TIME_MINUTE] * 10) + atoi(ev->keyname);
- m->entry[TIME_MINUTE] = 0;
-
- elm_object_focus_next(obj, ELM_FOCUS_NEXT);
- }
- m_UpdateTimeValue(obj, TIME_MINUTE);
- } else {
- return;
- }
- } else if (!strncmp(ev->keyname, KEY_LEFT, strlen(ev->keyname)) ||
- !strncmp(ev->keyname, KEY_RIGHT, strlen(ev->keyname))) {
- if (obj == hour_btn)
- m->entry[TIME_HOUR] = 0;
- else if (obj == minute_btn)
- m->entry[TIME_MINUTE] = 0;
- else
- return;
- } else if (!strncmp(ev->keyname, KEY_BACK, strlen(ev->keyname)) || !strncmp(ev->keyname, KEY_BACK_REMOTE, strlen(ev->keyname))) {
- Destroy();
- }
- }
- break;
- default:
- break;
- }
-}
-
-
-void CClockTimeSpinControlView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 1:
- case 2:
- {
- Evas_Object *cur_btn, *btn, *up;
- int flag, idx = -1;
-
- cur_btn = (Evas_Object *) evas_object_data_get(obj, ARROW_BTN_DATA_ID);
- if (!cur_btn)
- return;
-
- up = elm_object_part_content_get(cur_btn, UP_ARROW_SWALLOW);
- if (!up)
- return;
-
- if (obj == up)
- flag = 1;
- else
- flag = 0;
-
- for (int i = TIME_HOUR; i < TIME_MAX; i++) {
- btn = (Evas_Object *) eina_array_data_get(m->spin_array, i);
-
- if (cur_btn == btn) {
- idx = i;
- break;
- }
- }
-
- if (idx != TIME_AMPM) {
- if (flag)
- m->time[idx]++;
- else
- m->time[idx]--;
- } else {
- if (m->time[idx] == 0)
- m->time[idx] = 1;
- else
- m->time[idx] = 0;
- }
-
- m_UpdateTimeValue(cur_btn, idx);
- }
- break;
- case 100:
- case 101:
- {
- utils_set_time_value(m->time);
-
-#if 0 /* FIXME: m->time should be passed */
- view_ug_clock_refresh(m->ug_base, NULL, m->time);
-#else
- m->pViewMgr->UpdateView(CLOCK_MAIN_VIEW, NULL);
-#endif
- Destroy();
- }
- break;
- default:
- break;
- }
-}
--- /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 UG_MODULE_API
+#define UG_MODULE_API __attribute__ ((visibility("default")))
+#endif
+
+#include <ui-gadget-module.h>
+#include <Elementary.h>
+
+#include <KeyDefine.h>
+
+#include "ug_clock_utils.h"
+#include "ug_clock.h"
+#include "ug_clock_define.h"
+#include "dbg.h"
+#include "ug_clock_spin_control.h"
+#include "ug_clock_sublist.h"
+#include "ug_clock_time_spin_control.h"
+
+#define CLOCK_SUBLIST_NULL_BTNS 2
+#define UG_CLOCK_DATA_ID "ug_clock_data"
+
+struct _ug_data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *close_btn;
+ Evas_Object *date_btn;
+ Evas_Object *switch_btn;
+ Evas_Object *time_btn;
+ Evas_Object *sublist_box;
+ Evas_Object *cur_btn;
+
+ unsigned int date[DATE_MAX];
+ int mode;
+ int time[TIME_MAX];
+
+ ui_gadget_h ug;
+};
+
+/**
+* Free allocated memory.
+*
+* This function frees allocated memory when needed.
+*
+* @param[in]: data : the user data of clock ug.
+*
+* @return: void.
+*/
+static void _free_ug_data(struct _ug_data *data)
+{
+ if (!data)
+ return;
+
+ if (data->base) {
+ evas_object_del(data->base);
+ data->base = NULL;
+ }
+
+ free(data);
+}
+
+/**
+* This function will be invoked when the BACK key is pressed.
+* When the BACK key is pressed, this UI gadget will be destroyed.
+*
+* @param[in]: keyname : the name of pressed key.
+* @param[in]: data : the user data of clock ug.
+*
+* @return: void.
+*/
+static void _key_down_cb(const char *keyname, struct _ug_data *data)
+{
+ if (!keyname || !data || !data->ug)
+ return;
+
+ if (!strncmp(keyname, KEY_BACK, strlen(keyname)))
+ ug_destroy_me(data->ug);
+}
+
+/**
+* Callback function for button click event.
+*
+* This function will be invoked when the close button is clicked or
+* the ENTER key is pressed.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the pointer of clicked evas object.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _close_btn_clicked_cb(void *priv, Evas_Object *obj, void *ei)
+{
+ struct _ug_data *data;
+
+ if (!priv) {
+ _ERR("private data is null.");
+ return;
+ }
+
+ data = priv;
+ ug_destroy_me(data->ug);
+}
+
+/**
+* Callback function for key pressed event.
+*
+* This function will be invoked when this the close button is focused
+* and the BACK key is pressed.
+*
+* @param[in]: priv : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the current evas object.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _key_down_on_close_btn_cb(void *priv, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ struct _ug_data *data;
+ Evas_Event_Key_Down *event;
+ const char *keyname;
+
+ if (!priv || !ei) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ event = ei;
+ keyname = event->keyname;
+
+ if (!keyname)
+ return;
+
+ data = priv;
+
+ _key_down_cb(keyname, data);
+}
+
+/**
+* Callback function for key pressed event.
+*
+* This function will be invoked when BACK key is pressed.
+* When the BACK key is pressed, this UI gadget will be destroyed.
+*
+* @param[in]: priv : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the current evas object.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _key_down_on_btns_cb(void *priv, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ struct _ug_data *data;
+ Evas_Event_Key_Down *event;
+ const char *keyname;
+
+ if (!priv || !ei) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ event = ei;
+ keyname = event->keyname;
+ if (!keyname)
+ return;
+
+ data = priv;
+
+ _key_down_cb(keyname, data);
+}
+
+/**
+* Mouse in event callback.
+*
+* This function will be invoked when the mouse moves in the region of
+* close button.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the current evas object.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _close_btn_mouse_in_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj)
+ return;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* Mouse out event callback.
+*
+* This function will be invoked when the mouse moves out the region of
+* close button.
+*
+* @param[in]: dt The pointer of private data.
+* @param[in]: e The evas canvas.
+* @param[in]: obj The current evas object.
+* @param[in]: ei The event info.
+*
+* @return: void.
+*/
+static void _close_btn_mouse_out_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ /* TODO: Add necessary operation when needed. */
+}
+
+/**
+* Add close button.
+*
+* This function adds close button for clock UI gadget.
+*
+* @param[in]: parent : the parent base layout of clock UI gadget.
+* @param[in]: data : the user data.
+*
+* @return: The pointer of created evas object button or NULL.
+*/
+static Evas_Object *_add_close_btn(Evas_Object *parent,
+ struct _ug_data *data)
+{
+ Evas_Object *btn;
+
+ if (!parent || !data) {
+ _ERR("parent of close button is null.");
+ return NULL;
+ }
+
+ btn = utils_add_button(parent);
+ if (!btn) {
+ _ERR("elm add button failed.");
+ return NULL;
+ }
+
+ data->close_btn = btn;
+
+ elm_object_style_set(btn, BTN_STYLE_CLOSE_BTN);
+ elm_object_text_set(btn, BTN_TEXT_CLOSE);
+ elm_object_part_content_set(parent, SWALLOW_CLOSE_BTN, btn);
+
+ evas_object_smart_callback_add(data->close_btn, "clicked",
+ _close_btn_clicked_cb, data);
+ evas_object_event_callback_add(data->close_btn, EVAS_CALLBACK_KEY_DOWN,
+ _key_down_on_close_btn_cb, data);
+ evas_object_event_callback_add(data->close_btn,
+ EVAS_CALLBACK_MOUSE_IN, _close_btn_mouse_in_cb, data);
+ evas_object_event_callback_add(data->close_btn,
+ EVAS_CALLBACK_MOUSE_OUT, _close_btn_mouse_out_cb, data);
+
+ return btn;
+}
+
+/**
+* CLICKED event callback.
+*
+* This is the CLICKED event callback function for 24 Hour mode button.
+* When user clicks the 24 Hour mode button or the ENTER key is pressed
+* on this button, this function will be triggered to show the sub UI of
+* 24 Hour mode button.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the 24 Hour mode button.
+* @param[in]: ei : the event info.
+*
+* @return: void.
+*/
+static void _switch_btn_clicked_cb(void *priv, Evas_Object *obj, void *ei)
+{
+ struct _ug_data *data;
+
+ if (!priv)
+ return;
+
+ data = priv;
+ data->cur_btn = obj;
+
+ view_sublist_create(data->win, data->base);
+
+ elm_object_signal_emit(obj, SIGNAL_NAME_AFTER_CLICK,
+ SIGNAL_SOURCE_BTN);
+}
+
+/**
+* MOUSEIN event callback function.
+*
+* This is the MOUSEIN event callback function for 24 Hour mode
+* button. When the mouse moves in the region of 24 Hour mode
+* button, this function will be called.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the 24 Hour mode button.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _switch_btn_mouse_in_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj)
+ return;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* MOUSEOUT event callback function.
+*
+* This is the MOUSEOUT event callback function for 24 Hour mode
+* button. When the mouse moves out of the region of 24 Hour mode
+* button, this function will be called. Till now there is no operation
+* in this function, and you can add operations here as needed.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the 24 Hour mode button.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _switch_btn_mouse_out_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ /* TODO: Add necessary operations when needed. */
+}
+
+/**
+* This function creates the 24 Hour mode item button.
+*
+* @param[in]: data : the user data.
+*
+* @return: The created evas object 24 Hour mode button or NULL.
+*/
+static Evas_Object *_add_clock_sublist_switch_btn(
+ struct _ug_data *data)
+{
+ Evas_Object *switch_btn;
+ const char *display;
+ int ret;
+
+ if (!data) {
+ _ERR("data is null.");
+ return NULL;
+ }
+
+ switch_btn = utils_add_button(data->base);
+ if (!switch_btn) {
+ _ERR("add button failed.");
+ return NULL;
+ }
+
+ elm_object_style_set(switch_btn, BTN_STYLE_LIST_BTN);
+ elm_object_text_set(switch_btn, BTN_TEXT_24HOUR_TIME);
+
+ elm_box_pack_end(data->sublist_box, switch_btn);
+
+ /* Set ON/OFF for switch button. */
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &data->mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return NULL;
+ }
+
+ if (!data->mode)
+ display = OFF;
+ else
+ display = ON;
+
+ elm_object_part_text_set(switch_btn, BTN_PART_VALUE, display);
+
+ evas_object_event_callback_add(switch_btn,
+ EVAS_CALLBACK_KEY_DOWN, _key_down_on_btns_cb, data);
+ evas_object_smart_callback_add(switch_btn,
+ "clicked", _switch_btn_clicked_cb, data);
+ evas_object_event_callback_add(switch_btn,
+ EVAS_CALLBACK_MOUSE_IN, _switch_btn_mouse_in_cb, NULL);
+ evas_object_event_callback_add(switch_btn, EVAS_CALLBACK_MOUSE_OUT,
+ _switch_btn_mouse_out_cb, NULL);
+
+ return switch_btn;
+}
+
+/**
+* CLICKED event callback function.
+*
+* This is the clicked event callback function for Date button.
+* When user clicks the Date button or ENTER key is pressed,
+* this function will be called to show sub UI of Date button.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the Date button.
+* @param[in]: ei : the event info.
+*
+* @return: void.
+*/
+static void _date_btn_clicked_cb(void *priv, Evas_Object *obj, void *ei)
+{
+ struct _ug_data *data;
+
+ if (!priv || !obj) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ data = priv;
+ data->cur_btn = obj;
+
+ view_spin_control_create(data->win, data->base);
+
+ elm_object_signal_emit(obj, SIGNAL_NAME_AFTER_CLICK,
+ SIGNAL_SOURCE_BTN);
+}
+
+/**
+* MOUSEIN event callback function.
+*
+* This is the MOUSEIN event callback function for Date button.
+* When the mouse moves in the region of Date button, this
+* function will be called.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the Date button.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _date_btn_mouse_in_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj)
+ return;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* MOUSEOUT event callback function.
+*
+* This is the MOUSEOUT event callback function for Date button.
+* When the mouse moves out of the region of Date button, this
+* function will be called. Till now there is no operation in this
+* function, and you can add operations here as needed.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the Date button.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _date_btn_mouse_out_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ /* TODO: Add necessary operations when needed. */
+}
+
+/**
+* This function creates the Date item button.
+*
+* @param[in]: data : the user data.
+*
+* @return: The created evas object Date button or NULL.
+*/
+static Evas_Object *_add_clock_sublist_date_btn(struct _ug_data *data)
+{
+ Evas_Object *date_btn;
+ char buf[BUF_SIZE];
+
+ if (!data) {
+ _ERR("data is null.");
+ return NULL;
+ }
+
+ date_btn = utils_add_button(data->base);
+ if (!date_btn) {
+ _ERR("add button failed.");
+ return NULL;
+ }
+
+ elm_object_style_set(date_btn, BTN_STYLE_LIST_BTN);
+ elm_object_text_set(date_btn, BTN_TEXT_DATE);
+
+ elm_box_pack_end(data->sublist_box, date_btn);
+
+ elm_object_focus_set(date_btn, EINA_TRUE);
+
+ utils_get_date_value(data->date);
+
+ snprintf(buf, sizeof(buf),
+ "%02d / %02d / %04d", data->date[DATE_MONTH],
+ data->date[DATE_DAY], data->date[DATE_YEAR]);
+
+ elm_object_part_text_set(date_btn, BTN_PART_VALUE, (const char *)buf);
+
+ evas_object_event_callback_add(date_btn,
+ EVAS_CALLBACK_KEY_DOWN, _key_down_on_btns_cb, data);
+ evas_object_smart_callback_add(date_btn,
+ "clicked", _date_btn_clicked_cb, data);
+ evas_object_event_callback_add(date_btn,
+ EVAS_CALLBACK_MOUSE_IN, _date_btn_mouse_in_cb, NULL);
+ evas_object_event_callback_add(date_btn,
+ EVAS_CALLBACK_MOUSE_OUT, _date_btn_mouse_out_cb, NULL);
+
+ return date_btn;
+}
+
+/**
+* CLICKED event callback function.
+*
+* This is the clicked event callback function for Time button.
+* When user clicks the Time button or ENTER key is pressed
+* on this button, this function will be called to show sub UI
+* of Time button.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the Time button.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _time_btn_clicked_cb(void *priv, Evas_Object *obj, void *ei)
+{
+ struct _ug_data *data;
+
+ if (!priv)
+ return;
+
+ data = priv;
+ data->cur_btn = obj;
+
+ view_time_spin_ctrl_create(data->win, data->base);
+
+ elm_object_signal_emit(obj, SIGNAL_NAME_AFTER_CLICK,
+ SIGNAL_SOURCE_BTN);
+}
+
+/**
+* Refresh text of Time button.
+*
+* @param[in]: btn : the Time button.
+* @param[in]: time : the refreshed value of time.
+*
+* @return: void.
+*/
+static void _refresh_time_btn_text(Evas_Object *btn, int *time)
+{
+ int mode;
+ char buf[BUF_SIZE];
+ int ret;
+
+ if (!btn || !time)
+ return;
+
+ mode = 0;
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return;
+ }
+
+ if (mode) {
+ snprintf(buf, sizeof(buf), "%02d : %02d",
+ time[TIME_HOUR], time[TIME_MINUTE]);
+ } else {
+ if (time[TIME_HOUR] >= 12) {
+ time[TIME_HOUR] -= 12;
+ time[TIME_AMPM] = 1;
+ } else {
+ time[TIME_AMPM] = 0;
+ }
+
+ snprintf(buf, sizeof(buf), "%02d : %02d : %s",
+ time[TIME_HOUR], time[TIME_MINUTE],
+ time[TIME_AMPM] == 1 ? PM : AM);
+ }
+
+ elm_object_part_text_set(btn, BTN_PART_VALUE, (const char *)buf);
+}
+
+/**
+* MOUSEIN event callback function.
+*
+* This is the MOUSEIN event callback function for Time button.
+* When the mouse moves in the region of Time button, this
+* function will be called.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the Time button.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _time_btn_mouse_in_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj)
+ return;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* MOUSEOUT event callback function.
+*
+* This is the MOUSEOUT event callback function for Time button.
+* When the mouse moves out of the region of Time button, this
+* function will be called. Till now there is no operation in this
+* function, and you can add operations here as needed.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas canvas.
+* @param[in]: obj : the Time button.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _time_btn_mouse_out_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ /* TODO: Add necessary operations when needed. */
+}
+
+/**
+* This function creates the Time item button.
+*
+* @param[in]: data : the user data.
+*
+* @return: The created evas object Date button or NULL.
+*/
+static Evas_Object *_add_clock_sublist_time_btn(
+ struct _ug_data *data)
+{
+ Evas_Object *time_btn;
+
+ if (!data || !data->base) {
+ _ERR("invalid argument.");
+ return NULL;
+ }
+
+ time_btn = utils_add_button(data->base);
+ if (!time_btn) {
+ _ERR("add time button failed.");
+ return NULL;
+ }
+
+ elm_object_style_set(time_btn, BTN_STYLE_LIST_BTN);
+ elm_object_text_set(time_btn, BTN_TEXT_TIME);
+
+ elm_box_pack_end(data->sublist_box, time_btn);
+
+ /* Set hour : minute : AM/PM for time button. */
+ utils_get_time_value(data->time);
+
+ _refresh_time_btn_text(time_btn, data->time);
+
+ evas_object_event_callback_add(time_btn,
+ EVAS_CALLBACK_KEY_DOWN, _key_down_on_btns_cb, data);
+ evas_object_smart_callback_add(time_btn,
+ "clicked", _time_btn_clicked_cb, data);
+ evas_object_event_callback_add(time_btn,
+ EVAS_CALLBACK_MOUSE_IN, _time_btn_mouse_in_cb, NULL);
+ evas_object_event_callback_add(time_btn,
+ EVAS_CALLBACK_MOUSE_OUT, _time_btn_mouse_out_cb, NULL);
+
+ return time_btn;
+}
+
+/**
+* Create unused buttons.
+*
+* There is a unused region of clock UI gadget. We use blank
+* buttons to implement this unused region. This function
+* creates the unused region.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_clock_sublist_null_btn(struct _ug_data *data)
+{
+ Evas_Object *null_btn;
+ Evas_Object *last_btn;
+ int idx;
+
+ if (!data || !data->base) {
+ _ERR("invalid argument.");
+ return -1;
+ }
+
+ for (idx = 0; idx < CLOCK_SUBLIST_NULL_BTNS; idx++) {
+ null_btn = utils_add_button(data->base);
+ if (!null_btn) {
+ _ERR("add null button failed.");
+ return -1;
+ }
+
+ elm_object_style_set(null_btn, BTN_STYLE_LIST_BTN);
+ elm_box_pack_end(data->sublist_box, null_btn);
+ }
+
+ last_btn = utils_add_button(data->base);
+ if (!last_btn) {
+ _ERR("add last button failed.");
+ return -1;
+ }
+
+ elm_object_style_set(last_btn, BTN_STYE_LAST_BTN);
+ elm_object_part_content_set(
+ data->base, SWALLOW_CLOCK_LAST, last_btn);
+
+ return 0;
+}
+
+/**
+* Set moving directions of focus for created buttons.
+*
+* @param[in]: data : the user data.
+*
+* @return: void.
+*/
+static void _set_btn_directions(struct _ug_data *data)
+{
+ Evas_Object *dbtn, *sbtn, *tbtn, *cbtn;
+
+ if (!data || !data->date_btn ||
+ !data->switch_btn || !data->time_btn) {
+ _ERR("all the sublist buttons may null.");
+ return;
+ }
+
+ dbtn = data->date_btn;
+ sbtn = data->switch_btn;
+ tbtn = data->time_btn;
+ cbtn = data->close_btn;
+
+ elm_object_focus_next_object_set(dbtn, dbtn, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(dbtn, dbtn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(dbtn, sbtn, ELM_FOCUS_DOWN);
+ /* Maybe it's not necessary to set ELM_FOCUS_RIGHT for date_btn */
+ elm_object_focus_next_object_set(dbtn, cbtn, ELM_FOCUS_RIGHT);
+
+ elm_object_focus_next_object_set(sbtn, tbtn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(sbtn, dbtn, ELM_FOCUS_UP);
+ /* Maybe it's not necessary to set ELM_FOCUS_RIGHT for switch_btn */
+ elm_object_focus_next_object_set(sbtn, cbtn, ELM_FOCUS_RIGHT);
+
+ elm_object_focus_next_object_set(tbtn, tbtn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(tbtn, sbtn, ELM_FOCUS_UP);
+ /* Maybe it's not necessary to set ELM_FOCUS_RIGHT for time_btn */
+ elm_object_focus_next_object_set(tbtn, cbtn, ELM_FOCUS_RIGHT);
+
+ elm_object_focus_next_object_set(cbtn, cbtn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(cbtn, cbtn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(cbtn, dbtn, ELM_FOCUS_LEFT);
+}
+
+/**
+* Create buttons for clock UI gadget.
+*
+* The main UI of clock UI gadget contains three items which are Date,
+* 24 Hour mode and Time. And they are implemented using buttons.
+* This function is to create these three buttons.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_clock_sublist_btn(struct _ug_data *data)
+{
+ Evas_Object *date_btn;
+ Evas_Object *switch_btn;
+ Evas_Object *time_btn;
+ int ret;
+
+ if (!data)
+ return -1;
+
+ date_btn = _add_clock_sublist_date_btn(data);
+ if (!date_btn) {
+ _ERR("add date button failed.");
+ return -1;
+ }
+
+ data->date_btn = date_btn;
+
+ switch_btn = _add_clock_sublist_switch_btn(data);
+ if (!switch_btn) {
+ _ERR("add switch button failed.");
+ evas_object_del(data->date_btn);
+ return -1;
+ }
+
+ data->switch_btn = switch_btn;
+
+ time_btn = _add_clock_sublist_time_btn(data);
+ if (!time_btn) {
+ _ERR("add time button failed.");
+ evas_object_del(data->date_btn);
+ evas_object_del(data->switch_btn);
+ return -1;
+ }
+
+ data->time_btn = time_btn;
+
+ ret = _add_clock_sublist_null_btn(data);
+ if (ret != 0) {
+ _ERR("add null buttons failed.");
+ evas_object_del(data->date_btn);
+ evas_object_del(data->switch_btn);
+ evas_object_del(data->time_btn);
+ return -1;
+ }
+
+ _set_btn_directions(data);
+
+ return 0;
+}
+
+/**
+* Create UI components of clock UI gadget.
+*
+* This function creates the three UI components of clock UI gadget:
+* Date, 24Hour mode and Time.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_clock_sublist(struct _ug_data *data)
+{
+ Evas_Object *box;
+ int ret;
+
+ if (!data)
+ return -1;
+
+ box = utils_add_box(data->base);
+ if (!box) {
+ _ERR("add clock sublist box failed.");
+ return -1;
+ }
+
+ data->sublist_box = box;
+
+ ret = _add_clock_sublist_btn(data);
+ if (ret != 0) {
+ _ERR("add clock sublist btn failed.");
+ evas_object_del(data->sublist_box);
+ return -1;
+ }
+
+ elm_object_part_content_set(
+ data->base, SWALLOW_CLOCK_LIST, data->sublist_box);
+
+ return 0;
+}
+
+/**
+* Create the UI of this ui gadget.
+*
+* This function creates all the UI components of this UI gadget.
+*
+* @param[in]: ug : the UI gadget created by ug_create().
+* @param[in]: mode : the mode of ug, fullview or frameview.
+* @param[in]: service : argument for the UI gadget.
+* @param[in]: priv : the user data.
+*
+* @return: The base layout of this UI gadget.
+*/
+static void *_on_create(ui_gadget_h ug,
+ enum ug_mode mode, service_h service, void *priv)
+{
+ struct _ug_data *data;
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *close_btn;
+ int ret;
+
+ if (!ug || !priv) {
+ _ERR("ug or private data is null.");
+ return NULL;
+ }
+
+ if ((mode == UG_MODE_INVALID) ||
+ (mode >= UG_MODE_MAX) || (mode < UG_MODE_FULLVIEW)) {
+ _ERR("invalid ug mode.");
+ return NULL;
+ }
+
+ elm_theme_overlay_add(NULL, UG_CLOCK_EDJTHEME);
+
+ data = priv;
+ data->ug = ug;
+
+ win = ug_get_window();
+ if (!win) {
+ _ERR("ug get window failed.");
+ _free_ug_data(data);
+ return NULL;
+ }
+
+ data->win = win;
+
+ elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
+
+ base = utils_add_layout(win);
+ if (!base) {
+ _ERR("add base layout failed.");
+ _free_ug_data(data);
+ return NULL;
+ }
+
+ elm_layout_file_set(base, UG_CLOCK_EDJFILE, UG_CLOCK_GRP);
+ elm_object_part_text_set(
+ base, TEXT_INTRO, STRINGS_INTRO);
+ data->base = base;
+
+ close_btn = _add_close_btn(base, data);
+ if (!close_btn) {
+ _ERR("add close button for ug clock failed.");
+ _free_ug_data(data);
+ return NULL;
+ }
+
+ ret = _add_clock_sublist(data);
+ if (ret == -1) {
+ _ERR("add clock sublist failed.");
+ evas_object_del(close_btn);
+ _free_ug_data(data);
+ return NULL;
+ }
+
+ evas_object_data_set(data->base, UG_CLOCK_DATA_ID, data);
+
+ return base;
+}
+
+/**
+* Destroy this UI gadget.
+*
+* This function destroyes all the UI components of this UI gadget.
+*
+* @param[in]: ug : UI gadget.
+* @param[in]: service : argument of this UI gadget.
+* @param[in]: priv : the user data.
+*
+* @return: void.
+*/
+static void _on_destroy(ui_gadget_h ug, service_h service, void *priv)
+{
+ struct _ug_data *data;
+
+ if (!ug || !priv) {
+ _ERR("ug or private data is null.");
+ return;
+ }
+
+ data = priv;
+
+ _free_ug_data(data);
+}
+
+/**
+* Refresh text of Date button.
+*
+* @param[in]: btn : the Date button.
+* @param[in]: date : the user data.
+*
+* @return: void.
+*/
+static void _refresh_date_btn_text(Evas_Object *btn, unsigned int *date)
+{
+ char buf[BUF_SIZE];
+
+ if (!btn || !date)
+ return;
+
+ snprintf(buf, sizeof(buf), "%02d / %02d / %04d",
+ date[DATE_MONTH], date[DATE_DAY], date[DATE_YEAR]);
+ elm_object_part_text_set(btn, BTN_PART_VALUE, (const char *)buf);
+}
+
+/**
+* Refresh text of 24 Hour mode button.
+*
+* @param[in]: btn : the 24 Hour mode button.
+* @param[in]: mode : the refreshed value of mode.
+*
+* @return: void.
+*/
+static void _refresh_switch_btn_text(Evas_Object *btn, int mode)
+{
+ if (!btn)
+ return;
+
+ if (mode)
+ elm_object_part_text_set(btn, BTN_PART_VALUE, ON);
+ else
+ elm_object_part_text_set(btn, BTN_PART_VALUE, OFF);
+}
+
+/**
+* Change the way of displayed time.
+*
+* This function displays time as the 24 Hour mode changes.
+* If 24 Hour mode is ON, we display the time using 24 hour mode.
+* If 24 Hour mode is OFF, we display the time using 12 hour mode.
+*
+* @param[in]: btn : the Time button.
+* @param[in]: time : the value of time.
+*
+* @return: void.
+*/
+static void _refresh_time_btn_as_mode(Evas_Object *btn, int *time)
+{
+ int mode;
+ int ret;
+ char buf[BUF_SIZE];
+
+ if (!btn || !time)
+ return;
+
+ mode = 0;
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return;
+ }
+
+ if (mode)
+ snprintf(buf, sizeof(buf), "%02d : %02d",
+ time[TIME_HOUR], time[TIME_MINUTE]);
+ else
+ snprintf(buf, sizeof(buf), "%02d : %02d : %s",
+ time[TIME_HOUR], time[TIME_MINUTE],
+ time[TIME_AMPM] == 1 ? PM : AM);
+
+ elm_object_part_text_set(btn, BTN_PART_VALUE, (const char *)buf);
+}
+
+/**
+* Refresh text of buttons.
+*
+* @param[in]: data : the user data.
+*
+* @return: void.
+*/
+static void _refresh_btn_text(struct _ug_data *data)
+{
+ int ret;
+
+ if (!data || !data->cur_btn)
+ return;
+
+ if (data->date_btn == data->cur_btn) {
+ _refresh_date_btn_text(data->cur_btn, data->date);
+ } else if (data->switch_btn == data->cur_btn) {
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &data->mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return;
+ }
+
+ _refresh_switch_btn_text(data->cur_btn, data->mode);
+
+ utils_get_time_value(data->time);
+ _refresh_time_btn_as_mode(data->time_btn, data->time);
+ } else {
+ _refresh_time_btn_text(data->cur_btn, data->time);
+ }
+}
+
+/**
+* Refresh the UI of clock UI gadget.
+*
+* This function refreshes the UI of clock UI gadget. For example,
+* when the user sets a new date, this function will be called to refresh
+* the date item of clock UI gadget. They are the same as mode item
+* time item of clock UI gadget.
+*
+* @param[in]: base : the base layout of clock UI gadget.
+* @param[in]: date : the user data.
+* @param[in]: time : the new time need to be refreshed.
+*
+* @return: void.
+*/
+void view_ug_clock_refresh(Evas_Object *base, unsigned int *date, int *time)
+{
+ struct _ug_data *data;
+ int idx;
+
+ if (!base) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ data = evas_object_data_get(base, UG_CLOCK_DATA_ID);
+ if (!data) {
+ _ERR("evas object data get failed. ID: %s", UG_CLOCK_DATA_ID);
+ return;
+ }
+
+ elm_object_focus_set(data->cur_btn, EINA_TRUE);
+
+ if (date)
+ for (idx = DATE_MONTH; idx < DATE_MAX; idx++)
+ data->date[idx] = date[idx];
+
+ if (time)
+ for (idx = TIME_HOUR; idx < TIME_MAX; idx++)
+ data->time[idx] = time[idx];
+
+ _refresh_btn_text(data);
+}
+
+/**
+* ug module init function.
+*
+* This function is the first function which is called by caller
+* using dlopen() and dlsym().
+*
+* @param[in]: ops : the struct ug_module_ops including
+* callbacks which will be used in UI gadget module.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+ struct _ug_data *priv;
+
+ if (!ops) {
+ _ERR("invalid argument ops.");
+ return -1;
+ }
+
+ priv = calloc(1, sizeof(*priv));
+ if (!priv) {
+ _ERR("calloc memory for ug private data failed.");
+ return -1;
+ }
+
+ ops->create = _on_create;
+ ops->destroy = _on_destroy;
+ ops->priv = priv;
+ ops->opt = UG_OPT_INDICATOR_ENABLE;
+
+ return 0;
+}
+
+/**
+* ug module exit function.
+*
+* This function will be called by the caller when ug is unloaded.
+*
+* @param[in]: ops : the pointer of struct ug_module_ops.
+*
+* @return: void.
+*/
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+ if (!ops) {
+ _ERR("invalid argument ops.");
+ return;
+ }
+}
+++ /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 UG_MODULE_API
-#define UG_MODULE_API __attribute__ ((visibility("default")))
-#endif
-
-#include <ui-gadget-module.h>
-
-#include "util.h"
-#include "ug_clock.h"
-#include "defs.h"
-#include <AppCommon.h>
-
-#include "ClockMainView.h"
-#include "ClockSublistView.h"
-
-#define CLOCK_SUBLIST_NULL_BTNS 2
-#define UG_CLOCK_DATA_ID "ug_clock_data"
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-struct _ug_data {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
-
- CViewMgr *pViewMgr;
- CClockMainView *pClockMainView;
- CClockSublistView *pClockSublistView;
-};
-
-static void *_on_create(ui_gadget_h ug,
- enum ug_mode mode, service_h service, void *priv)
-{
- struct _ug_data *ugd;
- Evas_Object *win;
-
- if (!ug || !priv) {
- _ERR("ug or private data is null.");
- return NULL;
- }
-
- if ((mode == UG_MODE_INVALID) || (mode >= UG_MODE_MAX) || (mode < UG_MODE_FULLVIEW)) {
- _ERR("invalid ug mode.");
- return NULL;
- }
-
- elm_theme_overlay_add(NULL, UG_CLOCK_EDJTHEME);
-
- ugd = (struct _ug_data *) priv;
- ugd->ug = ug;
-
- win = (Evas_Object *) ug_get_window();
- if (!win) {
- _ERR("ug get window failed.");
- return NULL;
- }
-
- ugd->win = win;
-
- elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
-
-
- CViewMgr::Initialize(ugd->win, NULL);
- ugd->pViewMgr = CViewMgr::GetInstance();
- if(!ugd->pViewMgr) {
- CViewMgr::Finalize();
- _ERR("Fail to get CViewMgr instance");
- return NULL;
- }
- ugd->pClockMainView = new CClockMainView(CLOCK_MAIN_VIEW);
- if(!ugd->pViewMgr->AddView(ugd->pClockMainView)) {
- _ERR("Fail to add pFbBaseView");
- CViewMgr::Finalize();
- return false;
- }
-
- ugd->pClockSublistView = new CClockSublistView(CLOCK_SUBLIST_VIEW);
- if(!ugd->pViewMgr->AddView(ugd->pClockSublistView)) {
- _ERR("Fail to add pFbBaseView");
- CViewMgr::Finalize();
- return false;
- }
-
- ugd->pViewMgr->PushView(CLOCK_MAIN_VIEW, ugd->ug);
- ugd->base = ugd->pClockMainView->Base();
-
- return ugd->base;
-}
-
-/**
-* Destroy this UI gadget.
-*
-* This function destroyes all the UI components of this UI gadget.
-*
-* @param[in]: ug : UI gadget.
-* @param[in]: service : argument of this UI gadget.
-* @param[in]: priv : the user data.
-*
-* @return: void.
-*/
-static void _on_destroy(ui_gadget_h ug, service_h service, void *priv)
-{
- CViewMgr::Finalize();
-}
-
-/**
-* ug module init function.
-*
-* This function is the first function which is called by caller
-* using dlopen() and dlsym().
-*
-* @param[in]: ops : the struct ug_module_ops including
-* callbacks which will be used in UI gadget module.
-*
-* @return: 0 - Success, -1 - Fail.
-*/
-UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
-{
- struct _ug_data *priv;
-
- if (!ops) {
- _ERR("invalid argument ops.");
- return -1;
- }
-
- priv = (struct _ug_data *) calloc(1, sizeof(*priv));
- if (!priv) {
- _ERR("calloc memory for ug private data failed.");
- return -1;
- }
-
- ops->create = _on_create;
- ops->destroy = _on_destroy;
- ops->priv = priv;
- ops->opt = UG_OPT_INDICATOR_ENABLE;
-
- return 0;
-}
-
-/**
-* ug module exit function.
-*
-* This function will be called by the caller when ug is unloaded.
-*
-* @param[in]: ops : the pointer of struct ug_module_ops.
-*
-* @return: void.
-*/
-UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
-{
- if (!ops) {
- _ERR("invalid argument ops.");
- return;
- }
-}
-
-#if defined (__cplusplus)
-};
-#endif
--- /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 <KeyDefine.h>
+
+#include "dbg.h"
+#include "ug_clock_define.h"
+#include "ug_clock.h"
+#include "ug_clock_spin_control.h"
+#include "ug_clock_utils.h"
+
+#define ARROW_BTN_DATA_ID "arrow_btn_data_id"
+#define DATE_SPIN_DATA_ID "spin_ctrl_data"
+#define YEAR_BTN (2)
+
+#define UP_ARROW (1)
+#define DOWN_ARROW (0)
+
+#define CLICKED "clicked"
+
+struct _date_spin_data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *ug_base;
+
+ unsigned int date[DATE_MAX];
+ int entry[DATE_MAX];
+
+ Eina_Array *spin_array;
+};
+
+static const int days[] = {
+ 31,
+ 28,
+ 31,
+ 30,
+ 31,
+ 30,
+ 31,
+ 31,
+ 30,
+ 31,
+ 30,
+ 31
+};
+
+static void _destroy(Evas_Object *base);
+static void _update_date_value(Evas_Object *spin,
+ unsigned int *date, int spin_idx);
+
+/**
+* Free user data of date spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: void.
+*/
+static void _free_date_spin_data(struct _date_spin_data *data)
+{
+ if (!data)
+ return;
+
+ if (data->base) {
+ evas_object_del(data->base);
+ data->base = NULL;
+ }
+
+ if (data->spin_array)
+ eina_array_free(data->spin_array);
+
+ free(data);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+void _arrow_btn_clicked_cb(void *priv, Evas_Object *obj, void *ev)
+{
+ struct _date_spin_data *data;
+ Evas_Object *cur_btn;
+ Evas_Object *btn;
+ Evas_Object *up_btn;
+ int i;
+ int idx;
+ int flag;
+
+ if (!priv || !obj)
+ return;
+
+ data = priv;
+ cur_btn = evas_object_data_get(obj, ARROW_BTN_DATA_ID);
+ if (!cur_btn) {
+ _ERR("evas object data get failed. ID: %s", ARROW_BTN_DATA_ID);
+ return;
+ }
+
+ up_btn = elm_object_part_content_get(cur_btn, UP_ARROW_SWALLOW);
+ if (!up_btn) {
+ _ERR("part %s content get failed.", UP_ARROW_SWALLOW);
+ return;
+ }
+
+ if (obj == up_btn)
+ flag = 1;
+ else
+ flag = 0;
+
+ idx = 0;
+ for (i = DATE_DAY; i < DATE_MAX; i++) {
+ btn = eina_array_data_get(data->spin_array, i);
+ if (!btn) {
+ _ERR("eina array data get failed. button index: %d", i);
+ return;
+ }
+
+ if (cur_btn == btn) {
+ idx = i;
+ break;
+ }
+ }
+
+ if (flag)
+ data->date[idx]++;
+ else
+ data->date[idx]--;
+
+ _update_date_value(cur_btn, data->date, idx);
+
+}
+
+/**
+* Create arrow buttons for date spin.
+*
+* @param[in]: data : the user data.
+* @param[in]: obj : the corresponding object which the arrow created on.
+* @param[in]: flag : 1 - up arrow button, 0 - down arrow button.
+*
+* @return: the created arrow button.
+*/
+static Evas_Object *_add_arrow_btn(struct _date_spin_data *data,
+ Evas_Object *obj, int flag)
+{
+ Evas_Object *btn;
+
+ if (!data || !data->base || !obj)
+ return NULL;
+
+ btn = utils_add_button(data->base);
+ if (!btn) {
+ _ERR("utils add button failed.");
+ return NULL;
+ }
+
+ elm_object_style_set(btn, BTN_STYLE_ARROW_BTN);
+
+ if (flag == UP_ARROW)
+ elm_object_part_content_set(obj, UP_ARROW_SWALLOW, btn);
+ else
+ elm_object_part_content_set(obj, DOWN_ARROW_SWALLOW, btn);
+
+ elm_object_focus_allow_set(btn, EINA_FALSE);
+
+ evas_object_smart_callback_add(btn, "clicked",
+ _arrow_btn_clicked_cb, data);
+
+ evas_object_data_set(btn, ARROW_BTN_DATA_ID, obj);
+ evas_object_raise(btn);
+ evas_object_repeat_events_set(btn, EINA_FALSE);
+
+ return btn;
+}
+
+/**
+* Create date spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_date_spin(struct _date_spin_data *data)
+{
+ Evas_Object *btn, *uparrow, *downarrow;
+ Eina_Array *array;
+ char buf[BUF_SIZE];
+ int idx;
+
+ if (!data || !data->base) {
+ _ERR("invalid arguments.");
+ return -1;
+ }
+
+ array = eina_array_new(1);
+ if (!array) {
+ _ERR("new eina array failed.");
+ return -1;
+ }
+
+ for (idx = DATE_MONTH; idx < DATE_MAX; idx++) {
+ btn = utils_add_button(data->base);
+ if (!btn) {
+ _ERR("add spin control button failed.");
+ return -1;
+ }
+
+ elm_object_style_set(btn, BTN_STYLE_SPIN_CTRL_BTN);
+ if (idx == YEAR_BTN)
+ elm_object_style_set(btn, BTN_STYLE_SPIN_CTRL_YEAR_BTN);
+
+ snprintf(buf, sizeof(buf), "spin_ctrl_%d_swallow", idx + 1);
+ elm_object_part_content_set(
+ data->base, (const char *)buf, btn);
+
+ eina_array_push(array, btn);
+
+ uparrow = _add_arrow_btn(data, btn, UP_ARROW);
+ if (!uparrow) {
+ _ERR("add up arrow button failed.");
+ evas_object_del(btn);
+ return -1;
+ }
+
+ downarrow = _add_arrow_btn(data, btn, DOWN_ARROW);
+ if (!downarrow) {
+ _ERR("add down arrow button failed.");
+ evas_object_del(btn);
+ evas_object_del(uparrow);
+ return -1;
+ }
+ }
+
+ elm_object_focus_set(
+ eina_array_data_get(array, 0), EINA_TRUE);
+
+ data->spin_array = array;
+
+ return 0;
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _date_spin_clicked_cb(void *priv, Evas_Object *obj, void *ei)
+{
+ struct _date_spin_data *data;
+
+ if (!priv) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ data = priv;
+
+ utils_set_date_value(data->date);
+
+ view_ug_clock_refresh(data->ug_base, data->date, NULL);
+
+ _destroy(data->base);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse in event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse in event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _date_spin_mousein_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj)
+ return;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse out event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse out event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _date_spin_mouseout_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static int _add_date_spin_click_event(struct _date_spin_data *data)
+{
+ Evas_Object *spin;
+ Eina_Array *array;
+ int idx;
+
+ if (!data || !data->spin_array) {
+ _ERR("no spin control buttons.");
+ return -1;
+ }
+
+ array = data->spin_array;
+
+ for (idx = DATE_MONTH; idx < DATE_MAX; idx++) {
+ spin = eina_array_data_get(array, idx);
+ if (!spin) {
+ _ERR("eina array data get failed. spin index: %d", idx);
+ return -1;
+ }
+
+ evas_object_smart_callback_add(spin, CLICKED,
+ _date_spin_clicked_cb, data);
+ evas_object_event_callback_add(spin, EVAS_CALLBACK_MOUSE_IN,
+ _date_spin_mousein_cb, NULL);
+ evas_object_event_callback_add(spin, EVAS_CALLBACK_MOUSE_OUT,
+ _date_spin_mouseout_cb, NULL);
+ }
+
+ return 0;
+}
+
+/**
+* Set focus move directions among buttons.
+*
+* @param[in]: array : the eina array including buttons.
+*
+* @return: void.
+*/
+static void _set_date_spin_direction(Eina_Array *array)
+{
+ Evas_Object *spin;
+ int idx;
+
+ if (!array) {
+ _ERR("spin control button array is null.");
+ return;
+ }
+
+ for (idx = DATE_MONTH; idx < DATE_MAX; idx++) {
+ spin = eina_array_data_get(array, idx);
+ if (!spin) {
+ _ERR("there is no button. idx: %d", idx);
+ return;
+ }
+
+ elm_object_focus_next_object_set(spin, spin, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(spin, spin, ELM_FOCUS_DOWN);
+
+ if (idx == DATE_MONTH) {
+ elm_object_focus_next_object_set(spin,
+ eina_array_data_get(array, idx+1),
+ ELM_FOCUS_NEXT);
+ elm_object_focus_next_object_set(spin, spin,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(spin,
+ eina_array_data_get(array, idx + 1),
+ ELM_FOCUS_RIGHT);
+ } else if (idx == DATE_YEAR) {
+ elm_object_focus_next_object_set(spin, spin,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(spin,
+ eina_array_data_get(array, idx - 1),
+ ELM_FOCUS_LEFT);
+ } else {
+ elm_object_focus_next_object_set(spin,
+ eina_array_data_get(array, idx + 1),
+ ELM_FOCUS_NEXT);
+ elm_object_focus_next_object_set(spin,
+ eina_array_data_get(array, idx + 1),
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(spin,
+ eina_array_data_get(array, idx - 1),
+ ELM_FOCUS_LEFT);
+ }
+ }
+}
+
+/**
+* Initialize value of date spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: void.
+*/
+static void _init_date_spin(struct _date_spin_data *data)
+{
+ Evas_Object *spin;
+ Eina_Array *spin_array;
+ char buf[BUF_SIZE];
+
+ if (!data || !data->spin_array)
+ return;
+
+ spin_array = data->spin_array;
+
+ utils_get_date_value(data->date);
+
+ spin = eina_array_data_get(spin_array, 0);
+ if (!spin) {
+ _ERR("month button is null.");
+ return;
+ }
+
+ snprintf(buf, sizeof(buf), "%02d", data->date[DATE_MONTH]);
+ elm_object_text_set(spin, buf);
+
+ spin = eina_array_data_get(spin_array, 1);
+ if (!spin) {
+ _ERR("month button is null.");
+ return;
+ }
+
+ snprintf(buf, sizeof(buf), "%02d", data->date[DATE_DAY]);
+ elm_object_text_set(spin, buf);
+
+ spin = eina_array_data_get(spin_array, 2);
+ if (!spin) {
+ _ERR("month button is null.");
+ return;
+ }
+
+ data->date[DATE_YEAR] = data->date[DATE_YEAR] < 2000 ?
+ 2000 : data->date[DATE_YEAR];
+ snprintf(buf, sizeof(buf), "%04d", data->date[DATE_YEAR]);
+ elm_object_text_set(spin, buf);
+}
+
+/**
+* Update value of date spin.
+*
+* @param[in]: spin : the corresponding date spin whose value need to update.
+* @param[in]: date : the value to be updated.
+* @param[in]: spin_idx : the index of corresponding date spin.
+*
+* @return: void.
+*/
+static void _update_date_value(Evas_Object *spin,
+ unsigned int *date, int spin_idx)
+{
+ char buf[BUF_SIZE];
+
+ if (!spin || !date)
+ return;
+ if (spin_idx < DATE_MONTH || spin_idx >= DATE_MAX)
+ return;
+
+ if (spin_idx == DATE_MONTH) {
+ if (date[spin_idx] > 12)
+ date[spin_idx] = 1;
+ if (date[spin_idx] <= 0)
+ date[spin_idx] = 12;
+
+ snprintf(buf, sizeof(buf), "%02d", date[spin_idx]);
+ } else if (spin_idx == DATE_DAY) {
+ if (date[spin_idx] > days[date[DATE_MONTH] - 1])
+ date[spin_idx] = 1;
+ if (date[spin_idx] <= 0)
+ date[spin_idx] = days[date[DATE_MONTH] - 1];
+
+ snprintf(buf, sizeof(buf), "%02d", date[spin_idx]);
+ } else {
+ if (date[spin_idx] > 2037)
+ date[spin_idx] = 2000;
+ if (date[spin_idx] < 2000)
+ date[spin_idx] = 2037;
+
+ snprintf(buf, sizeof(buf), "%04d", date[spin_idx]);
+ }
+
+ elm_object_text_set(spin, buf);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling key press event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the key press event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _date_spin_keydown_cb(void *priv, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *event;
+ struct _date_spin_data *data;
+ const char *keyname;
+ int i, idx;
+ Evas_Object *spin;
+ Eina_Array *spin_array;
+ char buf[BUF_SIZE];
+
+ if (!priv || !ei || !obj) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ event = ei;
+ keyname = event->keyname;
+ if (!keyname)
+ return;
+
+ data = priv;
+
+ if (!data->spin_array)
+ return;
+
+ spin_array = data->spin_array;
+
+ idx = -1;
+ for (i = DATE_MONTH; i < DATE_MAX; i++) {
+ spin = eina_array_data_get(spin_array, i);
+ if (!spin)
+ return;
+
+ if (obj == spin) {
+ idx = i;
+ break;
+ }
+ }
+
+ if (idx == -1) {
+ _ERR("can't get the right spin.");
+ return;
+ }
+
+ if (!strncmp(keyname, KEY_UP, strlen(keyname))) {
+ data->date[idx]++;
+ _update_date_value(obj, data->date, idx);
+ } else if (!strncmp(keyname, KEY_DOWN, strlen(keyname))) {
+ data->date[idx]--;
+ _update_date_value(obj, data->date, idx);
+ } else if (!strncmp(keyname, KEY_0, strlen(keyname)) ||
+ !strncmp(keyname, KEY_1, strlen(keyname)) ||
+ !strncmp(keyname, KEY_2, strlen(keyname)) ||
+ !strncmp(keyname, KEY_3, strlen(keyname)) ||
+ !strncmp(keyname, KEY_4, strlen(keyname)) ||
+ !strncmp(keyname, KEY_5, strlen(keyname)) ||
+ !strncmp(keyname, KEY_6, strlen(keyname)) ||
+ !strncmp(keyname, KEY_7, strlen(keyname)) ||
+ !strncmp(keyname, KEY_8, strlen(keyname)) ||
+ !strncmp(keyname, KEY_9, strlen(keyname))) {
+ if (idx != DATE_YEAR) {
+ if (data->entry[idx] == 0) {
+ data->entry[idx]++;
+
+ data->date[idx] = atoi(keyname);
+ } else {
+ data->entry[idx]++;
+
+ data->date[idx] = data->date[idx] * 10
+ + atoi(keyname);
+ data->entry[idx] = 0;
+ elm_object_focus_next(obj, ELM_FOCUS_NEXT);
+ }
+ } else {
+ if (data->entry[idx] == 0) {
+ data->entry[idx]++;
+ data->date[idx] = atoi(keyname);
+
+ snprintf(buf, sizeof(buf), "%04d",
+ data->date[idx]);
+ elm_object_text_set(obj, buf);
+ return;
+ } else if (data->entry[idx] == 3) {
+ data->date[idx] = data->date[idx] * 10
+ + atoi(keyname);
+ data->entry[idx] = 0;
+ } else {
+ data->entry[idx]++;
+ data->date[idx] = data->date[idx] * 10
+ + atoi(keyname);
+
+ snprintf(buf, sizeof(buf), "%04d",
+ data->date[idx]);
+ elm_object_text_set(obj, buf);
+ return;
+ }
+ }
+
+ _update_date_value(obj, data->date, idx);
+ } else if (!strncmp(keyname, KEY_RIGHT, strlen(keyname)) ||
+ !strncmp(keyname, KEY_LEFT, strlen(keyname))) {
+ data->entry[idx] = 0;
+ } else if (!strncmp(keyname, KEY_BACK, strlen(keyname))) {
+ _destroy(data->base);
+ }
+}
+
+/**
+* Add key event for date spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_date_spin_key_event(struct _date_spin_data *data)
+{
+ Evas_Object *spin;
+ int idx;
+
+ if (!data || !data->spin_array) {
+ _ERR("invalid argument.");
+ return -1;
+ }
+
+ for (idx = DATE_MONTH; idx < DATE_MAX; idx++) {
+ spin = eina_array_data_get(data->spin_array, idx);
+ if (!spin) {
+ _ERR("button is null.");
+ return -1;
+ }
+
+ evas_object_event_callback_add(spin, EVAS_CALLBACK_KEY_DOWN,
+ _date_spin_keydown_cb, data);
+ }
+
+ return 0;
+}
+
+/**
+* Create data spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_spin(struct _date_spin_data *data)
+{
+ int ret;
+
+ if (!data || !data->base) {
+ _ERR("private data is null.");
+ return -1;
+ }
+
+ ret = _add_date_spin(data);
+ if (ret != 0) {
+ _ERR("add spin control buttons failed.");
+ return -1;
+ }
+
+ _init_date_spin(data);
+
+ _set_date_spin_direction(data->spin_array);
+
+ ret = _add_date_spin_click_event(data);
+ if (ret != 0) {
+ _ERR("add click event for spin control button failed.");
+ return -1;
+ }
+
+ ret = _add_date_spin_key_event(data);
+ if (ret != 0) {
+ _ERR("add key event for spin control button failed.");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* Create all UI components of date spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: the base layout of date spin.
+*/
+static Evas_Object *_create(struct _date_spin_data *data)
+{
+ Evas_Object *base;
+ int ret;
+
+ if (!data || !data->win) {
+ _ERR("window for spin control base is null.");
+ return NULL;
+ }
+
+ base = utils_add_layout(data->win);
+ if (!base) {
+ _ERR("add base layout for spin control failed.");
+ return NULL;
+ }
+
+ data->base = base;
+ elm_layout_file_set(base, UG_CLOCK_EDJFILE, SPIN_CTRL_GRP);
+
+ ret = _add_spin(data);
+ if (ret != 0) {
+ _ERR("add spin control failed.");
+ evas_object_del(data->base);
+ data->base = NULL;
+ return NULL;
+ }
+
+ evas_object_data_set(data->base, DATE_SPIN_DATA_ID, data);
+
+ return base;
+}
+
+/**
+* Destroy all the UI componets of date spin.
+*
+* @param[in]: base : the base layout of date spin.
+*
+* @return: void.
+*/
+static void _destroy(Evas_Object *base)
+{
+ struct _date_spin_data *data;
+
+ if (!base) {
+ _ERR("base is null.");
+ return;
+ }
+
+ data = evas_object_data_get(base, DATE_SPIN_DATA_ID);
+ if (!data) {
+ _ERR("evas object get data failed. ID: %s", DATE_SPIN_DATA_ID);
+ return;
+ }
+
+ _free_date_spin_data(data);
+}
+
+/**
+* Entry of creating date spin UI.
+*
+* @param[in]: win : window.
+* @param[in]: ug_base : the base layout of clock UI gadget.
+*
+* @return: void.
+*/
+void view_spin_control_create(Evas_Object *win,
+ Evas_Object *ug_base)
+{
+ Evas_Object *base;
+ struct _date_spin_data *data;
+
+ if (!win || !ug_base) {
+ _ERR("the window of spin control is null.");
+ return;
+ }
+
+ data = calloc(1, sizeof(*data));
+ if (!data) {
+ _ERR("calloc spin control data memory failed.");
+ return;
+ }
+
+ data->win = win;
+ data->ug_base = ug_base;
+
+ base = _create(data);
+ if (!base) {
+ _ERR("create spin control failed.");
+ _free_date_spin_data(data);
+ }
+}
--- /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 <KeyDefine.h>
+
+#include "dbg.h"
+#include "ug_clock_define.h"
+#include "ug_clock_sublist.h"
+#include "ug_clock_utils.h"
+#include "ug_clock.h"
+
+#define SUBLIST_BTN_NUM 2
+#define SUBLIST_DATA_ID "sublist_data"
+
+#define BOX_HPADDING 0
+#define BOX_VPADDING 2
+
+#define CLICKED "clicked"
+
+struct _sublist_data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *ug_base;
+ Evas_Object *box;
+
+ unsigned int mode;
+
+ Eina_Array *array;
+};
+
+static void _destroy(Evas_Object *base);
+
+/**
+* Free user data of mode sublist.
+*
+* @param[in]: data : the user data of mode sublist.
+*
+* @return: void.
+*/
+static void _free_sublist_data(struct _sublist_data *data)
+{
+ if (!data)
+ return;
+
+ if (data->base) {
+ evas_object_del(data->base);
+ data->base = NULL;
+ }
+
+ if (data->array)
+ eina_array_free(data->array);
+
+ free(data);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _sublist_btn_clicked_cb(void *priv, Evas_Object *obj, void *ei)
+{
+ struct _sublist_data *data;
+ Eina_Array *array;
+ Evas_Object *on_btn, *off_btn;
+ int ret;
+
+ if (!priv || !obj) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ data = priv;
+
+ if (!data->array)
+ return;
+
+ array = data->array;
+
+ on_btn = eina_array_data_get(array, 0);
+ off_btn = eina_array_data_get(array, 1);
+ if (!on_btn || !off_btn) {
+ _ERR("ON button or OFF button is null.");
+ return;
+ }
+
+ if (obj == on_btn)
+ data->mode = 1;
+ else
+ data->mode = 0;
+
+ ret = utils_set_vconf_value(VCONF_KEY_24HOUR_MODE, data->mode);
+ if (ret != 0) {
+ _ERR("set 24hour mode failed.");
+ return;
+ }
+
+ view_ug_clock_refresh(data->ug_base, NULL, NULL);
+
+ _destroy(data->base);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling key press event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the key press event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _key_down_on_sublist_btn_cb(void *priv, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Object *on_btn, *off_btn;
+ Eina_Array *array;
+ Evas_Event_Key_Down *event;
+ struct _sublist_data *data;
+ const char *keyname;
+ int mode;
+ int ret;
+
+ if (!priv || !ei || !obj)
+ return;
+
+ data = priv;
+
+ if (!data->array || !data->base)
+ return;
+
+ array = data->array;
+
+ event = ei;
+
+ if (!event->keyname)
+ return;
+
+ keyname = event->keyname;
+
+ on_btn = eina_array_data_get(array, 0);
+ off_btn = eina_array_data_get(array, 1);
+ if (!on_btn || !off_btn) {
+ _ERR("ON button or OFF button is null.");
+ return;
+ }
+
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return;
+ }
+
+ if (!strncmp(keyname, KEY_DOWN, strlen(keyname))) {
+ if (obj != on_btn)
+ return;
+
+ elm_object_focus_set(off_btn, EINA_TRUE);
+
+ if (mode) {
+ elm_object_signal_emit(obj, SIG_SRC_UNFOC_SHOW_ICON,
+ SIG_NAME_SUBLIST);
+ elm_object_signal_emit(off_btn, SIG_SRC_FOC_HIDE_ICON,
+ SIG_NAME_SUBLIST);
+ } else {
+ elm_object_signal_emit(obj, SIG_SRC_UNFOC_HIDE_ICON,
+ SIG_NAME_SUBLIST);
+ elm_object_signal_emit(off_btn, SIG_SRC_FOC_SHOW_ICON,
+ SIG_NAME_SUBLIST);
+ }
+ } else if (!strncmp(keyname, KEY_UP, strlen(keyname))) {
+ if (obj == on_btn)
+ return;
+
+ elm_object_focus_set(on_btn, EINA_TRUE);
+
+ if (mode) {
+ elm_object_signal_emit(on_btn, SIG_SRC_FOC_SHOW_ICON,
+ SIG_NAME_SUBLIST);
+ elm_object_signal_emit(obj, SIG_SRC_UNFOC_HIDE_ICON,
+ SIG_NAME_SUBLIST);
+ } else {
+ elm_object_signal_emit(obj, SIG_SRC_UNFOC_SHOW_ICON,
+ SIG_NAME_SUBLIST);
+ elm_object_signal_emit(on_btn, SIG_SRC_FOC_HIDE_ICON,
+ SIG_NAME_SUBLIST);
+ }
+ } else if (!strncmp(keyname, KEY_BACK, strlen(keyname))) {
+ _destroy(data->base);
+ }
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse in event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse in event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _sublist_btn_mouse_in_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj)
+ return;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse out event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse out event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _sublist_btn_mouse_out_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+}
+
+/**
+* Create mode sublist buttons.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_sublist_btns(struct _sublist_data *data)
+{
+ Eina_Array *array;
+ Evas_Object *btn;
+ Evas_Object *box;
+ int idx;
+
+ if (!data || !data->base || !data->box) {
+ _ERR("invalid arguments.");
+ return -1;
+ }
+
+ box = data->box;
+ elm_box_padding_set(box, BOX_HPADDING, BOX_VPADDING);
+
+ array = eina_array_new(1);
+ if (!array) {
+ _ERR("new array for sublist buttons failed.");
+ return -1;
+ }
+
+ for (idx = 0; idx < SUBLIST_BTN_NUM; idx++) {
+ btn = utils_add_button(data->base);
+ if (!btn) {
+ _ERR("add button failed.");
+ eina_array_free(array);
+ return -1;
+ }
+
+ evas_object_smart_callback_add(btn, CLICKED,
+ _sublist_btn_clicked_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _key_down_on_sublist_btn_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN,
+ _sublist_btn_mouse_in_cb, NULL);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT,
+ _sublist_btn_mouse_out_cb, NULL);
+
+ elm_object_style_set(btn, BTN_STYLE_SUBLIST_BTN);
+
+ elm_box_pack_end(box, btn);
+ eina_array_push(array, btn);
+ }
+
+ data->array = array;
+
+ elm_object_part_content_set(data->base,
+ SWALLOW_SUBLIST, data->box);
+
+ return 0;
+}
+
+/**
+* Initialize value of mode sublist.
+*
+* @param[in]: array : eina array including mode sublist buttons.
+*
+* @return: void.
+*/
+static void _set_sublist_init_value(Eina_Array *array)
+{
+ Evas_Object *on_btn, *off_btn;
+ int mode;
+ int ret;
+
+ if (!array)
+ return;
+
+ mode = 0;
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return;
+ }
+
+ on_btn = eina_array_data_get(array, 0);
+ off_btn = eina_array_data_get(array, 1);
+ if (!on_btn || !off_btn) {
+ _ERR("there is no button in sublist array.");
+ return;
+ }
+
+ elm_object_focus_set(on_btn, EINA_TRUE);
+
+ elm_object_text_set(on_btn, ON);
+ elm_object_text_set(off_btn, OFF);
+
+ if (mode) {
+ elm_object_signal_emit(on_btn,
+ SIG_SRC_FOC_SHOW_ICON, SIG_NAME_SUBLIST);
+ elm_object_signal_emit(off_btn,
+ SIG_SRC_UNFOC_HIDE_ICON, SIG_NAME_SUBLIST);
+ } else {
+ elm_object_signal_emit(off_btn,
+ SIG_SRC_UNFOC_SHOW_ICON, SIG_NAME_SUBLIST);
+ elm_object_signal_emit(on_btn,
+ SIG_SRC_FOC_HIDE_ICON, SIG_NAME_SUBLIST);
+ }
+}
+
+/**
+* Set focus move directions among mode sublist buttons.
+*
+* @param[in]: array : the eina array including mode sublist buttons.
+*
+* @return: void.
+*/
+static void _set_sublist_btn_directions(Eina_Array *array)
+{
+ Evas_Object *on_btn, *off_btn;
+
+ if (!array)
+ return;
+
+ on_btn = eina_array_data_get(array, 0);
+ off_btn = eina_array_data_get(array, 1);
+ if (!on_btn || !off_btn) {
+ _ERR("get sublist button from array failed.");
+ return;
+ }
+
+ elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(on_btn, off_btn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_RIGHT);
+
+ elm_object_focus_next_object_set(off_btn, on_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(off_btn, off_btn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(off_btn, off_btn, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(off_btn, off_btn, ELM_FOCUS_RIGHT);
+}
+
+/**
+* Create mode sublist.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_sublist(struct _sublist_data *data)
+{
+ int ret;
+ Evas_Object *box;
+
+ if (!data || !data->base) {
+ _ERR("invalid argument.");
+ return -1;
+ }
+
+ box = utils_add_box(data->base);
+ if (!box) {
+ _ERR("add sublist box failed.");
+ return -1;
+ }
+
+ data->box = box;
+
+ ret = _add_sublist_btns(data);
+ if (ret != 0) {
+ _ERR("add sublist buttons failed.");
+ evas_object_del(data->box);
+ data->box = NULL;
+ return -1;
+ }
+
+ _set_sublist_init_value(data->array);
+ _set_sublist_btn_directions(data->array);
+
+ return 0;
+}
+
+/**
+* Destroy all the UI componets of mode sublist.
+*
+* @param[in]: base : the base layout of mode sublist.
+*
+* @return: void.
+*/
+static void _destroy(Evas_Object *base)
+{
+ struct _sublist_data *data;
+
+ if (!base)
+ return;
+
+ data = evas_object_data_get(base, SUBLIST_DATA_ID);
+ if (!data) {
+ _ERR("evas object get data failed. ID: %s", SUBLIST_DATA_ID);
+ return;
+ }
+
+ _free_sublist_data(data);
+}
+
+/**
+* Create all the UI componets of mode sublist.
+*
+* @param[in]: data : the user data.
+*
+* @return: the base layout of mode sublist.
+*/
+static Evas_Object *_create(struct _sublist_data *data)
+{
+ Evas_Object *base;
+ int ret;
+
+ if (!data || !data->win) {
+ _ERR("invalid argument.");
+ return NULL;
+ }
+
+ base = utils_add_layout(data->win);
+ if (!base) {
+ _ERR("add base layout for sublist failed.");
+ return NULL;
+ }
+
+ data->base = base;
+
+ elm_layout_file_set(base, UG_CLOCK_EDJFILE, SUBLIST_GRP);
+
+ ret = _add_sublist(data);
+ if (ret != 0) {
+ _ERR("add sublist failed.");
+ evas_object_del(data->base);
+ data->base = NULL;
+ return NULL;
+ }
+
+ evas_object_data_set(data->base, SUBLIST_DATA_ID, data);
+
+ return base;
+}
+
+/**
+* Entry of creating mode sublist.
+*
+* @parma[in]: win : window.
+* @param[in]: ug_base : the base layout of clock UI gadget.
+*
+* @return: void.
+*/
+void view_sublist_create(Evas_Object *win, Evas_Object *ug_base)
+{
+ Evas_Object *base;
+ struct _sublist_data *data;
+
+ if (!win || !ug_base) {
+ _ERR("the window or base layout is null.");
+ return;
+ }
+
+ data = calloc(1, sizeof(*data));
+ if (!data) {
+ _ERR("calloc sublist data failed.");
+ return;
+ }
+ data->win = win;
+ data->ug_base = ug_base;
+
+ base = _create(data);
+ if (!base) {
+ _ERR("create sublist failed.");
+ _free_sublist_data(data);
+ }
+}
--- /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 <KeyDefine.h>
+
+#include "dbg.h"
+#include "ug_clock_define.h"
+#include "ug_clock.h"
+#include "ug_clock_time_spin_control.h"
+#include "ug_clock_utils.h"
+
+#define ARROW_BTN_DATA_ID "arrow_btn_data_id"
+#define TIME_SPIN_DATA_ID "time_spin_ctrl_data"
+
+#define BOX_HPADDING 2
+#define BOX_VPADDING 122
+
+#define UP_ARROW (1)
+#define DOWN_ARROW (0)
+
+struct _time_spin_data {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *ug_base;
+ Evas_Object *spin_box;
+
+ int time[TIME_MAX];
+ int entry[TIME_MAX];
+
+ Eina_Array *spin_array;
+};
+
+static void _destroy(Evas_Object *base);
+
+/**
+* Free user data of time spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: void.
+*/
+static void _free_time_spin_data(struct _time_spin_data *data)
+{
+ if (!data)
+ return;
+
+ if (data->base) {
+ evas_object_del(data->base);
+ data->base = NULL;
+ }
+
+ if (data->spin_array)
+ eina_array_free(data->spin_array);
+
+ free(data);
+}
+
+/**
+* Update value of time spin.
+*
+* @param[in]: spin : the corresponding date spin whose value need to update.
+* @param[in]: date : the value to be updated.
+* @param[in]: spin_idx : the index of corresponding time spin.
+*
+* @return: void.
+*/
+static void _update_time_value(Evas_Object *btn, int *time, int btn_idx)
+{
+ int mode;
+ char buf[BUF_SIZE];
+ int ret;
+
+ if (!btn || !time)
+ return;
+ if (btn_idx < TIME_HOUR || btn_idx >= TIME_MAX)
+ return;
+
+ mode = 0;
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return;
+ }
+
+ if (btn_idx == TIME_HOUR) {
+ if (mode) {
+ if (time[btn_idx] > 23)
+ time[btn_idx] = 0;
+ if (time[btn_idx] < 0)
+ time[btn_idx] = 23;
+ } else {
+ if (time[btn_idx] > 11)
+ time[btn_idx] = 0;
+ if (time[btn_idx] < 0)
+ time[btn_idx] = 11;
+ }
+
+ snprintf(buf, sizeof(buf), "%02d", time[btn_idx]);
+ } else if (btn_idx == TIME_MINUTE) {
+ if (time[btn_idx] > 59)
+ time[btn_idx] = 0;
+ if (time[btn_idx] < 0)
+ time[btn_idx] = 59;
+
+ snprintf(buf, sizeof(buf), "%02d", time[btn_idx]);
+ } else {
+ if (time[btn_idx])
+ snprintf(buf, sizeof(buf), "%s", PM);
+ else
+ snprintf(buf, sizeof(buf), "%s", AM);
+ }
+
+ elm_object_text_set(btn, buf);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling key press event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the key press event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _time_spin_keydown_cb(void *priv,
+ Evas *e, Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *event;
+ struct _time_spin_data *data;
+ const char *keyname;
+ Eina_Array *array;
+ Evas_Object *hour_btn, *minute_btn;
+
+ if (!priv || !ei || !obj) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ data = priv;
+
+ if (!data->spin_array)
+ return;
+
+ array = data->spin_array;
+
+ hour_btn = eina_array_data_get(array, TIME_HOUR);
+ minute_btn = eina_array_data_get(array, TIME_MINUTE);
+ if (!hour_btn || !minute_btn) {
+ _ERR("eina array data get failed.");
+ return;
+ }
+
+ event = ei;
+
+ if (!event->keyname)
+ return;
+
+ keyname = event->keyname;
+
+ if (!strncmp(keyname, KEY_UP, strlen(keyname))) {
+ if (obj == hour_btn) {
+ data->time[TIME_HOUR]++;
+
+ _update_time_value(obj, data->time, TIME_HOUR);
+ } else if (obj == minute_btn) {
+ data->time[TIME_MINUTE]++;
+
+ _update_time_value(obj, data->time, TIME_MINUTE);
+ } else {
+ if (data->time[TIME_AMPM] == 0)
+ data->time[TIME_AMPM] = 1;
+ else
+ data->time[TIME_AMPM] = 0;
+
+ _update_time_value(obj, data->time, TIME_AMPM);
+ }
+ } else if (!strncmp(keyname, KEY_DOWN, strlen(keyname))) {
+ if (obj == hour_btn) {
+ data->time[TIME_HOUR]--;
+ _update_time_value(obj, data->time, TIME_HOUR);
+ } else if (obj == minute_btn) {
+ data->time[TIME_MINUTE]--;
+ _update_time_value(obj, data->time, TIME_MINUTE);
+ } else {
+ if (data->time[TIME_AMPM] == 0)
+ data->time[TIME_AMPM] = 1;
+ else
+ data->time[TIME_AMPM] = 0;
+
+ _update_time_value(obj, data->time, TIME_AMPM);
+ }
+ } else if (!strncmp(keyname, KEY_0, strlen(keyname)) ||
+ !strncmp(keyname, KEY_1, strlen(keyname)) ||
+ !strncmp(keyname, KEY_2, strlen(keyname)) ||
+ !strncmp(keyname, KEY_3, strlen(keyname)) ||
+ !strncmp(keyname, KEY_4, strlen(keyname)) ||
+ !strncmp(keyname, KEY_5, strlen(keyname)) ||
+ !strncmp(keyname, KEY_6, strlen(keyname)) ||
+ !strncmp(keyname, KEY_7, strlen(keyname)) ||
+ !strncmp(keyname, KEY_8, strlen(keyname)) ||
+ !strncmp(keyname, KEY_9, strlen(keyname))) {
+ if (obj == hour_btn) {
+ if (data->entry[TIME_HOUR] == 0) {
+ data->entry[TIME_HOUR]++;
+ data->time[TIME_HOUR] = atoi(keyname);
+ } else {
+ data->entry[TIME_HOUR]++;
+ data->time[TIME_HOUR] =
+ (data->time[TIME_HOUR] * 10) +
+ atoi(keyname);
+ data->entry[TIME_HOUR] = 0;
+
+ elm_object_focus_next(obj, ELM_FOCUS_NEXT);
+ }
+
+ _update_time_value(obj, data->time, TIME_HOUR);
+ } else if (obj == minute_btn) {
+ if (data->entry[TIME_MINUTE] == 0) {
+ data->entry[TIME_MINUTE]++;
+ data->time[TIME_MINUTE] = atoi(keyname);
+ } else {
+ data->entry[TIME_MINUTE]++;
+ data->time[TIME_MINUTE] =
+ (data->time[TIME_MINUTE] * 10) +
+ atoi(keyname);
+ data->entry[TIME_MINUTE] = 0;
+
+ elm_object_focus_next(obj, ELM_FOCUS_NEXT);
+ }
+
+ _update_time_value(obj, data->time, TIME_MINUTE);
+ } else {
+ return;
+ }
+ } else if (!strncmp(keyname, KEY_LEFT, strlen(keyname)) ||
+ !strncmp(keyname, KEY_RIGHT, strlen(keyname))) {
+ if (obj == hour_btn)
+ data->entry[TIME_HOUR] = 0;
+ else if (obj == minute_btn)
+ data->entry[TIME_MINUTE] = 0;
+ else
+ return;
+ } else if (!strncmp(keyname, KEY_BACK, strlen(keyname))) {
+ _destroy(data->base);
+ }
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _time_spin_click_cb(void *priv,
+ Evas_Object *obj, void *ei)
+{
+ struct _time_spin_data *data;
+
+ if (!priv)
+ return;
+
+ data = priv;
+
+ utils_set_time_value(data->time);
+ view_ug_clock_refresh(data->ug_base, NULL, data->time);
+ _destroy(data->base);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse in event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse in event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _time_spin_mousein_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj)
+ return;
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling mouse out event.
+*
+* @param[in]: dt : the user data.
+* @param[in]: e : the evas.
+* @param[in]: obj : the corresponding object which the mouse out event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _time_spin_mouseout_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ /* TODO: Add necessary operation when needed. */
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in]: priv : the user data.
+* @param[in]: obj : the corresponding object which the click event occurred.
+* @param[in]: ei : event info.
+*
+* @return: void.
+*/
+static void _arrowbtn_clicked_cb(void *priv, Evas_Object *obj, void *ev)
+{
+ struct _time_spin_data *data;
+ Evas_Object *cur_btn;
+ Evas_Object *btn;
+ Evas_Object *up;
+ int i;
+ int idx;
+ int flag;
+
+ if (!priv || !obj)
+ return;
+
+ data = priv;
+ cur_btn = evas_object_data_get(obj, ARROW_BTN_DATA_ID);
+ if (!cur_btn)
+ return;
+
+ up = elm_object_part_content_get(cur_btn, UP_ARROW_SWALLOW);
+ if (!up)
+ return;
+
+ if (obj == up)
+ flag = 1;
+ else
+ flag = 0;
+
+ idx = 0;
+ for (i = TIME_HOUR; i < TIME_MAX; i++) {
+ btn = eina_array_data_get(data->spin_array, i);
+
+ if (cur_btn == btn) {
+ idx = i;
+ break;
+ }
+ }
+
+ if (idx != TIME_AMPM) {
+ if (flag)
+ data->time[idx]++;
+ else
+ data->time[idx]--;
+ } else {
+ if (data->time[idx] == 0)
+ data->time[idx] = 1;
+ else
+ data->time[idx] = 0;
+ }
+
+ _update_time_value(cur_btn, data->time, idx);
+}
+
+/**
+* Create arrow buttons for time spin.
+*
+* @param[in]: data : the user data.
+* @param[in]: obj : the corresponding object which the arrow created on.
+* @param[in]: flag : 1 - up arrow button, 0 - down arrow button.
+*
+* @return: the created arrow button.
+*/
+static Evas_Object *_add_arrow_btn(struct _time_spin_data *data,
+ Evas_Object *obj, int flag)
+{
+ Evas_Object *btn;
+
+ if (!data || !data->base || !obj)
+ return NULL;
+
+ btn = utils_add_button(data->base);
+ if (!btn) {
+ _ERR("utils add button failed.");
+ return NULL;
+ }
+
+ elm_object_style_set(btn, BTN_STYLE_ARROW_BTN);
+
+ if (flag == UP_ARROW)
+ elm_object_part_content_set(obj, UP_ARROW_SWALLOW, btn);
+ else
+ elm_object_part_content_set(obj, DOWN_ARROW_SWALLOW, btn);
+
+ elm_object_focus_allow_set(btn, EINA_FALSE);
+
+ evas_object_smart_callback_add(btn, "clicked",
+ _arrowbtn_clicked_cb, data);
+
+ evas_object_data_set(btn, ARROW_BTN_DATA_ID, obj);
+ evas_object_raise(btn);
+ evas_object_repeat_events_set(btn, EINA_FALSE);
+
+ return btn;
+}
+
+/**
+* Create time spin for 12 hour mode.
+*
+* @parma[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_time_spin_without_ampm(struct _time_spin_data *data)
+{
+ Evas_Object *box;
+ Evas_Object *btn;
+ Evas_Object *uparrow, *downarrow;
+ Eina_Array *array;
+ char buf[BUF_SIZE];
+ int idx;
+
+ if (!data || !data->base || !data->spin_box) {
+ _ERR("invalid argument.");
+ return -1;
+ }
+
+ box = data->spin_box;
+ elm_box_horizontal_set(box, EINA_TRUE);
+ elm_box_padding_set(box, BOX_HPADDING, BOX_VPADDING);
+
+ array = eina_array_new(1);
+ if (!array) {
+ _ERR("new eina array failed.");
+ return -1;
+ }
+
+ for (idx = TIME_HOUR; idx < TIME_AMPM; idx++) {
+ btn = utils_add_button(data->base);
+ if (!btn) {
+ _ERR("add time spin control button failed.");
+ return -1;
+ }
+
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _time_spin_keydown_cb, data);
+ evas_object_smart_callback_add(
+ btn, "clicked", _time_spin_click_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN,
+ _time_spin_mousein_cb, NULL);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT,
+ _time_spin_mouseout_cb, NULL);
+
+ elm_object_style_set(btn, BTN_STYLE_TIME_SPIN_BTN);
+
+ snprintf(buf, sizeof(buf), "%02d", data->time[idx]);
+ elm_object_text_set(btn, buf);
+
+ eina_array_push(array, btn);
+
+ elm_box_pack_end(box, btn);
+
+ uparrow = _add_arrow_btn(data, btn, UP_ARROW);
+ if (!uparrow) {
+ _ERR("add up arrow button failed.");
+ evas_object_del(btn);
+ return -1;
+ }
+
+ downarrow = _add_arrow_btn(data, btn, DOWN_ARROW);
+ if (!downarrow) {
+ _ERR("add down arrow button failed.");
+ evas_object_del(btn);
+ evas_object_del(uparrow);
+ return -1;
+ }
+ }
+
+ elm_object_focus_set(eina_array_data_get(array, TIME_HOUR), EINA_TRUE);
+
+ data->spin_array = array;
+
+ elm_object_part_content_set(
+ data->base, SWALLOW_TIME_SPIN_2, box);
+
+ return 0;
+}
+
+/**
+* Create time spin for 24 hour mode.
+*
+* @parma[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_time_spin_with_ampm(struct _time_spin_data *data)
+{
+ Evas_Object *box;
+ Evas_Object *btn;
+ Evas_Object *uparrow, *downarrow;
+ Eina_Array *array;
+ char buf[BUF_SIZE];
+ int idx;
+
+ if (!data || !data->base || !data->spin_box) {
+ _ERR("invalid argument.");
+ return -1;
+ }
+
+ box = data->spin_box;
+ elm_box_horizontal_set(box, EINA_TRUE);
+ elm_box_padding_set(box, BOX_HPADDING, BOX_VPADDING);
+
+ array = eina_array_new(1);
+ if (!array) {
+ _ERR("new eina array failed.");
+ return -1;
+ }
+
+ for (idx = TIME_HOUR; idx < TIME_MAX; idx++) {
+ btn = utils_add_button(data->base);
+ if (!btn) {
+ _ERR("add time spin control button failed.");
+ return -1;
+ }
+
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
+ _time_spin_keydown_cb, data);
+ evas_object_smart_callback_add(
+ btn, "clicked", _time_spin_click_cb, data);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_IN,
+ _time_spin_mousein_cb, NULL);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_OUT,
+ _time_spin_mouseout_cb, NULL);
+
+ elm_object_style_set(btn, BTN_STYLE_TIME_SPIN_BTN);
+
+ if (idx != TIME_AMPM) {
+ snprintf(buf, sizeof(buf), "%02d", data->time[idx]);
+ elm_object_text_set(btn, buf);
+ } else {
+ if (data->time[idx])
+ elm_object_text_set(btn, PM);
+ else
+ elm_object_text_set(btn, AM);
+ }
+
+ eina_array_push(array, btn);
+
+ elm_box_pack_end(box, btn);
+
+ uparrow = _add_arrow_btn(data, btn, UP_ARROW);
+ if (!uparrow) {
+ _ERR("add up arrow button failed.");
+ evas_object_del(btn);
+ return -1;
+ }
+
+ downarrow = _add_arrow_btn(data, btn, DOWN_ARROW);
+ if (!downarrow) {
+ _ERR("add down arrow button failed.");
+ evas_object_del(btn);
+ evas_object_del(uparrow);
+ return -1;
+ }
+ }
+
+ elm_object_focus_set(eina_array_data_get(array, TIME_HOUR), EINA_TRUE);
+
+ data->spin_array = array;
+
+ elm_object_part_content_set(
+ data->base, SWALLOW_TIME_SPIN_1, box);
+
+ return 0;
+}
+
+/**
+* Create buttons for time spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_time_spin_btns(struct _time_spin_data *data)
+{
+ int mode;
+ int ret;
+
+ if (!data || !data->base ||
+ !data->spin_box) {
+ _ERR("invalid argument.");
+ return -1;
+ }
+
+ utils_get_time_value(data->time);
+
+ mode = 0;
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &mode);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return -1;
+ }
+
+ if (mode) {
+ ret = _add_time_spin_without_ampm(data);
+ if (ret != 0) {
+ _ERR("add buttons without ampm failed.");
+ return -1;
+ }
+ } else {
+ ret = _add_time_spin_with_ampm(data);
+ if (ret != 0) {
+ _ERR("add buttons with ampm failed.");
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+/**
+* Set focus move directions among time spin buttons.
+*
+* @param[in]: btn_array : eina array of time spin buttons.
+*
+* @return: void.
+*/
+static void _set_time_spin_btn_directions(Eina_Array *btn_array)
+{
+ Evas_Object *btn;
+ unsigned int count;
+ int idx;
+
+ if (!btn_array) {
+ _ERR("time spin control button array is null.");
+ return;
+ }
+
+ count = eina_array_count(btn_array);
+
+ for (idx = TIME_HOUR; idx < count; idx++) {
+ btn = eina_array_data_get(btn_array, idx);
+ if (!btn) {
+ _ERR("there is no button. idx: %d", idx);
+ return;
+ }
+
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
+
+ if (idx == TIME_HOUR) {
+ elm_object_focus_next_object_set(btn, btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(btn,
+ eina_array_data_get(btn_array, idx + 1),
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(btn,
+ eina_array_data_get(btn_array, idx + 1),
+ ELM_FOCUS_NEXT);
+ } else if (idx == count - 1) {
+ elm_object_focus_next_object_set(btn, btn,
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(btn,
+ eina_array_data_get(btn_array, idx - 1),
+ ELM_FOCUS_LEFT);
+ } else {
+ elm_object_focus_next_object_set(btn,
+ eina_array_data_get(btn_array, idx + 1),
+ ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(btn,
+ eina_array_data_get(btn_array, idx + 1),
+ ELM_FOCUS_NEXT);
+ elm_object_focus_next_object_set(btn,
+ eina_array_data_get(btn_array, idx - 1),
+ ELM_FOCUS_LEFT);
+ }
+ }
+}
+
+/**
+* Create time spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: 0 - Success, -1 - Fail.
+*/
+static int _add_time_spin(struct _time_spin_data *data)
+{
+ Evas_Object *box;
+ int ret;
+
+ if (!data || !data->base) {
+ _ERR("private data is null.");
+ return -1;
+ }
+
+ box = utils_add_box(data->base);
+ if (!box) {
+ _ERR("add time spin control box failed.");
+ return -1;
+ }
+ data->spin_box = box;
+
+ ret = _add_time_spin_btns(data);
+ if (ret != 0) {
+ _ERR("add time spin control buttons failed.");
+ return -1;
+ }
+
+ _set_time_spin_btn_directions(data->spin_array);
+
+ return 0;
+}
+
+/**
+* Create all UI components of time spin.
+*
+* @param[in]: data : the user data.
+*
+* @return: the base layout of time spin.
+*/
+static Evas_Object *_create(struct _time_spin_data *data)
+{
+ Evas_Object *base;
+ int onoff;
+ int ret;
+
+ if (!data || !data->win) {
+ _ERR("window for time spin control base is null.");
+ return NULL;
+ }
+
+ base = utils_add_layout(data->win);
+ if (!base) {
+ _ERR("add base layout for spin control failed.");
+ return NULL;
+ }
+ data->base = base;
+ elm_layout_file_set(base, UG_CLOCK_EDJFILE, TIME_SPIN_CTRL_GRP);
+
+ onoff = 0;
+ ret = utils_get_vconf_value(VCONF_KEY_24HOUR_MODE, &onoff);
+ if (ret != 0) {
+ _ERR("vconf get value failed.");
+ return NULL;
+ }
+
+ if (onoff)
+ elm_object_signal_emit(base, SIGNAL_NAME_TIME_SPIN_2,
+ SIGNAL_SOURCE_TIME_SPIN);
+ else
+ elm_object_signal_emit(base, SIGNAL_NAME_TIME_SPIN_1,
+ SIGNAL_SOURCE_TIME_SPIN);
+
+ ret = _add_time_spin(data);
+ if (ret != 0) {
+ _ERR("add time spin control failed.");
+ return NULL;
+ }
+
+ evas_object_data_set(data->base, TIME_SPIN_DATA_ID, data);
+
+ return base;
+}
+
+/**
+* Destroy all the UI componets of time spin.
+*
+* @param[in]: base : the base layout of time spin.
+*
+* @return: void.
+*/
+void _destroy(Evas_Object *base)
+{
+ struct _time_spin_data *data;
+
+ if (!base) {
+ _ERR("invalid argument.");
+ return;
+ }
+
+ data = evas_object_data_get(base, TIME_SPIN_DATA_ID);
+ if (!data) {
+ _ERR("evas object get data failed. ID: %s", TIME_SPIN_DATA_ID);
+ return;
+ }
+
+ _free_time_spin_data(data);
+}
+
+/**
+* Entry of creating time spin UI.
+*
+* @param[in]: win : window.
+* @param[in]: ug_base : the base layout of clock UI gadget.
+*
+* @return: void.
+*/
+void view_time_spin_ctrl_create(Evas_Object *win,
+ Evas_Object *ug_base)
+{
+ Evas_Object *base;
+ struct _time_spin_data *data;
+
+ if (!win || !ug_base) {
+ _ERR("the window of time spin control is null.");
+ return;
+ }
+
+ data = calloc(1, sizeof(*data));
+ if (!data) {
+ _ERR("calloc time spin control data memory failed.");
+ return;
+ }
+
+ data->win = win;
+ data->ug_base = ug_base;
+
+ base = _create(data);
+ if (!base) {
+ _ERR("create time spin control failed.");
+ _free_time_spin_data(data);
+ }
+}
#include <vconf.h>
#include <sysman_managed.h>
-#include <MacroDefine.h>
-#include "util.h"
+#include "dbg.h"
+#include "ug_clock_utils.h"
static struct tm *_get_current_time();
static void _set_datetime(struct tm *t);
return -1;
}
- ret = vconf_set_int((char*) key, value);
+ ret = vconf_set_int(key, value);
if (ret != 0) {
_ERR("vconf set int failed.");
return -1;
return -1;
}
- ret = vconf_get_int((char*)key, value);
+ ret = vconf_get_int(key, value);
if (ret != 0) {
_ERR("vconf get int failed.");
return -1;
static struct tm *_get_current_time()
{
time_t tt;
- struct tm *t = NULL;
+ struct tm *t;
tt = 0;
time(&tt);
- /* FIXME: memory of *t is not allocated ?? */
-
t = localtime(&tt);
return t;
INCLUDE(FindPkgConfig)
pkg_check_modules(UG_WIFI_DIRECT_PKGS REQUIRED
+ dlog
eina
edje
evas
capi-network-connection
wifi-direct
)
+ #ecore-x
+
SET(PKGS_LDFLAGS "${PKGS_LDFLAGS} ${UG_WIFI_DIRECT_PKGS_LDFLAGS}")
FOREACH(FLAG ${UG_WIFI_DIRECT_PKGS_CFLAGS})
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
SET(SRCS
- src/ug_wifi_direct.cpp
- src/WifiDirectMainView.cpp
- src/util.cpp
- ../src/WifiMgr.cpp
- ../src/WifiDirectMgr.cpp
+ src/ug_wifi_direct.c
+ src/wifi_direct_mgr.c
+ src/wifi_direct_view.c
+ src/util.c
)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../include)
-
ADD_DEFINITIONS("-DPKGNAME=\"${PROJECT_NAME}\"")
ADD_DEFINITIONS("-DUG_WIFI_DIRECT_EDJ_FILE=\"${UG_WIFI_DIRECT_EDJE_DIR}/${UG_WIFI_DIRECT_EDJ_FILE}\"")
+++ /dev/null
-#ifndef __WIFI_DIRECT_MAIN_VIEW_H__
-#define __WIFI_DIRECT_MAIN_VIEW_H__
-
-#include "UgCommon.h"
-#include "wifi-direct.h"
-
-class CWifiDirectMainView : public CBaseView, public IMouseClickedListener, public IUnfocusedListener {
-private :
- struct SWifiDirectMainView *m;
-
- static void sm_CbDeviceStateChanged(int errcode, wifi_direct_device_state_e state, void *data);
- static void sm_CbDiscoveryStateChanged(int errcode, wifi_direct_discovery_state_e state, void *data);
- void m_OnDiscoveryStateChanged(int errcode, wifi_direct_discovery_state_e state);
-
- static void sm_CbConnectionStateChanged(int errcode, wifi_direct_connection_state_e state, const char *addr, void *data);
- void m_OnConnectionStateChanged(int errcode, wifi_direct_connection_state_e state, const char *addr);
-
- static bool sm_CbConnectedPeers(wifi_direct_connected_peer_info_s *conn_info, void *data);
- bool m_OnConnectedPeers(wifi_direct_connected_peer_info_s *conn_info);
-
- static bool sm_CbDiscoverdPeers(wifi_direct_discovered_peer_info_s * discov_info, void *data);
- bool m_OnDiscoverdPeers(wifi_direct_discovered_peer_info_s * discov_info);
-
- static char *sm_GetItemLabel(void *data, Evas_Object *obj, const char *part);
-
- static Eina_Bool sm_CbConnectionInd(void *data);
-
- static void sm_CbGenlistItemSelected(void *data, Evas_Object *obj, void *event_info);
- void m_OnGenlistItemSelected(Evas_Object *obj, void *event_info);
-
- bool m_WifiDirectInit(void);
- bool m_RegisterWifiDirectCallback(void);
- void m_UnRegisterWifiDirectCallback(void);
- bool m_CreateButton(void);
- bool m_CreateGenlist(void);
- bool m_CreateActionBtns(void);
- bool m_CreateDeviceListView(void);
- void m_FillContentPart(Evas_Object *obj);
- bool m_DisplayDisconnect(void);
- bool m_CreateDisconnectPart(void);
- void m_RefreshOnText(void);
-
- void m_ProcessDiscoveryStart(void);
- void m_ProcessDiscoveryFound(void);
- void m_ProcessDiscoveryFinish(void);
-
- void m_ProcessConnectionReq(const char *addr);
- void m_ProcessConnectionProg(void);
- void m_ProcessConnectionRsp(void);
- void m_ProcessConnectionInd(void);
-
- bool m_CreateWifiDirectScan(void);
- void m_ShowActionBtn(void);
- bool m_UpdateGenlistItem(device_info *info);
-
- bool m_IsPeerExist(device_info *info);
- bool m_CreateReqPopupLayout(void);
- bool m_UpdateDeviceConnState(bool conn);
- bool m_WifiDirectCbBtnConnect(device_info *info, int is_conn);
- bool m_CreateWifiDirectDim(void);
-
-protected :
- virtual void t_OnShow(void);
- virtual void t_OnUpdate(void *data);
- virtual void t_OnHide(void);
-
-public :
- CWifiDirectMainView(const char *szViewId) : CBaseView(szViewId), IMouseClickedListener(this), IUnfocusedListener(this), m(0) {}
- virtual ~CWifiDirectMainView() {}
-
- virtual bool Create(void *data);
- virtual void Destroy(void);
- virtual Evas_Object* Base(void);
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
- virtual void OnMouseClicked(int id, Evas_Object *obj);
- virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
-};
-
-#endif /* __WIFI_DIRECT_MAIN_VIEW_H__ */
-
--- /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 __DBG_H__
+
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "ug-wifi-direct"
+
+#ifndef _ERR
+#define _ERR(fmt, args...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _DBG
+#define _DBG(fmt, args...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _INFO
+#define _INFO(fmt, args...) LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#endif /* __DBG_H__ */
#define ELM_SCALE elm_config_scale_get()
-/* View */
-#define WIFI_DIRECT_MAINVIEW "WIFI_DIRECT_MAINVIEW"
-
/*GROUP*/
#define GRP_MAIN "main_view"
#define GRP_WIFI_DIRECT_SELECT "grp_wifi_direct_select"
#define SIG_CLICKED "clicked"
#define SIG_BTN_SELECTED "btn,selected"
+/* Key defines */
+#define KEY_UP "Up"
+#define KEY_DOWN "Down"
+#define KEY_LEFT "Left"
+#define KEY_RIGHT "Right"
+#define KEY_EXIT "XF86Close"
+
+#define KEY_0 "0"
+#define KEY_1 "1"
+#define KEY_2 "2"
+#define KEY_3 "3"
+#define KEY_4 "4"
+#define KEY_5 "5"
+#define KEY_6 "6"
+#define KEY_7 "7"
+#define KEY_8 "8"
+#define KEY_9 "9"
+
#endif /* __DEFS_H__ */
#ifndef __UTIL_H__
#define __UTIL_H__
-Evas_Object *util_add_layout(Evas_Object *parent, const char *file, const char *group);
-Evas_Object *util_add_button(Evas_Object *parent, const char *style, const char *part, const char *text);
+Evas_Object *util_add_layout(Evas_Object *parent, const char *file,
+ const char *group);
+Evas_Object *util_add_button(Evas_Object *parent, const char *style,
+ const char *part, const char *text);
Evas_Object *util_add_box(Evas_Object *parent, const char *part);
-Evas_Object *util_add_progressbar(Evas_Object *parent, const char *style, const char *part);
+Evas_Object *util_add_progressbar(Evas_Object *parent,
+ const char *style, const char *part);
void util_set_cycle_focus(Evas_Object **obj, int count);
#endif /* __UTIL_H__ */
--- /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 __WIFI_DIRECT_MGR_H__
+#define __WIFI_DIRECT_MGR_H__
+
+#include "defs.h"
+#include <wifi.h>
+#include <net_connection.h>
+#include <wifi-direct.h>
+#include <Elementary.h>
+#include <Eina.h>
+
+#define WIFI_DIRECT_DISCOVERY_LISTEN_AND_SCAN 0
+#define WIFI_DIRECT_SCAN_TIMEOUT 3
+
+struct device_info {
+ char dev_name[WIFI_DIRECT_DEFAULT_BUF_LEN];
+ char mac_addr[WIFI_DIRECT_DEFAULT_BUF_LEN];
+ Eina_Bool is_conn;
+ int wps_types;
+ char wps_pin[WIFI_DIRECT_STATE_BUF_LEN];
+ char state[WIFI_DIRECT_STATE_BUF_LEN];
+};
+
+struct discovered_device_info {
+ char mac_addr[WIFI_DIRECT_DEFAULT_BUF_LEN];
+ int conn_status;
+ int wps_types;
+ char wps_pin[WIFI_DIRECT_STATE_BUF_LEN];
+};
+
+struct wifi_direct_cbs {
+ wifi_direct_device_state_changed_cb device_state_cb;
+ wifi_direct_discovery_state_chagned_cb discovery_state_cb;
+ wifi_direct_connection_state_changed_cb connection_state_cb;
+ wifi_direct_connected_peer_cb connected_peer_cb;
+ wifi_direct_discovered_peer_cb discovered_peer_cb;
+};
+
+const char *wifi_direct_mgr_err_dbg(int errcode);
+char *wifi_direct_mgr_get_device_name(void);
+char *wifi_direct_mgr_get_mac_address(void);
+int wifi_direct_mgr_register_callback(struct wifi_direct_cbs *cbs,
+ void *data);
+int wifi_direct_mgr_unregister_callback(void);
+int wifi_direct_mgr_wifi_init(void);
+int wifi_direct_mgr_wifi_fini(void);
+int wifi_direct_mgr_wifi_direct_init(void);
+int wifi_direct_mgr_wifi_direct_fini(void);
+int wifi_direct_mgr_get_state(wifi_direct_state_e *status);
+int wifi_direct_mgr_activate(void);
+int wifi_direct_mgr_deactivate(void);
+int wifi_direct_mgr_set_configure_num(void);
+int wifi_direct_mgr_foreach_discovered_peers(
+ wifi_direct_discovered_peer_cb cb, void *data);
+int wifi_direct_mgr_foreach_connected_peers(
+ wifi_direct_connected_peer_cb cb, void *data);
+int wifi_direct_mgr_start_discovery(void);
+int wifi_direct_mgr_cancel_discovery(void);
+int wifi_direct_mgr_connect(const char *mac_addr);
+int wifi_direct_mgr_disconnect(const char *mac_addr);
+int wifi_direct_mgr_reject_connection(const char *mac_addr);
+int wifi_direct_mgr_accept_connection(char *mac_addr);
+int wifi_direct_mgr_get_wps_type(Eina_Bool *is_pbc);
+int wifi_direct_mgr_set_wps_type(wifi_direct_wps_type_e *type);
+
+#endif /* __WIFI_DIRECT_MGR_H__ */
--- /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 __WIFI_DIRECT_VIEW_H__
+#define __WIFI_DIRECT_VIEW_H__
+
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+
+Evas_Object *wifi_direct_view_create(Evas_Object *win, ui_gadget_h ug);
+
+#endif /* __WIFI_DIRECT_VIEW_H__ */
+++ /dev/null
-#include <ui-gadget-module.h>
-#include "defs.h"
-#include <AppCommon.h>
-#include "util.h"
-
-#include "WifiDirectMgr.h"
-
-
-#include "WifiDirectMainView.h"
-
-const char *action_button[] = {
- TXT_REFRESH_BTN,
- TXT_CLOSE_BTN,
- TXT_STOP_BTN
-};
-
-const char *popup_button_on[] = {
- TXT_ON_BTN,
- TXT_OFF_BTN
-};
-
-static const char *popup_button_conn[] = {
- TXT_CONNECT,
- TXT_DISCONNECT
-};
-
-static const char *popup_button_req[] = {
- TXT_YES,
- TXT_NO
-};
-
-static const char *part_req[] = {
- PART_YES,
- PART_NO
-};
-
-enum action_btn_enum {
- ACTION_BTN_REFRESH,
- ACTION_BTN_CLOSE,
- ACTION_BTN_STOP
-};
-enum direct_swith_enum {
- DIRECT_ON = 0,
- DIRECT_OFF
-};
-
-struct SWifiDirectMainView {
- ui_gadget_h ug;
-
- Evas_Object *win;
- Evas_Object *base;
- Evas_Object *genlist;
- Evas_Object *on_btn;
- Evas_Object *direct_popup;
- Evas_Object *connect_popup;
- Evas_Object *dim_ly;
- Evas_Object *btn_refresh;
- Evas_Object *btn_close;
- Evas_Object *btn_stop;
- Evas_Object *scan_ly;
- Evas_Object *scan_pb;
- Evas_Object *no_conn_ly;
- Evas_Object *prog_popup;
- Evas_Object *req_popup;
-
- Elm_Genlist_Item_Class *itc;
- Elm_Object_Item *popup_item;
- Eina_List *item_list;
- Ecore_Timer *timer;
-
- int conn_idx;
- int direct_on_flag;
- int finish_flag;
- char *req_addr;
-
-
- CViewMgr *pViewMgr;
- CWifiDirectMgr *pWifiDirectMgr;
-};
-
-
-void CWifiDirectMainView::sm_CbDeviceStateChanged(int errcode, wifi_direct_device_state_e state, void *data)
-{
- bool ret = false;
- SWifiDirectMainView *m;
-
- if (!data) {
- _ERR("The param is invalid.");
- return;
- }
-
- m = (SWifiDirectMainView *) data;
-
- if (state != WIFI_DIRECT_DEVICE_STATE_ACTIVATED) {
- elm_genlist_clear(m->genlist);
- return;
- }
-
- ret = m->pWifiDirectMgr->SetMaxClient();
- if (ret != true) {
- _ERR("set configure num failed.");
- return;
- }
-
- ret = m->pWifiDirectMgr->StartDiscovery();
- if (ret != true)
- _ERR("start discovery failed.");
-}
-
-
-void CWifiDirectMainView::sm_CbDiscoveryStateChanged(int errcode, wifi_direct_discovery_state_e state, void *data)
-{
- CWifiDirectMainView *instance = NULL;
-
- if (!state || !data) {
- _ERR("data is invalid.");
- return;
- }
-
- instance = (CWifiDirectMainView *) data;
- instance->m_OnDiscoveryStateChanged(errcode, state);
-}
-
-
-void CWifiDirectMainView::m_OnDiscoveryStateChanged(int errcode, wifi_direct_discovery_state_e state)
-{
- switch (state) {
- case WIFI_DIRECT_DISCOVERY_STARTED:
- m_ProcessDiscoveryStart();
- break;
- case WIFI_DIRECT_DISCOVERY_FOUND:
- m_ProcessDiscoveryFound();
- break;
- case WIFI_DIRECT_DISCOVERY_FINISHED:
- m_ProcessDiscoveryFinish();
- break;
- default:
- break;
- }
-}
-
-
-void CWifiDirectMainView::sm_CbConnectionStateChanged(int errcode, wifi_direct_connection_state_e state, const char *addr, void *data)
-{
- CWifiDirectMainView *instance = NULL;
-
- if (!state || !data) {
- _ERR("data is invalid.");
- return;
- }
-
- instance = (CWifiDirectMainView *) data;
- instance->m_OnConnectionStateChanged(errcode, state, addr);
-}
-
-
-void CWifiDirectMainView::m_OnConnectionStateChanged(int errcode, wifi_direct_connection_state_e state, const char *addr)
-{
- if (!state || !addr) {
- _ERR("The param is invalid.");
- return;
- }
-
- switch (state) {
- case WIFI_DIRECT_CONNECTION_REQ:
- m_ProcessConnectionReq(addr);
- break;
- case WIFI_DIRECT_CONNECTION_IN_PROGRESS:
- m_ProcessConnectionProg();
- break;
- case WIFI_DIRECT_CONNECTION_RSP:
- m_ProcessConnectionRsp();
- break;
- case WIFI_DIRECT_DISCONNECTION_IND:
- m_ProcessConnectionInd();
- break;
- default:
- break;
- }
-}
-
-
-bool CWifiDirectMainView::sm_CbConnectedPeers(wifi_direct_connected_peer_info_s *conn_info, void *data)
-{
- CWifiDirectMainView *instance = NULL;
-
- if (!data) {
- _ERR("data is invalid.");
- return false;
- }
-
- instance = (CWifiDirectMainView *) data;
- return instance->m_OnConnectedPeers(conn_info);
-}
-
-
-bool CWifiDirectMainView::m_OnConnectedPeers(wifi_direct_connected_peer_info_s *conn_info)
-{
- struct device_info *info;
- bool ret = false;
-
- if (!conn_info) {
- _ERR("The param is NULL.");
- return false;
- }
-
- info = (struct device_info *) calloc(1, sizeof(*info));
- if (!info) {
- _ERR("calloc failed.");
- return false;
- }
-
- strncpy(info->dev_name, conn_info->device_name, WIFI_DIRECT_DEFAULT_BUF_LEN);
- strncpy(info->mac_addr, conn_info->mac_address, WIFI_DIRECT_DEFAULT_BUF_LEN);
- info->is_conn = true;
-
- ret = m_UpdateGenlistItem(info);
- if (ret != true) {
- _ERR("update genlist view failed.");
- free(info);
- return false;
- }
-
- return true;
-}
-
-
-bool CWifiDirectMainView::sm_CbDiscoverdPeers(wifi_direct_discovered_peer_info_s * discov_info, void *data)
-{
- CWifiDirectMainView *instance = NULL;
-
- if (!data) {
- _ERR("data is invalid.");
- return false;
- }
-
- instance = (CWifiDirectMainView *) data;
- instance->m_OnDiscoverdPeers(discov_info);
- return true;
-}
-
-
-bool CWifiDirectMainView::m_OnDiscoverdPeers(wifi_direct_discovered_peer_info_s * discov_info)
-{
- struct device_info *info;
- bool ret = false;
-
- if (!discov_info) {
- _ERR("The param is invalid.");
- return false;
- }
-
- info = (struct device_info *) calloc(1, sizeof(*info));
- if (!info) {
- _ERR("calloc failed.");
- return false;
- }
-
- strncpy(info->dev_name, discov_info->device_name, WIFI_DIRECT_DEFAULT_BUF_LEN);
- strncpy(info->mac_addr, discov_info->mac_address, WIFI_DIRECT_DEFAULT_BUF_LEN);
- info->is_conn = (Eina_Bool) discov_info->is_connected;
- info->wps_types = discov_info->supported_wps_types;
-
- ret = m_UpdateGenlistItem(info);
- if (ret != true) {
- _ERR("update genlist view failed.");
- free(info);
- return false;
- }
-
- return true;
-}
-
-
-char *CWifiDirectMainView::sm_GetItemLabel(void *data, Evas_Object *obj, const char *part)
-{
- struct device_info *info;
- char buf_name[WIFI_DIRECT_DEFAULT_BUF_LEN];
-
- if (!data) {
- _ERR("data is NULL.");
- return NULL;
- }
-
- info = (struct device_info *) data;
-
- memset(&buf_name, 0x00, WIFI_DIRECT_DEFAULT_BUF_LEN);
- if (!strcmp(part, TXT_ELM_TEXT)) {
- strncpy(buf_name, info->dev_name, WIFI_DIRECT_HALF_BUF_LEN);
- strncat(buf_name, TXT_COLON, WIFI_DIRECT_COLON_LEN);
- strncat(buf_name, info->state, WIFI_DIRECT_HALF_BUF_LEN);
-
- return strdup(buf_name);
- }
-
- return NULL;
-}
-
-
-void CWifiDirectMainView::t_OnShow()
-{
- _DBG();
-
- evas_object_show(m->base);
-
- CBaseView::t_OnShow();
-}
-
-
-void CWifiDirectMainView::t_OnUpdate(void *data)
-{
- _DBG();
-
- evas_object_show(m->base);
-}
-
-
-void CWifiDirectMainView::t_OnHide()
-{
- _DBG();
-
- evas_object_hide(m->base);
-
- CBaseView::t_OnHide();
-}
-
-
-Eina_Bool CWifiDirectMainView::sm_CbConnectionInd(void *data)
-{
- bool ret = false;
- SWifiDirectMainView *m;
-
- if (!data) {
- _ERR("the param is invalid.");
- return ECORE_CALLBACK_CANCEL;
- }
-
- m = (SWifiDirectMainView *) data;
-
- ret = m->pWifiDirectMgr->StartDiscovery();
- if (ret != true)
- _ERR("start discovery failed.");
-
- m->timer = NULL;
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-void CWifiDirectMainView::sm_CbGenlistItemSelected(void *data, Evas_Object *obj, void *event_info)
-{
- CWifiDirectMainView *instance = NULL;
-
- if (!data) {
- _ERR("data is invalid.");
- return;
- }
-
- instance = (CWifiDirectMainView *) data;
- instance->m_OnGenlistItemSelected(obj, event_info);
-}
-
-
-void CWifiDirectMainView::m_OnGenlistItemSelected(Evas_Object *obj, void *event_info)
-{
- Elm_Object_Item *gen_item;
- Evas_Object *layout, *box, *item_btn;
- Evas_Object *btn[BTN_DIRECT];
- struct device_info *info;
- int cur_idx;
- int i;
- bool ret = false;
- int btn_x, btn_y, btn_w, btn_h;
- int move_x, move_y;
-
- if (!obj || !event_info) {
- _ERR("The param is invalid.");
- return;
- }
-
- if (!m->dim_ly) {
- ret = m_CreateWifiDirectDim();
- if (ret != true) {
- Destroy();
- return;
- }
- }
-
- evas_object_show(m->dim_ly);
-
- gen_item = (Elm_Object_Item *) event_info;
- m->popup_item = gen_item;
-
- layout = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE, GRP_WIFI_DIRECT_SELECT);
- if (!layout) {
- _ERR("add connect popup failed.");
- return;
- }
-
- box = util_add_box(layout, PART_SWALLOW_CONTENT);
- if (!box) {
- _ERR("add box failed.");
- evas_object_del(layout);
- return;
- }
-
- for (i = 0; i < BTN_DIRECT; i++) {
- btn[i] = util_add_button(box, STYLE_POPUP_BUTTON, NULL, _(popup_button_conn[i]));
- if (!btn[i]) {
- _ERR("add connect btn failed.");
- evas_object_del(layout);
- return;
- }
-
- elm_box_pack_end(box, btn[i]);
-#if 0
- evas_object_event_callback_add(btn[i], EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
- }
- //evas_object_smart_callback_add(btn[i], SIG_CLICKED, _item_conn_btn_clicked_cb, priv);
- Connect(btn[0], 13);
- Connect(btn[1], 14);
-
- cur_idx = elm_genlist_item_index_get(gen_item);
- if (cur_idx < 0)
- return;
-
- info = (struct device_info *) eina_list_nth(m->item_list, cur_idx);
- if (!info)
- return;
-
- if (info->is_conn)
- elm_object_signal_emit(btn[DIRECT_ON], SIG_BTN_SELECTED, PROG);
- else
- elm_object_signal_emit(btn[DIRECT_OFF], SIG_BTN_SELECTED, PROG);
-
- util_set_cycle_focus(btn, BTN_DIRECT);
-
- item_btn = elm_object_item_track(gen_item);
- if (!item_btn) {
- _ERR("get genlist item track failed.");
- evas_object_del(layout);
- return;
- }
-
- evas_object_geometry_get(item_btn, &btn_x, &btn_y, &btn_w, &btn_h);
-
- move_x = btn_x + btn_w - POPUP_WIDTH * HALF_SCALE - POPUP_RIGHT;
- move_y = btn_y + btn_h;
- evas_object_move(layout, move_x * ELM_SCALE, move_y * ELM_SCALE);
- m->connect_popup = layout;
-
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _popup_back_pressed_cb, priv);
- Connect(layout, 15);
-
- elm_object_focus_set(btn[0], EINA_TRUE);
-}
-
-
-bool CWifiDirectMainView::m_WifiDirectInit(void)
-{
-
- if(!CWifiDirectMgr::Initialize()) {
- return false;
- }
-
- m->pWifiDirectMgr = NULL;
- m->pWifiDirectMgr = CWifiDirectMgr::GetInstance();
- ASSERT(m->pWifiDirectMgr);
-
- return true;
-}
-
-
-bool CWifiDirectMainView::m_RegisterWifiDirectCallback(void)
-{
- if(!m->pWifiDirectMgr->SetDeviceStateChangedCb(sm_CbDeviceStateChanged, m)) {
- return false;
- }
-
- if(!m->pWifiDirectMgr->SetDiscoveryStateChangedCb(sm_CbDiscoveryStateChanged, this)) {
- return false;
- }
-
- if(!m->pWifiDirectMgr->SetConnectionStateChangedCb(sm_CbConnectionStateChanged, this)) {
- return false;
- }
- return true;
-}
-
-
-void CWifiDirectMainView::m_UnRegisterWifiDirectCallback(void)
-{
- m->pWifiDirectMgr->UnSetConnectionStateChangedCb();
- m->pWifiDirectMgr->UnSetDiscoveryStateChangedCb();
- m->pWifiDirectMgr->UnSetDeviceStateChangedCb();
- m->pWifiDirectMgr->UnSetClientIpAddrAssignedCb();
-}
-
-
-bool CWifiDirectMainView::m_CreateButton(void)
-{
- Evas_Object *on_btn;
-
- on_btn = util_add_button(m->base, STYLE_WIFI_DIRECT_BTN, PART_WIFI_DIRECT_ON, TXT_WIFI_DIRECT);
- if (!on_btn) {
- _ERR("Add wifi direct button failed.");
- return false;
- }
-
- elm_object_focus_allow_set(on_btn, EINA_TRUE);
- elm_object_focus_set(on_btn, EINA_TRUE);
- elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_LEFT);
-
- //evas_object_smart_callback_add(on_btn, SIG_CLICKED, _wifi_direct_btn_clicked_cb, priv);
-#if 0
- evas_object_event_callback_add(on_btn, EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
- Connect(m->on_btn, 1);
- m->on_btn = on_btn;
-
- m_RefreshOnText();
-
- return true;
-}
-
-
-bool CWifiDirectMainView::m_CreateGenlist(void)
-{
- Evas_Object *genlist;
- Elm_Genlist_Item_Class *itc;
-
- genlist = elm_genlist_add(m->base);
- if (!genlist) {
- _ERR("add genlist failed.");
- return false;
- }
-
- itc = elm_genlist_item_class_new();
- if (!itc) {
- _ERR("genlist item class new failed.");
- evas_object_del(genlist);
- return false;
- }
-
- m->genlist = genlist;
-
- itc->item_style = STYLE_TEXT_ICON;
- itc->func.text_get = sm_GetItemLabel;
- itc->func.content_get = NULL;
- itc->func.state_get = NULL;
- itc->func.del = NULL;
-
- m->itc = itc;
-
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_focus_next_object_set(genlist, genlist, ELM_FOCUS_LEFT);
-
- return true;
-}
-
-
-bool CWifiDirectMainView::m_CreateActionBtns(void)
-{
- Evas_Object *btn_refresh;
- Evas_Object *btn_close;
-
- btn_refresh = util_add_button(m->base, STYLE_ACTION_BUTTON, PART_REFRESH_BTN, _(action_button[ACTION_BTN_REFRESH]));
- btn_close = util_add_button(m->base, STYLE_ACTION_BUTTON, PART_CLOSE_BTN, _(action_button[ACTION_BTN_CLOSE]));
-
- m->btn_refresh = btn_refresh;
- m->btn_close = btn_close;
-
-#if 0
- evas_object_event_callback_add(m->btn_refresh, EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
- evas_object_event_callback_add(m->btn_close, EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
- //evas_object_smart_callback_add(m->btn_refresh, SIG_CLICKED, _refresh_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(m->btn_close, SIG_CLICKED, _close_btn_clicked_cb, priv);
- Connect(m->btn_refresh, 4);
- Connect(m->btn_close, 5);
-
- return true;
-}
-
-
-bool CWifiDirectMainView::m_CreateDeviceListView(void)
-{
- wifi_direct_state_e status;
- bool ret = false;
-
- if (m->no_conn_ly)
- evas_object_hide(m->no_conn_ly);
-
- ret = m->pWifiDirectMgr->GetState(&status);
- if (ret != true) {
- _ERR("get state failed.");
- return false;
- }
-
- if (status < WIFI_DIRECT_STATE_ACTIVATED) {
- ret = m->pWifiDirectMgr->Activate();
- if (ret != true) {
- _ERR("activate failed.");
- return false;
- }
- } else {
- ret = m->pWifiDirectMgr->SetMaxClient();
- if (ret != true) {
- _ERR("set configure num failed.");
- return false;
- }
-
- ret = m->pWifiDirectMgr->StartDiscovery();
- if (ret != true) {
- _ERR("start discovery failed.");
- return false;
- }
- }
-
- m_FillContentPart(m->genlist);
-
- elm_object_focus_set(m->btn_refresh, EINA_TRUE);
- return true;
-}
-
-
-void CWifiDirectMainView::m_FillContentPart(Evas_Object *obj)
-{
- Evas_Object *old_obj;
-
- old_obj = elm_object_part_content_get(m->base, PART_GENLIST_ITEMS);
- if (old_obj) {
- elm_object_part_content_unset(m->base, PART_GENLIST_ITEMS);
- evas_object_hide(old_obj);
- }
-
- elm_object_part_content_set(m->base, PART_GENLIST_ITEMS, obj);
- evas_object_show(obj);
-}
-
-
-bool CWifiDirectMainView::m_DisplayDisconnect(void)
-{
- bool ret = false;
-
- if (!m->no_conn_ly) {
- ret = m_CreateDisconnectPart();
- if (ret != true) {
- _ERR("m_CreateDisconnectPart() failed.");
- return false;
- }
- }
-
- m_FillContentPart(m->no_conn_ly);
-
- elm_object_part_content_unset(m->base, PART_REFRESH_BTN);
- evas_object_hide(m->btn_refresh);
- elm_object_part_content_set(m->base, PART_REFRESH_BTN, m->btn_close);
- evas_object_show(m->btn_close);
-
- //evas_object_smart_callback_add(m->btn_close, SIG_CLICKED, _close_btn_clicked_cb, priv);
- Connect(m->btn_close, 6);
-#if 0
- evas_object_event_callback_add(m->btn_close, EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
- return true;
-}
-
-
-bool CWifiDirectMainView::m_CreateDisconnectPart(void)
-{
- Evas_Object *ly;
-
- ly = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE, GRP_WIFIDIRECT_DISCONNECT_LY);
- if (!ly) {
- _ERR("Add noconnect_ly failed.");
- return false;
- }
-
- elm_object_part_text_set(ly, PART_DISCONNECT_TEXT, TXT_WIFIDIRECT_NONE);
-
- m->no_conn_ly = ly;
- evas_object_hide(ly);
-
- return true;
-}
-
-
-void CWifiDirectMainView::m_RefreshOnText(void)
-{
- if (m->scan_ly)
- evas_object_hide(m->scan_ly);
-
- if (m->direct_on_flag == DIRECT_ON)
- elm_object_part_text_set(m->on_btn, PART_WIFI_DIRECT_SELECT, _(popup_button_on[DIRECT_ON]));
- else
- elm_object_part_text_set(m->on_btn, PART_WIFI_DIRECT_SELECT, _(popup_button_on[DIRECT_OFF]));
-}
-
-
-void CWifiDirectMainView::m_ProcessDiscoveryStart(void)
-{
- bool ret = false;
- struct device_info *info;
- void *obj;
-
- if (m->genlist)
- elm_genlist_clear(m->genlist);
-
- if (m->item_list)
- EINA_LIST_FREE(m->item_list, obj)
- {
- info = (struct device_info *) obj;
- free(info);
- }
-
- ret = m->pWifiDirectMgr->GetAllConnectedPeerInfo(sm_CbConnectedPeers, this);
- if (ret != true) {
- _ERR("foreach connected peers failed ");
- return;
- }
-
- ret = m_CreateWifiDirectScan();
- if (ret != true)
- _ERR("m_CreateWifiDirectScan() failed ");
-}
-
-
-void CWifiDirectMainView::m_ProcessDiscoveryFound(void)
-{
- bool ret = false;
-
- ret = m->pWifiDirectMgr->GetAllDicoveredPeerInfo(sm_CbDiscoverdPeers, this);
- if (ret != true)
- _ERR("foreach connected peers failed ");
-}
-
-
-void CWifiDirectMainView::m_ProcessDiscoveryFinish(void)
-{
- elm_object_part_content_unset(m->base, PART_REFRESH_BTN);
- evas_object_hide(m->btn_stop);
-
- m_ShowActionBtn();
-
- m_FillContentPart(m->genlist);
-}
-
-
-void CWifiDirectMainView::m_ProcessConnectionReq(const char *addr)
-{
- Eina_Bool is_pbc;
- bool ret = false;
-
- if (!addr) {
- _ERR("the param is invalid.");
- return;
- }
-
- ret = m->pWifiDirectMgr->GetWPStype(&is_pbc);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("Get wps type failed.");
- return;
- }
-
- m->req_addr = strdup(addr);
- if (!m->req_addr) {
- _ERR("strdup wrong.");
- return;
- }
-
- if (is_pbc) {
- ret = m_CreateReqPopupLayout();
- if (ret != true)
- _ERR("Create rep popup failed.");
- }
-}
-
-
-void CWifiDirectMainView::m_ProcessConnectionProg(void)
-{
- Evas_Object *layout;
- char title[MAX_STRING_LENTH];
- int x, y, w, h;
- int move_x, move_y;
-
- if (m->dim_ly)
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE, GRP_CONNECT_ACCEPT);
- if (!layout) {
- _ERR("add con_popup layout failed.");
- return;
- }
-
- memset(&title, 0x00, MAX_STRING_LENTH);
- snprintf(title, MAX_STRING_LENTH - 1, "%s", TXT_CONN_PROG);
- elm_object_part_text_set(layout, PART_TITLE, title);
-
- evas_object_geometry_get(m->on_btn, &x, &y, &w, &h);
- move_x = x + w - POPUP_WIDTH * HALF_SCALE - POPUP_RIGHT;
- move_y = y + CENTER_HEIGHT;
- evas_object_move(layout, move_x * ELM_SCALE, move_y * ELM_SCALE);
-
- m->prog_popup = layout;
-}
-
-
-void CWifiDirectMainView::m_ProcessConnectionRsp(void)
-{
- struct device_info *info;
- int cur_index;
-
- cur_index = m->conn_idx;
- info = (struct device_info *) eina_list_nth(m->item_list, cur_index);
- if (!info)
- return;
-
- info->is_conn = true;
- strncpy(info->state, TXT_CONNECT, WIFI_DIRECT_STATE_BUF_LEN);
-
- elm_genlist_item_update(m->popup_item);
-
- if (m->dim_ly)
- evas_object_hide(m->dim_ly);
-
- if (m->prog_popup) {
- evas_object_del(m->prog_popup);
- m->prog_popup = NULL;
- }
-
- if (m->connect_popup) {
- evas_object_del(m->connect_popup);
- m->connect_popup = NULL;
- }
-}
-
-
-void CWifiDirectMainView::m_ProcessConnectionInd(void)
-{
- Ecore_Timer *timer;
-
- timer = ecore_timer_add(HANDLER_INTERVAL, sm_CbConnectionInd, m);
- if (!timer) {
- _ERR("add timer failed.");
- return;
- }
-
- m->timer = timer;
-}
-
-
-bool CWifiDirectMainView::m_CreateWifiDirectScan(void)
-{
- Evas_Object *ly;
- Evas_Object *pb;
- Evas_Object *btn;
-
-
- ly = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE,
- GRP_WIFIDIRECT_SCAN_LY);
- if (!ly) {
- _ERR("Add scan_ly failed.");
- return false;
- }
-
- m->scan_ly = ly;
-
- elm_object_part_content_unset(m->base, PART_REFRESH_BTN);
- evas_object_hide(m->btn_refresh);
-
- elm_object_part_content_unset(m->base, PART_CLOSE_BTN);
- evas_object_hide(m->btn_close);
-
- pb = util_add_progressbar(ly, STYLE_SEARCH_PROGRESS, PART_SEARCH_IMAGE);
- if (!pb) {
- _ERR("Add progressbar failed.");
- goto error;
- }
-
- btn = util_add_button(m->base, STYLE_ACTION_BUTTON, PART_REFRESH_BTN, _(action_button[ACTION_BTN_STOP]));
- if (!btn) {
- _ERR("Add stop button failed.");
- goto error;
- }
-
- m->scan_pb = pb;
- m->btn_stop = btn;
-
- elm_object_focus_set(m->btn_stop, EINA_TRUE);
-#if 0
- evas_object_event_callback_add(m->btn_stop, EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
- //evas_object_smart_callback_add(m->btn_stop, SIG_CLICKED, _stop_btn_clicked_cb, priv);
- Connect(m->btn_stop, 7);
-
- m_FillContentPart(m->scan_ly);
-
- return true;
-
-error:
- evas_object_del(ly);
- return false;
-}
-
-
-void CWifiDirectMainView::m_ShowActionBtn(void)
-{
- Evas_Object *btn;
-
- if (!m->btn_refresh || !m->btn_close) {
- _ERR("action btn NULL!");
- return;
- }
-
- btn = elm_object_part_content_get(m->base, PART_REFRESH_BTN);
- if (btn) {
- elm_object_part_content_unset(m->base, PART_REFRESH_BTN);
- evas_object_hide(btn);
- }
-
- elm_object_part_content_set(m->base, PART_REFRESH_BTN, m->btn_refresh);
- evas_object_show(m->btn_refresh);
-
- elm_object_part_content_set(m->base, PART_CLOSE_BTN, m->btn_close);
- evas_object_show(m->btn_close);
-
- //evas_object_smart_callback_add(m->btn_refresh, SIG_CLICKED, _refresh_btn_clicked_cb, priv);
- //evas_object_smart_callback_add(m->btn_close, SIG_CLICKED, _close_btn_clicked_cb, priv);
- Connect(m->btn_refresh, 8);
- Connect(m->btn_close, 9);
-#if 0
- evas_object_event_callback_add(m->btn_refresh, EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
- evas_object_event_callback_add(m->btn_close, EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
-}
-
-
-bool CWifiDirectMainView::m_UpdateGenlistItem(device_info *info)
-{
- bool exist;
-
- if (!info) {
- _ERR("The param is invalid.");
- return false;
- }
-
- exist = m_IsPeerExist(info);
- if (!exist) {
- m->item_list = eina_list_append(m->item_list, info);
-
- if (info->is_conn)
- strncpy(info->state, TXT_CONNECT, WIFI_DIRECT_STATE_BUF_LEN);
- else
- strncpy(info->state, TXT_DISCONNECT, WIFI_DIRECT_STATE_BUF_LEN);
-
- elm_genlist_item_append(m->genlist, m->itc, info, NULL, ELM_GENLIST_ITEM_NONE, sm_CbGenlistItemSelected, (void *)this);
- }
-
- return true;
-}
-
-
-bool CWifiDirectMainView::m_IsPeerExist(device_info *new_info)
-{
- struct device_info *cur_info;
- void *obj;
- Eina_List *l;
-
- if (!new_info) {
- _ERR("The param is invalid.");
- return false;
- }
-
- if (!m->item_list) {
- _ERR("The list is NULL now.");
- return false;
- }
-
- EINA_LIST_FOREACH(m->item_list, l, obj) {
- cur_info = (struct device_info *) obj;
- if (!strncmp(cur_info->mac_addr, new_info->mac_addr, WIFI_DIRECT_DEFAULT_BUF_LEN - 1))
- return true;
- }
-
- return false;
-}
-
-
-bool CWifiDirectMainView::m_CreateReqPopupLayout(void)
-{
- Evas_Object *layout;
- Evas_Object *btn[BTN_DIRECT];
- int i, x, y, w, h;
-
- if (!m->base) {
- _ERR("the param is invalid.");
- return false;
- }
-
- layout = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE, GRP_CONNECT_ACCEPT);
- if (!layout) {
- _ERR("elm_layout_add() failed.");
- return false;
- }
-
- for (i = 0; i < BTN_DIRECT; i++) {
- btn[i] = util_add_button(layout, STYLE_POPUP_BUTTON, part_req[i], _(popup_button_req[i]));
- if (!btn[i]) {
- _ERR("add btn req failed.");
- evas_object_del(layout);
- return false;
- }
-
-#if 0
- evas_object_event_callback_add(btn[i], EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
- }
- //evas_object_smart_callback_add(btn[i], SIG_CLICKED, _req_btn_clicked_cb, priv);
- Connect(btn[0], 10);
- Connect(btn[1], 11);
-
- evas_object_geometry_get(m->genlist, &x, &y, &w, &h);
- evas_object_move(layout, (x + RSP_X) * ELM_SCALE, (y + RSP_Y) * ELM_SCALE);
-
- m->req_popup = layout;
-
- elm_object_focus_set(btn[DIRECT_ON], EINA_TRUE);
-
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _popup_back_pressed_cb, priv);
- Connect(layout, 12);
-
- return true;
-}
-
-
-bool CWifiDirectMainView::m_UpdateDeviceConnState(bool conn)
-{
- struct device_info *cur_info;
- void *obj;
- Eina_List *l;
-
- EINA_LIST_FOREACH(m->item_list, l, obj) {
- cur_info = (struct device_info *) obj;
- if (!strncmp(cur_info->mac_addr, m->req_addr, WIFI_DIRECT_DEFAULT_BUF_LEN - 1)) {
- cur_info->is_conn = conn;
- return true;
- }
- }
-
- return false;
-}
-
-
-bool CWifiDirectMainView::m_WifiDirectCbBtnConnect(struct device_info *info, int is_conn)
-{
- int ret = -1;
- wifi_direct_wps_type_e wps_type;
-
- if (!info) {
- _ERR("parameter is NULL!");
- return false;
- }
-
- if (is_conn) {
- if ((info->wps_types & WIFI_DIRECT_WPS_TYPE_PBC) == WIFI_DIRECT_WPS_TYPE_PBC)
- wps_type = WIFI_DIRECT_WPS_TYPE_PBC;
- else if ((info->wps_types & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD)
- wps_type = WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD;
- else if ((info->wps_types & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY)
- wps_type = WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY;
-
- ret = m->pWifiDirectMgr->SetWPStype(&wps_type);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct set wps type failev!");
- return false;
- }
-
- ret = m->pWifiDirectMgr->Connect(info->mac_addr);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_connect:%s fail!", info->dev_name);
- return false;
- }
- } else {
- ret = m->pWifiDirectMgr->Disconnect(info->mac_addr);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_disconnect:%s fail!", info->dev_name);
- return false;
- }
- }
- return true;
-}
-
-
-bool CWifiDirectMainView::m_CreateWifiDirectDim(void)
-{
- Evas_Object *ly;
-
- ly = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE, GRP_DIM_LY);
- if (!ly) {
- _ERR("Add dim layout failed.");
- return false;
- }
-
- m->dim_ly = ly;
-
- evas_object_hide(ly);
-
- return true;
-}
-
-
-bool CWifiDirectMainView::Create(void *data)
-{
- _DBG();
- ASSERT(!m);
-
- _CREATE_BEGIN{
- _CHECK(m = new SWifiDirectMainView)
- _CHECK(m->win = CViewMgr::GetInstance()->Window())
- _CHECK(m_WifiDirectInit())
- _CHECK(m_RegisterWifiDirectCallback())
- _CHECK(m->base = util_add_layout(m->win, UG_WIFI_DIRECT_EDJ_FILE, GRP_MAIN))
- _CHECK(m_CreateButton())
- _CHECK(m_CreateGenlist())
- _CHECK(m_CreateActionBtns())
- _CHECK(m_CreateDeviceListView())
- _COMMAND {
- char descrption[MAX_STRING_LENTH];
- memset(&descrption, 0x00, MAX_STRING_LENTH);
- snprintf(descrption, MAX_STRING_LENTH - 1, "%s", TXT_WIFI_DIRECT_DISC);
- elm_object_part_text_set(m->base, PART_DESCRIPTION, descrption);
- }
- _WHEN_SUCCESS {
- m->pViewMgr = CViewMgr::GetInstance();
- //evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN, _base_layout_key_down_cb, priv);
- Connect(m->base, 0);
- evas_object_show(m->base);
- }
- _CHECK_FAIL{/* m_CreateDeviceListView() */}
- _CHECK_FAIL{/* m_CreateActionBtns() */}
- _CHECK_FAIL{/* m_CreateGenlist() */}
- _CHECK_FAIL{/* m_CreateButton() */}
- _CHECK_FAIL{ evas_object_del(m->base); }
- _CHECK_FAIL{m_UnRegisterWifiDirectCallback();}
- _CHECK_FAIL{CWifiDirectMgr::Finalize();}
- _CHECK_FAIL{/* m->win = CViewMgr::GetInstance()->Window() */}
- _CHECK_FAIL{ delete m; m = NULL; }
- } _CREATE_END_AND_CATCH{ return false; }
-
- return true;
-}
-
-
-void CWifiDirectMainView::Destroy()
-{
- ASSERT(m);
- _DBG();
-
- struct device_info *info;
- void *obj;
-
- if (!m->item_list)
- EINA_LIST_FREE(m->item_list, obj)
- {
- info = (struct device_info *) obj;
- free(info);
- }
-
- if (m->dim_ly)
- evas_object_del(m->dim_ly);
-
- if (m->scan_ly)
- evas_object_del(m->scan_ly);
-
- if (m->timer)
- ecore_timer_del(m->timer);
-
- m_UnRegisterWifiDirectCallback();
- CWifiDirectMgr::Finalize();
-
- if (m->base)
- evas_object_del(m->base);
-
- CBaseView::Destroy();
- delete m;
- m = NULL;
-}
-
-
-Evas_Object* CWifiDirectMainView::Base(void)
-{
- ASSERT(m);
-
- return m->base;
-}
-
-
-void CWifiDirectMainView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- /* ID list */
- /* 0 m->base */
- /* 1 */
-
- if (!ev->keyname) {
- _ERR("ev->keyname is NULL.");
- return;
- }
-
- switch(id) {
- case 0:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE) || !strcmp(ev->keyname, KEY_EXIT)) {
- ug_destroy_me(m->ug);
- }
- break;
- case 12:
- case 15:
- case 16:
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- if (m->dim_ly)
- evas_object_hide(m->dim_ly);
-
- evas_object_del(obj);
- }
- break;
- default:
- break;
- }
-}
-
-
-void CWifiDirectMainView::OnMouseClicked(int id, Evas_Object *obj)
-{
- switch(id) {
- case 1:
- {
- Evas_Object *layout;
- Evas_Object *box;
- Evas_Object *btn[BTN_DIRECT];
- int i;
- int btn_x, btn_y, btn_w, btn_h;
- int move_x, move_y;
-
- if (!m->dim_ly) {
- m->dim_ly = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE, GRP_DIM_LY);
- if (!m->dim_ly) {
- _ERR("Add dim layout failed.");
- Destroy();
- return ;
- }
- evas_object_hide(m->dim_ly);
- }
-
- evas_object_show(m->dim_ly);
-
- layout = util_add_layout(m->base, UG_WIFI_DIRECT_EDJ_FILE, GRP_WIFI_DIRECT_SELECT);
- if (!layout){
- _ERR("Fail to add layout");
- return;
- }
-
- elm_object_focus_allow_set(layout, EINA_TRUE);
-
- box = util_add_box(layout, PART_SWALLOW_CONTENT);
- if (!box) {
- _ERR("Fail to add box");
- evas_object_del(layout);
- return;
- }
-
- for (i = 0; i < BTN_DIRECT; i++) {
- btn[i] = util_add_button(box, STYLE_POPUP_BUTTON, NULL, _(popup_button_on[i]));
- if (!btn[i]) {
- _ERR("add btn direct failed.");
- evas_object_del(layout);
- return;
- }
-
- elm_box_pack_end(box, btn[i]);
-#if 0
- evas_object_event_callback_add(btn[i], EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
-#endif
- }
- //evas_object_smart_callback_add(btn[0], SIG_CLICKED, _wifi_direct_select_btn_cb, priv);
- //evas_object_smart_callback_add(btn[1], SIG_CLICKED, _wifi_direct_select_btn_cb, priv);
- Connect(btn[0], 2);
- Connect(btn[1], 3);
-
- if (m->direct_on_flag == DIRECT_ON)
- elm_object_signal_emit(btn[DIRECT_ON], SIG_BTN_SELECTED, PROG);
- else
- elm_object_signal_emit(btn[DIRECT_OFF], SIG_BTN_SELECTED, PROG);
-
- util_set_cycle_focus(btn, BTN_DIRECT);
-
- evas_object_geometry_get(m->on_btn, &btn_x, &btn_y, &btn_w, &btn_h);
- move_x = btn_x + btn_w - POPUP_WIDTH * HALF_SCALE - POPUP_RIGHT;
- move_y = btn_y + btn_h;
- evas_object_move(layout, move_x * ELM_SCALE, move_y * ELM_SCALE);
-
- m->direct_popup = layout;
-
- //evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN, _popup_back_pressed_cb, priv);
- Connect(layout, 16);
-
- elm_object_focus_set(btn[0], EINA_TRUE);
- }
- break;
- case 2:
- case 3:
- {
- struct device_info *info;
- void *temp_obj;
- const char *value;
- bool ret = false;
-
- value = (const char *) elm_object_text_get(obj);
- if (!value) {
- _ERR("get text from network type btn is NULL.");
- return;
- }
-
- if (!strcmp(value, popup_button_on[DIRECT_ON])) {
- if (m->direct_on_flag == DIRECT_OFF) {
- m->direct_on_flag = DIRECT_ON;
-
- elm_genlist_clear(m->genlist);
-
- if (m->item_list)
- EINA_LIST_FREE(m->item_list, temp_obj)
- {
- info = (struct device_info *) temp_obj;
- free(info);
- }
-
- m_CreateDeviceListView();
-
- m_ShowActionBtn();
- }
- } else {
- m->direct_on_flag = DIRECT_OFF;
-
- ret = m_DisplayDisconnect();
- if (ret != true) {
- _ERR("m_DisplayDisconnect() failed.");
- return;
- }
-
- ret = m->pWifiDirectMgr->Deactivate();
- if (ret != true) {
- _ERR("wif direct deactivate failed.");
- return;
- }
- }
-
- m_RefreshOnText();
-
- if (m->direct_popup) {
- evas_object_del(m->direct_popup);
- m->direct_popup = NULL;
- }
-
- if (m->dim_ly)
- evas_object_hide(m->dim_ly);
-
- }
- break;
- case 4:
- case 8:
- {
- struct device_info *info;
- void *temp_obj;
-
- if (m->scan_ly)
- evas_object_hide(m->scan_ly);
-
- elm_genlist_clear(m->genlist);
-
- if (m->item_list)
- EINA_LIST_FREE(m->item_list, temp_obj)
- {
- info = (struct device_info *) temp_obj;
- free(info);
- }
-
- m_CreateDeviceListView();
- }
- break;
- case 5:
- case 6:
- case 9:
- ug_destroy_me(m->ug);
- Destroy();
- break;
- case 7:
- {
- bool ret = false;
- Evas_Object *btn;
-
- ret = m->pWifiDirectMgr->CancelDiscovery();
- if (ret != true) {
- _ERR("Cancel disconery failed.");
- return;
- }
-
- btn = elm_object_part_content_get(m->base, PART_REFRESH_BTN);
- if (btn) {
- elm_object_part_content_unset(m->base, PART_REFRESH_BTN);
- evas_object_hide(btn);
- }
-
- m_ShowActionBtn();
-
- m_FillContentPart(m->genlist);
- }
- break;
- case 10:
- case 11:
- {
- const char *value;
- bool ret = false;
-
- if (!obj) {
- _ERR("The param is invalid.");
- return;
- }
-
- value = elm_object_text_get(obj);
- if (!value) {
- _ERR("get text from network type btn is NULL.");
- return;
- }
-
- if (!strcmp(value, popup_button_req[DIRECT_ON])) {
- ret = m->pWifiDirectMgr->AcceptConnection(m->req_addr);
- if (ret != true) {
- _ERR("Disconnection failed.");
- return;
- }
-
- ret = m_UpdateDeviceConnState(true);
- if (ret != true)
- _ERR("m_UpdateDeviceConnState() failed.");
- } else {
-#if 0
- ret = m->pWifiDirectMgr->RejectConnection(m->req_addr);
- if (ret != true) {
- _ERR("Accept connection failed.");
- return;
- }
-#endif
-
- ret = m_UpdateDeviceConnState(false);
- if (ret != true)
- _ERR("m_UpdateDeviceConnState() failed.");
- }
-
- free(m->req_addr);
- m->req_addr = NULL;
-
- if (m->req_popup) {
- evas_object_del(m->req_popup);
- m->req_popup = NULL;
- }
-
- if (m->dim_ly)
- evas_object_hide(m->dim_ly);
-
- }
- break;
- case 13:
- case 14:
- {
- const char *value;
- bool ret = false;
- Elm_Object_Item *gen_item;
- struct device_info *info;
- int cur_idx;
-
- if (!obj) {
- _ERR("the param is invalid.");
- return;
- }
-
- value = elm_object_text_get(obj);
- if (!value) {
- _ERR("get text from wifi_direct device btn is NULL.");
- return;
- }
-
- gen_item = m->popup_item;
-
- cur_idx = elm_genlist_item_index_get(gen_item);
- if (cur_idx < 0)
- return;
-
- info = (struct device_info *) eina_list_nth(m->item_list, cur_idx);
- if (!info)
- return;
-
- if (!strcmp(value, TXT_CONNECT)) {
- ret = m_WifiDirectCbBtnConnect(info, CONN_YES);
- if (ret == false) {
- _ERR("Connect failed");
- return;
- }
-
- info->is_conn = true;
- } else if (!strcmp(value, TXT_DISCONNECT)) {
- ret = m_WifiDirectCbBtnConnect(info, CONN_NO);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- _ERR("wifi_direct_mgr_disconnect failed,,%s",
- info->mac_addr);
- return;
- }
-
- strncpy(info->state, TXT_DISCONNECT, WIFI_DIRECT_STATE_BUF_LEN);
- info->is_conn = false;
- }
-
- if (m->direct_popup) {
- evas_object_del(m->direct_popup);
- m->direct_popup = NULL;
- }
-
- if (m->connect_popup) {
- evas_object_del(m->connect_popup);
- m->connect_popup = NULL;
- }
-
- if (m->dim_ly)
- evas_object_hide(m->dim_ly);
- }
- break;
- default:
- break;
- }
-}
-
-
-void CWifiDirectMainView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-{
- switch(id) {
- case 0:
- break;
- default:
- break;
- }
-}
-
#define UG_MODULE_API __attribute__ ((visibility("default")))
#endif
+#include <Elementary.h>
#include <ui-gadget-module.h>
-#include <AppCommon.h>
-#include "defs.h"
#include "i18n.h"
-
-#include "wifi.h"
-#include "WifiDirectMainView.h"
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
+#include "dbg.h"
+#include "wifi_direct_view.h"
struct _ug_data {
Evas_Object *win;
Evas_Object *base;
ui_gadget_h ug;
- CViewMgr *pViewMgr;
- CWifiDirectMainView *pWifiDirectMainView;
};
/**
service_h service, void *priv)
{
struct _ug_data *ugd;
+ Evas_Object *base;
Evas_Object *win;
if (!ug || !priv) {
return NULL;
}
- ugd = (struct _ug_data *) priv;
+ ugd = priv;
ugd->ug = ug;
elm_theme_extension_add(NULL, UG_WIFI_DIRECT_EDJ_THEME);
- win = (Evas_Object *) ug_get_window();
+ win = ug_get_window();
if (!win) {
_ERR("window get failed");
return NULL;
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
elm_win_focus_highlight_style_set(win, "invisible");
- CViewMgr::Initialize(ugd->win, NULL);
- ugd->pViewMgr = CViewMgr::GetInstance();
- if(!ugd->pViewMgr) {
- CViewMgr::Finalize();
- _ERR("Fail to get CViewMgr instance");
+ base = wifi_direct_view_create(win, ug);
+ if (!base) {
+ _ERR("add base layout failed.");
return NULL;
}
- ugd->pWifiDirectMainView = new CWifiDirectMainView(WIFI_DIRECT_MAINVIEW);
- if(!ugd->pViewMgr->AddView(ugd->pWifiDirectMainView)) {
- _ERR("Fail to add pFbBaseView");
- CViewMgr::Finalize();
- return false;
- }
- ugd->pViewMgr->PushView(WIFI_DIRECT_MAINVIEW, NULL);
- ugd->base = ugd->pWifiDirectMainView->Base();
+ ugd->base = base;
+ evas_object_raise(base);
- return ugd->base;
+ return base;
}
/**
*/
static void _on_destroy(ui_gadget_h ug, service_h service, void *priv)
{
- CViewMgr::Finalize();
}
/**
if (!ops)
return -1;
- ugd = (struct _ug_data *) calloc(1, sizeof(*ugd));
+ ugd = calloc(1, sizeof(*ugd));
if (!ugd)
return -1;
if (!ops)
return;
- ugd = (struct _ug_data *) ops->priv;
+ ugd = ops->priv;
free(ugd);
}
-
-#if defined (__cplusplus)
-};
-#endif
#include <aul.h>
#include "i18n.h"
#include "defs.h"
-#include <MacroDefine.h>
+#include "dbg.h"
#include "util.h"
/**
--- /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 <Elementary.h>
+#include <aul.h>
+#include <wifi-direct.h>
+#include "defs.h"
+#include "dbg.h"
+#include "wifi_direct_mgr.h"
+
+#define LOCAL_MAX_CLIENT 8
+
+/**
+* Convert the error code to the corresponding string.
+*
+* @param[in] errcode the wifi direct error code bypassed
+* @return the error description
+*/
+const char *wifi_direct_mgr_err_dbg(int errcode)
+{
+ switch (errcode) {
+ case WIFI_DIRECT_ERROR_OUT_OF_MEMORY:
+ return "WIFI_DIRECT_ERROR_OUT_OF_MEMORY";
+ break;
+ case WIFI_DIRECT_ERROR_NOT_PERMITTED:
+ return "WIFI_DIRECT_ERROR_NOT_PERMITTED";
+ break;
+ case WIFI_DIRECT_ERROR_INVALID_PARAMETER:
+ return "WIFI_DIRECT_ERROR_INVALID_PARAMETER";
+ break;
+ case WIFI_DIRECT_ERROR_RESOURCE_BUSY:
+ return "WIFI_DIRECT_ERROR_RESOURCE_BUSY";
+ break;
+ case WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT:
+ return "WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT";
+ break;
+ case WIFI_DIRECT_ERROR_NOT_INITIALIZED:
+ return "WIFI_DIRECT_ERROR_NOT_INITIALIZED";
+ break;
+ case WIFI_DIRECT_ERROR_COMMUNICATION_FAILED:
+ return "WIFI_DIRECT_ERROR_COMMUNICATION_FAILED";
+ break;
+ case WIFI_DIRECT_ERROR_WIFI_USED:
+ return "WIFI_DIRECT_ERROR_WIFI_USED";
+ break;
+ case WIFI_DIRECT_ERROR_MOBILE_AP_USED:
+ return "WIFI_DIRECT_ERROR_MOBILE_AP_USED";
+ break;
+ case WIFI_DIRECT_ERROR_CONNECTION_FAILED:
+ return "WIFI_DIRECT_ERROR_CONNECTION_FAILED";
+ break;
+ case WIFI_DIRECT_ERROR_AUTH_FAILED:
+ return "WIFI_DIRECT_ERROR_AUTH_FAILED";
+ break;
+ case WIFI_DIRECT_ERROR_OPERATION_FAILED:
+ return "WIFI_DIRECT_ERROR_OPERATION_FAILED";
+ break;
+ case WIFI_DIRECT_ERROR_TOO_MANY_CLIENT:
+ return "WIFI_DIRECT_ERROR_TOO_MANY_CLIENT";
+ break;
+ default:
+ break;
+ }
+
+ return "UNKNOWN";
+}
+
+/**
+* Get device name.
+*
+* @return device name on success,otherwise NULL
+*/
+char *wifi_direct_mgr_get_device_name(void)
+{
+ int ret;
+ char *name;
+
+ name = NULL;
+ ret = wifi_direct_get_device_name(&name);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("get device name failed, ret: %s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return NULL;
+ }
+
+ return name;
+}
+
+/**
+* Get local MAC address.
+*
+* @return MAC address string on success, otherwise NULL
+*/
+char *wifi_direct_mgr_get_mac_address(void)
+{
+ int ret;
+ char *mac_addr;
+
+ mac_addr = NULL;
+ ret = wifi_direct_get_mac_address(&mac_addr);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("get mac address failed, ret: %s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return NULL;
+ }
+
+ return mac_addr;
+}
+
+/**
+* Initialize WiFi server.
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_wifi_init(void)
+{
+ int ret;
+
+ ret = wifi_initialize();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_initialize failed, ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Finalize WiFi server
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_wifi_fini(void)
+{
+ int ret;
+
+ ret = wifi_deinitialize();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_deinitialize failed, ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Initialize WiFi Direct server
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_wifi_direct_init(void)
+{
+ int ret;
+
+ ret = wifi_direct_initialize();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_initialize failed, ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Finalize Wi-Fi Direct server.
+*
+* Uses the midware API to deregister the client application with the Wi-Fi Direct server.
+* and releases all resources. Pre Application must be already registered to the Wi-Fi Direct server.
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_wifi_direct_fini(void)
+{
+ int ret;
+
+ ret = wifi_direct_deinitialize();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_deinitialize failed, ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Register the callback functions called.
+*
+* Each callback function is synchronous.
+*
+* @param[in] cbs The fuction struct contains the action callback fuctions
+* @param[in] data the user data
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_register_callback(struct wifi_direct_cbs *cbs,
+ void *data)
+{
+ int ret;
+
+ if (!cbs || !data) {
+ _ERR("The parameter is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_set_device_state_changed_cb(cbs->device_state_cb,
+ data);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("set device state changed cb failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_set_discovery_state_changed_cb(
+ cbs->discovery_state_cb, data);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("set discovery state changed cb failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ wifi_direct_unset_device_state_changed_cb();
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_set_connection_state_changed_cb(
+ cbs->connection_state_cb, data);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("set connection state changed cb failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ wifi_direct_unset_device_state_changed_cb();
+ wifi_direct_unset_discovery_state_changed_cb();
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Unregister the action callback fuctions.
+*
+* Opposite action to wifi_direct_mgr_register_callback.
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_unregister_callback(void)
+{
+ int ret;
+ int result;
+
+ result = RET_SUCCESS;
+ ret = wifi_direct_unset_device_state_changed_cb();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("unset device state changed cb failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ result = RET_FAILED;
+ }
+
+ ret = wifi_direct_unset_discovery_state_changed_cb();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("unset discovery state changed cb failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ result = RET_FAILED;
+ }
+
+ ret = wifi_direct_unset_connection_state_changed_cb();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("unset connection state changed cb failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ result = RET_FAILED;
+ }
+
+ ret = wifi_direct_unset_client_ip_address_assigned_cb();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("unset device state changed cb failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ result = RET_FAILED;
+ }
+
+ return result;
+}
+
+/**
+* Get the state of Wi-Fi Direct server
+*
+* @param[in] status The param bypassed used to save the status of the Wi-Fi Direct server
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_get_state(wifi_direct_state_e *status)
+{
+ int ret;
+
+ if (!status) {
+ _ERR("The param is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_get_state(status);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("get state failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Activate Wi-Fi Direct server
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_activate(void)
+{
+ int ret;
+
+ ret = wifi_direct_activate();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_activate failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Deactivate Wi-Fi Direct server
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_deactivate(void)
+{
+ int ret;
+
+ ret = wifi_direct_deactivate();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_deactivate failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Set the number of the clients.
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_set_configure_num(void)
+{
+ int ret;
+
+ ret = wifi_direct_set_max_clients(LOCAL_MAX_CLIENT);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("set max client failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Get the information of all discovered peers.Synchronous.
+*
+* @param[in] cb the callback function
+* @param[in] data the user data
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_foreach_discovered_peers(
+ wifi_direct_discovered_peer_cb cb, void *data)
+{
+ int ret;
+
+ if (!cb || !data) {
+ _ERR("The parameter is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_foreach_discovered_peers(cb, data);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("foreach connected pees failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Get the information of the connected peers.Synchronous.
+*
+* @param[in] cd the callback function
+* @param[in] data the user data
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_foreach_connected_peers(
+ wifi_direct_connected_peer_cb cb, void *data)
+{
+ int ret;
+
+ if (!cb || !data) {
+ _ERR("The parameter is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_foreach_connected_peers(cb, data);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("foreach connected peers failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Start discovery process.Asynchronous.
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_start_discovery(void)
+{
+ int ret;
+
+ ret = wifi_direct_start_discovery(WIFI_DIRECT_DISCOVERY_LISTEN_AND_SCAN,
+ WIFI_DIRECT_SCAN_TIMEOUT);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("start discovery failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Cancel discovery process
+*
+* The oppsite action to wifi_direct_mgr_start_discovery
+*
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_cancel_discovery(void)
+{
+ int ret;
+
+ ret = wifi_direct_cancel_discovery();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_cancel_discovery failed ret:%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Connect the peer specified by MAC address. Asynchronous.
+*
+* @param[in] mac_adrr the MAC address
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_connect(const char *mac_addr)
+{
+ int ret;
+
+ if (!mac_addr) {
+ _ERR("mac_address is NULL");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_connect(mac_addr);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_connect failed,%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Disconnect to a peer.
+*
+* @param[in] mac_adrr the MAC address
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_disconnect(const char *mac_addr)
+{
+ int ret;
+
+ if (!mac_addr) {
+ _ERR("mac_address is NULL");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_disconnect(mac_addr);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_disconnect failed,%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Accept connection requested by a peer.
+*
+* Called for request event,WIFI_DIRECT_CONNECTION_REQ
+*
+* @param[in] mac_adrr the MAC address of the request peer
+* @return[in] 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_accept_connection(char *mac_addr)
+{
+ int ret;
+
+ if (!mac_addr) {
+ _ERR("mac_address is NULL");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_accept_connection(mac_addr);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_accept_connection failed,%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Verify the WPS type.
+*
+* This function get the WPS(Wi-Fi Protected Setup) type and check if it is equal to PBC type,
+* if equal, set EINA_TRUE to is_pbc, otherwise set EINA_FALSE,and return it.
+*
+* @param[in] is_pbc The point pointing to mark if WPS is PBC
+* @return[in] 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_get_wps_type(Eina_Bool *is_pbc)
+{
+ _DBG("Not Yet");
+#if 0
+ wifi_direct_wps_type_e type;
+
+ if (!is_pbc) {
+ _ERR("Parameter is NULL");
+ return RET_FAILED;
+ }
+
+ int ret;
+ ret = wifi_direct_get_wps_type(&type);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_get_wps_type failed,%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+
+ if ((type & WIFI_DIRECT_WPS_TYPE_PBC) == WIFI_DIRECT_WPS_TYPE_PBC)
+ *is_pbc = EINA_TRUE;
+ else
+ *is_pbc = EINA_FALSE;
+
+ return RET_SUCCESS;
+#endif
+ return RET_FAILED;
+}
+
+/**
+* Set the WPS(Wi-Fi Protected Setyup) type.
+*
+* @param[in] type The WPS type
+* @return 0 on success, otherwise -1
+*/
+int wifi_direct_mgr_set_wps_type(wifi_direct_wps_type_e *type)
+{
+ if (!type) {
+ _ERR("Parameter is NULL");
+ return RET_FAILED;
+ }
+
+ _DBG("Not Yet");
+#if 0
+ int ret;
+ ret = wifi_direct_set_wps_type(*type);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_get_wps_type failed,%s.",
+ wifi_direct_mgr_err_dbg(ret));
+ return RET_FAILED;
+ }
+#endif
+
+ return RET_SUCCESS;
+}
--- /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 <Elementary.h>
+#include <aul.h>
+#include <Eina.h>
+
+#include <KeyDefine.h>
+
+#include "defs.h"
+#include "dbg.h"
+#include "wifi_direct_view.h"
+#include "wifi_direct_mgr.h"
+#include "util.h"
+
+struct _priv {
+ Evas_Object *win;
+ Evas_Object *base;
+ Evas_Object *genlist;
+ Evas_Object *on_btn;
+ Evas_Object *direct_popup;
+ Evas_Object *connect_popup;
+ Evas_Object *dim_ly;
+ Evas_Object *btn_refresh;
+ Evas_Object *btn_close;
+ Evas_Object *btn_stop;
+ Evas_Object *scan_ly;
+ Evas_Object *scan_pb;
+ Evas_Object *no_conn_ly;
+ Evas_Object *prog_popup;
+ Evas_Object *req_popup;
+
+ ui_gadget_h ug;
+ Elm_Genlist_Item_Class *itc;
+ Elm_Object_Item *popup_item;
+ Eina_List *item_list;
+ Ecore_Timer *timer;
+
+ int conn_idx;
+ int direct_on_flag;
+ int finish_flag;
+ char *req_addr;
+};
+
+enum action_btn_enum {
+ ACTION_BTN_REFRESH,
+ ACTION_BTN_CLOSE,
+ ACTION_BTN_STOP
+};
+
+enum direct_swith_enum {
+ DIRECT_ON = 0,
+ DIRECT_OFF
+};
+
+const char *action_button[] = {
+ [ACTION_BTN_REFRESH] = TXT_REFRESH_BTN,
+ [ACTION_BTN_CLOSE] = TXT_CLOSE_BTN,
+ [ACTION_BTN_STOP] = TXT_STOP_BTN
+};
+
+const char *popup_button_on[] = {
+ [DIRECT_OFF] = TXT_OFF_BTN,
+ [DIRECT_ON] = TXT_ON_BTN
+};
+
+static char *popup_button_conn[] = {
+ [DIRECT_ON] = TXT_CONNECT,
+ [DIRECT_OFF] = TXT_DISCONNECT
+};
+
+static char *popup_button_req[] = {
+ [DIRECT_ON] = TXT_YES,
+ [DIRECT_OFF] = TXT_NO
+};
+
+static char *part_req[] = {
+ [DIRECT_ON] = PART_YES,
+ [DIRECT_OFF] = PART_NO
+};
+
+static void _device_state_changed_cb(int errcode,
+ wifi_direct_device_state_e state, void *data);
+static void _discovery_state_changed_cb(int errcode,
+ wifi_direct_discovery_state_e state, void *data);
+static void _connection_state_changed_cb(int errcode,
+ wifi_direct_connection_state_e state, const char *addr,
+ void *data);
+static bool _connected_peer_cb(
+ wifi_direct_connected_peer_info_s * conn_info, void *data);
+static bool _discoverd_peers_cb(
+ wifi_direct_discovered_peer_info_s * discov_info,
+ void *data);
+
+static struct wifi_direct_cbs cbs = {
+ .device_state_cb = _device_state_changed_cb,
+ .discovery_state_cb = _discovery_state_changed_cb,
+ .connection_state_cb = _connection_state_changed_cb,
+ .connected_peer_cb = _connected_peer_cb,
+ .discovered_peer_cb = _discoverd_peers_cb
+};
+
+static void _fill_content_part(struct _priv *priv, Evas_Object *obj);
+static int _create_wifi_direct_scan(struct _priv *priv);
+static void _create_device_list_view(struct _priv *priv);
+static void _show_action_btn(struct _priv *priv);
+
+/**
+* Initialize the priv.
+*
+* @return _priv _priv object initialized
+*/
+static struct _priv *_init_priv(void)
+{
+ struct _priv *priv;
+
+ priv = calloc(1, sizeof(*priv));
+ if (!priv) {
+ _ERR("calloc failed.");
+ return NULL;
+ }
+
+ return priv;
+}
+
+/**
+* Finalize the priv.
+*
+* Recycles memory allocated for the priv and free the point.
+*
+* @param[in] priv _priv object to be finalized
+*/
+static void _fini_priv(struct _priv *priv)
+{
+ struct device_info *info;
+
+ if (!priv) {
+ _ERR("priv is already NULL.");
+ return;
+ }
+
+ if (!priv->item_list)
+ EINA_LIST_FREE(priv->item_list, info)
+ free(info);
+
+ if (priv->dim_ly)
+ evas_object_del(priv->dim_ly);
+
+ if (priv->scan_ly)
+ evas_object_del(priv->scan_ly);
+
+ if (priv->timer)
+ ecore_timer_del(priv->timer);
+
+ wifi_direct_mgr_wifi_fini();
+ wifi_direct_mgr_unregister_callback();
+ wifi_direct_mgr_wifi_direct_fini();
+
+ if (priv->base)
+ evas_object_del(priv->base);
+
+ free(priv);
+}
+
+/**
+* It is a callback function responding mouse event
+*
+* This function set focus on the object when mouse is put on it
+*
+* @param[in] dt the user data
+* @param[in] e evas handler
+* @param[in] obj the corresponding object which the mouse event occurred
+* @param[in] ei event information
+*/
+static void _list_btn_mouse_in_cb(void *dt, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ if (!obj) {
+ _ERR("Invalid argument obj");
+ return;
+ }
+
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _refresh_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+ struct device_info *info;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->scan_ly)
+ evas_object_hide(priv->scan_ly);
+
+ elm_genlist_clear(priv->genlist);
+
+ if (priv->item_list)
+ EINA_LIST_FREE(priv->item_list, info)
+ free(info);
+
+ _create_device_list_view(priv);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event event information
+*/
+static void _close_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->ug) {
+ _ERR("priv->ug is NULL.");
+ return;
+ }
+
+ ug_destroy_me(priv->ug);
+
+ _fini_priv(priv);
+}
+
+/**
+* Create the action buttons.
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _show_action_btn(struct _priv *priv)
+{
+ Evas_Object *btn;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ if (!priv->btn_refresh || !priv->btn_close) {
+ _ERR("action btn NULL!");
+ return;
+ }
+
+ btn = elm_object_part_content_get(priv->base, PART_REFRESH_BTN);
+ if (btn) {
+ elm_object_part_content_unset(priv->base, PART_REFRESH_BTN);
+ evas_object_hide(btn);
+ }
+
+ elm_object_part_content_set(priv->base, PART_REFRESH_BTN,
+ priv->btn_refresh);
+ evas_object_show(priv->btn_refresh);
+
+ elm_object_part_content_set(priv->base, PART_CLOSE_BTN,
+ priv->btn_close);
+ evas_object_show(priv->btn_close);
+
+ evas_object_smart_callback_add(priv->btn_refresh, SIG_CLICKED,
+ _refresh_btn_clicked_cb, priv);
+ evas_object_event_callback_add(priv->btn_refresh,
+ EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
+ evas_object_smart_callback_add(priv->btn_close, SIG_CLICKED,
+ _close_btn_clicked_cb, priv);
+ evas_object_event_callback_add(priv->btn_close,
+ EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
+}
+
+/**
+* Create the dim layout but did not show it.
+*
+* @param[in] priv _priv object bypassed
+* @return on success, otherwise -1.
+*/
+static int _create_wifi_direct_dim(struct _priv *priv)
+{
+ Evas_Object *base;
+ Evas_Object *ly;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ ly = util_add_layout(base, UG_WIFI_DIRECT_EDJ_FILE, GRP_DIM_LY);
+ if (!ly) {
+ _ERR("Add dim layout failed.");
+ return RET_FAILED;
+ }
+
+ priv->dim_ly = ly;
+
+ evas_object_hide(ly);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] ev event information
+*/
+static void _stop_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *ev)
+{
+ int ret;
+ struct _priv *priv;
+ Evas_Object *btn;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ ret = wifi_direct_mgr_cancel_discovery();
+ if (ret != RET_SUCCESS) {
+ _ERR("Cancel disconery failed.");
+ return;
+ }
+
+ btn = elm_object_part_content_get(priv->base, PART_REFRESH_BTN);
+ if (btn) {
+ elm_object_part_content_unset(priv->base, PART_REFRESH_BTN);
+ evas_object_hide(btn);
+ }
+
+ _show_action_btn(priv);
+
+ _fill_content_part(priv, priv->genlist);
+}
+
+/**
+* Create the scan process view
+*
+* @param[in] priv _priv object bypassed
+*/
+static int _create_wifi_direct_scan(struct _priv *priv)
+{
+ Evas_Object *ly;
+ Evas_Object *pb;
+ Evas_Object *btn;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ly = util_add_layout(priv->base, UG_WIFI_DIRECT_EDJ_FILE,
+ GRP_WIFIDIRECT_SCAN_LY);
+ if (!ly) {
+ _ERR("Add scan_ly failed.\n");
+ return RET_FAILED;
+ }
+
+ priv->scan_ly = ly;
+
+ elm_object_part_content_unset(priv->base, PART_REFRESH_BTN);
+ evas_object_hide(priv->btn_refresh);
+
+ elm_object_part_content_unset(priv->base, PART_CLOSE_BTN);
+ evas_object_hide(priv->btn_close);
+
+ pb = util_add_progressbar(ly, STYLE_SEARCH_PROGRESS, PART_SEARCH_IMAGE);
+ if (!pb) {
+ _ERR("Add progressbar failed.\n");
+ goto error;
+ }
+
+ btn = util_add_button(priv->base, STYLE_ACTION_BUTTON, PART_REFRESH_BTN,
+ _(action_button[ACTION_BTN_STOP]));
+ if (!btn) {
+ _ERR("Add stop button failed.");
+ goto error;
+ }
+
+ priv->scan_pb = pb;
+ priv->btn_stop = btn;
+
+ elm_object_focus_set(priv->btn_stop, EINA_TRUE);
+ evas_object_event_callback_add(priv->btn_stop, EVAS_CALLBACK_MOUSE_IN,
+ _list_btn_mouse_in_cb, priv);
+ evas_object_smart_callback_add(priv->btn_stop, SIG_CLICKED,
+ _stop_btn_clicked_cb, priv);
+
+ _fill_content_part(priv, priv->scan_ly);
+
+ return RET_SUCCESS;
+
+error:
+ evas_object_del(ly);
+ return RET_FAILED;
+}
+
+/**
+* Display device list view.
+*
+* Called when start or refresh the WiFi direct
+*
+* @param[in] priv the _priv object
+*/
+static void _create_device_list_view(struct _priv *priv)
+{
+ wifi_direct_state_e status;
+ int ret;
+
+ if (!priv) {
+ _ERR("parameter is invalid.");
+ return;
+ }
+
+ if (priv->no_conn_ly)
+ evas_object_hide(priv->no_conn_ly);
+
+ ret = wifi_direct_mgr_get_state(&status);
+ if (ret != RET_SUCCESS) {
+ _ERR("get state failed.");
+ return;
+ }
+
+ if (status < WIFI_DIRECT_STATE_ACTIVATED) {
+ ret = wifi_direct_mgr_activate();
+ if (ret != RET_SUCCESS) {
+ _ERR("activate failed.");
+ return;
+ }
+ } else {
+ ret = wifi_direct_mgr_set_configure_num();
+ if (ret != RET_SUCCESS) {
+ _ERR("set configure num failed.");
+ return;
+ }
+
+ ret = wifi_direct_mgr_start_discovery();
+ if (ret != RET_SUCCESS) {
+ _ERR("start discovery failed.");
+ return;
+ }
+ }
+
+ _fill_content_part(priv, priv->genlist);
+
+ elm_object_focus_set(priv->btn_refresh, EINA_TRUE);
+}
+
+/**
+* Evas_object_Event_Cb type callback for handling delection event
+*
+* @param[in] data the user data
+* @param[in] e evas handler
+* @param[in] obj the corresponding object which clicked event occurred
+* @param[in] ei event information
+*/
+static void _popup_back_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *ei)
+{
+ Evas_Event_Key_Down *ev;
+ struct _priv *priv;
+
+ if (!data || !obj || !ei) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+ ev = ei;
+
+ if (!ev->keyname) {
+ _ERR("ev->keyname is NULL.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ if (priv->dim_ly)
+ evas_object_hide(priv->dim_ly);
+
+ evas_object_del(obj);
+ }
+}
+
+/**
+* Handle connection request.
+*
+* @param[in] info the target device infomation
+* @param[in] is_conn request type
+* @return 0 on success,otherwize -1
+*/
+int wifi_direct_cbbutton_connect(
+ struct device_info *info, int is_conn)
+{
+ int ret;
+ wifi_direct_wps_type_e wps_type;
+
+ if (!info) {
+ _ERR("parameter is NULL!");
+ return RET_FAILED;
+ }
+
+ if (is_conn) {
+ if ((info->wps_types & WIFI_DIRECT_WPS_TYPE_PBC)
+ == WIFI_DIRECT_WPS_TYPE_PBC)
+ wps_type = WIFI_DIRECT_WPS_TYPE_PBC;
+ else if ((info->wps_types & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) ==
+ WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD)
+ wps_type = WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD;
+ else if ((info->wps_types & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) ==
+ WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY)
+ wps_type = WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY;
+
+ ret = wifi_direct_mgr_set_wps_type(&wps_type);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct set wps type failev!");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_mgr_connect(info->mac_addr);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_connect:%s fail!", info->dev_name);
+ return RET_FAILED;
+ }
+ } else {
+ ret = wifi_direct_mgr_disconnect(info->mac_addr);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_disconnect:%s fail!", info->dev_name);
+ return RET_FAILED;
+ }
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event_info event information
+*/
+static void _item_conn_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event_inf)
+{
+ struct _priv *priv;
+ const char *value;
+ int ret;
+ Elm_Object_Item *gen_item;
+ struct device_info *info;
+ int cur_idx;
+
+ if (!data || !obj) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ value = elm_object_text_get(obj);
+ if (!value) {
+ _ERR("get text from wifi_direct device btn is NULL.");
+ return;
+ }
+
+ priv = data;
+
+ gen_item = priv->popup_item;
+
+ cur_idx = elm_genlist_item_index_get(gen_item);
+ if (cur_idx < 0)
+ return;
+
+ info = eina_list_nth(priv->item_list, cur_idx);
+ if (!info)
+ return;
+
+ if (!strcmp(value, TXT_CONNECT)) {
+ ret = wifi_direct_cbbutton_connect(info, CONN_YES);
+ if (ret == RET_FAILED) {
+ _ERR("Connect failed");
+ return;
+ }
+
+ info->is_conn = EINA_TRUE;
+ } else if (!strcmp(value, TXT_DISCONNECT)) {
+ ret = wifi_direct_cbbutton_connect(info, CONN_NO);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("wifi_direct_mgr_disconnect failed,,%s",
+ info->mac_addr);
+ return;
+ }
+
+ strncpy(info->state, TXT_DISCONNECT, WIFI_DIRECT_STATE_BUF_LEN);
+ info->is_conn = EINA_FALSE;
+ }
+
+ if (priv->direct_popup) {
+ evas_object_del(priv->direct_popup);
+ priv->direct_popup = NULL;
+ }
+
+ if (priv->connect_popup) {
+ evas_object_del(priv->connect_popup);
+ priv->connect_popup = NULL;
+ }
+
+ if (priv->dim_ly)
+ evas_object_hide(priv->dim_ly);
+}
+
+/**
+* @Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event_info event information
+*/
+static void _genlist_item_select_cb(void *data,
+ Evas_Object *obj, void *event_info)
+{
+ struct _priv *priv;
+ Elm_Object_Item *gen_item;
+ Evas_Object *layout;
+ Evas_Object *box;
+ Evas_Object *item_btn;
+ Evas_Object *btn[BTN_DIRECT];
+ struct device_info *info;
+ int cur_idx;
+ int i;
+ int ret;
+ int btn_x;
+ int btn_y;
+ int btn_w;
+ int btn_h;
+ int move_x;
+ int move_y;
+
+ if (!data || !obj || !event_info) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->dim_ly) {
+ ret = _create_wifi_direct_dim(priv);
+ if (ret != RET_SUCCESS) {
+ _fini_priv(priv);
+ return;
+ }
+ }
+
+ evas_object_show(priv->dim_ly);
+
+ gen_item = event_info;
+ priv->popup_item = gen_item;
+
+ layout = util_add_layout(priv->base, UG_WIFI_DIRECT_EDJ_FILE,
+ GRP_WIFI_DIRECT_SELECT);
+ if (!layout) {
+ _ERR("add connect popup failed.\n");
+ return;
+ }
+
+ box = util_add_box(layout, PART_SWALLOW_CONTENT);
+ if (!box) {
+ _ERR("add box failed.");
+ evas_object_del(layout);
+ return;
+ }
+
+ for (i = 0; i < BTN_DIRECT; i++) {
+ btn[i] = util_add_button(box, STYLE_POPUP_BUTTON, NULL,
+ _(popup_button_conn[i]));
+ if (!btn[i]) {
+ _ERR("add connect btn failed.");
+ evas_object_del(layout);
+ return;
+ }
+
+ elm_box_pack_end(box, btn[i]);
+ evas_object_smart_callback_add(btn[i], SIG_CLICKED,
+ _item_conn_btn_clicked_cb, priv);
+ evas_object_event_callback_add(btn[i],
+ EVAS_CALLBACK_MOUSE_IN,
+ _list_btn_mouse_in_cb, priv);
+ }
+
+ cur_idx = elm_genlist_item_index_get(gen_item);
+ if (cur_idx < 0)
+ return;
+
+ info = eina_list_nth(priv->item_list, cur_idx);
+ if (!info)
+ return;
+
+ if (info->is_conn)
+ elm_object_signal_emit(btn[DIRECT_ON],
+ SIG_BTN_SELECTED, PROG);
+ else
+ elm_object_signal_emit(btn[DIRECT_OFF],
+ SIG_BTN_SELECTED, PROG);
+
+ util_set_cycle_focus(btn, BTN_DIRECT);
+
+ item_btn = elm_object_item_track(gen_item);
+ if (!item_btn) {
+ _ERR("get genlist item track failed.");
+ evas_object_del(layout);
+ return;
+ }
+
+ evas_object_geometry_get(item_btn, &btn_x, &btn_y, &btn_w, &btn_h);
+
+ move_x = btn_x + btn_w - POPUP_WIDTH * HALF_SCALE - POPUP_RIGHT;
+ move_y = btn_y + btn_h;
+ evas_object_move(layout, move_x * ELM_SCALE, move_y * ELM_SCALE);
+ priv->connect_popup = layout;
+
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _popup_back_pressed_cb, priv);
+
+ elm_object_focus_set(btn[0], EINA_TRUE);
+}
+
+/**
+* Check if the peer discovered is already in the list.
+*
+* @param[in] priv the _priv object bypassed
+* @param[in] new_info device_info object to be checked
+* @return 0 if exist,otherwise -1
+*/
+static Eina_Bool _is_peer_exist(struct _priv *priv,
+ struct device_info *new_info)
+{
+ struct device_info *cur_info;
+ Eina_List *l;
+
+ if (!priv || !new_info) {
+ _ERR("The param is invalid.");
+ return EINA_FALSE;
+ }
+
+ if (!priv->item_list) {
+ _ERR("The list is NULL now.");
+ return EINA_FALSE;
+ }
+
+ EINA_LIST_FOREACH(priv->item_list, l, cur_info) {
+ if (!strncmp(cur_info->mac_addr, new_info->mac_addr,
+ WIFI_DIRECT_DEFAULT_BUF_LEN - 1))
+ return EINA_TRUE;
+ }
+
+ return EINA_FALSE;
+}
+
+/**
+* Update the device connection state.
+*
+* @param[in] priv the _priv object bypassed
+* @param[in] conn connection type
+* @return 0 if exist,otherwise -1
+*/
+static Eina_Bool _update_device_conn_state(struct _priv *priv,
+ Eina_Bool conn)
+{
+ struct device_info *cur_info;
+ Eina_List *l;
+
+ EINA_LIST_FOREACH(priv->item_list, l, cur_info) {
+ if (!strncmp(cur_info->mac_addr, priv->req_addr,
+ WIFI_DIRECT_DEFAULT_BUF_LEN - 1)) {
+ cur_info->is_conn = conn;
+ return EINA_TRUE;
+ }
+ }
+
+ return EINA_FALSE;
+}
+
+/**
+* Update the device list.
+*
+* @param[in] priv the _priv object bypassed
+* @param[in] device_info new device infomation
+* @return 0 in success,otherwise -1
+*/
+static int _update_genlist_item(struct _priv *priv,
+ struct device_info *info)
+{
+ Eina_Bool exist;
+
+ if (!priv || !info || !priv->genlist) {
+ _ERR("The param is invalid.");
+ return RET_FAILED;
+ }
+
+ exist = _is_peer_exist(priv, info);
+ if (!exist) {
+ priv->item_list = eina_list_append(priv->item_list, info);
+
+ if (info->is_conn)
+ strncpy(info->state, TXT_CONNECT,
+ WIFI_DIRECT_STATE_BUF_LEN);
+ else
+ strncpy(info->state, TXT_DISCONNECT,
+ WIFI_DIRECT_STATE_BUF_LEN);
+
+ elm_genlist_item_append(priv->genlist, priv->itc, info, NULL,
+ ELM_GENLIST_ITEM_NONE, _genlist_item_select_cb,
+ (void *)priv);
+ }
+
+ return RET_SUCCESS;
+}
+
+/**
+* Called when the device state is WIFI_DIRECT_DISCOVERY_STARTED.
+*
+* @param[in] cd the callback functions to invoke
+* @param[in] data the user data
+*/
+static void _process_discovery_start(struct wifi_direct_cbs cbs,
+ void *data)
+{
+ int ret;
+ struct _priv *priv;
+ struct device_info *info;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->genlist)
+ elm_genlist_clear(priv->genlist);
+
+ if (priv->item_list)
+ EINA_LIST_FREE(priv->item_list, info)
+ free(info);
+
+ ret = wifi_direct_mgr_foreach_connected_peers(
+ cbs.connected_peer_cb, data);
+ if (ret != RET_SUCCESS) {
+ _ERR("foreach connected peers failed ");
+ return;
+ }
+
+ ret = _create_wifi_direct_scan(priv);
+ if (ret != RET_SUCCESS)
+ _ERR("_create_wifi_direct_scan failed ");
+}
+
+/**
+* Called when the device state is WIFI_DIRECT_DISCOVERY_FOUND.
+*
+* @param[in] cbs the callback functions
+* @param[in] data the user data
+*/
+static void _process_discovery_found(struct wifi_direct_cbs cbs,
+ void *data)
+{
+ int ret;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ ret = wifi_direct_mgr_foreach_discovered_peers(
+ cbs.discovered_peer_cb, data);
+ if (ret != RET_SUCCESS)
+ _ERR("foreach connected peers failed ");
+}
+
+/**
+* Called when the device state is WIFI_DIRECT_DISCOVERY_FINISHED.
+*
+* @param[in] data the user data
+*/
+static void _process_discovery_finished(void *data)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("Parameter is NULL.");
+ return;
+ }
+
+ priv = data;
+
+ elm_object_part_content_unset(priv->base, PART_REFRESH_BTN);
+ evas_object_hide(priv->btn_stop);
+
+ _show_action_btn(priv);
+
+ _fill_content_part(priv, priv->genlist);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] ev event information
+*/
+static void _req_btn_clicked_cb(void *data, Evas_Object *obj, void *ev)
+{
+ struct _priv *priv;
+ const char *value;
+ int ret;
+
+ if (!data || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ priv = data;
+
+ value = elm_object_text_get(obj);
+ if (!value) {
+ _ERR("get text from network type btn is NULL.");
+ return;
+ }
+
+ if (!strcmp(value, popup_button_req[DIRECT_ON])) {
+ ret = wifi_direct_mgr_accept_connection(priv->req_addr);
+ if (ret != RET_SUCCESS) {
+ _ERR("Disconnection failed.");
+ return;
+ }
+
+ ret = _update_device_conn_state(priv, EINA_TRUE);
+ if (ret != EINA_TRUE)
+ _ERR("_update_device_conn_state failed.");
+ } else {
+ ret = wifi_direct_mgr_reject_connection(priv->req_addr);
+ if (ret != RET_SUCCESS) {
+ _ERR("Accept connection failed.");
+ return;
+ }
+
+ ret = _update_device_conn_state(priv, EINA_FALSE);
+ if (ret != EINA_TRUE)
+ _ERR("_update_device_conn_state failed.");
+ }
+
+ free(priv->req_addr);
+ priv->req_addr = NULL;
+
+ if (priv->req_popup) {
+ evas_object_del(priv->req_popup);
+ priv->req_popup = NULL;
+ }
+
+ if (priv->dim_ly)
+ evas_object_hide(priv->dim_ly);
+}
+
+/**
+* Create the reqest popup when has connection request by other devices.
+*
+* @param[in] priv the _priv object bypassed
+* @return 0 on sucess, otherwise -1
+*/
+static int _create_req_popup_ly(struct _priv *priv)
+{
+ Evas_Object *layout;
+ Evas_Object *btn[BTN_DIRECT];
+ int i;
+ int x;
+ int y;
+ int w;
+ int h;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ layout = util_add_layout(priv->base, UG_WIFI_DIRECT_EDJ_FILE,
+ GRP_CONNECT_ACCEPT);
+ if (!layout) {
+ _ERR("elm_layout_add() failed.\n");
+ return RET_FAILED;
+ }
+
+ for (i = 0; i < BTN_DIRECT; i++) {
+ btn[i] = util_add_button(layout, STYLE_POPUP_BUTTON,
+ part_req[i], _(popup_button_req[i]));
+ if (!btn[i]) {
+ _ERR("add btn req failed.");
+ evas_object_del(layout);
+ return RET_FAILED;
+ }
+
+ evas_object_smart_callback_add(btn[i],
+ SIG_CLICKED, _req_btn_clicked_cb, priv);
+ evas_object_event_callback_add(btn[i],
+ EVAS_CALLBACK_MOUSE_IN,
+ _list_btn_mouse_in_cb, priv);
+ }
+
+ evas_object_geometry_get(priv->genlist, &x, &y, &w, &h);
+ evas_object_move(layout, (x + RSP_X) * ELM_SCALE,
+ (y + RSP_Y) * ELM_SCALE);
+
+ priv->req_popup = layout;
+
+ elm_object_focus_set(btn[DIRECT_ON], EINA_TRUE);
+
+ evas_object_event_callback_add(layout,
+ EVAS_CALLBACK_KEY_DOWN, _popup_back_pressed_cb, priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Process the connection request when the device state is WIFI_DIRECT_CONNECTION_REQ.
+*
+* @param[in] addr the MAC address
+* @param[in] data the user data
+*/
+static void _process_connection_req(const char *addr, void *data)
+{
+ struct _priv *priv;
+ Eina_Bool is_pbc;
+ int ret;
+
+ if (!data || !addr) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ ret = wifi_direct_mgr_get_wps_type(&is_pbc);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ _ERR("Get wps type failed.");
+ return;
+ }
+
+ priv->req_addr = strdup(addr);
+ if (!priv->req_addr) {
+ _ERR("strdup wrong.");
+ return;
+ }
+
+ if (is_pbc == EINA_TRUE) {
+ ret = _create_req_popup_ly(priv);
+ if (ret != RET_SUCCESS)
+ _ERR("Create rep popup failed.");
+ }
+}
+
+/**
+* Called when the device state is WIFI_DIRECT_CONNECTION_PROG.
+*
+* @param[in] data The data to be passed to the function
+*/
+static void _process_connection_prog(void *data)
+{
+ struct _priv *priv;
+ Evas_Object *layout;
+ char title[MAX_STRING_LENTH];
+ int x;
+ int y;
+ int w;
+ int h;
+ int move_x;
+ int move_y;
+
+ if (!data) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ if (priv->dim_ly)
+ evas_object_show(priv->dim_ly);
+
+ layout = util_add_layout(priv->base, UG_WIFI_DIRECT_EDJ_FILE,
+ GRP_CONNECT_ACCEPT);
+ if (!layout) {
+ _ERR("add con_popup layout failed.");
+ return;
+ }
+
+ memset(&title, 0x00, MAX_STRING_LENTH);
+ snprintf(title, MAX_STRING_LENTH - 1, "%s", TXT_CONN_PROG);
+ elm_object_part_text_set(layout, PART_TITLE, title);
+
+ evas_object_geometry_get(priv->on_btn, &x, &y, &w, &h);
+ move_x = x + w - POPUP_WIDTH * HALF_SCALE - POPUP_RIGHT;
+ move_y = y + CENTER_HEIGHT;
+ evas_object_move(layout, move_x * ELM_SCALE, move_y * ELM_SCALE);
+
+ priv->prog_popup = layout;
+}
+
+/**
+* Starts the device discovery when timer is empired.
+*
+* @param[in] data the user data
+* @return ECORE_CALLBACK_CANCEL returns to finish time
+*/
+static Eina_Bool _connection_ind_cb(void *data)
+{
+ int ret;
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("the param is invalid.");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ priv = data;
+
+ ret = wifi_direct_mgr_start_discovery();
+ if (ret != RET_SUCCESS)
+ _ERR("start discovery failed.");
+
+ priv->timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+/**
+* Called when the device state is WIFI_DIRECT_DISCONNECTION_IND.
+*
+* @param[in] data The data to be passed to the function
+*/
+static void _process_connection_ind(void *data)
+{
+ struct _priv *priv;
+ Ecore_Timer *timer;
+
+ if (!data) {
+ _ERR("parameter is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ timer = ecore_timer_add(HANDLER_INTERVAL, _connection_ind_cb, priv);
+ if (!timer) {
+ _ERR("add timer failed.");
+ return;
+ }
+
+ priv->timer = timer;
+}
+
+/**
+* Called when the device state is WIFI_DIRECT_CONNECTION_RSP
+*
+* @param[in] data the user data
+*/
+static void _process_connection_rsp(void *data)
+{
+ struct _priv *priv;
+ struct device_info *info;
+ int cur_index;
+
+ if (!data) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ cur_index = priv->conn_idx;
+ info = eina_list_nth(priv->item_list, cur_index);
+ if (!info)
+ return;
+
+ info->is_conn = EINA_TRUE;
+ strncpy(info->state, TXT_CONNECT, WIFI_DIRECT_STATE_BUF_LEN);
+
+ elm_genlist_item_update(priv->popup_item);
+
+ if (priv->dim_ly)
+ evas_object_hide(priv->dim_ly);
+
+ if (priv->prog_popup) {
+ evas_object_del(priv->prog_popup);
+ priv->prog_popup = NULL;
+ }
+
+ if (priv->connect_popup) {
+ evas_object_del(priv->connect_popup);
+ priv->connect_popup = NULL;
+ }
+}
+
+/**
+* Callback function is called when device state is changed.
+*
+* @param[in] errcode error code
+* @param[in] state WiFi Direct device state
+* @param[in] data the user data
+*/
+static void _device_state_changed_cb(int errcode,
+ wifi_direct_device_state_e state, void *data)
+{
+ int ret;
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ if (state != WIFI_DIRECT_DEVICE_STATE_ACTIVATED) {
+ elm_genlist_clear(priv->genlist);
+ return;
+ }
+
+ ret = wifi_direct_mgr_set_configure_num();
+ if (ret != RET_SUCCESS) {
+ _ERR("set configure num failed.");
+ return;
+ }
+
+ ret = wifi_direct_mgr_start_discovery();
+ if (ret != RET_SUCCESS)
+ _ERR("start discovery failed.");
+}
+
+/**
+* Callback function is called when discovery state is changed.
+*
+* discovery state:
+* WIFI_DIRECT_DISCOVERY_STARTED
+* WIFI_DIRECT_DISCOVERY_FOUND
+* WIFI_DIRECT_DISCOVERY_FINISHED
+*
+* @param[in] errcode error code
+* @param[in] state WiFi Direct descovery state
+* @param[in] data the user data
+*/
+static void _discovery_state_changed_cb(
+ int errcode, wifi_direct_discovery_state_e state, void *data)
+{
+ if (!state || !data) {
+ _ERR("data is invalid.");
+ return;
+ }
+
+ switch (state) {
+ case WIFI_DIRECT_DISCOVERY_STARTED:
+ _process_discovery_start(cbs, data);
+ break;
+ case WIFI_DIRECT_DISCOVERY_FOUND:
+ _process_discovery_found(cbs, data);
+ break;
+ case WIFI_DIRECT_DISCOVERY_FINISHED:
+ _process_discovery_finished(data);
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+* Callback function is called when connection state is changed.
+*
+* connection state:
+* WIFI_DIRECT_CONNECTION_REQ
+* WIFI_DIRECT_CONNECTION_IN_PROGRESS
+* WIFI_DIRECT_CONNECTION_RSP
+* WIFI_DIRECT_DISCONNECTION_IND
+* ...
+*
+* @param[in] errcode error code
+* @param[in] state WiFi Direct descovery state
+* @param[in] data the user data passed
+*/
+static void _connection_state_changed_cb(int errcode,
+ wifi_direct_connection_state_e state,
+ const char *addr, void *data)
+{
+ if (!state || !addr || !data) {
+ _ERR("The param is invalid.");
+ return;
+ }
+
+ switch (state) {
+ case WIFI_DIRECT_CONNECTION_REQ:
+ _process_connection_req(addr, data);
+ break;
+ case WIFI_DIRECT_CONNECTION_IN_PROGRESS:
+ _process_connection_prog(data);
+ break;
+ case WIFI_DIRECT_CONNECTION_RSP:
+ _process_connection_rsp(data);
+ break;
+ case WIFI_DIRECT_DISCONNECTION_IND:
+ _process_connection_ind(data);
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+* Called for each connected peer and save its information.
+*
+* @param[in] conn_info wifi_direct_connected_peer_info_s store info of connected peer
+* @param[in] data the user data
+* @return EINA_TURE on success, otherwise EINA_FALSE
+*/
+static bool _connected_peer_cb(
+ wifi_direct_connected_peer_info_s * conn_info, void *data)
+{
+ struct _priv *priv;
+ struct device_info *info;
+ int ret;
+
+ if (!conn_info || !data) {
+ _ERR("The param is NULL.");
+ return EINA_FALSE;
+ }
+
+ priv = data;
+
+ info = calloc(1, sizeof(*info));
+ if (!info) {
+ _ERR("calloc failed.");
+ return EINA_FALSE;
+ }
+
+ strncpy(info->dev_name, conn_info->device_name,
+ WIFI_DIRECT_DEFAULT_BUF_LEN);
+ strncpy(info->mac_addr, conn_info->mac_address,
+ WIFI_DIRECT_DEFAULT_BUF_LEN);
+ info->is_conn = EINA_TRUE;
+
+ ret = _update_genlist_item(priv, info);
+ if (ret != RET_SUCCESS) {
+ _ERR("update genlist view failed.");
+ free(info);
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+/**
+* Called for each discovered peer and save its information.
+*
+* @param[in] discov_info wifi_direct_discovered_peer_info_s store info of discovered peer
+* @param[in] data the user data passed to the callback function
+* @return EINA_TURE on success, otherwise EINA_FALSE
+*/
+static bool _discoverd_peers_cb(
+ wifi_direct_discovered_peer_info_s * discov_info,
+ void *data)
+{
+ struct _priv *priv;
+ struct device_info *info;
+ int ret;
+
+ if (!discov_info || !data) {
+ _ERR("The param is invalid.");
+ return EINA_FALSE;
+ }
+
+ priv = data;
+ info = calloc(1, sizeof(*info));
+ if (!info) {
+ _ERR("calloc failed.");
+ return EINA_FALSE;
+ }
+
+ strncpy(info->dev_name, discov_info->device_name,
+ WIFI_DIRECT_DEFAULT_BUF_LEN);
+ strncpy(info->mac_addr, discov_info->mac_address,
+ WIFI_DIRECT_DEFAULT_BUF_LEN);
+ info->is_conn = discov_info->is_connected;
+ info->wps_types = discov_info->supported_wps_types;
+
+ ret = _update_genlist_item(priv, info);
+ if (ret != RET_SUCCESS) {
+ _ERR("update genlist view failed.");
+ free(info);
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+/**
+* Refresh the ON/OFF sign on the Wi-Fi Direct button when popup button is clicked.
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _refresh_wifi_direct_on_text(struct _priv *priv)
+{
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ if (priv->scan_ly)
+ evas_object_hide(priv->scan_ly);
+
+ if (priv->direct_on_flag == DIRECT_ON)
+ elm_object_part_text_set(priv->on_btn, PART_WIFI_DIRECT_SELECT,
+ _(popup_button_on[DIRECT_ON]));
+ else
+ elm_object_part_text_set(priv->on_btn, PART_WIFI_DIRECT_SELECT,
+ _(popup_button_on[DIRECT_OFF]));
+}
+
+/**
+* Set the object to the specified part.
+*
+* @param[in] priv _priv object bypassed
+* @param[in] obj Evas_Object to be set to the part
+*/
+static void _fill_content_part(struct _priv *priv, Evas_Object *obj)
+{
+ Evas_Object *old_obj;
+
+ if (!priv || !obj) {
+ _ERR("The param is invalid.\n");
+ return;
+ }
+
+ old_obj = elm_object_part_content_get(priv->base, PART_GENLIST_ITEMS);
+ if (old_obj) {
+ elm_object_part_content_unset(priv->base, PART_GENLIST_ITEMS);
+ evas_object_hide(old_obj);
+ }
+
+ elm_object_part_content_set(priv->base, PART_GENLIST_ITEMS, obj);
+ evas_object_show(obj);
+}
+
+/**
+* Create the Wi-Fi Direct off layout, but does not show here.
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success,otherwise -1
+*/
+static int _create_wifi_direct_disconnect_part(struct _priv *priv)
+{
+ Evas_Object *ly;
+
+ if (!priv || !priv->base) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ ly = util_add_layout(priv->base,
+ UG_WIFI_DIRECT_EDJ_FILE, GRP_WIFIDIRECT_DISCONNECT_LY);
+ if (!ly) {
+ _ERR("Add noconnect_ly failed.\n");
+ return RET_FAILED;
+ }
+
+ elm_object_part_text_set(ly, PART_DISCONNECT_TEXT,
+ TXT_WIFIDIRECT_NONE);
+
+ priv->no_conn_ly = ly;
+ evas_object_hide(ly);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Called when WiFi Direct is off .
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success, otherwise -1
+*/
+static int _display_wifi_direct_disconnect(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("the param is invalid.");
+ return RET_FAILED;
+ }
+
+ if (!priv->no_conn_ly) {
+ ret = _create_wifi_direct_disconnect_part(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("_create_wifi_direct_disconnect_part failed.");
+ return RET_FAILED;
+ }
+ }
+
+ _fill_content_part(priv, priv->no_conn_ly);
+
+ elm_object_part_content_unset(priv->base, PART_REFRESH_BTN);
+ evas_object_hide(priv->btn_refresh);
+ elm_object_part_content_set(priv->base, PART_REFRESH_BTN,
+ priv->btn_close);
+ evas_object_show(priv->btn_close);
+
+ evas_object_smart_callback_add(priv->btn_close,
+ SIG_CLICKED, _close_btn_clicked_cb, priv);
+ evas_object_event_callback_add(priv->btn_close,
+ EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Evas_Smart_Cb type callback for handling on/off button click event.
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event_inf event information
+*/
+static void _wifi_direct_select_btn_cb(void *data,
+ Evas_Object *obj, void *event_inf)
+{
+ struct _priv *priv;
+ struct device_info *info;
+ const char *value;
+ int ret;
+
+ if (!data || !obj) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+
+ value = elm_object_text_get(obj);
+ if (!value) {
+ _ERR("get text from network type btn is NULL.");
+ return;
+ }
+
+ if (!strcmp(value, popup_button_on[DIRECT_ON])) {
+ if (priv->direct_on_flag == DIRECT_OFF) {
+ priv->direct_on_flag = DIRECT_ON;
+
+ elm_genlist_clear(priv->genlist);
+
+ if (priv->item_list)
+ EINA_LIST_FREE(priv->item_list, info)
+ free(info);
+
+ _create_device_list_view(priv);
+
+ _show_action_btn(priv);
+ }
+ } else {
+ priv->direct_on_flag = DIRECT_OFF;
+
+ ret = _display_wifi_direct_disconnect(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("_display_wifi_direct_disconnect failed.");
+ return;
+ }
+
+ ret = wifi_direct_mgr_deactivate();
+ if (ret != RET_SUCCESS) {
+ _ERR("wif direct deactivate failed.");
+ return;
+ }
+ }
+
+ _refresh_wifi_direct_on_text(priv);
+
+ if (priv->direct_popup) {
+ evas_object_del(priv->direct_popup);
+ priv->direct_popup = NULL;
+ }
+
+ if (priv->dim_ly)
+ evas_object_hide(priv->dim_ly);
+}
+
+/**
+* Evas_Smart_Cb type callback for handling click event.
+*
+* @param[in] data the user data
+* @param[in] obj the corresponding object which the click event occurred
+* @param[in] event_inf event information
+*/
+static void _wifi_direct_btn_clicked_cb(void *data,
+ Evas_Object *obj, void *event_inf)
+{
+ Evas_Object *layout;
+ Evas_Object *box;
+ Evas_Object *btn[BTN_DIRECT];
+ struct _priv *priv;
+ int ret;
+ int i;
+ int btn_x;
+ int btn_y;
+ int btn_w;
+ int btn_h;
+ int move_x;
+ int move_y;
+
+ if (!data) {
+ _ERR("Parameter error!");
+ return;
+ }
+
+ priv = data;
+
+ if (!priv->dim_ly) {
+ ret = _create_wifi_direct_dim(priv);
+ if (ret != RET_SUCCESS) {
+ _fini_priv(priv);
+ return;
+ }
+ }
+
+ evas_object_show(priv->dim_ly);
+
+ layout = util_add_layout(priv->base, UG_WIFI_DIRECT_EDJ_FILE,
+ GRP_WIFI_DIRECT_SELECT);
+ if (!layout)
+ return;
+
+ elm_object_focus_allow_set(layout, EINA_TRUE);
+
+ box = util_add_box(layout, PART_SWALLOW_CONTENT);
+ if (!box) {
+ evas_object_del(layout);
+ return;
+ }
+
+ for (i = 0; i < BTN_DIRECT; i++) {
+ btn[i] = util_add_button(box, STYLE_POPUP_BUTTON, NULL,
+ _(popup_button_on[i]));
+ if (!btn[i]) {
+ _ERR("add btn direct failed.");
+ evas_object_del(layout);
+ return;
+ }
+
+ elm_box_pack_end(box, btn[i]);
+ evas_object_smart_callback_add(btn[i], SIG_CLICKED,
+ _wifi_direct_select_btn_cb, priv);
+ evas_object_event_callback_add(btn[i],
+ EVAS_CALLBACK_MOUSE_IN,
+ _list_btn_mouse_in_cb, priv);
+ }
+
+ if (priv->direct_on_flag == DIRECT_ON)
+ elm_object_signal_emit(btn[DIRECT_ON],
+ SIG_BTN_SELECTED, PROG);
+ else
+ elm_object_signal_emit(btn[DIRECT_OFF],
+ SIG_BTN_SELECTED, PROG);
+
+ util_set_cycle_focus(btn, BTN_DIRECT);
+
+ evas_object_geometry_get(priv->on_btn, &btn_x, &btn_y, &btn_w, &btn_h);
+ move_x = btn_x + btn_w - POPUP_WIDTH * HALF_SCALE - POPUP_RIGHT;
+ move_y = btn_y + btn_h;
+ evas_object_move(layout, move_x * ELM_SCALE, move_y * ELM_SCALE);
+
+ priv->direct_popup = layout;
+
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_KEY_DOWN,
+ _popup_back_pressed_cb, priv);
+
+ elm_object_focus_set(btn[0], EINA_TRUE);
+}
+
+/**
+* Set the Wi-Fi Direct description.
+*
+* @param[in] priv _priv object bypassed
+*/
+static void _set_description(struct _priv *priv)
+{
+ char descrption[MAX_STRING_LENTH];
+
+ if (!priv) {
+ _ERR("priv is invalid.");
+ return;
+ }
+
+ memset(&descrption, 0x00, MAX_STRING_LENTH);
+ snprintf(descrption, MAX_STRING_LENTH - 1, "%s", TXT_WIFI_DIRECT_DISC);
+ elm_object_part_text_set(priv->base, PART_DESCRIPTION, descrption);
+}
+
+/**
+* Create the Wi-Fi Direct state button.
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success, -1 otherwise
+*/
+static int _create_wifi_direct_button(struct _priv *priv)
+{
+ Evas_Object *on_btn;
+ Evas_Object *base;
+
+ if (!priv || !priv->base) {
+ _ERR("Parameter error!");
+ return RET_FAILED;
+ }
+
+ base = priv->base;
+
+ on_btn = util_add_button(base, STYLE_WIFI_DIRECT_BTN,
+ PART_WIFI_DIRECT_ON, TXT_WIFI_DIRECT);
+ if (!on_btn) {
+ _ERR("Add wifi direct button failed.");
+ return RET_FAILED;
+ }
+
+ elm_object_focus_allow_set(on_btn, EINA_TRUE);
+ elm_object_focus_set(on_btn, EINA_TRUE);
+ elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(on_btn, on_btn, ELM_FOCUS_LEFT);
+
+ evas_object_smart_callback_add(on_btn, SIG_CLICKED,
+ _wifi_direct_btn_clicked_cb, priv);
+ evas_object_event_callback_add(on_btn,
+ EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
+
+ priv->on_btn = on_btn;
+
+ _refresh_wifi_direct_on_text(priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Create the genlist item text label.
+*
+* @param[in] data the user data
+* @return pointer pointing to the text label
+*/
+static char *_item_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ struct device_info *info;
+ char buf_name[WIFI_DIRECT_DEFAULT_BUF_LEN];
+
+ if (!data) {
+ _ERR("data is NULL.");
+ return NULL;
+ }
+
+ info = data;
+
+ memset(&buf_name, 0x00, WIFI_DIRECT_DEFAULT_BUF_LEN);
+ if (!strcmp(part, TXT_ELM_TEXT)) {
+ strncpy(buf_name, info->dev_name, WIFI_DIRECT_HALF_BUF_LEN);
+ strncat(buf_name, TXT_COLON, WIFI_DIRECT_COLON_LEN);
+ strncat(buf_name, info->state, WIFI_DIRECT_HALF_BUF_LEN);
+
+ return strdup(buf_name);
+ }
+
+ return NULL;
+}
+
+/**
+* Create the genlist object.
+*
+* @param[in] priv _priv object bypassed
+* @return genlist object on success, otherwise NULL
+*/
+static Evas_Object *_create_genlist(struct _priv *priv)
+{
+ Evas_Object *genlist;
+ Elm_Genlist_Item_Class *itc;
+
+ if (!priv || !priv->base) {
+ _ERR("priv is invalid.");
+ return NULL;
+ }
+
+ genlist = elm_genlist_add(priv->base);
+ if (!genlist) {
+ _ERR("add genlist failed.");
+ return NULL;
+ }
+
+ priv->genlist = genlist;
+
+ itc = elm_genlist_item_class_new();
+ if (!itc) {
+ _ERR("genlist item class new failed.");
+ evas_object_del(genlist);
+ return NULL;
+ }
+
+ itc->item_style = STYLE_TEXT_ICON;
+ itc->func.text_get = _item_label_get;
+ itc->func.content_get = NULL;
+ itc->func.state_get = NULL;
+ itc->func.del = NULL;
+
+ priv->itc = itc;
+
+ evas_object_size_hint_weight_set(genlist,
+ EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(genlist,
+ EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_focus_next_object_set(genlist, genlist, ELM_FOCUS_LEFT);
+
+ return genlist;
+}
+
+/**
+* Creates the action buttons including refresh button and close button.
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success, otherwise -1
+*/
+static int _create_action_btn(struct _priv *priv)
+{
+ Evas_Object *btn_refresh;
+ Evas_Object *btn_close;
+
+ if (!priv || !priv->base) {
+ _ERR("priv is invalid.");
+ return RET_FAILED;
+ }
+
+ btn_refresh = util_add_button(priv->base, STYLE_ACTION_BUTTON,
+ PART_REFRESH_BTN, _(action_button[ACTION_BTN_REFRESH]));
+ btn_close = util_add_button(priv->base, STYLE_ACTION_BUTTON,
+ PART_CLOSE_BTN, _(action_button[ACTION_BTN_CLOSE]));
+
+ priv->btn_refresh = btn_refresh;
+ priv->btn_close = btn_close;
+
+ evas_object_event_callback_add(priv->btn_refresh,
+ EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
+ evas_object_smart_callback_add(priv->btn_refresh,
+ SIG_CLICKED, _refresh_btn_clicked_cb, priv);
+ evas_object_event_callback_add(priv->btn_close,
+ EVAS_CALLBACK_MOUSE_IN, _list_btn_mouse_in_cb, priv);
+ evas_object_smart_callback_add(priv->btn_close,
+ SIG_CLICKED, _close_btn_clicked_cb, priv);
+
+ return RET_SUCCESS;
+}
+
+/**
+* Initialize Wi-Fi Direct stack.
+*
+* @param[in] priv _priv object bypassed
+* @return 0 on success, otherwise -1
+*/
+static int _wifi_direct_view_stack_init(struct _priv *priv)
+{
+ int ret;
+
+ if (!priv) {
+ _ERR("priv is NULL.");
+ return RET_FAILED;
+ }
+
+ ret = wifi_direct_mgr_wifi_init();
+ if (ret != RET_SUCCESS) {
+ _ERR("init wifi failed.");
+ return ret;
+ }
+
+ ret = wifi_direct_mgr_wifi_direct_init();
+ if (ret != RET_SUCCESS) {
+ _ERR("init wifi direct failed.");
+ wifi_direct_mgr_wifi_fini();
+ return ret;
+ }
+
+ ret = wifi_direct_mgr_register_callback(&cbs, (void *)priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("register callback failed.");
+ wifi_direct_mgr_wifi_fini();
+ wifi_direct_mgr_wifi_direct_fini();
+ return ret;
+ }
+
+ return ret;
+}
+
+/**
+* Evas_Object_Event_Cb type callback for handling deletion event.
+*
+* @param[in] data the user data
+* @param[in] e evas handler
+* @param[in] obj the corresponding object which the deletion event occurred
+* @param[in] event_info event information
+*/
+static void _base_layout_key_down_cb(void *data,
+ Evas *e, Evas_Object *obj, void *event_info)
+{
+ struct _priv *priv;
+ Evas_Event_Key_Down *ei;
+
+ if (!data || !event_info) {
+ _ERR("the param is invalid.");
+ return;
+ }
+
+ priv = data;
+ ei = event_info;
+
+ if (!ei->keyname) {
+ _ERR("ei->keyname is NULL.");
+ return;
+ }
+
+ if (!priv->ug) {
+ _ERR("priv->ug -s NULL.");
+ return;
+ }
+
+ if (!strcmp(ei->keyname, KEY_BACK) ||
+ !strcmp(ei->keyname, KEY_EXIT)) {
+ ug_destroy_me(priv->ug);
+ _fini_priv(priv);
+ }
+}
+
+/**
+* Create wifi direct main view.
+*
+* @param[in] win parent window
+* @param[in] ug UI gadget object
+* @return base layout
+*/
+Evas_Object *wifi_direct_view_create(Evas_Object *win, ui_gadget_h ug)
+{
+ Evas_Object *base;
+ Evas_Object *obj;
+ struct _priv *priv;
+ int ret;
+
+ if (!win || !ug) {
+ _ERR("The param is invalid.\n");
+ return NULL;
+ }
+
+ priv = _init_priv();
+ if (!priv) {
+ _ERR("calloc priv failed.\n");
+ return NULL;
+ }
+
+ priv->win = win;
+ priv->ug = ug;
+ priv->direct_on_flag = DIRECT_ON;
+
+ ret = _wifi_direct_view_stack_init(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("wifi direct view stack init failed.");
+ goto error;
+ }
+
+ base = util_add_layout(win, UG_WIFI_DIRECT_EDJ_FILE, GRP_MAIN);
+ if (!base) {
+ _ERR("Add base layout failed.\n");
+ goto error;
+ }
+
+ priv->base = base;
+
+ _set_description(priv);
+
+ ret = _create_wifi_direct_button(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("fail to create wifi direct button.");
+ goto error;
+ }
+
+ obj = _create_genlist(priv);
+ if (!obj) {
+ _ERR("fail to create genlist.");
+ goto error;
+ }
+
+ ret = _create_action_btn(priv);
+ if (ret != RET_SUCCESS) {
+ _ERR("fail to create action button.");
+ goto error;
+ }
+
+ _create_device_list_view(priv);
+
+ evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN,
+ _base_layout_key_down_cb, priv);
+
+ evas_object_show(base);
+
+ return base;
+
+error:
+ _fini_priv(priv);
+ return NULL;
+}