summaryrefslogtreecommitdiff
path: root/src/mf-ug-main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mf-ug-main.c')
-rw-r--r--src/mf-ug-main.c1375
1 files changed, 1375 insertions, 0 deletions
diff --git a/src/mf-ug-main.c b/src/mf-ug-main.c
new file mode 100644
index 0000000..0430646
--- /dev/null
+++ b/src/mf-ug-main.c
@@ -0,0 +1,1375 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 <sys/time.h>
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <vconf.h>
+#include <media_content.h>
+#include <utilX.h>
+#include <assert.h>
+
+#include "mf-ug-main.h"
+#include "mf-ug-fs-util.h"
+#include "mf-ug-util.h"
+#include "../data/ug_edc_common.h"
+#include "mf-ug-conf.h"
+#include "mf-ug-dlog.h"
+#include "mf-ug-winset.h"
+#include "mf-ug-fm-svc-wrapper.h"
+#include "mf-ug-resource.h"
+#include "mf-ug-cb.h"
+#include "mf-ug-list-play.h"
+
+#ifdef UG_OPERATION_SELECT_MODE
+
+#define MF_BUNDLE_SELECTION_MODE "http://tizen.org/appcontrol/data/selection_mode"
+#define MF_BUNDLE_SELECTION_MODE_SINGLE "single"
+#define MF_BUNDLE_SELECTION_MODE_MULTI "multiple"
+#endif
+
+/******************************
+** Prototype : __mf_ug_main_init_data
+** Description :
+** Input : void *data
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void __mf_ug_main_init_data(void *data)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugData is NULL");
+
+ if (ugd->ug_Status.ug_pPath != NULL)
+ {
+ g_string_free(ugd->ug_Status.ug_pPath, TRUE);
+ ugd->ug_Status.ug_pPath = NULL;
+ }
+ ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER);
+ ugd->ug_Status.ug_iState = STATE_PHONE;
+ ugd->ug_Status.ug_iRadioOn = 0;
+ ugd->ug_Status.ug_iMmcFlag = false;
+ ugd->ug_Status.ug_bAudioPlayFlag = false;
+ ugd->ug_Status.ug_bInstallFlag = true;
+ ugd->ug_Status.ug_bInSettingView = false;
+ ugd->ug_Status.ug_bSettingEntry = false;
+ ugd->ug_Status.ug_iMore = UG_MORE_DEFAULT;
+
+ ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE;
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_ALL_LIST;
+ ugd->ug_UiGadget.ug_pExtension = NULL;
+ ugd->ug_UiGadget.ug_iDrmFilter = DRM_FILTER_NONE;
+ ugd->ug_UiGadget.ug_iMarkedMode = MARKED_OFF;
+ ugd->ug_UiGadget.ug_pMultiSelectFileList = NULL;
+
+ ugd->ug_ListPlay.ug_pPlayFilePath = NULL;
+ ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_INIT;
+#ifdef UG_OPERATION_SELECT_MODE
+ ugd->ug_UiGadget.ug_bOperationSelectFlag = false;
+#endif
+
+
+ mf_ug_util_create_dir_monitor(ugd);
+ mf_ug_util_set_mmc_state_cb(ugd);
+ UG_TRACE_END;
+}
+
+/******************************
+** Prototype : __mf_ug_main_free_data
+** Description :
+** Input : void *data
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void __mf_ug_main_free_data(void *data)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugData is NULL");
+
+ if (ugd->ug_Status.ug_pPath)
+ {
+ g_string_free(ugd->ug_Status.ug_pPath, TRUE);
+ ugd->ug_Status.ug_pPath = NULL;
+ }
+ if (ugd->ug_UiGadget.ug_pMultiSelectFileList)
+ {
+ mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pMultiSelectFileList, NODE_TYPE_CHAR);
+ ugd->ug_UiGadget.ug_pMultiSelectFileList = NULL;
+ }
+ if (ugd->ug_UiGadget.ug_pDirList)
+ {
+ mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pDirList, NODE_TYPE_PNODE);
+ ugd->ug_UiGadget.ug_pDirList = NULL;
+ }
+ if (ugd->ug_UiGadget.ug_pFilterList)
+ {
+ mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pFilterList, NODE_TYPE_PNODE);
+ ugd->ug_UiGadget.ug_pFilterList = NULL;
+ }
+
+ if (ugd->ug_Status.ug_pUpper_folder)
+ {
+ free(ugd->ug_Status.ug_pUpper_folder);
+ ugd->ug_Status.ug_pUpper_folder = NULL;
+ }
+ if (ugd->ug_Status.ug_pEntryPath)
+ {
+ free(ugd->ug_Status.ug_pEntryPath);
+ ugd->ug_Status.ug_pEntryPath = NULL;
+ }
+
+ UG_TRACE_END;
+
+}
+
+
+/******************************
+** Prototype : __mf_ug_main_free_evas_object
+** Description : Samsung
+** Input : void *data
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void __mf_ug_main_free_evas_object(void *data)
+{
+
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugData is NULL");
+
+ int iNaviListLen = 0;
+ int index = 0;
+
+ if (ugd->ug_MainWindow.ug_pNormalPopup != NULL)
+ {
+
+ evas_object_del(ugd->ug_MainWindow.ug_pNormalPopup);
+ ugd->ug_MainWindow.ug_pNormalPopup = NULL;
+ }
+ if (ugd->ug_MainWindow.ug_pRadioGroup != NULL)
+ {
+
+ evas_object_del(ugd->ug_MainWindow.ug_pRadioGroup);
+ ugd->ug_MainWindow.ug_pRadioGroup = NULL;
+ }
+
+ iNaviListLen = eina_list_count(ugd->ug_MainWindow.ug_pNaviBarList);
+ for (index = 0; index < iNaviListLen; index++)
+ {
+ ugNaviBar *pNavi_s = NULL;
+ pNavi_s = (ugNaviBar *)eina_list_nth(ugd->ug_MainWindow.ug_pNaviBarList, index);
+ if (pNavi_s->ug_pNaviLabel != NULL)
+ {
+ free(pNavi_s->ug_pNaviLabel);
+ pNavi_s->ug_pNaviLabel = NULL;
+ }
+ if (pNavi_s->ug_pNaviTitle != NULL)
+ {
+ free(pNavi_s->ug_pNaviTitle);
+ pNavi_s->ug_pNaviTitle = NULL;
+ }
+ }
+
+ if (ugd->ug_MainWindow.ug_pTabBar != NULL)
+ {
+ evas_object_del(ugd->ug_MainWindow.ug_pTabBar);
+ ugd->ug_MainWindow.ug_pTabBar = NULL;
+ }
+
+
+ if (ugd->ug_MainWindow.ug_pBackGround != NULL)
+ {
+ evas_object_del(ugd->ug_MainWindow.ug_pBackGround);
+ ugd->ug_MainWindow.ug_pBackGround = NULL;
+ }
+
+ if (ugd->ug_MainWindow.ug_pMainLayout != NULL)
+ {
+ evas_object_del(ugd->ug_MainWindow.ug_pMainLayout);
+ ugd->ug_MainWindow.ug_pMainLayout = NULL;
+ }
+ UG_TRACE_END;
+}
+
+Evas_Object *mf_ug_main_create_bg(Evas_Object *win)
+{
+ ug_mf_retv_if(win == NULL, NULL);
+ Evas_Object *bg = elm_bg_add(win);
+
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(bg);
+
+ return bg;
+}
+
+/******************************
+** Prototype : _ug_mf_create_layout_main
+** Description :
+** Input : Evas_Object* parent
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static Evas_Object *__mf_ug_main_create_main_layout(Evas_Object *parent)
+{
+ UG_TRACE_BEGIN;
+ Evas_Object *layout = NULL;
+ ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+ layout = elm_layout_add(parent);
+ ug_mf_retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
+
+ elm_layout_theme_set(layout, "layout", "application", "default");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(layout);
+ UG_TRACE_END;
+
+ return layout;
+}
+
+Evas_Object *mf_ug_main_tab_layout_create(Evas_Object *parent)
+{
+ Evas_Object *layout;
+
+ ug_mf_retv_if(parent == NULL, NULL);
+
+ layout = elm_layout_add(parent);
+ ug_mf_retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
+ elm_object_focus_set(layout, EINA_FALSE);
+
+ elm_layout_theme_set(layout, "layout", "tabbar", "default");
+
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ evas_object_hide(layout);
+ return layout;
+}
+
+/******************************
+** Prototype : __mf_ug_main_set_path_option
+** Description : Samsung
+** Input : void *data
+** char *path
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static int __mf_ug_main_set_path_option(void *data, const char *path)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retvm_if(ugd == NULL, MYFILE_ERR_SRC_ARG_INVALID, "ugd is NULL");
+ ug_mf_retvm_if(path == NULL, MYFILE_ERR_SRC_ARG_INVALID, "path is NULL");
+
+ int error_code = MYFILE_ERR_NONE;
+ char *entry_path = NULL;
+
+ if (strncmp(path, PHONE_FOLDER, strlen(PHONE_FOLDER)) == 0 || strncmp(path, MEMORY_FOLDER, strlen(MEMORY_FOLDER)) == 0)
+ {
+
+ /**check whether is /opt/media or /mnt/mmc */
+ entry_path = strdup(path);
+ if (entry_path == NULL)
+ {
+ return MYFILE_ERR_ALLOCATE_FAIL;
+ }
+ }
+ else if (strncmp(path, UG_SETTING_RINGTONE_PATH, strlen(UG_SETTING_RINGTONE_PATH)) == 0
+ || strncmp(path, UG_SETTING_ALERTS_PATH, strlen(UG_SETTING_ALERTS_PATH)) == 0
+ || strncmp(path, UG_SETTING_MSG_ALERTS_PATH, strlen(UG_SETTING_MSG_ALERTS_PATH)) == 0)
+ {
+
+ /**check whether is setting ringtone or alerts path */
+ entry_path = strdup(path);
+ if (entry_path == NULL)
+ {
+ return MYFILE_ERR_ALLOCATE_FAIL;
+ }
+ ugd->ug_Status.ug_bInSettingView = true;
+ ugd->ug_Status.ug_bSettingEntry = true;
+ ugd->ug_Status.ug_bRingtoneSet = true;
+ }
+ else if (strlen(path) == 1 && strncmp(path, "/", 1))
+ {
+ /**chech the path whether is "/" */
+ entry_path = strdup(PHONE_FOLDER);
+ if (entry_path == NULL)
+ {
+ return MYFILE_ERR_ALLOCATE_FAIL;
+ }
+ }
+ else
+ {
+ /**not begin with /mnt/mmc and /opt/media , so append it to /opt/media*/
+ char *temp = strdup(PHONE_FOLDER);
+ if (temp == NULL)
+ {
+ return MYFILE_ERR_ALLOCATE_FAIL;
+ }
+ entry_path = g_strconcat(temp, path, NULL);
+ free(temp);
+ }
+
+ if (entry_path != NULL)
+ {
+ /** if there is a '/' at the end of the path, can't be recognized */
+ if (entry_path[strlen(entry_path) - 1] == '/')
+ {
+ entry_path[strlen(entry_path) - 1] = '\0';
+ }
+
+ if (ecore_file_exists(entry_path) == false)
+ {
+
+ if (ugd->ug_UiGadget.ug_iSelectMode == EXPORT_MODE ||
+ ugd->ug_UiGadget.ug_iSelectMode == IMPORT_PATH_SELECT_MODE ||
+ ugd->ug_UiGadget.ug_iSelectMode == IMPORT_MODE ||
+ ugd->ug_UiGadget.ug_iSelectMode == SAVE_MODE ||
+ ugd->ug_UiGadget.ug_iSelectMode == IMPORT_SINGLE)
+ {
+ error_code = mf_ug_fm_svc_wrapper_create_p(entry_path);
+ if (error_code != MYFILE_ERR_NONE)
+ {
+ free(entry_path);
+ return MYFILE_ERR_INVALID_FILE_PATH;
+ }
+ }
+ else
+ {
+ free(entry_path);
+ return MYFILE_ERR_INVALID_FILE_PATH;
+ }
+ }
+ if (ecore_file_is_dir(entry_path) == false)
+ {
+ ug_mf_debug("path is not a directory");
+ free(entry_path);
+ return MYFILE_ERR_INVALID_DIR_PATH;
+ }
+
+ if (ugd->ug_Status.ug_pPath)
+ {
+ g_string_free(ugd->ug_Status.ug_pPath, TRUE);
+ ugd->ug_Status.ug_pPath = NULL;
+ }
+ ugd->ug_Status.ug_pEntryPath = g_strdup(entry_path);
+ ugd->ug_Status.ug_pPath = g_string_new(entry_path);
+ ugd->ug_Status.ug_iViewType = mf_ug_view_normal;
+ free(entry_path);
+ }
+ else
+ {
+ return MYFILE_ERR_ALLOCATE_FAIL;
+ }
+ UG_TRACE_END;
+ return error_code;
+}
+
+
+/******************************
+** Prototype : __mf_ug_main_set_select_mode
+** Description : Samsung
+** Input : void *data
+** char *select_mode
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void __mf_ug_main_set_select_mode(void *data, const char *select_mode)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+
+ if (select_mode != NULL)
+ {
+ if (!strncmp(select_mode, UG_SELECT_MODE_SINGLE_FILE, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE;
+ }
+ else if (!strncmp(select_mode, UG_SELECT_MODE_MULTI_FILE, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = MULTI_FILE_MODE;
+ }
+ else if (!strncmp(select_mode, UG_SELECT_MODE_SINGLE_ALL, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = SINGLE_ALL_MODE;
+ }
+ else if (!strncmp(select_mode, UG_SELECT_MODE_MULTI_ALL, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = MULTI_ALL_MODE;
+ }
+ else if(!strncmp(select_mode, UG_SELECT_MODE_IMPORT, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = IMPORT_MODE;
+ }
+ else if(!strncmp(select_mode, UG_SELECT_MODE_IMPORT_PATH_SELECT, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = IMPORT_PATH_SELECT_MODE;
+ }
+ else if(!strncmp(select_mode, UG_SELECT_MODE_EXPORT, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = EXPORT_MODE;
+ }
+ else if (!strncmp(select_mode, UG_SELECT_MODE_IMPORT_SINGLE, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = IMPORT_SINGLE;
+ ugd->ug_Status.ug_iViewType = mf_ug_view_normal;
+ }
+ else if (!strncmp(select_mode, UG_SELECT_MODE_SAVE, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = SAVE_MODE;
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE;
+ }
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE;
+ }
+ UG_TRACE_END;
+
+}
+
+
+
+/******************************
+** Prototype : __mf_ug_main_set_filter_mode
+** Description : Samsung
+** Input : void *data
+** char *file_filter
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void __mf_ug_main_set_filter_mode(void *data, const char *file_filter)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+
+ if (file_filter != NULL)
+ {
+ if (!strncmp(file_filter, UG_FILE_FILTER_ALL, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_ALL_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_IMAGE, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_IMAGE_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_SOUND, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_SOUND_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_VIDEO, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_VIDEO_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_FLASH, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_FLASH_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_FOLDER, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_FOLDER_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_IV, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_IMAGE_VIDEO_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_IS, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_IMAGE_SOUND_LIST;
+ }
+ else if (!strncmp(file_filter, UG_FILE_FILTER_VS, strlen(file_filter)))
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_VIDEO_SOUND_LIST;
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_BY_EXTENSION;
+ ugd->ug_UiGadget.ug_pExtension = strdup(file_filter);
+ if (g_strcmp0(file_filter, "opml") == 0)
+ {
+ ugd->ug_UiGadget.ug_iImportMode = 1;
+ }
+ }
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iFilterMode = SHOW_ALL_LIST;
+ ugd->ug_UiGadget.ug_pExtension = NULL;
+ }
+
+ if (ugd->ug_UiGadget.ug_iFilterMode != SHOW_BY_EXTENSION)
+ {
+ ugd->ug_UiGadget.ug_iFileFilter = mf_ug_fm_svc_wapper_get_file_filter(ugd->ug_UiGadget.ug_iFilterMode);
+ }
+
+
+ if (ugd->ug_UiGadget.ug_iFilterMode == SHOW_SOUND_LIST && ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE)
+ {
+ ugd->ug_Status.ug_iCtrlBarType = CTRL_BAR_MUSIC;
+ }
+ else
+ {
+ ugd->ug_Status.ug_iCtrlBarType = CTRL_BAR_MULTI;
+ }
+ UG_TRACE_END;
+}
+
+
+
+/******************************
+** Prototype : __mf_ug_main_set_marked_mode
+** Description : Samsung
+** Input : void *data
+** char *marked_mode
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void __mf_ug_main_set_marked_mode(void *data, const char *marked_mode)
+{
+
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+
+ if (marked_mode != NULL)
+ {
+ ugd->ug_UiGadget.ug_iMarkedMode = MARKED_ON;
+ mf_ug_util_get_params_path(&ugd->ug_UiGadget.ug_pMultiSelectFileList, marked_mode);
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iMarkedMode = MARKED_OFF;
+ }
+ UG_TRACE_END;
+}
+
+
+/******************************
+** Prototype : __mf_ug_main_set_drm_filter_mode
+** Description : Samsung
+** Input : void *data
+** char *drm_filter
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void __mf_ug_main_set_drm_filter_mode(void *data, const char *drm_filter)
+{
+
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+ if (drm_filter != NULL)
+ {
+ if (!strncmp(drm_filter, UG_DRM_FILTER_NONE, strlen(drm_filter)))
+ {
+ ugd->ug_UiGadget.ug_iDrmFilterMode = DRM_FILTER_NONE;
+ }
+ else if (!strncmp(drm_filter, UG_DRM_FILTER_ALL, strlen(drm_filter)))
+ {
+ ugd->ug_UiGadget.ug_iDrmFilterMode = DRM_FILTER_ALL;
+ }
+ else if (!strncmp(drm_filter, UG_DRM_FILTER_WITHOUT_FL, strlen(drm_filter)))
+ {
+ ugd->ug_UiGadget.ug_iDrmFilterMode = DRM_FILTER_WITHOUT_FL;
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iDrmFilterMode = DRM_FILTER_ALL;
+ }
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iDrmFilterMode = DRM_FILTER_ALL;
+ }
+
+ ugd->ug_UiGadget.ug_iDrmFilter = mf_ug_fm_svc_wapper_get_drm_filter(ugd->ug_UiGadget.ug_iDrmFilterMode, ugd->ug_UiGadget.ug_iFileFilter);
+ UG_TRACE_END;
+}
+
+#ifdef UG_OPERATION_SELECT_MODE
+static void __mf_ug_main_set_operation_select_mode(void *data, const char *select_mode)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+
+ if (select_mode != NULL)
+ {
+ if (!strncmp(select_mode, MF_BUNDLE_SELECTION_MODE_SINGLE, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE;
+ }
+ else if (!strncmp(select_mode, MF_BUNDLE_SELECTION_MODE_MULTI, strlen(select_mode)))
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = MULTI_FILE_MODE;
+ }
+ else
+ {
+ ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE;
+ }
+ ugd->ug_UiGadget.ug_bOperationSelectFlag = true;
+ }
+ UG_TRACE_END;
+
+}
+#endif
+/******************************
+** Prototype : __mf_ug_main_set_option_status
+** Description : Samsung
+** Input : void *data
+** service_h service
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void __mf_ug_main_set_option_status(void *data, service_h service)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+ char *path = NULL;
+ char *select_mode = NULL;
+ char *filter_mode = NULL;
+ char *marked_mode = NULL;
+ char *drm_filter_mode = NULL;
+#ifdef UG_OPERATION_SELECT_MODE
+ char *key[UG_OPTION_COUNT] = { "path", "select_type", "file_type", "marked_mode", "drm_type", MF_BUNDLE_SELECTION_MODE};
+ char *operation_select_mode = NULL;
+#else
+ char *key[UG_OPTION_COUNT] = { "path", "select_type", "file_type", "marked_mode", "drm_type"};
+#endif
+
+ service_get_extra_data(service, key[0], &path);
+ service_get_extra_data(service, key[1], &select_mode);
+ service_get_extra_data(service, key[2], &filter_mode);
+ service_get_extra_data(service, key[3], &marked_mode);
+ service_get_extra_data(service, key[4], &drm_filter_mode);
+
+ __mf_ug_main_set_select_mode(ugd, select_mode);
+ __mf_ug_main_set_path_option(ugd, path);
+ __mf_ug_main_set_filter_mode(ugd, filter_mode);
+ __mf_ug_main_set_marked_mode(ugd, marked_mode);
+ __mf_ug_main_set_drm_filter_mode(ugd, drm_filter_mode);
+#ifdef UG_OPERATION_SELECT_MODE
+ service_get_extra_data(service, key[5], &operation_select_mode);
+ __mf_ug_main_set_operation_select_mode(ugd, operation_select_mode);
+#endif
+ UG_TRACE_END;
+}
+
+/******************************
+** Prototype : __mf_ug_main_create_default_layout
+** Description : Samsung
+** Input : Evas_Object* parent
+** void* data
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static Evas_Object *__mf_ug_main_create_default_layout(Evas_Object *parent, void *data)
+{
+ ugData *ugd = (ugData *)data;
+ ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL");
+ ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+ Evas_Object *pContent = NULL;
+ int tab_item_count = 1;
+
+ int mmc_card = 0;
+ int error_code = 0;
+ /*/check if mmc mounted */
+ error_code = mf_ug_util_get_mmc_state(&mmc_card);
+ if (error_code == 0 && mmc_card == 1)
+ {
+ tab_item_count++;
+ }
+ /*/check if usb otg mounted
+ {
+ Todo: we need to add something to record what should on
+ }
+ create phone navi */
+ ugNaviBar *pNavi_phone = calloc(1, sizeof(ugNaviBar));
+ ug_mf_retvm_if(pNavi_phone == NULL, NULL, "pNavi_phone is NULL");
+
+ ugd->ug_MainWindow.ug_pNaviBar = mf_ug_navi_bar_create_navi_bar(parent);
+ if (ugd->ug_MainWindow.ug_pNaviBar == NULL)
+ {
+ ug_debug("ugd->ug_MainWindow.ug_pNaviBar is NULL");
+ free(pNavi_phone);
+ pNavi_phone = NULL;
+ UG_TRACE_END;
+ return NULL;
+ }
+
+ pNavi_phone->ug_bNaviFlagInUse = TRUE;
+
+ UG_SAFE_FREE_CHAR(pNavi_phone->ug_pCurrentPath);
+ pNavi_phone->ug_pCurrentPath = g_strdup(ugd->ug_Status.ug_pPath->str);
+
+ UG_SAFE_FREE_CHAR(pNavi_phone->ug_pNaviLabel);
+ pNavi_phone->ug_pNaviLabel = strdup(MF_UG_LABEL_PHONE);
+ /*/insert phone navi into the navi_list */
+ /** Todo: if we need to check ap->mf_MainWindow.plistNaviBar?*/
+ ugd->ug_MainWindow.ug_pNaviBarList = eina_list_append(ugd->ug_MainWindow.ug_pNaviBarList, pNavi_phone);
+
+ UG_TRACE_END;
+ return ugd->ug_MainWindow.ug_pNaviBar;
+}
+
+/******************************
+** Prototype : __mf_ug_main_start
+** Description :
+** Input : void *data
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void __mf_ug_main_start(void *data)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)data;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+ Evas_Object *pContent = NULL;
+ int error_code = 0;
+ int mmc_card = 0;
+
+ pContent = __mf_ug_main_create_default_layout(ugd->ug_MainWindow.ug_pMainLayout, ugd);
+
+ if (pContent != NULL)
+ {
+ elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", pContent);
+ mf_ug_navi_bar_create_default_view(ugd);
+ mf_ug_ctrl_bar_set_item_disable(ugd);
+ mf_ug_navi_bar_set_blocking(data, false);
+ }
+ else
+ {
+ return;
+ }
+ ug_debug("done");
+ UG_TRACE_END;
+
+ return;
+}
+
+
+
+static Eina_Bool ug_callback_hw_key_down( void *data, int type __attribute__((unused)), void *event )
+{
+ assert(data != NULL);
+ assert(event != NULL);
+
+ if(data == NULL)
+ {
+ return ECORE_CALLBACK_DONE;
+ }
+ if(event == NULL)
+ {
+ return ECORE_CALLBACK_DONE;
+ }
+
+ ugData *ugd = data;
+ Ecore_Event_Key *key_event = event;
+
+ if (strcmp(key_event->keyname, KEY_BACK) == 0)
+ {
+ if (mf_ug_fm_svc_wapper_is_root_path(ugd->ug_Status.ug_pPath))
+ {
+ ug_destroy_me(ugd->ug);
+ }
+ else
+ {
+ mf_ug_cb_upper_click_cb(ugd, NULL, NULL);
+ }
+ }
+ else if (strcmp(key_event->keyname, KEY_MENU) == 0)
+ {
+ //TODO: Add menu handler here.
+ return ECORE_CALLBACK_DONE;
+ }
+
+ return ECORE_CALLBACK_DONE;
+}
+
+
+/******************************
+** Prototype : on_create
+** Description : Samsung
+** Input : ui_gadget_h ug
+** enum ug_mode mode
+** service_h service
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv)
+{
+ UG_TRACE_BEGIN;
+
+ ug_mf_retv_if(NULL == priv, NULL);
+
+ ugData *ugd = priv;
+
+ ugd->ug = ug;
+
+ bindtextdomain(UGPACKAGE, UGLOCALEDIR);
+
+ Evas_Object *win = ug_get_window();
+ ug_mf_retv_if(NULL == win, NULL);
+
+ if (elm_win_wm_rotation_supported_get(win))
+ {
+ int rotations[] =
+ {
+ APP_DEVICE_ORIENTATION_0,
+ APP_DEVICE_ORIENTATION_180,
+ };
+
+ elm_win_wm_rotation_available_rotations_set(win, rotations, sizeof(rotations) / sizeof(rotations[0]));
+ }
+
+ ugd->ug_MainWindow.ug_pWindow = win;
+ ugd->ug_Status.ug_bInstallFlag = false;
+ ugd->ug_Status.ug_bCancelDisableFlag = false;
+ ugd->ug_UiGadget.ug_iImportMode = 0;
+ ugd->ug_MainWindow.ug_pMainLayout = __mf_ug_main_create_main_layout(ugd->ug_MainWindow.ug_pWindow);
+ ugd->ug_MainWindow.ug_pBackGround = mf_ug_main_create_bg(ugd->ug_MainWindow.ug_pWindow);
+ elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.bg", ugd->ug_MainWindow.ug_pBackGround);
+
+ __mf_ug_main_init_data(ugd);
+ __mf_ug_main_set_option_status(ugd, service);
+ int err = media_content_connect();
+ if (err != MEDIA_CONTENT_ERROR_NONE)
+ {
+ ug_debug("media_content_connect failed!");
+ }
+
+ ugd->key_event_handler = ecore_event_handler_add( ECORE_EVENT_KEY_DOWN, ug_callback_hw_key_down, ugd );
+ power_set_changed_cb(mf_ug_cb_lcd_state_changed_cb, ugd);
+
+ __mf_ug_main_start(ugd);
+
+ UG_TRACE_END;
+ return ugd->ug_MainWindow.ug_pMainLayout;
+}
+
+/******************************
+** Prototype : on_start
+** Description :
+** Input : ui_gadget_h ug
+** service_h service
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void on_start(ui_gadget_h ug, service_h service, void *priv)
+{
+}
+
+
+/******************************
+** Prototype : on_pause
+** Description :
+** Input : ui_gadget_h ug
+** service_h service
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void on_pause(ui_gadget_h ug, service_h service, void *priv)
+{
+ UG_TRACE_BEGIN;
+ if (!priv)
+ return;
+ ugData *ugd = (ugData *)priv;
+
+ if (0 != ugd->ug_ListPlay.ug_Player)
+ {
+ mf_ug_list_play_pause(ugd);
+ }
+}
+
+/******************************
+** Prototype : on_resume
+** Description :
+** Input : ui_gadget_h ug
+** bundle *data
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+inline bool __mf_ug_main_check_exist(const char *path)
+{
+ if (path && (access(path, F_OK) == 0))
+ {
+ return true;
+ }
+ return false;
+}
+
+static void on_resume(ui_gadget_h ug, service_h service, void *priv)
+{
+ UG_TRACE_BEGIN;
+ ug_mf_retm_if(NULL == priv, "priv is NULL");
+ ugData *ugd = priv;
+
+ if (!__mf_ug_main_check_exist(ugd->ug_Status.ug_pPath->str))
+ {
+ ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd);
+ GString *parent_path = mf_ug_fm_svc_wrapper_get_file_parent_path(ugd->ug_Status.ug_pPath);
+ int storage = mf_ug_fm_svc_wapper_get_location(ugd->ug_Status.ug_pPath->str);
+
+ g_string_free(ugd->ug_Status.ug_pPath, TRUE);
+ ugd->ug_Status.ug_pPath = NULL;
+ free(pNavi_s->ug_pCurrentPath);
+ pNavi_s->ug_pCurrentPath = NULL;
+
+ if (parent_path && parent_path->str)
+ {
+ if (__mf_ug_main_check_exist(parent_path->str))
+ {
+ ug_debug("paretn is [%s] exit", parent_path->str);
+ ugd->ug_Status.ug_pPath = g_string_new(parent_path->str);
+ pNavi_s->ug_pCurrentPath = g_strdup(parent_path->str);
+ }
+ else
+ {
+ ug_debug("paretn is [%s] not exit", parent_path->str);
+ if (storage == MF_UG_PHONE)
+ {
+ ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER);
+ pNavi_s->ug_pCurrentPath = strdup(PHONE_FOLDER);
+ }
+ else
+ {
+ ugd->ug_Status.ug_pPath = g_string_new(MEMORY_FOLDER);
+ pNavi_s->ug_pCurrentPath = strdup(MEMORY_FOLDER);
+ }
+ }
+ }
+ else
+ {
+ ug_debug("get parent failed");
+ if (storage == MF_UG_PHONE)
+ {
+ ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER);
+ pNavi_s->ug_pCurrentPath = strdup(PHONE_FOLDER);
+ }
+ else
+ {
+ ugd->ug_Status.ug_pPath = g_string_new(MEMORY_FOLDER);
+ pNavi_s->ug_pCurrentPath = strdup(MEMORY_FOLDER);
+ }
+ }
+
+ mf_ug_navi_bar_create_default_view(ugd);
+ mf_ug_ctrl_bar_set_item_disable(ugd);
+ g_string_free(parent_path, TRUE);
+ parent_path = NULL;
+ }
+
+ UG_TRACE_END;
+}
+
+/******************************
+** Prototype : on_message
+** Description :
+** Input : ui_gadget_h ug
+** bundle *msg
+** bundle *data
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void on_message(ui_gadget_h ug, service_h msg, service_h service, void *priv)
+{
+}
+
+/******************************
+** Prototype : on_event
+** Description :
+** Input : ui_gadget_h ug
+** enum ug_event event
+** service_h service
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv)
+{
+ UG_TRACE_BEGIN;
+
+ switch (event)
+ {
+ case UG_EVENT_LOW_MEMORY:
+ break;
+
+ case UG_EVENT_LOW_BATTERY:
+ break;
+
+ case UG_EVENT_LANG_CHANGE:
+ break;
+
+ case UG_EVENT_ROTATE_PORTRAIT:
+ case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+ case UG_EVENT_ROTATE_LANDSCAPE:
+ case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+ break;
+
+ default:
+ break;
+ }
+
+ UG_TRACE_END;
+}
+
+
+
+/******************************
+** Prototype : on_key_event
+** Description : Samsung
+** Input : ui_gadget_h ug
+** enum ug_key_event event
+** service_h service
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+
+static void on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h service, void *priv)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)priv;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+
+ switch (event)
+ {
+ case UG_KEY_EVENT_END:
+ if (ugd->ug_MainWindow.ug_pNormalPopup)
+ {
+ evas_object_del(ugd->ug_MainWindow.ug_pNormalPopup);
+ ugd->ug_MainWindow.ug_pNormalPopup = NULL;
+ }
+ if (0 != ugd->ug_ListPlay.ug_Player)
+ {
+ mf_ug_list_play_destory_playing_file(ugd);
+ UG_SAFE_FREE_CHAR(ugd->ug_ListPlay.ug_pPlayFilePath);
+ }
+ ug_destroy_me(ug);
+ break;
+ default:
+ break;
+ }
+ UG_TRACE_END;
+}
+
+/******************************
+** Prototype : on_destroy
+** Description :
+** Input : ui_gadget_h ug
+** service_h service
+** void *priv
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+static void on_destroy(ui_gadget_h ug, service_h service, void *priv)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd = (ugData *)priv;
+ ug_mf_retm_if(ugd == NULL, "ugd is NULL");
+
+ __mf_ug_main_free_data(ugd);
+
+ if (ugd->ug_Status.ug_bInstallFlag == true)
+ {
+ mf_ug_util_destory_dir_monitor(ugd);
+ mf_ug_util_destory_mmc_state_cb();
+ media_content_disconnect();
+ power_unset_changed_cb();
+ }
+
+ ug_ecore_idler_del(ugd->ug_Status.search_idler);
+ ug_ecore_idler_del(ugd->ug_Status.popup_del_idler);
+ ug_ecore_idler_del(ugd->ug_Status.popup_create_idler);
+ ug_ecore_idler_del(ugd->ug_Status.msg_finish_idler);
+ UG_SAFE_DEL_ECORE_TIMER(ugd->ug_Status.pPopupTimer);
+
+ if (0 != ugd->ug_ListPlay.ug_Player)
+ {
+ mf_ug_list_play_destory_playing_file(ugd);
+ UG_SAFE_FREE_CHAR(ugd->ug_ListPlay.ug_pPlayFilePath);
+ }
+
+ UG_SAFE_DEL_ECORE_TIMER(ugd->ug_Status.ug_pThumbUpdateTimer);
+ UG_SAFE_DEL_ECORE_TIMER(ugd->ug_Status.play_timer);
+ __mf_ug_main_free_evas_object(ugd);
+ if(ugd->key_event_handler)
+ {
+ ecore_event_handler_del(ugd->key_event_handler);
+ }
+ UG_TRACE_END;
+}
+
+
+/******************************
+** Prototype : UG_MODULE_INIT
+** Description :
+** Input : struct ug_module_ops *ops
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd;
+
+ if (!ops)
+ {
+ return -1;
+ }
+
+ ugd = calloc(1, sizeof(ugData));
+ if (!ugd)
+ {
+ return -1;
+ }
+
+ ops->create = on_create;
+ ops->start = on_start;
+ ops->pause = on_pause;
+ ops->resume = on_resume;
+ ops->destroy = on_destroy;
+ ops->message = on_message;
+ ops->event = on_event;
+ ops->key_event = on_key_event;
+ ops->priv = ugd;
+ ops->opt = UG_OPT_INDICATOR_ENABLE;
+ UG_TRACE_END;
+ return 0;
+}
+
+
+
+/******************************
+** Prototype : UG_MODULE_EXIT
+** Description :
+** Input : struct ug_module_ops *ops
+** Output : None
+** Return Value :
+** Calls :
+** Called By :
+**
+** History :
+** 1.Date : 2010/12/10
+** Author : Samsung
+** Modification : Created function
+**
+******************************/
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+ UG_TRACE_BEGIN;
+ ugData *ugd;
+
+ if (!ops)
+ {
+ return;
+ }
+ ugd = ops->priv;
+
+ if (ugd)
+ {
+ free(ugd);
+ }
+ UG_TRACE_END;
+}