summaryrefslogtreecommitdiff
path: root/phone/phone.c
diff options
context:
space:
mode:
Diffstat (limited to 'phone/phone.c')
-rwxr-xr-xphone/phone.c333
1 files changed, 333 insertions, 0 deletions
diff --git a/phone/phone.c b/phone/phone.c
new file mode 100755
index 0000000..a162967
--- /dev/null
+++ b/phone/phone.c
@@ -0,0 +1,333 @@
+/*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Licensed under the Flora License, Version 1.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://floralicense.org/license/
+*
+* 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 <appcore-efl.h>
+#include <Ecore_X.h>
+#include "phone.h"
+#include "phone-common.h"
+#include "ph-front.h"
+
+#include <system_info.h>
+
+struct phone_data
+{
+ Evas_Object *win;
+ ph_phoneui_data *phoneui_d;
+#ifdef _PHONE_CONTACTS_DESKTOP_MODE_
+ Evas_Object *prev_btn;
+#endif
+ /* add more variables here */
+};
+
+static void phapp_win_del(void *data, Evas_Object *obj, void *event)
+{
+ elm_exit();
+}
+
+static Evas_Object* phapp_create_win(const char *name)
+{
+ Evas_Object *eo;
+ int w, h;
+
+ eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (eo) {
+ elm_win_title_set(eo, name);
+#ifdef _PHONE_CONTACTS_DESKTOP_MODE_
+#else
+ elm_win_borderless_set(eo, EINA_TRUE);
+#endif
+ evas_object_smart_callback_add(eo, "delete,request", phapp_win_del, NULL);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(eo, w, h);
+ elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW);
+ }
+ elm_win_conformant_set(eo, EINA_TRUE);
+ return eo;
+}
+
+static void phapp_region_changed(void *data)
+{
+ PH_FN_CALL;
+ ph_phoneui_data *phoneui_d = data;
+ phone_front_view_region_changed(phoneui_d);
+ ug_send_event(UG_EVENT_REGION_CHANGE);
+ return;
+}
+
+static void phapp_language_changed(void *data)
+{
+ PH_FN_CALL;
+ struct phone_data *ad = data;
+ ph_phoneui_data *phoneui_d = ad->phoneui_d;
+ phone_front_view_language_changed(phoneui_d);
+ ug_send_event(UG_EVENT_LANG_CHANGE);
+}
+
+
+static int phapp_open(void *data)
+{
+ PH_FN_CALL;
+ struct phone_data *ad = data;
+ ph_phoneui_data *phoneui_d = ad->phoneui_d;
+ if (TRUE == phone_front_view_show_call_app(phoneui_d))
+ return -1;
+ return 0;
+}
+
+#ifdef _PHONE_CONTACTS_DESKTOP_MODE_
+static Evas_Object* _set_win_icon(struct phone_data *ad)
+{
+ Evas_Object *image = evas_object_image_add(evas_object_evas_get(ad->win));
+ evas_object_image_file_set(image, "/usr/share/icons/default/small/org.tizen.phone.png", NULL);
+ elm_win_icon_object_set(ad->win, image);
+
+ return image;
+}
+
+static void __win_profile_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct phone_data *ad = data;
+ p_retm_if(NULL == ad || NULL == ad->phoneui_d, "data is null");
+
+ const char *profile = elm_config_profile_get();
+
+ if(!strcmp(profile, "desktop")) {
+ Elm_Object_Item *navi_item = elm_naviframe_bottom_item_get(ad->phoneui_d->navi);
+ ad->prev_btn = elm_object_item_part_content_unset(navi_item, "prev_btn");
+ ad->phoneui_d->is_desktop_mode = true;
+ elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_HIDE);
+ if(!ad->phoneui_d->icon)
+ ad->phoneui_d->icon = _set_win_icon(ad);
+ }
+ else {
+ Elm_Object_Item *selected_it = elm_toolbar_selected_item_get(ad->phoneui_d->tabbar);
+ ad->phoneui_d->is_desktop_mode = false;
+
+ if (selected_it != ad->phoneui_d->item[PH_VIEW_DIALER]) {
+ Elm_Object_Item *navi_item = elm_naviframe_bottom_item_get(ad->phoneui_d->navi);
+ if (ad->prev_btn) {
+ elm_object_item_part_content_set(navi_item, "prev_btn", ad->prev_btn);
+ ad->prev_btn = NULL;
+ }
+ }
+
+ elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
+ }
+}
+#endif
+
+static bool phapp_create(void *data)
+{
+ PH_FN_CALL;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ Evas_Object *win;
+ struct phone_data *ad = data;
+
+ {
+ // Emulator does not support Dial/Log
+ char *pszModelName = NULL;
+ int ret = SYSTEM_INFO_ERROR_NONE;
+ ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &pszModelName);
+ if (ret == SYSTEM_INFO_ERROR_NONE && pszModelName != NULL)
+ {
+ PH_DBG("SYSTEM_INFO_KEY_MODEL : %s", pszModelName);
+
+ if(strcasestr(pszModelName, "Emulator") != NULL)
+ {
+ free(pszModelName);
+ return false;
+ }
+ free(pszModelName);
+ }
+ }
+
+
+ /* create window */
+ win = phapp_create_win(PACKAGE);
+ p_retvm_if(NULL == win, -1, "phapp_create_win() Failed");
+ ad->win = win;
+
+ evas_object_show(win);
+#ifdef _PHONE_CONTACTS_DESKTOP_MODE_
+ evas_object_smart_callback_add(ad->win, "profile,changed", __win_profile_changed_cb, ad);
+#endif
+ bindtextdomain(PACKAGE, LOCALEDIR);
+
+ err = contacts_connect2();
+ if (CONTACTS_ERROR_NONE != err) {
+ Evas_Object *popup;
+ ERR("contacts_connect2() Failed(%d)", err);
+ popup = elm_popup_add(win);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(popup);
+ elm_object_text_set(popup, T_(PH_GET_TEXT_BASIC, PHTEXT_INITIALIZING));
+ elm_popup_timeout_set(popup, 1.5);
+ evas_object_smart_callback_add(popup, "timeout", phapp_win_del, NULL);
+ return true;
+ }
+
+ UG_INIT_EFL(ad->win, UG_OPT_INDICATOR_ENABLE);
+ ad->phoneui_d = phone_front_view_create(ad->win);
+
+ appcore_set_open_cb(phapp_open, data);
+
+ return true;
+}
+
+static void phapp_terminate(void *data)
+{
+ PH_FN_CALL;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ struct phone_data *ad = data;
+
+ //ug_destroy_all();
+ if (NULL != ad->win)
+ evas_object_del(ad->win);
+ err = contacts_disconnect2();
+ p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_disconnect2() Failed(%d)", err);
+ return;
+}
+
+static void phapp_pause(void *data)
+{
+ PH_FN_CALL;
+ struct phone_data *ad = data;
+ phone_front_view_pause(ad->phoneui_d);
+ ug_pause();
+ return;
+}
+
+static void phapp_resume(void *data)
+{
+ PH_FN_CALL;
+ // update missed log info
+ struct phone_data *ad = data;
+ phone_front_view_resume(ad->phoneui_d);
+ ug_resume();
+ return;
+}
+
+static void phapp_service(service_h service, void *data)
+{
+ PH_FN_CALL;
+ struct phone_data *ad = data;
+ ph_phoneui_data *phoneui_d;
+ char* val = NULL;
+ int ret;
+
+ p_retm_if(NULL == ad || NULL == ad->phoneui_d, "data is null");
+ phoneui_d = ad->phoneui_d;
+
+ ret = service_get_operation(service, &val);
+ p_warn_if(SERVICE_ERROR_NONE != ret, "service_get_operation is failed(%d)", ret);
+
+ if (val){
+ if (0 == strcmp(val, SERVICE_OPERATION_DIAL)) {
+ PH_DBG("operation : %s", val);
+ free(val);
+ val = NULL;
+ ret = service_get_uri(service, &val);
+ p_warn_if(SERVICE_ERROR_NONE != ret, "service_get_uri is failed(%d)", ret);
+ if (val && 0 == strncmp(val, "tel:", 4)) {
+ phone_front_view_reset(phoneui_d, PH_VIEW_DIALER, PH_FRONT_DIALER_WITH_NUM, service);
+ free(val);
+ }
+ return;
+ } else {
+ PH_DBG("operation : %s", val);
+ free(val);
+ val = NULL;
+ }
+ } else {
+ PH_DBG("no operation.");
+ }
+
+ ret = service_get_extra_data(service, "MMICHECK_SEND", &val);
+ p_warn_if(SERVICE_ERROR_NONE != ret, "service_get_extra_data is failed(%d)", ret);
+ if (val && 0 == strcmp(val, "1")) {
+ PH_DBG("MMICHECK_SEND detected");
+ phone_front_view_reset(phoneui_d, PH_VIEW_DIALER, PH_FRONT_DIALER_WITH_SEND_KEY, NULL);
+ free(val);
+ return;
+ }
+
+ // missed_call : show log main view, from idle_lock, quickpanel
+ ret = service_get_extra_data(service, "logs", &val);
+ p_warn_if(SERVICE_ERROR_NONE != ret, "service_get_extra_data is failed(%d)", ret);
+ PH_DBG("logs : %s", SAFE_STR(val));
+ if (val && 0 == strcmp(val, "missed_call")) {
+ phone_front_view_reset(phoneui_d, PH_VIEW_LOG, PH_FRONT_LOG_MISSED, NULL);
+ free(val);
+ return;
+ }
+
+ ret = service_get_extra_data(service, "launch_type", &val);
+ p_warn_if(SERVICE_ERROR_NONE != ret, "service_get_extra_data is failed(%d)", ret);
+ PH_DBG("launch_type : %s", SAFE_STR(val));
+ if (val && *val) {
+ if (0 == strcmp(val, "log"))
+ phone_front_view_reset(phoneui_d, PH_VIEW_LOG, -1, NULL);
+ else if (0 == strcmp(val, "favorite"))
+ phone_front_view_reset(phoneui_d, PH_VIEW_FAVORITE, -1, NULL);
+ else if (0 == strcmp(val, "dialer")) {
+ if (phone_front_view_show_call_app(phoneui_d)) {
+ if(phoneui_d->select_tab < PH_VIEW_DIALER)
+ elm_exit();
+ }
+ else
+ phone_front_view_reset(phoneui_d, PH_VIEW_DIALER, -1, NULL);
+ }
+ else
+ phone_front_view_reset(phoneui_d, PH_VIEW_DIALER, -1, NULL);
+ free(val);
+ return;
+ }
+
+ ret = service_get_extra_data(service, "tab", &val);
+ p_warn_if(SERVICE_ERROR_NONE != ret, "service_get_extra_data is failed(%d)", ret);
+ PH_DBG("tab : %s", SAFE_STR(val));
+ if (val && *val) {
+ if (!strcmp(val, "dialer")) {
+ phone_front_view_reset(phoneui_d, PH_VIEW_DIALER, -1, NULL);
+ free(val);
+ return;
+ }
+ }
+
+ elm_win_lower(phoneui_d->win);
+ return;
+}
+
+API int main(int argc, char *argv[])
+{
+ struct phone_data ad = {0};
+ app_event_callback_s event_callback = {0,};
+
+ event_callback.create = phapp_create;
+ event_callback.terminate = phapp_terminate;
+ event_callback.pause = phapp_pause;
+ event_callback.resume = phapp_resume;
+ event_callback.service = phapp_service;
+ event_callback.low_memory = NULL;
+ event_callback.low_battery = NULL;
+ event_callback.region_format_changed = phapp_region_changed;
+ event_callback.language_changed = phapp_language_changed;
+ event_callback.device_orientation = NULL;
+
+ return app_efl_main(&argc, &argv, &event_callback, &ad);
+}
+