-#include <efl_extension.h>
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * 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 <appfw/app_control_internal.h>
+#include <Eina.h>
+#include <pkgmgr-info.h>
+#include <setting-common/setting-cfg.h>
#include "setting-applications.h"
-typedef struct appdata {
- Evas_Object *win;
- Evas_Object *conform;
- Evas_Object *label;
-} appdata_s;
+#define SETTING_APPLICATIONS_PACKAGE_NAME "org.tizen.setting-applications"
-static void
-win_delete_request_cb(void *data, Evas_Object *obj, void *event_info)
+static setting_view *__get_applications_view_to_load(void *data)
{
- ui_app_exit();
+ setting_retvm_if((!data), NULL, "!data");
+
+ setting_view_node_table_register(&setting_view_applications_main, NULL);
+ setting_view_node_table_register(&setting_view_applications_defaultapp,
+ &setting_view_applications_main);
+ return &setting_view_applications_main;
}
-static void
-win_back_cb(void *data, Evas_Object *obj, void *event_info)
+static void _cb_resize(void *data, Evas *e,
+ Evas_Object *obj, void *event_info)
{
- appdata_s *ad = data;
- /* Let window go to hide state. */
- elm_win_lower(ad->win);
+ SettingApplications *ad = (SettingApplications *)data;
+ setting_view_update(ad->view_to_load, ad);
}
-static void
-create_base_gui(appdata_s *ad)
+static char *_gl_label_new_get(void *data, Evas_Object *obj,
+ const char *part)
{
- /* Window */
- /* Create and initialize elm_win.
- elm_win is mandatory to manipulate window. */
- ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
- elm_win_autodel_set(ad->win, EINA_TRUE);
-
- if (elm_win_wm_rotation_supported_get(ad->win)) {
- int rots[4] = { 0, 90, 180, 270 };
- elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
- }
+ default_app *info = data;
+ retv_if(data == NULL, NULL);
+ char *label = NULL;
- evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
- eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
-
- /* Conformant */
- /* Create and initialize elm_conformant.
- elm_conformant is mandatory for base gui to have proper size
- when indicator or virtual keypad is visible. */
- ad->conform = elm_conformant_add(ad->win);
- elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
- elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
- evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(ad->win, ad->conform);
- evas_object_show(ad->conform);
-
- /* Label */
- /* Create an actual view of the base gui.
- Modify this part to change the view. */
- ad->label = elm_label_add(ad->conform);
- elm_object_text_set(ad->label, "<align=center>Hello Tizen</align>");
- evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_content_set(ad->conform, ad->label);
-
- /* Show window after base gui is set up */
- evas_object_show(ad->win);
+ if (0 == strcmp(part, "elm.text")) {
+ label = SAFE_STRDUP(info->pkg_label);
+ SETTING_TRACE("##label:[%s]", label);
+ }
+ return label;
}
-static bool
-app_create(void *data)
+static char *_get_defualt_icon(pkgmgrinfo_appinfo_h handle)
{
- /* Hook to take necessary actions before main event loop starts
- Initialize UI resources and application's data
- If this function returns true, the main loop of application starts
- If this function returns false, the application is terminated */
- appdata_s *ad = data;
+ int ret;
+ char *type;
+ const char *icon;
+ const char *svc_icon = SETTING_ICON_PATH
+ "/default_icon_service.png";
+ const char *app_icon = SETTING_ICON_PATH
+ "/mainmenu.png";
- create_base_gui(ad);
+ ret = pkgmgrinfo_appinfo_get_component_type(handle, &type);
+ if (PMINFO_R_OK == ret) {
+ if (0 == safeStrCmp(type, "svcapp"))
+ icon = svc_icon;
+ else
+ icon = app_icon;
+ } else {
+ SETTING_TRACE_ERROR(
+ "pkgmgrinfo_appinfo_get_component_type() Fail(%d)",
+ ret);
+ icon = app_icon;
+ }
- return true;
+ return strdup(icon);
}
-
-static void
-app_control(app_control_h app_control, void *data)
+static void _clear_default_cb(void *data, Evas_Object *obj, void *event_info)
{
- /* Handle the launch request. */
-}
+ SETTING_TRACE_BEGIN;
+ ret_if(data == NULL);
+ default_app *info = data;
+ int ret = -1;
-static void
-app_pause(void *data)
-{
- /* Take necessary actions when application becomes invisible. */
-}
+ if (NULL != info->pkgid) {
+ ret = app_control_unset_defapp(info->pkgid);
+ if (ret != APP_CONTROL_ERROR_NONE)
+ SETTING_TRACE_ERROR("app_control_unset_defapp() Fail(%d)", ret);
+ }
-static void
-app_resume(void *data)
-{
- /* Take necessary actions when application becomes visible. */
+ elm_object_item_del(info->item);
}
-static void
-app_terminate(void *data)
-{
- /* Release all resources. */
-}
-static void
-ui_app_lang_changed(app_event_info_h event_info, void *user_data)
+static Evas_Object *_gl_1button1_icon_get(void *data, Evas_Object *obj,
+ const char *part)
{
- /*APP_EVENT_LANGUAGE_CHANGED*/
+ retv_if(data == NULL, NULL);
+ default_app *info = data;
- int ret;
- char *language;
+ if (!safeStrCmp(part, "elm.swallow.icon")) {
+ Evas_Object *icon = NULL;
+ icon = elm_icon_add(obj);
+ SETTING_TRACE("path:[%s]", info->icon_path);
+ if (NULL == info->icon_path) {
+ char *_icon;
+ pkgmgrinfo_appinfo_h handle = NULL;
- ret = app_event_get_language(event_info, &language);
- if (ret != APP_ERROR_NONE) {
- dlog_print(DLOG_ERROR, LOG_TAG, "app_event_get_language() failed. Err = %d.", ret);
- return;
- }
+ int ret = pkgmgrinfo_appinfo_get_appinfo(info->pkgid, &handle);
+ warn_if(PMINFO_R_OK != ret, "pkgmgrinfo_appinfo_get_appinfo() Fail(%d)",
+ ret);
- if (language != NULL) {
- elm_language_set(language);
- free(language);
- }
-}
+ _icon = _get_defualt_icon(handle);
-static void
-ui_app_orient_changed(app_event_info_h event_info, void *user_data)
-{
- /*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/
- return;
+ SETTING_TRACE(" ==> appid [%s], icon [%s]", info->pkgid, _icon);
+
+ pkgmgrinfo_appinfo_destroy_appinfo(handle);
+ free(_icon);
+ }
+
+ elm_image_file_set(icon, info->icon_path, NULL);
+ elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+ evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_min_set(icon, SETTING_APP_MGR_ICON_SIZE,
+ SETTING_APP_MGR_ICON_SIZE);
+ evas_object_show(icon);
+ return icon;
+
+ } else if (!safeStrCmp(part, "elm.swallow.end")) {
+ Evas_Object *button = NULL;
+
+ button = elm_button_add(obj);
+ elm_object_text_set(button, "Clear");
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_min_set(button, 160, 60);
+ evas_object_size_hint_max_set(button, 160, 60);
+ evas_object_show(button);
+ evas_object_smart_callback_add(button, "clicked", _clear_default_cb, info);
+
+ return button;
+ } else
+ return NULL;
}
-static void
-ui_app_region_changed(app_event_info_h event_info, void *user_data)
+static bool on_app_create(void *priv)
{
- /*APP_EVENT_REGION_FORMAT_CHANGED*/
+ SETTING_TRACE_BEGIN;
+ SettingApplications *ad = priv;
+ setting_retvm_if((!priv), NULL, "!priv");
+
+ if (app_init(&ad->md, SETTING_APPLICATIONS_PACKAGE_NAME)
+ != SETTING_RETURN_SUCCESS) {
+ SETTING_TRACE_ERROR("Cannot initialize application");
+ return false;
+ }
+
+ /* register view node table */
+ setting_view_node_table_intialize();
+
+ setting_create_Gendial_itc(SETTING_GENLIST_2LINE_STYLE,
+ &(ad->itc_2text_2));
+ setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE,
+ &(ad->itc_1text_1icon));
+ setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE,
+ &(ad->itc_1icon_1text_sub));
+ setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE,
+ &(ad->itc_1text));
+ setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE,
+ &(ad->itc_2text_3));
+ setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE,
+ &(ad->itc_1text_1icon_divider));
+ setting_create_Gendial_itc(SETTING_GENLIST_GROUP_INDEX_STYLE,
+ &(ad->itc_grp_title));
+
+ ad->itc_1icon_1button.item_style = SETTING_GENLIST_2LINE_STYLE;
+ ad->itc_1icon_1button.func.text_get = _gl_label_new_get;
+ ad->itc_1icon_1button.func.content_get =
+ _gl_1button1_icon_get;
+ ad->itc_1icon_1button.func.state_get = NULL;
+ ad->itc_1icon_1button.func.del = NULL;
+
+ /* creating a view. */
+ ad->view_to_load = __get_applications_view_to_load(ad);
+ retv_if(!ad->view_to_load, NULL);
+
+ setting_view_node_set_cur_view(ad->view_to_load);
+ setting_view_create(ad->view_to_load, (void *)ad);
+ evas_object_event_callback_add(ad->md.layout, EVAS_CALLBACK_RESIZE,
+ _cb_resize, ad);
+
+ evas_object_show(ad->md.window);
+ return true;
}
-static void
-ui_app_low_battery(app_event_info_h event_info, void *user_data)
+static void on_app_terminate(void *priv)
{
- /*APP_EVENT_LOW_BATTERY*/
+ SETTING_TRACE_BEGIN;
+ setting_retm_if((!priv), "!priv");
+ SettingApplications *ad = priv;
+
+ /* fix flash issue for gallery */
+ evas_object_event_callback_del(ad->md.layout,
+ EVAS_CALLBACK_RESIZE,
+ _cb_resize);
+
+ setting_view_destroy(&setting_view_applications_main, ad);
+
+ SETTING_TRACE_END;
}
-static void
-ui_app_low_memory(app_event_info_h event_info, void *user_data)
+static void _lang_changed(app_event_info_h event_info, void *data)
{
- /*APP_EVENT_LOW_MEMORY*/
+ SETTING_TRACE_BEGIN;
+ SettingApplications *ad = data;
+ setting_retm_if(NULL == ad, "ad is NULL");
+
+ char *lang = NULL;
+ if (app_event_get_language(event_info, &lang) == APP_ERROR_NONE) {
+ SETTING_TRACE_DEBUG("Setting - language is changed : %s", lang);
+ elm_language_set(lang);
+ elm_config_all_flush();
+ free(lang);
+ setting_navi_items_update(ad->md.naviframe);
+ } else {
+ SETTING_TRACE_ERROR("Cannot get language from event_info");
+ }
}
-int
-main(int argc, char *argv[])
+EXPORT_PUBLIC
+int main(int argc, char *argv[])
{
- appdata_s ad = {0,};
- int ret = 0;
-
- ui_app_lifecycle_callback_s event_callback = {0,};
+ SettingApplications app_data = {{0},};
app_event_handler_h handlers[5] = {NULL, };
+ ui_app_lifecycle_callback_s ops = {
+ .create = on_app_create,
+ .app_control = NULL,
+ .pause = NULL,
+ .resume = NULL,
+ .terminate = on_app_terminate,
+ };
- event_callback.create = app_create;
- event_callback.terminate = app_terminate;
- event_callback.pause = app_pause;
- event_callback.resume = app_resume;
- event_callback.app_control = app_control;
-
- ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &ad);
-
- ret = ui_app_main(argc, argv, &event_callback, &ad);
- if (ret != APP_ERROR_NONE) {
- dlog_print(DLOG_ERROR, LOG_TAG, "app_main() is failed. err = %d", ret);
- }
+ ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY],
+ APP_EVENT_LOW_MEMORY, NULL, NULL);
+ ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY],
+ APP_EVENT_LOW_BATTERY, NULL, NULL);
+ ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED],
+ APP_EVENT_LANGUAGE_CHANGED, _lang_changed, &app_data);
+ ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED],
+ APP_EVENT_REGION_FORMAT_CHANGED, NULL, NULL);
+ ui_app_add_event_handler(
+ &handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED],
+ APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, NULL);
- return ret;
+ return ui_app_main(argc, argv, &ops, &app_data);
}