Merge 2.4 to 3.0 66/39466/2
authorjunkyu.han <junkyu.han@samsung.com>
Fri, 15 May 2015 11:14:33 +0000 (20:14 +0900)
committerjunkyu.han <junkyu.han@samsung.com>
Tue, 19 May 2015 11:07:44 +0000 (20:07 +0900)
Change-Id: If1ab11fd62f79451af03e2a6e97449895ae48ec5

134 files changed:
AUTHORS
CMakeLists.txt
NOTICE [deleted file]
data/CMakeLists.txt
data/edje/all_apps_portrait.edc
data/edje/button_edit.edc
data/edje/group_4x4_portrait.edc
data/edje/index.edc
data/edje/item_4x4.edc
data/edje/layout_portrait.edc
data/icons/org.tizen.menu-screen.png [new file with mode: 0644]
data/images/btn_edit_nor.9.png [new file with mode: 0644]
data/images/btn_edit_press.9.png [new file with mode: 0644]
data/images/icon_btn_done_nor.png [new file with mode: 0644]
data/images/icon_btn_done_press.png [new file with mode: 0644]
data/images/icon_btn_edit_nor.png [new file with mode: 0644]
data/images/icon_btn_edit_press.png [new file with mode: 0644]
data/main_operation.launch [new file with mode: 0644]
data/org.tizen.menu-screen.desktop.in [deleted file]
data/org.tizen.menu-screen.xml.in [changed mode: 0755->0644]
data/po/CMakeLists.txt
data/po/ar.po
data/po/az.po
data/po/bg.po
data/po/ca.po
data/po/cs.po
data/po/da.po
data/po/de.po [new file with mode: 0755]
data/po/de_DE.po
data/po/el_GR.po
data/po/en.po
data/po/en_PH.po
data/po/en_US.po
data/po/es_ES.po
data/po/es_MX.po
data/po/es_US.po [new file with mode: 0755]
data/po/et.po
data/po/eu.po
data/po/fa.po [new file with mode: 0755]
data/po/fi.po
data/po/fr.po [new file with mode: 0755]
data/po/fr_CA.po
data/po/fr_FR.po
data/po/ga.po
data/po/gl.po
data/po/hi.po
data/po/hr.po
data/po/hu.po
data/po/hy.po
data/po/is.po
data/po/it_IT.po
data/po/ja_JP.po
data/po/ka.po
data/po/kk.po
data/po/ko_KR.po
data/po/lt.po
data/po/lv.po
data/po/mk.po
data/po/nb.po
data/po/nl.po [new file with mode: 0755]
data/po/nl_NL.po
data/po/pl.po
data/po/pt_BR.po
data/po/pt_PT.po
data/po/ro.po
data/po/ru_RU.po
data/po/sk.po
data/po/sl.po
data/po/sr.po
data/po/sv.po
data/po/th.po [new file with mode: 0755]
data/po/tr_TR.po
data/po/uk.po
data/po/ur.po [new file with mode: 0755]
data/po/uz.po
data/po/zh_CN.po
data/po/zh_HK.po
data/po/zh_SG.po
data/po/zh_TW.po
debian/changelog [deleted file]
debian/compat [deleted file]
debian/control [deleted file]
debian/copyright [deleted file]
debian/jobs [deleted file]
debian/org.tizen.menu-screen.install.in.in [deleted file]
debian/org.tizen.menu-screen.postinst [deleted file]
debian/rules [deleted file]
include/all_apps/db.h
include/all_apps/layout.h
include/all_apps/list.h
include/all_apps/shortcut.h
include/conf.h
include/db.h
include/index.h
include/item.h
include/item_badge.h
include/item_event.h
include/key.h [new file with mode: 0644]
include/layout.h
include/list.h
include/mapbuf.h
include/menu_screen.h
include/mouse.h
include/page.h
include/page_scroller.h
include/pkgmgr.h
include/popup.h
include/util.h
org.tizen.menu-screen.efl [new file with mode: 0644]
org.tizen.menu-screen.manifest [new file with mode: 0644]
packaging/init_menu-screen_DB.sh [deleted file]
packaging/org.tizen.menu-screen.manifest [deleted file]
packaging/org.tizen.menu-screen.spec
src/all_apps/db.c
src/all_apps/layout.c
src/all_apps/list.c
src/all_apps/shortcut.c
src/db.c
src/index.c
src/item.c
src/item_badge.c
src/item_event.c
src/key.c [new file with mode: 0644]
src/layout.c
src/list.c
src/mapbuf.c
src/menu_screen.c [changed mode: 0644->0755]
src/mouse.c
src/page.c
src/page_scroller.c
src/pkgmgr.c
src/popup.c
src/smart_menu.c [deleted file]
src/util.c

diff --git a/AUTHORS b/AUTHORS
index 95e1254..49e578b 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,2 +1,3 @@
 Jin Yoon <jinny.yoon at samsung dot com>
+Junkyu Han <junkyu.han at samsung dot com>
 Youngjoo Park <yjoo93.part at samsung dot com>
index bdfe74a..5617123 100644 (file)
@@ -2,24 +2,38 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 PROJECT(menu-screen C)
 
 SET(PACKAGE_NAME "org.tizen.${PROJECT_NAME}")
-SET(PREFIX "${TZ_SYS_RO_APP}/${PACKAGE_NAME}")
+SET(PREFIX "/usr/apps/${PACKAGE_NAME}")
 SET(EXEC_PREFIX "${PREFIX}/bin")
 SET(LIBDIR "${PREFIX}/lib")
 SET(DATADIR "/opt${PREFIX}/data")
 SET(RESDIR "${PREFIX}/res")
+SET(ICONDIR "/usr/share/icons/default/small")
 SET(IMAGEDIR "${RESDIR}/images")
 SET(EDJEDIR "${RESDIR}/edje")
 SET(LOCALEDIR "${RESDIR}/locale")
 SET(VERSION 0.1.0)
 
+#IF("${ARCH}" STREQUAL "arm")
+#      OPTION(USE_ARM "Use Arm" ON)
+#      ADD_DEFINITIONS("-DARM_TYPE")
+#ELSE()
+#      OPTION(USE_EMULATOR "Use Emulator" ON)
+#      ADD_DEFINITIONS("-DEMULATOR_TYPE")
+#ENDIF()
+#MESSAGE("ARCH: ${ARCH}")
+
 INCLUDE(FindPkgConfig)
 pkg_check_modules(MENU_PKGS REQUIRED
        ail
+       appcore-efl
        appsvc
        aul
        badge
        bundle
        capi-appfw-application
+#      capi-appfw-preference
+       capi-system-info
+       capi-system-system-settings
        capi-system-info
        dlog
        ecore
@@ -27,19 +41,26 @@ pkg_check_modules(MENU_PKGS REQUIRED
        ecore-file
        ecore-imf
        ecore-input
+#      ecore-x
        edje
        eet
        eina
        elementary
        evas
-       heynoti
        pkgmgr
        pkgmgr-info
        shortcut
        syspopup-caller
-       libtzplatform-config
+#      utilX
 )
 
+IF(USE_ARM)
+pkg_check_modules(ARM_PKGS REQUIRED
+       bincfg
+       factory
+)
+ENDIF()
+
 ADD_DEFINITIONS("-DENABLE_BGIMAGE")
 ADD_DEFINITIONS("-DLOG_TAG=\"MENU_SCREEN\"")
 ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
@@ -55,7 +76,21 @@ FOREACH (flag ${MENU_PKGS_CFLAGS})
     SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
 
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+FOREACH(flag ${ARM_PKGS_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fdata-sections -ffunction-sections -Wl,--gc-sections")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE")
+SET(CMAKE_C_FLAGS_PROFILING "-O0 -g -pg -fPIE")
+SET(CMAKE_CXX_FLAGS_PROFILING "-O0 -std=c++0x -g -pg -fPIE")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fPIE")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -std=c++0x -g -fPIE")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -g -fPIE")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2 std=c++0x -g -fPIE")
+SET(CMAKE_C_FLAGS_CCOV "-O2 -g --coverage -fPIE")
+SET(CMAKE_CXX_FLAGS_CCOV "-O2 std=c++0x -g --coverage -fPIE")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
 
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
 
@@ -65,6 +100,7 @@ ADD_EXECUTABLE(${PROJECT_NAME}
        src/item.c
        src/item_badge.c
        src/item_event.c
+       src/key.c
        src/layout.c
        src/list.c
        src/mapbuf.c
@@ -81,18 +117,12 @@ ADD_EXECUTABLE(${PROJECT_NAME}
        src/all_apps/shortcut.c
 )
 
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -lm)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${ARM_PKGS_LDFLAGS})
 TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${MENU_PKGS_LDFLAGS})
 
-FILE(MAKE_DIRECTORY
-       dbspace
-       shortcut
-)
-
 # Install
 INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${EXEC_PREFIX})
-INSTALL(DIRECTORY dbspace DESTINATION ${DATADIR})
-INSTALL(DIRECTORY shortcut DESTINATION ${DATADIR})
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}.efl DESTINATION /etc/smack/accesses.d)
 
 ADD_SUBDIRECTORY(data)
 
diff --git a/NOTICE b/NOTICE
deleted file mode 100644 (file)
index 0cf6782..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,6 +0,0 @@
-Copyright (c) 2009-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
index 0200875..9c423e5 100644 (file)
@@ -1,8 +1,12 @@
-SET(MANIFESTDIR "${TZ_SYS_RO_PACKAGES}")
+SET(MANIFESTDIR "/usr/share/packages")
+
 # manifest
 CONFIGURE_FILE(${PACKAGE_NAME}.xml.in ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml)
 INSTALL(FILES ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml DESTINATION ${MANIFESTDIR})
 
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/main_operation.launch DESTINATION ${RESDIR}/data)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/icons/${PACKAGE_NAME}.png DESTINATION /usr/share/icons/default/small)
+
 ADD_SUBDIRECTORY(edje)
 ADD_SUBDIRECTORY(images)
 ADD_SUBDIRECTORY(po)
index 27ec92d..4b2c759 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
  *
  */
 
+#include "conf.edc"
+
+#define _BASE_HEIGHT 1280
 
 collections {
+       base_scale: 1.8;
        group {
                name: "all_apps";
                parts {
                        part {
                                name: "bg";
-                               type: RECT;
+                               type: SWALLOW;
                                scale: 1;
                                mouse_events: 1;
                                description {
@@ -34,7 +41,17 @@ collections {
                                        visible: 0;
                                }
                        }
-
+                       part {
+                               name: "indicator_spacer";
+                               type: SPACER;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to, "bg"; }
+                                       rel2 { relative: 1.0 INDICATOR_HEIGHT_PROP; to, "bg"; }
+                               }
+                       }
                        part {
                                name: "index_bg";
                                type: RECT;
@@ -42,9 +59,8 @@ collections {
                                mouse_events: 0;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.0 20/1210; to, "bg";} // 1280 - 70(indicator)
-                                       rel2 { relative: 1.0 124/1210; to, "bg";} // 174 - 70
-                                       color: 0 0 0 255;
+                                       rel1 { relative: 0.0 80/_BASE_HEIGHT; to, "bg";} // 1280 - 70(indicator)
+                                       rel2 { relative: 1.0 184/_BASE_HEIGHT; to, "bg";} // 174 - 70
                                        visible: 0;
                                }
                        }
@@ -70,6 +86,7 @@ collections {
                                        align: 0.5 0.5;
                                        rel1 { relative: 16/720 8/70; to, "index_bg";}
                                        rel2 { relative: 144/720 62/70; to, "index_bg";}
+                                       fixed: 1 1;
                                        visible: 1;
                                }
                        }
@@ -80,8 +97,8 @@ collections {
                                mouse_events: 1;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.0 134/1210; to, "bg"; } // 154 - 70
-                                       rel2 { relative: 1.0 1194/1210; to, "bg"; }
+                                       rel1 { relative: 0.0 194/_BASE_HEIGHT; to, "bg"; } // 154 - 70
+                                       rel2 { relative: 1.0 1224/_BASE_HEIGHT; to, "bg"; }
                                        color: 34 34 34 255;
                                        visible: 0;
                                }
index eb4ae32..fefa59f 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
  *
  */
 
+#define BUTTON_EDIT_BG_SIZE 98 56
+#define BUTTON_EDIT_BG_SIZE_MIN 45 30
+#define BUTTON_EDIT_IMAGE_SIZE 35 35
+#define BUTTON_EDIT_IMAGE_SIZE_MIN 17 17
+#define BUTTON_EDIT_W 128
+#define BUTTON_EDIT_H 80
+
 
 
 images {
-       image: "../images/RM06_App_tray_setting.png" COMP;
-       image: "../images/RM06_App_tray_setting_press.png" COMP;
-       image: "../images/RM06_App_tray_edit_btn.png" COMP;
-       image: "../images/RM06_App_tray_edit_btn_press.png" COMP;
+       image: "../images/btn_edit_nor.9.png" COMP;
+       image: "../images/btn_edit_press.9.png" COMP;
+       image: "../images/icon_btn_edit_press.png" COMP;
+       image: "../images/icon_btn_edit_nor.png" COMP;
+       image: "../images/icon_btn_done_press.png" COMP;
+       image: "../images/icon_btn_done_nor.png" COMP;
 }
 
 
 
 collections {
+       base_scale: 1.8;
        group {
                name: "button_edit";
                parts {
@@ -39,20 +52,17 @@ collections {
                                mouse_events: 1;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 25/128 0.0; }
+                                       rel1 { relative: 0.0 0.0; }
                                        rel2 { relative: 1.0 1.0; }
                                        visible: 0;
                                }
                                description {
                                        state: "enable" 0.0;
-                                       rel1 { relative: 0.0 0.0; }
-                                       rel2 { relative: 1.0 1.0; }
-                                       visible: 0;
+                                       inherit: "default" 0.0;
                                }
                                description {
                                        state: "hide" 0.0;
                                        inherit: "default" 0.0;
-                                       visible: 0;
                                }
                        }
             part {
@@ -62,40 +72,34 @@ collections {
                                mouse_events: 1;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.5 0.5; to, "edit_button"; }
-                                       rel2 { relative: 0.5 0.5; to, "edit_button"; }
-                                       min: 119 54;
-                                       max: 119 54;
+                                       rel1 { relative: 15/BUTTON_EDIT_W 12/BUTTON_EDIT_H; to, "edit_button"; }
+                                       rel2 { relative: 113/BUTTON_EDIT_W 68/BUTTON_EDIT_H; to, "edit_button"; }
+                                       min: BUTTON_EDIT_BG_SIZE_MIN;
                                        fixed: 1 1;
                                        image {
-                                               normal: "../images/RM06_App_tray_edit_btn.png";
-                                               border: 3 3 3 3;
+                                               normal: "../images/btn_edit_nor.9.png";
+                                               border: 15 15 0 0;
                                                middle: DEFAULT;
-                                               border_scale: 0;
+                                               border_scale: 1;
                                        }
-                                       color: 0 0 0 0;
+                                       color: 255 255 255 255;
                                        visible: 1;
                                }
                                description {
+                                       state: "edit" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                               description {
                                        state: "enable" 0.0;
                                        inherit: "default" 0.0;
                                        color: 255 255 255 255;
                                }
                                description {
                                        state: "press" 0.0;
-                                       rel1 { relative: 0.5 0.5; to, "edit_button"; }
-                                       rel2 { relative: 0.5 0.5; to, "edit_button"; }
-                                       min: 119 54;
-                                       max: 119 54;
-                                       fixed: 1 1;
+                                       inherit: "default" 0.0;
                                        image {
-                                               normal: "../images/RM06_App_tray_edit_btn_press.png";
-                                               border: 3 3 3 3;
-                                               middle: DEFAULT;
-                                               border_scale: 0;
+                                               normal: "../images/btn_edit_press.9.png";
                                        }
-                                       color: 255 255 255 255;
-                                       visible: 1;
                                }
                                description {
                                        state: "hide" 0.0;
@@ -111,54 +115,48 @@ collections {
                 description {
                     state: "default" 0.0;
                     align: 0.5 0.5;
-                                       rel1 { relative: 30/119 0.5; to, "edit_button_bg";}
-                                       rel2 { relative: 30/119 0.5; to, "edit_button_bg";}
+                                       rel1 { relative: 46/BUTTON_EDIT_W 22/BUTTON_EDIT_H; to, "edit_button_bg";}
+                                       rel2 { relative: 81/BUTTON_EDIT_W 57/BUTTON_EDIT_H; to, "edit_button_bg";}
                                        image {
-                                               normal: "../images/RM06_App_tray_setting.png";
+                                               normal: "../images/icon_btn_edit_nor.png";
                                        }
-                                       min:42 42;
+                                       min: BUTTON_EDIT_IMAGE_SIZE_MIN;
                                        fixed: 1 1;
                                        visible: 1;
                 }
+                               description {
+                                       state: "edit" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal: "../images/icon_btn_done_nor.png";
+                                       }
+                               }
                 description {
                     state: "press" 0.0;
                     inherit: "default" 0.0;
                                        image {
-                                               normal: "../images/RM06_App_tray_setting_press.png";
+                                               normal: "../images/icon_btn_edit_press.png";
                                        }
                 }
                                description {
-                                       state: "hide" 0.0;
+                                       state: "edit_press" 0.0;
                                        inherit: "default" 0.0;
-                                       visible: 0;
+                                       image {
+                                               normal: "../images/icon_btn_done_press.png";
+                                       }
                                }
             }
-                       part {
-                name: "edit_button_text";
-                               type: TEXT;
-                               effect: SOFT_SHADOW;
+            part {
+                name: "edit_button_event";
+                type: RECT;
                                scale: 1;
                 mouse_events: 1;
                 description {
-                    state: "default" 0.0;
-                                       rel1 { relative: 50/119 0.15; to, "edit_button_bg";} // origin : 59/119 0.0
-                                       rel2 { relative: 1.0 1.0; to, "edit_button_bg";}
-                                       color: 183 183 183 255;
-                                       color2: 0 0 0 35;
-                                       color3: 0 0 0 35;
-                                       text {
-                                               text_class: "tizen";
-                                               font: "TIZEN:style=medium";
-                                               size: 6;
-                                               fit: 1 1;
-                                               align: 0.5 0.5;
-                                       }
+                                       state: "default" 0.0;
+                                       rel1 { relative: -0.1 -0.1; to: "edit_button_bg"; }
+                                       rel2 { relative: 1.1 1.1; to: "edit_button_bg"; }
+                                       color: 0 0 0 0;
                                        visible: 1;
-                               }
-                               description {
-                                       state: "press" 0.0;
-                                       inherit: "default" 0.0;
-                                       color: 249 249 249 255;
                 }
                                description {
                                        state: "hide" 0.0;
@@ -166,24 +164,32 @@ collections {
                                        visible: 0;
                                }
             }
-
+                       part {
+                               name: "focus";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "edit_button_event"; }
+                                       rel2 { relative: 1.0 1.0; to: "edit_button_event"; }
+                                       fixed: 1 1;
+                                       visible: 1;
+                               }
+                       }
             part {
-                name: "edit_button_event";
+                name: "state_edit";
                 type: RECT;
                                scale: 1;
                 mouse_events: 1;
                 description {
                                        state: "default" 0.0;
-                                       align: 0.5 0.5;
-                                       color: 0 0 0 0;
-                                       rel1 { relative: 0.0 0.0; to, "edit_button";}
-                                       rel2 { relative: 1.0 1.0; to, "edit_button";}
-                                       visible: 1;
+                                       visible: 0;
                 }
                                description {
-                                       state: "hide" 0.0;
+                                       state: "edit" 0.0;
                                        inherit: "default" 0.0;
-                                       visible: 0;
                                }
             }
                }
@@ -191,11 +197,27 @@ collections {
                programs {
                        program {
                                name: "edit_button,down";
-                               signal: "mouse,down,*";
+                               signal: "mouse,down,1";
                                source: "edit_button_event";
                                action: STATE_SET "press" 0.0;
-                               target: "edit_button_image";
-                               target: "edit_button_text";
+                               target: "edit_button_bg";
+                               after: "press_state";
+                       }
+                       program {
+                               name: "press_state";
+                               script {
+                                       new st[31];
+                                       new Float:vl;
+                                       get_state(PART:"state_edit", st, 30, vl);
+                                       if (!strcmp(st, "default"))
+                                       {
+                                               set_state(PART:"edit_button_image", "press", 0.0);
+                                       }
+                                       else
+                                       {
+                                               set_state(PART:"edit_button_image", "edit_press", 0.0);
+                                       }
+                               }
                                after: "edit_button,down,after";
                        }
                        program {
@@ -205,71 +227,70 @@ collections {
 
                        program {
                                name: "edit_button,up";
-                               signal: "mouse,up,*";
+                               signal: "mouse,up,1";
                                source: "edit_button_event";
                                action: STATE_SET "default" 0.0;
-                               target: "edit_button_image";
-                               target: "edit_button_text";
+                               target: "edit_button_bg";
                                after: "edit_button,up,after";
                        }
-                       program {
+                       program { // Edit or unedit in C codes.
                                name: "edit_button,up,after";
                                action: SIGNAL_EMIT "edit_button,up" "menu";
                        }
-
-                       program {
-                               name: "edit_button,enable";
-                               signal: "edit_button,enable";
-                               source: "menu";
-                               action: STATE_SET "enable" 0.0;
-                               target: "edit_button";
-                               target: "edit_button_bg";
-                               transition: DECELERATE 0.4;
-                       }
-                       program {
-                               name: "edit_button,disable";
-                               signal: "edit_button,disable";
+                       program { // This program is called from C.
+                               name: "release_state";
+                               signal: "edit_button,release";
                                source: "menu";
-                               action: STATE_SET "default" 0.0;
-                               target: "edit_button";
-                               target: "edit_button_bg";
-                               transition: DECELERATE 0.4;
+                               script {
+                                       new st[31];
+                                       new Float:vl;
+                                       get_state(PART:"state_edit", st, 30, vl);
+                                       if (!strcmp(st, "default")) // Normal mode
+                                       {
+                                               set_state(PART:"edit_button_image", "default", 0.0);
+                                       }
+                                       else // Edit mode
+                                       {
+                                               set_state(PART:"edit_button_image", "edit", 0.0);
+                                       }
+                               }
                        }
 
-                       program {
-                               name: "edit_button,enable,press";
-                               signal: "edit_button,enable,press";
+                       program { // Edit mode
+                               name: "edit_button_state,edit";
+                               signal: "edit_button_state,edit";
                                source: "menu";
-                               action: STATE_SET "press" 0.0;
+                               action: STATE_SET "edit" 0.0;
+                               target: "state_edit";
                                target: "edit_button_bg";
+                               target: "edit_button_image";
                        }
-                       program {
-                               name: "edit_button,enable,release";
-                               signal: "edit_button,enable,release";
+                       program { // Normal mode
+                               name: "edit_button_state,unedit";
+                               signal: "edit_button_state,unedit";
                                source: "menu";
-                               action: STATE_SET "enable" 0.0;
+                               action: STATE_SET "default" 0.0;
+                               target: "state_edit";
                                target: "edit_button_bg";
+                               target: "edit_button_image";
                        }
+
                        program {
-                               name: "edit_button_image,hide";
-                               signal: "edit_button_image,hide";
+                               name: "edit_button,show";
+                               signal: "edit_button,show";
                                source: "menu";
-                               action: STATE_SET "hide" 0.0;
-                               target: "edit_button";
+                               action: STATE_SET "default" 0.0;
                                target: "edit_button_bg";
                                target: "edit_button_image";
-                               target: "edit_button_text";
                                target: "edit_button_event";
                        }
                        program {
-                               name: "edit_button_image,show";
-                               signal: "edit_button_image,show";
+                               name: "edit_button,hide";
+                               signal: "edit_button,hide";
                                source: "menu";
-                               action: STATE_SET "default" 0.0;
-                               target: "edit_button";
+                               action: STATE_SET "hide" 0.0;
                                target: "edit_button_bg";
                                target: "edit_button_image";
-                               target: "edit_button_text";
                                target: "edit_button_event";
                        }
                }
index 98e4811..ff7a34a 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #define ITEM_15_Y ITEM_12_Y
 
 collections {
+       base_scale: 1.8;
        group {
                name: "menu_bg";
                parts {
index 691c84b..713e382 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -23,6 +26,7 @@
 #define INDEX_PAGECONTROL_FONT_SIZE_INC 18
 
 collections {
+   base_scale: 1.8;
    group {
       name: "elm/index/base/vertical/menuscreen/index";
       alias: "elm/index/base/horizontal/menuscreen/index";
index d39d1d6..541e59c 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -19,7 +22,8 @@
 
 #include "conf.edc"
 
-
+#define _ITEM_HEIGHT 180.0
+#define _ITEM_WIDTH 198.0
 
 styles {
        style {
@@ -36,7 +40,10 @@ images {
        image: "../images/menu_badge_01.png" COMP;
 }
 
+
+
 collections {
+       base_scale: 1.8;
        group {
                name: "icon";
 
@@ -50,7 +57,8 @@ collections {
                                        state: "default" 0.0;
                                        rel1 { relative: 0.0 0.0; }
                                        rel2 { relative: 1.0 1.0; }
-                                       color: 0 0 0 0;
+                                       fixed: 1 1;
+                                       visible: 0;
                                }
                        }
                        part {
@@ -60,9 +68,10 @@ collections {
                                mouse_events: 1;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.5 54/ITEM_HEIGHT; }
-                                       rel2 { relative: 0.5 54/ITEM_HEIGHT; }
-                                       min: 117 117;
+                                       rel1 { relative: 31/_ITEM_WIDTH 0.0; to: "bg"; }
+                                       rel2 { relative: 148/_ITEM_WIDTH 117/_ITEM_HEIGHT; to: "bg"; }
+                                       align: 0.5 0.5;
+                                       //min: 117 117;
                                        fixed: 1 1;
                                }
                        }
@@ -73,8 +82,9 @@ collections {
                                mouse_events: 1;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.0 0.0; to, "icon_image"; }
-                                       rel2 { relative: 1.0 1.0; to, "txt"; }
+                                       /* Enlarge the starting point of Y for tester's request */
+                                       rel1 { relative: 0.0 0.0; to, "bg"; } //0.0 -0.1
+                                       rel2 { relative: 1.0 1.0; to, "bg"; }
                                        color: 0 0 0 0;
                                        visible: 1;
                                }
@@ -87,8 +97,8 @@ collections {
                                description {
                                        state: "default" 0.0;
                                        visible: 0;
-                                       rel1 { relative: 110/ITEM_WIDTH 0.0; to, "bg"; }
-                                       rel2 { relative: 170/ITEM_WIDTH 60/ITEM_HEIGHT; to, "bg"; }
+                                       rel1 { relative: 110/_ITEM_WIDTH 0.0; to, "bg"; }
+                                       rel2 { relative: 170/_ITEM_WIDTH 60/_ITEM_HEIGHT; to, "bg"; }
                                        image {
                                                normal: "../images/menu_badge_01.png";
                                        }
@@ -154,11 +164,13 @@ collections {
                                mouse_events: 1;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 10/ITEM_WIDTH 0.0; to, "bg"; }
-                                       rel2 { relative: 70/ITEM_WIDTH 60/ITEM_HEIGHT; to, "bg"; }
+                                       rel1 { relative: 13/_ITEM_WIDTH 3/_ITEM_HEIGHT; to, "bg"; }
+                                       rel2 { relative: 67/_ITEM_WIDTH 57/_ITEM_HEIGHT; to, "bg"; }
                                        image {
                                                normal: "../images/RM06_App tray_Btn_Uninstall.png";
                                        }
+                                       //min: 54 54;
+                                       fixed: 1 1;
                                        visible: 0;
                                }
                                description {
@@ -176,24 +188,6 @@ collections {
                                }
                        }
                        part {
-                               name: "uninstall_event";
-                               type: RECT;
-                               scale: 1;
-                               mouse_events: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: -0.2 -0.2; to, "uninstall"; }
-                                       rel2 { relative: 1.2 1.2; to, "uninstall"; }
-                                       color: 0 0 0 0;
-                                       visible: 0;
-                               }
-                               description {
-                                       state: "edit,release" 0.0;
-                                       inherit: "default" 0.0;
-                                       visible: 1;
-                               }
-                       }
-                       part {
                                name: "txt";
                                type: TEXT;
                                effect: SOFT_SHADOW;
@@ -202,7 +196,7 @@ collections {
                                description
                                {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.0 1.0; to_x, "bg"; to_y, "icon_image"; }
+                                       rel1 { relative: 0.0 1.0; to_x, "bg"; to_y, "icon_image"; offset: 0 7; }
                                        rel2 { relative: 1.0 1.0; to, "bg"; }
                                        align: 0.5 0.0;
                                        color: 255 255 255 255;
@@ -211,10 +205,10 @@ collections {
                                        text {
                                                text_class: "tizen";
                                                font: "TIZEN:style=medium";
-                                               size: 16;
-                                               text: "Icon";
+                                               size: 24;
                                                align: 0.5 0.1;
                                        }
+                                       visible: 1;
                                }
                                description
                                {
@@ -224,6 +218,57 @@ collections {
                                        color: 0 0 0 0;
                                }
                        }
+                       part {
+                               name: "focus";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       /* Enlarge the starting point of Y for tester's request */
+                                       rel1 { relative: 0.0 -0.1; to, "bg"; }
+                                       rel2 { relative: 1.0 1.0; to, "bg"; }
+                                       fixed: 1 1;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "uninstall_event";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: -0.2 -0.2; to, "uninstall"; }
+                                       rel2 { relative: 1.1 1.1; to, "uninstall"; }
+                                       color: 0 0 0 0;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "edit,release" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "uninstall_focus";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to, "uninstall_event"; }
+                                       rel2 { relative: 1.0 1.0; to, "uninstall_event"; }
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "edit,release" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
                }
 
                programs {
@@ -239,6 +284,21 @@ collections {
                                source: "icon_image_event";
                                action: SIGNAL_EMIT "item,up" "menu";
                        }
+                       program {
+                               name: "text,on";
+                               signal: "text,on";
+                               source: "menu";
+                               action: STATE_SET "default" 0.0;
+                               target: "txt";
+                       }
+                       program {
+                               name: "text,off";
+                               signal: "text,off";
+                               source: "menu";
+                               action: STATE_SET "hide" 0.0;
+                               target: "txt";
+                       }
+
 
                        // Badge
                        program {
@@ -266,6 +326,7 @@ collections {
                                target: "block_event";
                                target: "uninstall";
                                target: "uninstall_event";
+                               target: "uninstall_focus";
                        }
                        program {
                                name: "uninstall,off";
@@ -275,6 +336,7 @@ collections {
                                target: "block_event";
                                target: "uninstall";
                                target: "uninstall_event";
+                               target: "uninstall_focus";
                        }
                        program {
                                name: "uninstall,down";
index 7b8dade..dc95b87 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
  *
  */
 
+styles {
+       style {
+               name: "factory_text_style_big";
+               base: "font=TIZEN:style=MEDIUM font_size=28 align=left valign=top color=#FFFFFF style=soft_shadow shadow_color=#00000060 ellipsis=1";
+
+               tag: "b" "+ font_weight=Bold";
+               tag: "u" "+ underline=on underline_color=#FFFFFF";
+       }
+       style {
+               name: "factory_text_style_small";
+               base: "font=TIZEN:style=MEDIUM font_size=10 align=left valign=top color=#FFFFFF style=soft_shadow shadow_color=#00000060 ellipsis=1";
+
+               tag: "b" "+ font_weight=Bold";
+               tag: "u" "+ underline=on underline_color=#FFFFFF";
+       }
+       style {
+               name: "factory_text_style_middle";
+               base: "font=TIZEN:style=MEDIUM font_size=17 align=left valign=top color=#FFFFFF style=soft_shadow shadow_color=#00000060 ellipsis=1";
+
+               tag: "b" "+ font_weight=Bold";
+               tag: "u" "+ underline=on underline_color=#FFFFFF";
+       }
+}
+
 
 
 collections {
+       base_scale: 1.8;
        group {
                name: "layout";
                parts {
                        part {
                                name: "bg";
-                               type: RECT;
+                               type: SWALLOW;
                                scale: 1;
                                mouse_events: 1;
                                description {
                                        state: "default" 0.0;
                                        rel1 { relative: 0.0 0.0; }
                                        rel2 { relative: 1.0 1.0; }
-                                       color: 0 0 0 0;
                                        visible: 0;
                                }
                        }
@@ -48,9 +75,152 @@ collections {
                                        visible: 1;
                                }
                        }
+
+                       part {
+                               name: "factory_bg";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.05 0.0;
+                                                       to_x: "bg";
+                                                       to_y: "factory_text";
+                                                       offset: 0 -15;
+                                       }
+                                       rel2 { relative: 0.95 1.0;
+                                                       to_x: "bg";
+                                                       to_y: "factory_text";
+                                                       offset: 0 15;
+                                       }
+                                       color: 0 0 0 125;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "show_small" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "show_middle" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "factory_text";
+                               type: TEXTBLOCK;
+                               scale: 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.1 0.9; to, "bg"; }
+                                       rel2 { relative: 0.1 0.9; to, "bg"; }
+                                       text {
+                                               style: "factory_text_style_big";
+                                               align: 0.0 0.5;
+                                               min: 1 1;
+                                       }
+                                       align: 0.0 1.0;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "show_big" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "show_small" 0.0;
+                                       inherit: "default" 0.0;
+                                       text {
+                                               style: "factory_text_style_small";
+                                       }
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "show_middle" 0.0;
+                                       inherit: "default" 0.0;
+                                       text {
+                                               style: "factory_text_style_middle";
+                                       }
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "content,blocker";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               repeat_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 0 0 0 0;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "block" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
                }
 
                programs {
+                       program {
+                               name: "block,content";
+                               signal: "block";
+                               source: "layout";
+                               action: STATE_SET "block" 0.0;
+                               target: "content,blocker";
+                       }
+                       program {
+                               name: "unblock,content";
+                               signal: "unblock";
+                               source: "layout";
+                               action: STATE_SET "default" 0.0;
+                               target: "content,blocker";
+                       }
+                       program {
+                               name: "factory_text,hide";
+                               signal: "hide";
+                               source: "factory_text";
+                               action: STATE_SET "default" 0.0;
+                               target: "factory_bg";
+                               target: "factory_text";
+                       }
+                       program {
+                               name: "factory_text,show";
+                               signal: "show";
+                               source: "factory_text";
+                               action: STATE_SET "show" 0.0;
+                               target: "factory_bg";
+                               target: "factory_text";
+                       }
+                       program {
+                               name: "factory_text,show_small";
+                               signal: "show_small";
+                               source: "factory_text";
+                               action: STATE_SET "show_small" 0.0;
+                               target: "factory_bg";
+                               target: "factory_text";
+                       }
+                       program {
+                               name: "factory_text,show_middle";
+                               signal: "show_middle";
+                               source: "factory_text";
+                               action: STATE_SET "show_middle" 0.0;
+                               target: "factory_bg";
+                               target: "factory_text";
+                       }
                }
        } // group
 } // collections
diff --git a/data/icons/org.tizen.menu-screen.png b/data/icons/org.tizen.menu-screen.png
new file mode 100644 (file)
index 0000000..ee06044
Binary files /dev/null and b/data/icons/org.tizen.menu-screen.png differ
diff --git a/data/images/btn_edit_nor.9.png b/data/images/btn_edit_nor.9.png
new file mode 100644 (file)
index 0000000..1cb7440
Binary files /dev/null and b/data/images/btn_edit_nor.9.png differ
diff --git a/data/images/btn_edit_press.9.png b/data/images/btn_edit_press.9.png
new file mode 100644 (file)
index 0000000..8619ff3
Binary files /dev/null and b/data/images/btn_edit_press.9.png differ
diff --git a/data/images/icon_btn_done_nor.png b/data/images/icon_btn_done_nor.png
new file mode 100644 (file)
index 0000000..a28bd95
Binary files /dev/null and b/data/images/icon_btn_done_nor.png differ
diff --git a/data/images/icon_btn_done_press.png b/data/images/icon_btn_done_press.png
new file mode 100644 (file)
index 0000000..cc9256f
Binary files /dev/null and b/data/images/icon_btn_done_press.png differ
diff --git a/data/images/icon_btn_edit_nor.png b/data/images/icon_btn_edit_nor.png
new file mode 100644 (file)
index 0000000..f79ea92
Binary files /dev/null and b/data/images/icon_btn_edit_nor.png differ
diff --git a/data/images/icon_btn_edit_press.png b/data/images/icon_btn_edit_press.png
new file mode 100644 (file)
index 0000000..aaaa7fa
Binary files /dev/null and b/data/images/icon_btn_edit_press.png differ
diff --git a/data/main_operation.launch b/data/main_operation.launch
new file mode 100644 (file)
index 0000000..5bac5ca
--- /dev/null
@@ -0,0 +1,2 @@
+org.tizen.phone
+org.tizen.contacts
diff --git a/data/org.tizen.menu-screen.desktop.in b/data/org.tizen.menu-screen.desktop.in
deleted file mode 100644 (file)
index a762e53..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Name=Simple Menu Screen
-Type=Application
-Exec=@EXEC_PREFIX@/@PROJECT_NAME@
-Icon=@PACKAGE_NAME@.png
-NoDisplay=True
-X-Tizen-TaskManage=False
-X-Tizen-Removable=False
old mode 100755 (executable)
new mode 100644 (file)
index e944c02..75ab124
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns="http://tizen.org/ns/packages" package="@PACKAGE_NAME@" version="1.1.1" install-location="internal-only">
+<manifest xmlns="http://tizen.org/ns/packages" package="@PACKAGE_NAME@" version="1.2.5" install-location="internal-only" api-version="2.3.1">
        <label>Simple Menu-screen</label>
        <author email="jinny.yoon@samsung.com" href="www.samsung.com">Jin Yoon</author>
+       <author email="junkyu.han@samsung.com" href="www.samsung.com">Junkyu Han</author>
        <author email="yjoo93.park@samsung.com" href="www.samsung.com">Youngjoo Park</author>
        <description>Simple Menu-screen Application</description>
        <ui-application appid="@PACKAGE_NAME@" exec="@EXEC_PREFIX@/@PROJECT_NAME@" nodisplay="true" multiple="false" type="capp" taskmanage="false">
                <label>Simple Menu-screen</label>
                <category name="http://tizen.org/category/homeapp"/>
+               <icon>/usr/share/icons/default/small/org.tizen.menu-screen.png</icon>
        </ui-application>
 </manifest>
index 8cef768..e804a6a 100644 (file)
@@ -7,18 +7,18 @@ SET(POFILES
        ca.po
        cs.po
        da.po
-       de_DE.po
+       de.po
        el_GR.po
        en.po
        en_PH.po
        en_US.po
        es_ES.po
-       es_MX.po
+       es_US.po
        et.po
        eu.po
        fi.po
        fr_CA.po
-       fr_FR.po
+       fr.po
        ga.po
        gl.po
        hi.po
@@ -35,7 +35,7 @@ SET(POFILES
        lv.po
        mk.po
        nb.po
-       nl_NL.po
+       nl.po
        pl.po
        pt_BR.po
        pt_PT.po
@@ -50,8 +50,8 @@ SET(POFILES
        uz.po
        zh_CN.po
        zh_HK.po
-       zh_SG.po
        zh_TW.po
+       zh_SG.po
 )
 
 SET(MSGFMT "/usr/bin/msgfmt")
index ab58d16..319a578 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "تم"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "هل تريد إلغاء تثبيت %s؟"
\ No newline at end of file
+msgstr "هل تريد إلغاء تثبيت %s؟"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "إلغاء التثبيت"
+
index 463e83e..b6bf270 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Tamam"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s silinsin?"
\ No newline at end of file
+msgstr "%s silinsin?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Quraşdırılma ləğv edilsin"
+
index c69d937..f82bad0 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Готово"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Деинсталиране на %s?"
\ No newline at end of file
+msgstr "Деинсталиране на %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Деинсталиране"
+
index be404dd..cc107cf 100644 (file)
@@ -1,5 +1,9 @@
 msgid "IDS_HS_BUTTON_DONE"
-msgstr "Realit"
+msgstr "Fet"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Desinstal·lar %s?"
\ No newline at end of file
+msgstr "Desinstal·lar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstal·lar"
+
index 719a82f..792da6b 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Hot."
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Odinstalovat %s?"
\ No newline at end of file
+msgstr "Odinstalovat %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Odinstalovat"
+
index 0c9f442..0acd840 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Udført"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Afinstallér %s?"
\ No newline at end of file
+msgstr "Afinstallér %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Afinstallér"
+
diff --git a/data/po/de.po b/data/po/de.po
new file mode 100755 (executable)
index 0000000..b356e8b
--- /dev/null
@@ -0,0 +1,9 @@
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "Fertig"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "%s deinstallieren?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Deinstallieren"
+
index 1be4d6c..f5f4d32 100644 (file)
@@ -2,4 +2,7 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Fertig"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s deinstallieren?"
\ No newline at end of file
+msgstr "%s deinstallieren?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Deinstallieren"
\ No newline at end of file
index 97ff2e7..094af6f 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Τέλος"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Κατάργηση της εγκατάστασης του %s;"
\ No newline at end of file
+msgstr "Κατάργηση της εγκατάστασης του %s;"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Κατάργηση εγκατάστασης"
+
index d24f1da..43627f4 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Done"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Uninstall %s?"
\ No newline at end of file
+msgstr "Uninstall %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Uninstall"
+
index d24f1da..43627f4 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Done"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Uninstall %s?"
\ No newline at end of file
+msgstr "Uninstall %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Uninstall"
+
index d24f1da..43627f4 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Done"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Uninstall %s?"
\ No newline at end of file
+msgstr "Uninstall %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Uninstall"
+
index bc229f6..0678bb5 100644 (file)
@@ -1,5 +1,9 @@
 msgid "IDS_HS_BUTTON_DONE"
-msgstr "Finalizado"
+msgstr "Hecho"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "¿Desinstalar %s?"
\ No newline at end of file
+msgstr "¿Desinstalar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalar"
+
index 3b24a12..279a111 100644 (file)
@@ -2,4 +2,7 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Realiz."
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "¿Desinstalar %s?"
\ No newline at end of file
+msgstr "¿Desinstalar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalar"
\ No newline at end of file
diff --git a/data/po/es_US.po b/data/po/es_US.po
new file mode 100755 (executable)
index 0000000..c83a4b6
--- /dev/null
@@ -0,0 +1,9 @@
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "Aceptar"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "¿Desinstalar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalar"
+
index 8b1bee8..ff243b2 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Valmis"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Kas desinstallida %s?"
\ No newline at end of file
+msgstr "Kas desinstallida %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Deinstalli"
+
index 73d79e2..9bbcfbe 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Egina"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Desinstalatu %s?"
\ No newline at end of file
+msgstr "Desinstalatu %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalatu"
+
diff --git a/data/po/fa.po b/data/po/fa.po
new file mode 100755 (executable)
index 0000000..e77e4a2
--- /dev/null
@@ -0,0 +1,8 @@
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "انجام شد"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "لغو نصب %s؟"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "لغو نصب"
index 71206fe..73c0bc1 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Valmis"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Poistetaanko kohteen %s asennus?"
\ No newline at end of file
+msgstr "Poistetaanko kohteen %s asennus?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Poista asennus"
+
diff --git a/data/po/fr.po b/data/po/fr.po
new file mode 100755 (executable)
index 0000000..a08eb14
--- /dev/null
@@ -0,0 +1,9 @@
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "OK"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "Désinstaller %s ?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Désinstaller"
+
index 4bd264c..a08eb14 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "OK"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Désinstaller %s ?"
\ No newline at end of file
+msgstr "Désinstaller %s ?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Désinstaller"
+
index 4bd264c..7977fd8 100644 (file)
@@ -2,4 +2,7 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "OK"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Désinstaller %s ?"
\ No newline at end of file
+msgstr "Désinstaller %s ?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Désinstaller"
\ No newline at end of file
index be8ff94..58c44f0 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Déanta"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Díshuiteáil %s?"
\ No newline at end of file
+msgstr "Díshuiteáil %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Díshuiteáil"
+
index 72a8f93..d6b9554 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Feito"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Desexas desinstalar %s?"
\ No newline at end of file
+msgstr "Desexas desinstalar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalar"
+
index 34373c1..463c733 100644 (file)
@@ -1,5 +1,9 @@
 msgid "IDS_HS_BUTTON_DONE"
-msgstr "पà¥\82रा à¤¹à¥\81à¤\86"
+msgstr "पà¥\82रà¥\8dण"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s की स्थापना रद्द करें?"
\ No newline at end of file
+msgstr "%s की स्थापना रद्द करें?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "स्थापना रद्द करें"
+
index e995ee4..abe4bc5 100644 (file)
@@ -1,5 +1,9 @@
 msgid "IDS_HS_BUTTON_DONE"
-msgstr "Kraj"
+msgstr "OK"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Deinstalirati %s?"
\ No newline at end of file
+msgstr "Deinstalirati %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Deinstaliraj"
+
index 87aad3d..a2deccc 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Kész"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Eltávolítja a(z) %s animált emotikont?"
\ No newline at end of file
+msgstr "Eltávolítja a(z) %s animált emotikont?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Eltávolítás"
+
index 12fa94e..7c199dd 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Արված է"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Ապատեղադրե՞լ %s-ը:"
\ No newline at end of file
+msgstr "Ապատեղադրե՞լ %s-ը:"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Ապատեղադրել"
+
index 8b20c15..78593e2 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Lokið"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Fjarlægja %s?"
\ No newline at end of file
+msgstr "Fjarlægja %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Fjarlægja"
+
index 26cc693..ccaa8bc 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Fatto"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Disinstallare %s?"
\ No newline at end of file
+msgstr "Disinstallare %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Disinstalla"
+
index 807018c..3396a50 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "完了"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%sをアンインストールしますか?"
\ No newline at end of file
+msgstr "%sをアンインストールしますか?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "アンインストール"
+
index 9da318c..5143b50 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "შესრულდა"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "ამოინსტალირდეს %s?"
\ No newline at end of file
+msgstr "ამოინსტალირდეს %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "ინსტალაციის გაუქმება"
+
index 57ce2f5..42005b6 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Дайын"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s жою керек пе?"
\ No newline at end of file
+msgstr "%s жою керек пе?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Жою"
+
index 2c0c07c..f7f6c2c 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "완료"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s을(를) 삭제할까요?"
\ No newline at end of file
+msgstr "%s을(를) 삭제할까요?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "삭제"
+
index d031262..357647f 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Atlikta"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Pašalinti „%s“?"
\ No newline at end of file
+msgstr "Pašalinti „%s“?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Pašalinti"
+
index 41227e0..3aeba4d 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Gatavs"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Vai atinstalēt %s?"
\ No newline at end of file
+msgstr "Vai atinstalēt %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Atinstalēt"
+
index 521a6f8..2ff16dc 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Готово"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Да се деинсталира %s?"
\ No newline at end of file
+msgstr "Да се деинсталира %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Деинсталирај"
+
index bafa5f2..e6961ca 100644 (file)
@@ -2,4 +2,7 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Utført"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Avinstallere %s?"
\ No newline at end of file
+msgstr "Avinstallere %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Avinstaller"
\ No newline at end of file
diff --git a/data/po/nl.po b/data/po/nl.po
new file mode 100755 (executable)
index 0000000..2084f23
--- /dev/null
@@ -0,0 +1,9 @@
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "Gereed"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "%s verwijderen?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Verwijderen"
+
index f4bb3ab..f29bdb7 100644 (file)
@@ -2,4 +2,7 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Gereed"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s verwijderen?"
\ No newline at end of file
+msgstr "%s verwijderen?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Verwijderen"
\ No newline at end of file
index 2df7d65..092015d 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Gotowe"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Odinstalować %s?"
\ No newline at end of file
+msgstr "Odinstalować %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Odinstaluj"
+
index eb37967..c173dd4 100644 (file)
@@ -1,5 +1,9 @@
 msgid "IDS_HS_BUTTON_DONE"
-msgstr "Concluído"
+msgstr "OK"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Desinstalar %s?"
\ No newline at end of file
+msgstr "Desinstalar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalar"
+
index e0b260f..77e33c5 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Concluir"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Desinstalar %s?"
\ No newline at end of file
+msgstr "Desinstalar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalar"
+
index 9250183..ba7787e 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Efectuat"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Dezinstalaţi %s?"
\ No newline at end of file
+msgstr "Dezinstalaţi %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Dezinstalare"
+
index d173e72..576f9c2 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Готово"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Удалить %s?"
\ No newline at end of file
+msgstr "Удалить %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Удалить"
+
index 416552b..20559e2 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Hotovo"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Odinštalovať program %s?"
\ No newline at end of file
+msgstr "Odinštalovať program %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Odinštalovať"
+
index 572c35c..cf4858b 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Končano"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Želite odstraniti %s?"
\ No newline at end of file
+msgstr "Želite odstraniti %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Odstrani"
+
index 1f3a38f..e559c92 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Gotovo"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Deinstalirati %s?"
\ No newline at end of file
+msgstr "Deinstalirati %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Deinstaliraj"
+
index 5040051..494db5b 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Klar"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Avinstallera %s?"
\ No newline at end of file
+msgstr "Avinstallera %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Avinstallera"
+
diff --git a/data/po/th.po b/data/po/th.po
new file mode 100755 (executable)
index 0000000..57e613c
--- /dev/null
@@ -0,0 +1,8 @@
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "เรียบร้อย"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "ถอนการติดตั้ง %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "ลบการติดตั้ง"
index add9719..e0a2c44 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Tamam"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s kaldırılsın mı?"
\ No newline at end of file
+msgstr "%s kaldırılsın mı?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Kaldır"
+
index 0cf95e1..02250ae 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "Готово"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Видалити %s?"
\ No newline at end of file
+msgstr "Видалити %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Видалити"
+
diff --git a/data/po/ur.po b/data/po/ur.po
new file mode 100755 (executable)
index 0000000..08ede49
--- /dev/null
@@ -0,0 +1,8 @@
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "مکمل"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "%s نا تنصیب کریں؟"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "نا تنصیب کریں"
index 11beb22..6234c67 100644 (file)
@@ -1,5 +1,9 @@
 msgid "IDS_HS_BUTTON_DONE"
-msgstr "Qilindi"
+msgstr "OK"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s olib tashlansinmi?"
\ No newline at end of file
+msgstr "%s olib tashlansinmi?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Olib tashlash"
+
index 30bcc37..e47a0ee 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "完成"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "是否卸载 %s?"
\ No newline at end of file
+msgstr "是否卸载 %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "卸载"
+
index 8ea78cb..81236c8 100644 (file)
@@ -2,4 +2,8 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "完成"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "解除安裝 %s 嗎?"
\ No newline at end of file
+msgstr "解除安裝 %s 嗎?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "解除安裝"
+
index 30bcc37..781b4f0 100644 (file)
@@ -2,4 +2,7 @@ msgid "IDS_HS_BUTTON_DONE"
 msgstr "完成"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "是否卸载 %s?"
\ No newline at end of file
+msgstr "是否卸载 %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "卸载"
\ No newline at end of file
index 8ea78cb..629d4db 100644 (file)
@@ -1,5 +1,9 @@
 msgid "IDS_HS_BUTTON_DONE"
-msgstr "完成"
+msgstr "確定"
 
 msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "解除安裝 %s 嗎?"
\ No newline at end of file
+msgstr "解除安裝 %s 嗎?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "解除安裝"
+
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644 (file)
index f555b97..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-org.tizen.menu-screen (1.0.35) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.35
-
-  * Prevent issue : code maintainability
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Tue, 09 Apr 2013 09:53:46 +0900
-
-org.tizen.menu-screen (1.0.34) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.34
-
-  * Support Multi-language
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Wed, 03 Apr 2013 14:17:16 +0900
-
-org.tizen.menu-screen (1.0.33) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.33
-
-  * SMACK Rules
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Thu, 28 Mar 2013 15:44:18 +0900
-
-org.tizen.menu-screen (1.0.32) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.32
-
-  * ELM_ENGINE : software_x11 in Emulator
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Fri, 22 Mar 2013 13:38:48 +0900
-
-org.tizen.menu-screen (1.0.31) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.31
-
-  * [Shortcut API] allow duplicate
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Thu, 21 Mar 2013 10:38:40 +0900
-
-org.tizen.menu-screen (1.0.30) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.30
-
-  * text_class : menu_item -> tizen
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Tue, 19 Mar 2013 17:21:19 +0900
-
-org.tizen.menu-screen (1.0.29) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.29
-
-  * Merge with the private
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Mon, 18 Mar 2013 12:57:04 +0900
-
-org.tizen.menu-screen (1.0.28) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.28
-
-  * If Menu-screen is working on the Emulator, it'll be launched with the software backend.
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Fri, 15 Mar 2013 10:36:22 +0900
-
-org.tizen.menu-screen (1.0.27) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.27
-
-  * Disable the routines for pkgmgr temporarily.
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Tue, 12 Mar 2013 17:06:12 +0900
-
-org.tizen.menu-screen (1.0.26) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.26
-
-  * Merge some features with the private
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Tue, 12 Mar 2013 10:14:39 +0900
-
-org.tizen.menu-screen (1.0.25) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.25
-
-  * Merge with the Private Menu-screen
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Wed, 06 Mar 2013 19:15:21 +0900
-
-org.tizen.menu-screen (1.0.24) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.24
-
-  * sync with the private
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Thu, 14 Feb 2013 17:47:51 +0900
-
-org.tizen.menu-screen (1.0.23) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.23
-
-  * Enlarge the size of icons
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Mon, 04 Feb 2013 11:22:57 +0900
-
-org.tizen.menu-screen (1.0.22) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.22
-
-  * Bring in the scroller with MOUSE_WHEEL_EVENT
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Sun, 27 Jan 2013 01:09:05 +0900
-
-org.tizen.menu-screen (1.0.21) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.21
-
-  * Mapbuf has been disabled all the time.
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Thu, 24 Jan 2013 17:28:06 +0900
-
-org.tizen.menu-screen (1.0.20) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.20
-
-  * mapbuf is re-enabled when installing & removing an app
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Wed, 16 Jan 2013 16:56:22 +0900
-
-org.tizen.menu-screen (1.0.19) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.19
-
-  * EFL Requests : font, style
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Tue, 15 Jan 2013 19:26:11 +0900
-
-org.tizen.menu-screen (1.0.18) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.18
-
-  *  Window size is not overflowed more than the root window size.
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Thu, 13 Dec 2012 15:27:55 +0900
-
-org.tizen.menu-screen (1.0.17) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.17
-
-  * Code sync
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Thu, 06 Dec 2012 16:56:25 +0900
-
-org.tizen.menu-screen (1.0.15) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.15
-
-  * SMACK - manifest
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Sun, 04 Nov 2012 09:08:47 +0900
-
-org.tizen.menu-screen (1.0.14) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.14
-
-  * enlarge the area of index
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Fri, 05 Oct 2012 13:39:00 +0900
-
-org.tizen.menu-screen (1.0.13) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.13
-
-  * modify the vconf key for the selected menu-screen.
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Tue, 21 Aug 2012 10:37:58 +0900
-
-org.tizen.menu-screen (1.0.12) unstable; urgency=low
-
-  * Git: apps/home/menu-screen
-  * Tag: menu-screen_1.0.12
-
-  * [Modify] Environment for ELM_ENGINE, ELM_FPS
-
- -- Jin Yoon <jinny.yoon@samsung.com>  Wed, 02 May 2012 19:00:43 +0900
diff --git a/debian/compat b/debian/compat
deleted file mode 100644 (file)
index 7ed6ff8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-5
diff --git a/debian/control b/debian/control
deleted file mode 100644 (file)
index 7ca6f5b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Source: menu-screen
-Section: utils
-Priority: extra
-Maintainer: Jin Yoon <jinny.yoon@samsung.com>
-Build-Depends: debhelper (>= 5), libelm-dev, libslp-setting-dev, libefreet-dev, libslp-sysman-dev, libslp-pm-dev, dlog-dev, libecore-dev, libaul-1-dev, libpkgmgr-client-dev, syspopup-caller-dev, libheynoti-dev, libail-0-dev, librua-dev, libslp-shortcut-dev, menu-daemon, capi-appfw-application-dev, libbadge-dev, pkgmgr-info-dev, capi-system-info-dev, libshortcut-dev, libappsvc-dev
-Homepage: N/A
-Standards-Version: 0.1.0
-
-Package: org.tizen.menu-screen
-Section: utils
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, libelm, libeina, libslp-setting-0, libefreet, libslp-sysman, libslp-pm-0, libdlog-0, libaul-1, libpkgmgr-client-0, syspopup-caller-0, libheynoti-0, libail-0, menu-daemon, capi-appfw-application, libbadge, pkgmgr-info, capi-system-info, libshortcut-0, libappsvc-0
-Description: inhouse menu-screen
-
-Package: org.tizen.menu-screen-dbg
-Section: debug
-Architecture: any
-Depends: org.tizen.menu-screen (= ${Source-Version})
-Description: inhouse menu-screen (unstripped)
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/debian/jobs b/debian/jobs
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/debian/org.tizen.menu-screen.install.in.in b/debian/org.tizen.menu-screen.install.in.in
deleted file mode 100644 (file)
index b4e398c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/usr/share/*
-@TZ_SYS_RW_APP@/org.tizen.menu-screen/*
-@TZ_SYS_RW_PACKAGES@/*
diff --git a/debian/org.tizen.menu-screen.postinst b/debian/org.tizen.menu-screen.postinst
deleted file mode 100644 (file)
index 9ae1a8d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-source /etc/tizen-platform.conf
-
-users_gid=$(getent group $TZ_SYS_USER_GROUP | cut -f3 -d':')
-
-INHOUSE_ID="$users_gid"
-
-init_vconf()
-{
-       vconftool set -t int memory/idle-screen/top 0 -i -g $users_gid -f
-       vconftool set -t string file/private/org.tizen.menu-screen/engine "gl" -i -g $users_gid -f
-       vconftool set -t string db/setting/menuscreen/package_name "org.tizen.menu-screen" -i -g $users_gid -f
-}
-
-
-
-init_vconf
-
-# End of a file
diff --git a/debian/rules b/debian/rules
deleted file mode 100755 (executable)
index 7fb4408..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-CFLAGS += -Wall -fPIC -fpie
-CXXFLAGS +=  -Wall -fPIC -fpie
-LDFLAGS ?= 
-PREFIX ?= /usr
-DATADIR ?= /opt
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-       CFLAGS += -O0
-       CXXFLAGS += -O0
-else
-       CFLAGS += -O2
-       CXXFLAGS += -O2
-endif
-
-ifneq (,$(findstring arm,$(DEB_HOST_ARCH)))
-       export ARCH = arm
-else
-       export ARCH = i686
-endif
-
-LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--hash-style=both -Wl,--as-needed -pie
-
-configure: configure-stamp
-configure-stamp:
-       dh_testdir
-       # Add here commands to configure the package.
-       CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" cmake . -DCMAKE_INSTALL_PREFIX=$(PREFIX)
-
-       touch configure-stamp
-
-build: build-stamp
-
-build-stamp: configure-stamp 
-       dh_testdir
-
-       # Add here commands to compile the package.
-       $(MAKE)
-       #docbook-to-man debian/wavplayer.sgml > wavplayer.1
-
-       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
-               cat $$f > $${f%.in}; \
-               sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
-               sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
-       done
-
-
-       touch $@
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp configure-stamp
-
-       # Add here commands to clean up after the build process.
-       -$(MAKE) clean
-       rm -rf CMakeCache.txt
-       rm -rf CMakeFiles
-       rm -rf cmake_install.cmake
-       rm -rf Makefile
-       rm -rf install_manifest.txt
-
-       rm -rf data/CMakeCache.txt
-       rm -rf data/CMakeFiles
-       rm -rf data/cmake_install.cmake
-       rm -rf data/install_manifest.txt
-       rm -rf data/Makefile
-
-       rm -rf data/themes/CMakeCache.txt
-       rm -rf data/themes/CMakeFiles
-       rm -rf data/themes/cmake_install.cmake
-       rm -rf data/themes/install_manifest.txt
-       rm -rf data/themes/Makefile
-
-       rm -rf data/kdm/CMakeCache.txt
-       rm -rf data/kdm/CMakeFiles
-       rm -rf data/kdm/cmake_install.cmake
-       rm -rf data/kdm/install_manifest.txt
-       rm -rf data/kdm/Makefile
-                                       
-       rm -rf data/po/CMakeCache.txt
-       rm -rf data/po/CMakeFiles
-       rm -rf data/po/cmake_install.cmake
-       rm -rf data/po/install_manifest.txt
-       rm -rf data/po/Makefile
-                                       
-       rm -rf data/themes/*.edj
-       rm -rf data/*.edj
-       rm -rf *.so
-
-       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
-               rm -f $${f%.in}; \
-       done
-
-       dh_clean 
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k 
-       dh_installdirs
-
-       # Add here commands to install the package into debian/wavplayer.
-       $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-#      dh_installchangelogs 
-#      dh_installdocs
-#      dh_installexamples
-       dh_install --sourcedir=debian/tmp
-#      dh_installmenu
-#      dh_installdebconf       
-#      dh_installlogrotate
-#      dh_installemacsen
-#      dh_installpam
-#      dh_installmime
-#      dh_python
-#      dh_installinit
-#      dh_installcron
-#      dh_installinfo
-       dh_installman
-       dh_link
-       dh_strip --dbg-package=org.tizen.menu-screen-dbg
-       dh_compress
-       dh_fixperms
-#      dh_perl
-       dh_makeshlibs
-       dh_installdeb
-       dh_shlibdeps
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
index b38f5cd..08997d5 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -26,7 +29,6 @@
 typedef struct _db_info {
        long long rowid;
        int type;
-
        char *appid;
        char *name;
        char *content_info;
index a5b0168..f3d6151 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 
 #define PAGE_MAX_APP 16
 
+extern bool all_apps_layout_is_edited(Evas_Object *all_apps);
+extern void all_apps_layout_edit(Evas_Object *all_apps);
+extern void all_apps_layout_unedit(Evas_Object *all_apps);
+
 extern Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate);
 extern void all_apps_layout_destroy(Evas_Object *all_apps);
 
index bbd4c18..126aed8 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -21,6 +24,7 @@
 #define __MENU_SCREEN_LIST_ALL_APPS_H__
 
 extern app_list *all_apps_list_create(void);
+extern int all_apps_list_find_installed_time(const char *id);
 extern void all_apps_list_destroy(app_list *list);
 
 #endif //__MENU_SCREEN_LIST_ALL_APPS_H__
index b81d9fa..2421671 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index 699c1d7..47cb96c 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #ifndef _MENU_SCREEN_CONF_H_
 #define _MENU_SCREEN_CONF_H_
 
-#define MAX_PAGE_NO 9
+#define MAX_PAGE_NO 10
 
 #define BASE_HEIGHT 1280.0f
 #define BASE_WIDTH 720.0f
 
-#define PAGE_PORTRAIT_HEIGHT 1060.0f
+#define INDICATOR_PORT_HEIGHT 70
+#define INDICATOR_HEIGHT_PROP (INDICATOR_PORT_HEIGHT/BASE_HEIGHT)
+
+#define PAGE_PORTRAIT_HEIGHT 1030.0f
 #define INDEX_HEIGHT 70
 
-#define ITEM_WIDTH 180.0
+#define ITEM_WIDTH 180.0 //180.0
+#define LITE_ITEM_WIDTH 90.0
 #define ITEM_WIDTH_PROP (ITEM_WIDTH/BASE_WIDTH)
-#define ITEM_HEIGHT 198.0
+#define ITEM_HEIGHT 198.0 //198.0
+#define LITE_ITEM_HEIGHT 99.0
 #define ITEM_HEIGHT_PROP (ITEM_HEIGHT/BASE_HEIGHT)
 
 #endif // _MENU_SCREEN_CONF_H_
index 730bdcc..5ec5bd9 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index a0db95f..27ef1c0 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index 35fe99a..a42d3c8 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -31,6 +34,9 @@ extern void item_set_icon(Evas_Object *item, char *icon, int sync);
 extern char *item_get_name(Evas_Object *item);
 extern void item_set_name(Evas_Object *item, char *name, int sync);
 
+extern void item_set_pkgid(Evas_Object *edje, char *package, int sync);
+extern char *item_get_pkgid(Evas_Object *edje);
+
 extern char *item_get_package(Evas_Object *item);
 extern void item_set_package(Evas_Object *item, char *package, int sync);
 
index caaa896..659b323 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index 8395cb3..d140130 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
diff --git a/include/key.h b/include/key.h
new file mode 100644 (file)
index 0000000..33e4e2a
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * MENU-SCREEN
+ *
+ * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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.
+ *
+ */
+
+#ifndef __MENU_SCREEN_INPUT_KEY_H__
+#define __MENU_SCREEN_INPUT_KEY_H__
+
+#include "util.h"
+
+#define KEY_SELECT "XF86Home"
+#define KEY_BACK "XF86Back"
+#define KEY_ESC "Escape"
+
+HAPI void key_register(void);
+HAPI void key_unregister(void);
+HAPI void key_grab_home(void);
+HAPI void key_ungrab_home(void);
+
+#endif //__MENU_SCREEN_INPUT_KEY_H__
+
+// End of a file
index ff6c697..4edc6b0 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -32,6 +35,10 @@ extern void layout_disable_block(Evas_Object *layout);
 extern Evas_Object* layout_load_edj(Evas_Object *parent, const char *edjname, const char *grpname);
 extern void layout_unload_edj(Evas_Object *layout);
 
+HAPI void layout_create_package(Evas_Object *layout, const char *package);
+HAPI void layout_update_package(Evas_Object *layout, const char *package);
+HAPI void layout_delete_package(Evas_Object *layout, const char *package);
+
 #endif //__MENU_SCREEN_LAYOUT_H__
 
 // End of a file
index 867e4c1..dda4a7a 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 
 typedef struct
 {
-       char *package;
+       char *pkgid;
+       char *package; /* appid */
        char *exec;
        char *name;
        char *icon;
        char *desktop;
        bool nodisplay;
        bool enabled;
-       bool x_slp_removable;
+       bool removable;
        bool x_slp_taskmanage;
        pid_t pid;
        Evas_Object *image;
@@ -49,7 +53,7 @@ typedef struct _app_list_item {
        char *package;
        pid_t pid;
        time_t launch_time;
-       long long installed_time;
+       int installed_time;
        void *data;
 } app_list_item;
 
@@ -65,6 +69,7 @@ extern void list_free_values(app_info_t *ai);
 extern menu_screen_error_e list_append_item(app_list *list, app_list_item *item);
 extern menu_screen_error_e list_remove_item(app_list *list, app_list_item *item);
 extern menu_screen_error_e list_sort(app_list *list, int (*_sort_cb)(const void *d1, const void *d2));
+extern app_list_item *list_nth(app_list *parent, unsigned int nth);
 
 #endif //__MENU_SCREEN_LIST_H__
 
index b03f3bf..db20904 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index 43fe471..06d8fc3 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -31,6 +34,12 @@ extern Evas_Object *menu_screen_get_win(void);
 extern Elm_Theme *menu_screen_get_theme(void);
 extern bool menu_screen_get_done(void);
 extern void menu_screen_set_done(bool is_done);
+extern int menu_screen_get_state(void);
+extern int menu_screen_is_tts(void);
+
+extern void menu_screen_inc_booting_state(void);
+extern void menu_screen_dec_booting_state(void);
+extern int menu_screen_get_booting_state(void);
 
 #endif //__MENU_SCREEN_H__
 
index 829ba9d..85d0a29 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index b43fe6b..4c4ad3a 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index 7fae806..da9e4f2 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -41,6 +44,8 @@ extern unsigned int page_scroller_count_page(Evas_Object *scroller);
 extern int page_scroller_get_page_no(Evas_Object* scroller, Evas_Object *page);
 
 extern Evas_Object *page_scroller_push_item(Evas_Object *scroller, app_info_t *ai);
+extern Evas_Object *page_scroller_push_item_by_order(Evas_Object *scroller, app_info_t *ai);
+extern int page_scroller_get_current_page_no(Evas_Object *scroller);
 extern Evas_Object *page_scroller_find_item_by_package(Evas_Object *scroller, const char *package, int *page_no);
 extern void page_scroller_trim_items(Evas_Object *scroller);
 extern void page_scroller_bring_in(Evas_Object *scroller, int idx);
@@ -50,6 +55,9 @@ extern void page_scroller_edit(Evas_Object *scroller);
 extern void page_scroller_unedit(Evas_Object *scroller);
 extern bool page_scroller_is_edited(Evas_Object *scroller);
 
+extern void page_scroller_focus(Evas_Object *scroller);
+extern void page_scroller_focus_into_vector(Evas_Object *scroller, int vector);
+
 #endif //__MENU_SCREEN_PAGE_SCROLLER_H__
 
 // End of a file
index 4e4eb41..bd2aa06 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #ifndef __MENU_SCREEN_PKGMGR_H__
 #define __MENU_SCREEN_PKGMGR_H__
 
-#include <Evas.h>
-
-#include "list.h"
-#include "util.h"
-
-
-
-enum package_install_status {
-       UNKNOWN = 0x00,
-       DOWNLOAD_BEGIN,
-       DOWNLOADING,
-       DOWNLOAD_END,
-       INSTALL_BEGIN,
-       INSTALLING,
-       INSTALL_END,
-       UNINSTALL_BEGIN,
-       UNINSTALLING,
-       UNINSTALL_END,
-       UPDATE_BEGIN,
-       UPDATING,
-       UPDATE_END,
-       MAX_STATUS,
-};
-
 
+HAPI menu_screen_error_e pkgmgr_item_list_append_item(const char *pkg_id, const char *app_id, Evas_Object *item);
+HAPI menu_screen_error_e pkgmgr_item_list_remove_item(const char *pkg_id, const char *app_id, Evas_Object *item);
 
-struct package_info {
-       enum package_install_status status;
-       app_info_t ai;
-       Evas_Object *item;
-       Evas_Object *page;
-       Eina_Bool desktop_file_found;
-       int error_count;
-};
+HAPI void pkgmgr_item_list_affect_pkgid(const char *pkg_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data);
+HAPI void pkgmgr_item_list_affect_appid(const char *app_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data);
 
+HAPI inline menu_screen_error_e pkgmgr_uninstall(Evas_Object *item);
 
+HAPI menu_screen_error_e pkgmgr_reserve_list_push_request(const char *package, const char *key, const char *val);
+HAPI menu_screen_error_e pkgmgr_reserve_list_pop_request(void);
 
-extern menu_screen_error_e pkgmgr_init(Evas_Object *scroller);
-extern void pkgmgr_fini(void);
-extern Evas_Object *pkgmgr_find_pended_object(const char *package, int with_desktop_file, Evas_Object *scroller, Evas_Object **page);
-extern menu_screen_error_e pkgmgr_uninstall(Evas_Object *obj);
+HAPI menu_screen_error_e pkgmgr_init(void);
+HAPI void pkgmgr_fini(void);
 
 #endif //__MENU_SCREEN_PKGMGR_H__
 
index 576e3fb..d871b91 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #ifndef __MENU_SCREEN_POPUP_H__
 #define __MENU_SCREEN_POPUP_H__
 
-extern void popup_append_list(Evas_Object *popup);
-extern void popup_remove_list(Evas_Object *popup);
-extern void popup_free_list();
-
-extern Evas_Object *popup_create(Evas_Object *parent, const char *warning);
-extern void popup_destroy(Evas_Object *popup);
+extern Evas_Object *popup_exist(void);
+extern void popup_destroy_all(void);
+extern Evas_Object *popup_create_confirm(Evas_Object *parent, const char *warning);
 extern Evas_Object *popup_create_uninstall(Evas_Object *parent, Evas_Object *item);
 
 #endif //__MENU_SCREEN_POPUP_H__
index e9c0bdc..4ddc2b7 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #define STR_ENV_MAPBUF "BEATUX_MAPBUF"
 
 #define ALL_APPS_TABLE "all_apps"
+#define BOOTING_STATE_DONE 1
+
+/* Data key */
+#define DATA_KEY_MAIN_OPERATION_LIST "ma_op_li"
+
+/* Accessibility */
+#define ACCESS_BUTTON "button"
+#define ACCESS_EDIT "edit"
 
 /* Multi-language */
 #define D_(str) dgettext("sys_string", str)
diff --git a/org.tizen.menu-screen.efl b/org.tizen.menu-screen.efl
new file mode 100644 (file)
index 0000000..d4724f2
--- /dev/null
@@ -0,0 +1,97 @@
+org.tizen.menu-screen app-svc rwx--- ------
+org.tizen.menu-screen pkgmgr::db rw---l ------
+org.tizen.menu-screen ail::db rw---- ------
+org.tizen.menu-screen system::use_internet r----- ------
+org.tizen.menu-screen device::app_logging -w---- ------
+org.tizen.menu-screen net-config r-x--- ------
+org.tizen.menu-screen xorg rwx--- ------
+org.tizen.menu-screen isf rwx--- ------
+org.tizen.menu-screen dbus rwx--- ------
+org.tizen.menu-screen ug-image-viewer-efl r-x--- ------
+org.tizen.menu-screen cbhm r-x--- ------
+org.tizen.menu-screen sound_server rwx--- ------
+org.tizen.menu-screen svi-data r-x--- ------
+org.tizen.menu-screen data-provider-master rwx--- ------
+org.tizen.menu-screen org.tizen.indicator rwx--- ------
+org.tizen.menu-screen org.tizen.setting r-x--- ------
+org.tizen.menu-screen sqlfs r-x--- ------
+org.tizen.menu-screen e17 rwx--- ------
+org.tizen.menu-screen dlogutil r-x--- ------
+org.tizen.menu-screen immvibed rwx--- ------
+org.tizen.menu-screen rua::db rw---- ------
+org.tizen.menu-screen org.tizen.clock -w---- ------
+org.tizen.menu-screen badge::db rw---- ------
+org.tizen.menu-screen aul rwx--- ------
+org.tizen.menu-screen system-server r-x--- ------
+org.tizen.menu-screen deviced r-x--- ------
+org.tizen.menu-screen sensor-framework r-x--- ------
+org.tizen.menu-screen secure-storage r-x--- ------
+org.tizen.menu-screen pkgmgr-client r-x--- ------
+org.tizen.menu-screen syslogd -w---- ------
+org.tizen.indicator org.tizen.menu-screen rwx--- ------
+org.tizen.browser org.tizen.menu-screen rw---- ------
+org.tizen.contact org.tizen.menu-screen rw---- ------
+org.tizen.youtube-shortcut org.tizen.menu-screen rw---- ------
+org.tizen.message org.tizen.menu-screen rw---- ------
+org.tizen.voicerecorder org.tizen.menu-screen rw---- ------
+org.tizen.calendar org.tizen.menu-screen rw---- ------
+org.tizen.episode org.tizen.menu-screen rw---- ------
+org.tizen.keepit org.tizen.menu-screen rw---- ------
+org.tizen.calculator org.tizen.menu-screen rw---- ------
+org.tizen.clock org.tizen.menu-screen rw---- ------
+org.tizen.camera-app org.tizen.menu-screen rw---- ------
+org.tizen.svoice org.tizen.menu-screen rw---- ------
+org.tizen.group-cast org.tizen.menu-screen rw---- ------
+org.tizen.phone org.tizen.menu-screen rw---- ------
+org.tizen.smartsearch org.tizen.menu-screen rw---- ------
+org.tizen.setting org.tizen.menu-screen rw---- ------
+org.tizen.myfile org.tizen.menu-screen rw---- ------
+org.tizen.rcs-im org.tizen.menu-screen rw---- ------
+org.tizen.smemo org.tizen.menu-screen rw---- ------
+org.tizen.facebook org.tizen.menu-screen rw---- ------
+org.tizen.gallery org.tizen.menu-screen rw---- ------
+org.tizen.email org.tizen.menu-screen rw---- ------
+org.tizen.music-player org.tizen.menu-screen rw---- ------
+org.tizen.nfc-app org.tizen.menu-screen rw---- ------
+org.tizen.video-player org.tizen.menu-screen rw---- ------
+org.tizen.contacts org.tizen.menu-screen rw---- ------
+dbus org.tizen.menu-screen rwx--- ------
+stest-service org.tizen.menu-screen r-x--- ------
+org.tizen.menu-screen stest-service -w---- ------
+org.tizen.menu-screen org.tizen.setting::default-resources r-x--- ------
+org.tizen.menu-screen pkgmgr::svc r-x--- ------
+org.tizen.menu-screen pkgmgr::info r----- ------
+org.tizen.menu-screen system::vconf_system rw---- ------
+org.tizen.menu-screen system::vconf_inhouse rw---- ------
+org.tizen.menu-screen aul::launch --x--- ------
+org.tizen.menu-screen data-provider-master::shortcut rw---- ------
+org.tizen.menu-screen data-provider-master::shortcut.shortcut -w---- ------
+org.tizen.menu-screen data-provider-master::notification rw---- ------
+org.tizen.menu-screen data-provider-master::notification.client -w---- ------
+org.tizen.menu-screen data-provider-master::badge rw---- ------
+org.tizen.menu-screen data-provider-master::badge.client -w---- ------
+org.tizen.menu-screen tts-server rwx--- ------
+org.tizen.menu-screen idlescreen::vconf rwx--- ------
+org.tizen.app-tray org.tizen.menu-screen r-x--- ------
+org.tizen.menu-screen factory-15 r-x--- ------
+org.tizen.menu-screen telephony_framework::api_manager r----- ------
+org.tizen.menu-screen telephony_framework::api_modem r-x--- ------
+org.tizen.menu-screen telephony_framework::api_network r-x--- ------
+org.tizen.menu-screen atd-server r----- ------
+org.tizen.menu-screen factory::vconf rw---- ------
+org.tizen.menu-screen dfms-kernel r----- ------
+org.tizen.menu-screen system::homedir rwxat- ------
+org.tizen.menu-screen system::vconf rwxat- ------
+org.tizen.menu-screen system::media rwxat- ------
+org.tizen.menu-screen system::share rwxat- ------
+org.tizen.menu-screen pulseaudio rwxat- ------
+e17 org.tizen.menu-screen -w---- ------
+org.tizen.menu-screen sys-assert::core rwxat- ------
+org.tizen.menu-screen privacy-manager::db r----l ------
+org.tizen.menu-screen system::vconf_setting rw---- ------
+org.tizen.menu-screen system::vconf_privacy rw---- ------
+org.tizen.menu-screen system::vconf_multimedia rw---- ------
+org.tizen.menu-screen system::vconf_network rw---- ------
+org.tizen.menu-screen system::vconf_misc rw---- ------
+org.tizen.menu-screen ecore::lock rwxat- ------
+org.tizen.menu-screen org.tizen.wallpaper-ui-service rwxat- ------
diff --git a/org.tizen.menu-screen.manifest b/org.tizen.menu-screen.manifest
new file mode 100644 (file)
index 0000000..180519a
--- /dev/null
@@ -0,0 +1,12 @@
+<manifest>
+       <define>
+               <domain name="org.tizen.menu-screen" />
+       </define>
+       <request>
+               <domain name="org.tizen.menu-screen" />
+       </request>
+       <assign>
+               <filesystem path="/usr/share/packages/org.tizen.menu-screen.xml" label="_" />
+               <filesystem path="/usr/share/icons/default/small/org.tizen.menu-screen.png" label="_" />
+       </assign>
+</manifest>
diff --git a/packaging/init_menu-screen_DB.sh b/packaging/init_menu-screen_DB.sh
deleted file mode 100644 (file)
index d0cdecc..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-source /etc/tizen-platform.conf
-if [ ! -d $1/dbspace ]
-then
-       mkdir -p $1/dbspace
-fi
-if [ ! -d $1/shortcut ]
-then
-       mkdir -p $1/shortcut
-else
-       rm -rf $1/shortcut/*
-fi
-sqlite3 $1/dbspace/.menu_screen.db 'PRAGMA journal_mode = PERSIST;
-       create table if not exists shortcut (
-               ROWID INTEGER PRIMARY KEY AUTOINCREMENT,
-               appid TEXT,
-               name TEXT,
-               type INTEGER,
-               content_info TEXT,
-               icon TEXT
-       );
-'
-users_gid=$(getent group $TZ_SYS_USER_GROUP | cut -f3 -d':')
-
-INHOUSE_ID="$users_gid"
-chown -R $INHOUSE_ID:$INHOUSE_ID $1
-chown root:$INHOUSE_ID $1/dbspace/.menu_screen.db
-chown root:$INHOUSE_ID $1/dbspace/.menu_screen.db-journal
-
-chmod 660 $1/dbspace/.menu_screen.db
-chmod 660 $1/dbspace/.menu_screen.db-journal
-
diff --git a/packaging/org.tizen.menu-screen.manifest b/packaging/org.tizen.menu-screen.manifest
deleted file mode 100644 (file)
index 820ebf2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<manifest>
- <request>
-    <domain name="_"/>
- </request>
- <assign>
-       <filesystem path="/opt/usr/apps/org.tizen.menu-screen/data" label="User" />
-       <filesystem path="/opt/usr/apps/org.tizen.menu-screen/data/dbspace" label="User" />
-       <filesystem path="/opt/usr/apps/org.tizen.menu-screen/data/shortcut" label="User" />
- </assign>
-</manifest>
index d175ec3..1c6d01f 100644 (file)
+%define _optdir /opt
+%define _usrdir /usr
+%define _appdir %{_usrdir}/apps
+%define _usr_datadir %{_usrdir}/share
 
-Name: org.tizen.menu-screen
-Summary: Menu screen
-Version: 1.1.1
-Release: 1.1
-Group: Applications/Core Applications
-License: Apache
-Source0: %{name}-%{version}.tar.gz
-Source1001: %{name}.manifest
-Source1002:   init_menu-screen_DB.sh
-BuildRequires: pkgconfig(ail)
-BuildRequires: pkgconfig(appcore-efl)
-BuildRequires: pkgconfig(appsvc)
-BuildRequires: pkgconfig(aul)
-BuildRequires: pkgconfig(badge)
-BuildRequires: pkgconfig(bundle)
-BuildRequires: pkgconfig(capi-appfw-application)
-BuildRequires: pkgconfig(capi-system-info)
-BuildRequires: pkgconfig(dlog)
-BuildRequires: pkgconfig(ecore)
-BuildRequires: pkgconfig(ecore-evas)
-BuildRequires: pkgconfig(ecore-file)
-BuildRequires: pkgconfig(ecore-imf)
-BuildRequires: pkgconfig(ecore-input)
-BuildRequires: pkgconfig(edje)
-BuildRequires: pkgconfig(eet)
-BuildRequires: pkgconfig(eina)
-BuildRequires: pkgconfig(elementary)
-BuildRequires: pkgconfig(evas)
-BuildRequires: pkgconfig(heynoti)
-BuildRequires: pkgconfig(pkgmgr)
-BuildRequires: pkgconfig(pkgmgr-info)
-BuildRequires: pkgconfig(shortcut)
-BuildRequires: pkgconfig(syspopup-caller)
-BuildRequires: cmake
-BuildRequires: edje-tools
-BuildRequires: gettext-tools
-BuildRequires:  pkgconfig(libtzplatform-config)
+%define _project_name menu-screen
+%define _package_name org.tizen.%{_project_name}
+
+%define _packagedir %{_appdir}/%{_package_name}
+%define _bindir %{_packagedir}/bin
+%define _datadir %{_optdir}%{_packagedir}/data
+%define _resdir %{_packagedir}/res
+%define _sharedir %{_packagedir}/share
+
+%define _localedir %{_resdir}/locale
+
+%if "%{?profile}" == "wearable"
+ExcludeArch: %{arm} %ix86 x86_64
+%endif
+
+Name:       org.tizen.menu-screen
+Summary:    An utility library of the menu screen
+Version:    1.2.5
+Release:    1.1
+Group:      TO_BE/FILLED_IN
+License:    Apache
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires:  pkgconfig(ail)
+BuildRequires:  pkgconfig(appcore-efl)
+BuildRequires:  pkgconfig(appsvc)
+BuildRequires:  pkgconfig(aul)
+BuildRequires:  pkgconfig(badge)
+BuildRequires:  pkgconfig(bundle)
+BuildRequires:  pkgconfig(capi-appfw-application)
+BuildRequires:  pkgconfig(capi-system-info)
+BuildRequires:  pkgconfig(dlog)
+BuildRequires:  pkgconfig(ecore)
+#BuildRequires:  pkgconfig(ecore-x)
+BuildRequires:  pkgconfig(ecore-evas)
+BuildRequires:  pkgconfig(ecore-file)
+BuildRequires:  pkgconfig(ecore-imf)
+BuildRequires:  pkgconfig(ecore-input)
+BuildRequires:  pkgconfig(edje)
+BuildRequires:  pkgconfig(eet)
+BuildRequires:  pkgconfig(eina)
+BuildRequires:  pkgconfig(elementary)
+BuildRequires:  pkgconfig(evas)
+BuildRequires:  pkgconfig(pkgmgr)
+BuildRequires:  pkgconfig(pkgmgr-info)
+BuildRequires:  pkgconfig(shortcut)
+BuildRequires:  pkgconfig(syspopup-caller)
+#BuildRequires:  pkgconfig(utilX)
+#BuildRequires:  pkgconfig(capi-appfw-preference)
+BuildRequires:  pkgconfig(capi-system-info)
+BuildRequires:  pkgconfig(capi-system-system-settings)
+BuildRequires:  cmake
+BuildRequires:  edje-tools
+BuildRequires:  gettext-tools
+# %ifarch %{arm}
+# %define ARCH arm
+# BuildRequires:  pkgconfig(bincfg)
+# BuildRequires:  pkgconfig(factory)
+# %else
+# %define ARCH emulator
+# %endif
 
 %description
-Tizen 2.x Reference Application.
-User application for launching apps.
+An utility library for developers of the menu screen.
+
+
+
+%package devel
+Summary:    An utility library of the menu screen (devel)
+Group:      Development/Libraries
+Requires:   %{name} = %{version}-%{release}
+
+%description devel
+An utility library for developers of the menu screen (devel)
+
 
 %prep
 %setup -q
-cp %{SOURCE1001} .
 
 %build
-%cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}/apps/%{name}/  \
--DTZ_SYS_ETC=%TZ_SYS_ETC \
--DTZ_SYS_SMACK=%TZ_SYS_SMACK \
--DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES \
--DTZ_SYS_RO_APP=%TZ_SYS_RO_APP \
--DTZ_SYS_RW_APP=%TZ_SYS_RW_APP \
--DTZ_SYS_RW_PACKAGES=%TZ_SYS_RW_PACKAGES \
--DTZ_SYS_USER_GROUP=%TZ_SYS_USER_GROUP
+CFLAGS+=" -fPIC -fPIE ";export CFLAGS
+CXXFLAGS+=" -fPIC -fPIE -fvisibility=hidden -fvisibility-inlines-hidden ";export CXXFLAGS
+LDFLAGS+=" -Wl,--hash-style=both -Wl,--as-needed -pie ";export LDFLAGS
+
+%if 0%{?sec_build_binary_debug_enable}
+export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE"
+export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE"
+%endif
+
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS="${CFLAGS} -DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="${CXXFLAGS} -DTIZEN_ENGINEER_MODE"
+export FFLAGS="${FFLAGS} -DTIZEN_ENGINEER_MODE"
+%endif
+
+cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCH=%{ARCH}
 make %{?jobs:-j%jobs}
 
 %install
 %make_install
-mkdir -p %{buildroot}/%{_datarootdir}/license
-install -D -m 0755 %{SOURCE1002} %{buildroot}%{_datadir}/%{name}/init_menu-screen_DB.sh
+%define tizen_sign 1
+%define tizen_sign_base %{_packagedir}
+%define tizen_sign_level platform
+%define tizen_author_sign 1
+%define tizen_dist_sign 1
+
+mkdir -p %{buildroot}%{_datadir}
+mkdir -p %{buildroot}/usr/share/license
 
 %post
-users_gid=$(getent group %TZ_SYS_USER_GROUP | cut -f3 -d':')
-INHOUSE_ID="$users_gid"
 
-init_vconf()
-{
-       vconftool set -t int memory/idle-screen/top 0 -i -g $users_gid -f
-       vconftool set -t string file/private/org.tizen.menu-screen/engine "gl" -i -g $users_gid -f
-       vconftool set -t string db/setting/menuscreen/package_name "org.tizen.menu-screen" -i -g $users_gid -f
-}
-init_vconf
+PRIVATE_OPTION="-s org.tizen.menu-screen"
+
+if [ ! -d %{_datadir}/dbspace ]
+then
+       mkdir -p %{_datadir}/dbspace
+fi
+
+if [ ! -d %{_datadir}/shortcut ]
+then
+       mkdir -p %{_datadir}/shortcut
+else
+       rm -rf %{_datadir}/shortcut/*
+fi
+
+sqlite3 %{_datadir}/dbspace/.menu_screen.db 'PRAGMA journal_mode = PERSIST;
+       create table if not exists shortcut (
+               ROWID INTEGER PRIMARY KEY AUTOINCREMENT,
+               appid TEXT,
+               name TEXT,
+               type INTEGER,
+               content_info TEXT,
+               icon TEXT
+       );
+'
+
+INHOUSE_ID="5000"
+chown -R $INHOUSE_ID:$INHOUSE_ID %{_datadir}
+chown root:$INHOUSE_ID %{_datadir}/dbspace/.menu_screen.db
+chown root:$INHOUSE_ID %{_datadir}/dbspace/.menu_screen.db-journal
+
+chmod 660 %{_datadir}/dbspace/.menu_screen.db
+chmod 660 %{_datadir}/dbspace/.menu_screen.db-journal
 
-%{_datadir}/%{name}/init_menu-screen_DB.sh %{_datadir}
+if [ -f /usr/lib/rpm-plugins/msm.so ]
+then
+       chsmack -a 'org.tizen.menu-screen' %{_datadir}/dbspace/.menu_screen.db*
+fi
 
 %files
 %manifest %{name}.manifest
 %defattr(-,root,root,-)
-%{_prefix}/apps/%{name}/*
-%{_datarootdir}/packages/%{name}.xml
-%{_datadir}/%{name}/init_menu-screen_DB.sh
+%{_bindir}/menu-screen
+%{_resdir}/edje/all_apps_portrait.edj
+%{_resdir}/edje/button_edit.edj
+%{_resdir}/edje/group_4x4_portrait.edj
+%{_resdir}/edje/item_4x4.edj
+%{_resdir}/edje/layout_portrait.edj
+%{_resdir}/edje/index.edj
+%{_resdir}/images/default.png
+%{_resdir}/data/main_operation.launch
+%{_localedir}/*/*/*.mo
+%{_usr_datadir}/icons/default/small/org.tizen.menu-screen.png
+%{_usr_datadir}/packages/org.tizen.menu-screen.xml
+#%{_packagedir}/*.xml
+/etc/smack/accesses.d/%{_package_name}.efl
index 522a295..eb5485d 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #include "util.h"
 #include "all_apps/db.h"
 
-#include <tzplatform_config.h>
-
 #define QUERY_LEN 1024
 
-#define MENU_SCREEN_DB_FILE tzplatform_mkpath(TZ_USER_APP, "com.samsung.menu-screen/data/dbspace/.menu_screen.db")
+#define MENU_SCREEN_DB_FILE "/opt/usr/apps/org.tizen.menu-screen/data/dbspace/.menu_screen.db"
 #define SHORTCUT_TABLE "shortcut"
 #define QUERY_INSERT_SHORTCUT "INSERT INTO "SHORTCUT_TABLE" ("\
        "appid,"\
@@ -155,20 +156,24 @@ HAPI void all_apps_db_unretrieve_all_info(Eina_List *list)
 
 HAPI int all_apps_db_count_shortcut(const char *appid, const char *name)
 {
+       int count = -1;
+       char q[QUERY_LEN];
+       menu_screen_error_e ret = MENU_SCREEN_ERROR_FAIL;
+
        retv_if(MENU_SCREEN_ERROR_OK != db_open(MENU_SCREEN_DB_FILE), -1);
 
-       char q[QUERY_LEN];
        snprintf(q, sizeof(q), QUERY_COUNT_SHORTCUT, appid, name);
 
        stmt_h *st;
        st = db_prepare(q);
        retv_if(NULL == st, -1);
 
-       menu_screen_error_e ret = MENU_SCREEN_ERROR_FAIL;
        ret = db_next(st);
-       retv_if(MENU_SCREEN_ERROR_FAIL == ret, -1);
+       if (MENU_SCREEN_ERROR_FAIL == ret) {
+               db_finalize(st);
+               return -1;
+       }
 
-       int count = -1;
        count = db_get_int(st, 0);
 
        db_finalize(st);
index fe94882..3842193 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #include "conf.h"
 #include "index.h"
 #include "item_event.h"
+#include "key.h"
 #include "layout.h"
 #include "list.h"
 #include "page_scroller.h"
+#include "popup.h"
 #include "util.h"
 #include "all_apps/layout.h"
 #include "all_apps/list.h"
 #define IDS_HS_BUTTON_DONE "IDS_HS_BUTTON_DONE"
 
 
+
+HAPI bool all_apps_layout_is_edited(Evas_Object *all_apps)
+{
+       retv_if(NULL == all_apps, false);
+       return (bool) evas_object_data_get(all_apps, "is_edited");
+}
+
+
+
 HAPI void all_apps_layout_edit(Evas_Object *all_apps)
 {
        Evas_Object *edit_button;
        Evas_Object *scroller;
 
+       //elm_object_tree_focus_allow_set(all_apps, EINA_FALSE);
+       evas_object_data_set(all_apps, "is_edited", (void *) true);
+
        edit_button = elm_object_part_content_get(all_apps, ALL_APPS_EDIT_BUTTON_PART);
        ret_if(NULL == edit_button);
-       edje_object_signal_emit(_EDJ(edit_button), "edit_button,enable", "menu");
-       if (edje_object_part_text_set(_EDJ(edit_button), "edit_button_text", _(IDS_HS_BUTTON_DONE)) == EINA_FALSE) {
-               _E("Failed to set text on the part, edje:%p, part:%s, text:%s", _EDJ(edit_button), "edit_button_text", _(IDS_HS_BUTTON_DONE));
-       }
+       elm_object_signal_emit(edit_button, "edit_button_state,edit", "menu");
 
        scroller = elm_object_part_content_get(all_apps, "content");
        ret_if(NULL == scroller);
        page_scroller_edit(scroller);
+
+       key_grab_home();
 }
 
 
@@ -68,14 +84,17 @@ HAPI void all_apps_layout_unedit(Evas_Object *all_apps)
 
        ret_if(NULL == all_apps);
 
+       //elm_object_tree_focus_allow_set(all_apps, EINA_TRUE);
+       key_ungrab_home();
+       popup_destroy_all();
+
+       bool is_edited = (bool) evas_object_data_get(all_apps, "is_edited");
+       if (false == is_edited) return;
+
        do {
                edit_button = elm_object_part_content_get(all_apps, ALL_APPS_EDIT_BUTTON_PART);
                ret_if(NULL == edit_button);
-
-               edje_object_signal_emit(_EDJ(edit_button), "edit_button,disable", "menu");
-               if (edje_object_part_text_set(_EDJ(edit_button), "edit_button_text", "") == EINA_FALSE) {
-                       _E("Failed to set text on the part, edje:%p, part:%s, text:(null)", _EDJ(edit_button), "edit_button_text");
-               }
+               elm_object_signal_emit(edit_button, "edit_button_state,unedit", "menu");
        } while (0);
 
        do {
@@ -90,71 +109,61 @@ HAPI void all_apps_layout_unedit(Evas_Object *all_apps)
 
 
 
-static void _press_edit_button(Evas_Object *edje)
-{
-       edje_object_signal_emit(edje, "edit_button,enable,press", "menu");
-}
-
-
-
-static void _release_edit_button(Evas_Object *edje)
-{
-       edje_object_signal_emit(edje, "edit_button,enable,release", "menu");
-}
-
-
-
-static void _edit_button_down_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
+static char *_access_info_cb(void *data, Evas_Object *obj)
 {
        Evas_Object *scroller = data;
 
-       _D("Edit button is down");
-
+       char *info;
        if (page_scroller_is_edited(scroller)) {
-               _press_edit_button(obj);
+               info = _(IDS_HS_BUTTON_DONE);
+       } else {
+               info = ACCESS_EDIT;
        }
+
+       char *tmp;
+       tmp = strdup(info);
+       if (!tmp) return NULL;
+       return tmp;
 }
 
 
 
-static void _edit_button_up_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
+static void _focus_clicked_cb(void *data, Evas_Object *obj, void *event_info)
 {
        Evas_Object *scroller = data;
-       Evas_Object *all_apps;
 
        _D("Edit button is up");
 
+       Evas_Object *all_apps;
        all_apps = evas_object_data_get(scroller, "tab");
-       if (page_scroller_is_edited(scroller)) {
-               Evas_Object *eo;
-               bool pressed = false;
+       ret_if(NULL == all_apps);
 
-               eo = evas_object_data_get(obj, "evas_object");
-               pressed = (bool) evas_object_data_get(eo, "pressed");
-               if (pressed) {
-                       all_apps_layout_unedit(all_apps);
-               } else {
-                       _release_edit_button(obj);
-               }
+       if (page_scroller_is_edited(scroller)) {
+               _D("Go to the normal mode");
+               all_apps_layout_unedit(all_apps);
        } else {
+               _D("Go to the edit mode");
                all_apps_layout_edit(all_apps);
        }
+
+       elm_object_signal_emit(obj, "edit_button,release", "menu");
 }
 
 
 
-static void _button_out_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+
+static void _edit_button_down_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
 {
-       _D("Edit button is out");
-       evas_object_data_set(obj, "pressed", (void *) false);
+       _D("Edit button is down");
 }
 
 
 
-static void _button_in_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+static void _edit_button_up_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
 {
-       _D("Edit button is in");
-       evas_object_data_set(obj, "pressed", (void *) true);
+       _D("Edit button is up");
+
+       elm_object_signal_emit(obj, "edit_button,release", "menu");
 }
 
 
@@ -171,9 +180,17 @@ static Evas_Object *_add_edit_button(Evas_Object *parent, Evas_Object *scroller)
 
        edje_object_signal_callback_add(_EDJ(button), "edit_button,down", "menu", _edit_button_down_cb, scroller);
        edje_object_signal_callback_add(_EDJ(button), "edit_button,up", "menu", _edit_button_up_cb, scroller);
-       evas_object_event_callback_add(button, EVAS_CALLBACK_MOUSE_OUT, _button_out_cb, NULL);
-       evas_object_event_callback_add(button, EVAS_CALLBACK_MOUSE_IN, _button_in_cb, NULL);
-       evas_object_data_set(button, "pressed", (void *) false);
+
+       do { // focus
+               Evas_Object *focus= NULL;
+               focus = elm_button_add(button);
+               retv_if(NULL == focus, NULL);
+
+               elm_object_style_set(focus, "focus");
+               elm_object_part_content_set(button, "focus", focus);
+               elm_access_info_cb_set(focus, ELM_ACCESS_INFO, _access_info_cb, scroller);
+               evas_object_smart_callback_add(focus, "clicked", _focus_clicked_cb, scroller);
+       } while (0);
 
        return button;
 }
@@ -184,11 +201,16 @@ static void _remove_edit_button(Evas_Object *button)
 {
        ret_if(NULL == button);
 
+       do {
+               Evas_Object *focus = NULL;
+               focus = elm_object_part_content_unset(button, "focus");
+               if (NULL == focus) break;
+               evas_object_smart_callback_del(focus, "clicked", _focus_clicked_cb);
+               evas_object_del(focus);
+       } while (0);
+
        edje_object_signal_callback_del(_EDJ(button), "edit_button,down", "menu", _edit_button_down_cb);
        edje_object_signal_callback_del(_EDJ(button), "edit_button,up", "menu", _edit_button_up_cb);
-       evas_object_event_callback_del(button, EVAS_CALLBACK_MOUSE_OUT, _button_out_cb);
-       evas_object_event_callback_del(button, EVAS_CALLBACK_MOUSE_IN, _button_in_cb);
-       evas_object_data_del(button, "pressed");
 
        layout_unload_edj(button);
 }
@@ -205,7 +227,7 @@ static menu_screen_error_e _load_item(Evas_Object *scroller, app_list_item *item
                return MENU_SCREEN_ERROR_OK;
        }
 
-       retv_if(NULL == page_scroller_push_item(scroller, ai), MENU_SCREEN_ERROR_FAIL);
+       retv_if(NULL == page_scroller_push_item_by_order(scroller, ai), MENU_SCREEN_ERROR_FAIL);
 
        return MENU_SCREEN_ERROR_OK;
 
@@ -237,7 +259,9 @@ ERROR:
        all_apps_list_destroy(list);
        evas_object_data_del(all_apps, "list");
        page_scroller_bring_in(scroller, 0);
+       page_scroller_focus(scroller);
        menu_screen_set_done(true);
+       menu_screen_inc_booting_state();
 
        return ECORE_CALLBACK_CANCEL;
 }
@@ -280,6 +304,8 @@ HAPI Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate)
        Evas_Object *all_apps;
        Evas_Object *index;
        Evas_Object *scroller;
+       Evas_Object *bg;
+       Evas *evas;
 
        static const char item_edje[] = EDJEDIR"/item_4x4.edj";
        static const char *page_edje;
@@ -294,7 +320,7 @@ HAPI Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate)
        all_apps_edje = ALL_APPS_EDJE_PORTRAIT;
        page_edje = GROUP_4X4_EDJE_PORTRAIT;
        width = menu_screen_get_root_width();
-       height = menu_screen_get_root_height() - INDEX_HEIGHT;
+       height = menu_screen_get_root_height();
 
        item_width = ITEM_WIDTH_PROP * menu_screen_get_root_width();
        item_height = ITEM_HEIGHT_PROP * menu_screen_get_root_height();
@@ -305,6 +331,14 @@ HAPI Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate)
                return NULL;
        }
 
+       evas = menu_screen_get_evas();
+       bg = evas_object_rectangle_add(evas);
+       evas_object_size_hint_min_set(bg, width, height);
+       evas_object_size_hint_max_set(bg, width, height);
+       evas_object_resize(bg, width, height);
+       elm_object_part_content_set(all_apps, "bg", bg);
+       evas_object_show(bg);
+
        evas_object_data_set(all_apps, "win", evas_object_data_get(controlbar, "win"));
        evas_object_data_set(all_apps, "layout", evas_object_data_get(controlbar, "layout"));
        evas_object_data_set(all_apps, "controlbar", controlbar);
@@ -318,11 +352,12 @@ HAPI Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate)
        evas_object_data_set(all_apps, "is_under_pkgmgr", (void *) true);
        evas_object_data_set(all_apps, "rotate", (void *) rotate);
        evas_object_data_set(all_apps, "enable_bg_image", (void *) true);
+       evas_object_data_set(all_apps, "is_edited", (void *) true);
        evas_object_size_hint_min_set(all_apps, width, height);
        evas_object_size_hint_max_set(all_apps, width, height);
        evas_object_resize(all_apps, width, height);
 
-       index = index_create(all_apps, 0,0);
+       index = index_create(all_apps, 0, 0);
        if (NULL == index) {
                evas_object_del(all_apps);
                _E("cannot create index.");
@@ -368,10 +403,11 @@ HAPI void all_apps_layout_destroy(Evas_Object *all_apps)
                }
        } while (0);
 
-       index = evas_object_data_get(all_apps, "index");
        scroller = evas_object_data_get(all_apps, "scroller");
-
+       ret_if(NULL == scroller);
        if (scroller) page_scroller_destroy(scroller);
+
+       index = evas_object_data_get(scroller, "index");
        if (index) index_destroy(index);
 
        evas_object_data_del(all_apps, "win");
@@ -389,6 +425,7 @@ HAPI void all_apps_layout_destroy(Evas_Object *all_apps)
        evas_object_data_del(all_apps, "is_under_pkgmgr");
        evas_object_data_del(all_apps, "rotate");
        evas_object_data_del(all_apps, "enable_bg_image");
+       evas_object_data_del(all_apps, "is_edited");
 
        evas_object_del(all_apps);
 }
index 082a2ec..322b65e 100644 (file)
 /*
- * MENU-SCREEN
+ * menu-screen
  *
- * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ * copyright (c) 2009-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
+ * contact: jin yoon <jinny.yoon@samsung.com>
+ *          junkyu han <junkyu.han@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
+ * 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.
+ * 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 <pkgmgr-info.h>
 #include <ail.h>
 
 #include "menu_screen.h"
 #include "conf.h"
 #include "list.h"
+#include "all_apps/layout.h"
 
 
 
-static ail_cb_ret_e _all_apps_cb(ail_appinfo_h ai, void *data)
+HAPI int all_apps_list_find_installed_time(const char *id)
+{
+       pkgmgrinfo_pkginfo_h handle = NULL;
+       pkgmgrinfo_appinfo_h appinfo_h = NULL;
+
+       int ret = 0;
+       int installed_time = 0;
+
+       goto_if(0> pkgmgrinfo_appinfo_get_appinfo(id, &appinfo_h), ERROR);
+
+       char *pkgid = NULL;
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid), ERROR);
+       goto_if (NULL == pkgid, ERROR);
+
+       goto_if (0>pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle), ERROR);
+
+       ret = pkgmgrinfo_pkginfo_get_installed_time(handle, &installed_time);
+       goto_if (ret != PMINFO_R_OK, ERROR);
+
+       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+       return installed_time;
+
+ERROR:
+       if (appinfo_h) pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+       if (handle) pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+       return 0;
+}
+
+
+
+static int _all_apps_cb(pkgmgrinfo_appinfo_h handle, void *data)
 {
        app_list *list = data;
        app_list_item *item;
-       char *value;
+       app_info_t *item_info;
+       int installed_time = 0;
+       char *appid = NULL;
 
-       retv_if(ail_appinfo_get_str(ai, AIL_PROP_PACKAGE_STR, &value) == AIL_ERROR_FAIL, AIL_CB_RET_CANCEL);
-       retv_if(NULL == (item = calloc(1, sizeof(struct _app_list_item))), AIL_CB_RET_CANCEL);
+       pkgmgrinfo_appinfo_get_appid(handle, &appid);
+       retv_if(NULL == appid, 0);
+       retv_if(NULL == (item = calloc(1, sizeof(struct _app_list_item))), 0);
 
-       if (NULL == (item->package = strdup(value))) {
+       if (NULL == (item->package = strdup(appid))) {
                free(item);
-               return AIL_CB_RET_CANCEL;
+               return 0;
        }
 
        if (NULL == (item->data = calloc(1, sizeof(app_info_t)))) {
                free(item->package);
                free(item);
-               return AIL_CB_RET_CANCEL;
+               return 0;
        }
 
        if (MENU_SCREEN_ERROR_OK != list_get_values(item->package, item->data)) {
                free(item->data);
                free(item->package);
                free(item);
-               return AIL_CB_RET_CANCEL;
+               return 0;
+       }
+
+       item_info = item->data;
+       if (NULL == item_info) {
+               free(item->data);
+               free(item->package);
+               free(item);
+               return 0;
+       }
+
+       if (item_info->nodisplay || !item_info->enabled) {
+               free(item->data);
+               free(item->package);
+               free(item);
+               return 0;
+       }
+
+       installed_time = all_apps_list_find_installed_time(item->package);
+       item->installed_time = installed_time;
+
+       if (0 == item->installed_time) {
+               free(item->data);
+               free(item->package);
+               free(item);
+               return 0;
        }
 
        if (list_append_item(list, item) != MENU_SCREEN_ERROR_OK) {
                free(item->data);
                free(item->package);
                free(item);
-               return AIL_CB_RET_CANCEL;
+               return 0;
        }
 
        _D("[ALL Apps] package=%s", item->package);
 
-       return AIL_CB_RET_CONTINUE;
+       return 1;
+}
+
+
+
+static int _all_apps_installed_time_sort_cb(const void *d1, const void *d2)
+{
+       app_list_item *item[2];
+
+       retv_if(NULL == d1, 0);
+       retv_if(NULL == d2, 0);
+
+       item[0] = (app_list_item *) d1;
+       item[1] = (app_list_item *) d2;
+
+
+       if (item[0]->installed_time > item[1]->installed_time) return (1);
+       if (item[0]->installed_time < item[1]->installed_time) return (-1);
+       else return (0);
 }
 
 
@@ -86,63 +169,83 @@ static int _all_apps_sort_cb(const void *d1, const void *d2)
 
 
 
+HAPI void all_apps_list_destroy(app_list *list)
+{
+       app_list_item *item;
+
+       ret_if(NULL == list);
+       ret_if(NULL == list->list);
+
+       EINA_LIST_FREE(list->list, item) {
+               if (NULL == item) break;
+               if (item->package) free(item->package);
+               if (item->data) {
+                       list_free_values(item->data);
+                       free(item->data);
+               }
+               free(item);
+       }
+
+       eina_list_free(list->list);
+       free(list);
+}
+
+
+
 HAPI app_list *all_apps_list_create(void)
 {
        int count = 0;
        app_list *list;
-       ail_filter_h f;
+       pkgmgrinfo_appinfo_filter_h handle = NULL;
 
        list = calloc(1, sizeof(app_list));
        retv_if(NULL == list, NULL);
 
-       if (ail_filter_new(&f) != AIL_ERROR_OK) {
-               free(list);
-               return NULL;
-       }
-
-       if (ail_filter_add_bool(f, AIL_PROP_NODISPLAY_BOOL, false) != AIL_ERROR_OK){
-               _E("Failed to add filter");
-               ail_filter_destroy(f);
+       if (PMINFO_R_OK != pkgmgrinfo_appinfo_filter_create(&handle))
+       {
                free(list);
                return NULL;
        }
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, 0), ERROR);
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _all_apps_cb, list), ERROR);
 
-       ail_filter_list_appinfo_foreach(f, _all_apps_cb, list);
-       ail_filter_destroy(f);
-
-       if(MENU_SCREEN_ERROR_FAIL == list_sort(list, _all_apps_sort_cb)) {
-               _D("Cannot sort apps.");
-       }
+       pkgmgrinfo_appinfo_filter_destroy(handle);
 
-       if(MENU_SCREEN_ERROR_FAIL == list_count(list, &count)) {
+       if (MENU_SCREEN_ERROR_FAIL == list_count(list, &count)) {
                _D("Cannot count apps.");
        }
+
        _D("Total package count = %d", count);
 
-       return list;
-}
+       if (count > (MAX_PAGE_NO * PAGE_MAX_APP)) {
 
+               int i;
 
+               if (MENU_SCREEN_ERROR_FAIL == list_sort(list, _all_apps_installed_time_sort_cb)) {
+               _E("Cannot sort installed_time");
+               }
 
-HAPI void all_apps_list_destroy(app_list *list)
-{
-       app_list_item *item;
+               for(i = (MAX_PAGE_NO * PAGE_MAX_APP); i<count; i++) {
+                       app_list_item *item = list_nth(list, (MAX_PAGE_NO * PAGE_MAX_APP));
+                       if(!item)
+                       _E("Cannot remove an item(%s)", item->package);
 
-       ret_if(NULL == list);
-       ret_if(NULL == list->list);
+                       _D("%d: %s is removed", i, item->package);
 
-       EINA_LIST_FREE(list->list, item) {
-               if (NULL == item) break;
-               if (item->package) free(item->package);
-               if (item->data) {
-                       list_free_values(item->data);
-                       free(item->data);
+                       retv_if(MENU_SCREEN_ERROR_FAIL == list_remove_item(list, item), NULL);
                }
-               free(item);
        }
 
-       eina_list_free(list->list);
-       free(list);
+       if (MENU_SCREEN_ERROR_FAIL == list_sort(list, _all_apps_sort_cb)) {
+               _D("Cannot sort apps.");
+       }
+
+       return list;
+
+ERROR:
+       if (handle) pkgmgrinfo_appinfo_filter_destroy(handle);
+
+       return list;
 }
 
 
index d39c122..d92cd7a 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -47,13 +50,13 @@ HAPI Evas_Object *all_apps_shortcut_add(
        ai.icon = (char *) icon;
        ai.nodisplay = 0;
        ai.enabled = 1;
-       ai.x_slp_removable = 1;
+       ai.removable = 1;
        ai.x_slp_taskmanage = 0;
 
-       if (ADD_TO_HOME_IS_LIVEBOX(type)) {
-               _D("This is a livebox");
+       /*if (ADD_TO_HOME_IS_DYNAMICBOX(type)) {
+               _D("This is a dynamic box");
                return NULL;
-       }
+       }*/
 
        Evas_Object *item = NULL;
        retv_if(NULL == (item = page_scroller_push_item(scroller, &ai)), NULL);
@@ -65,13 +68,13 @@ HAPI Evas_Object *all_apps_shortcut_add(
                return NULL;
        }
 
-       if (LAUNCH_BY_PACKAGE == type) {
+       /*if (LAUNCH_BY_PACKAGE == type) {
                _D("This is a package");
                evas_object_data_set(item, "shortcut_launch_package", (void *) true);
        } else {
                _D("This is a shortcut");
                evas_object_data_set(item, "shortcut_launch_package", (void *) false);
-       }
+       }*/
 
        *tmp = rowid;
        evas_object_data_set(item, "is_shortcut", (void *) true);
index f905fc3..9efce2d 100644 (file)
--- a/src/db.c
+++ b/src/db.c
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -206,7 +209,9 @@ HAPI menu_screen_error_e db_finalize(stmt_h *handle)
        retv_if(NULL == handle->stmt, MENU_SCREEN_ERROR_INVALID_PARAMETER);
 
        ret = sqlite3_finalize(handle->stmt);
-       retv_with_dbmsg_if(ret != SQLITE_OK, MENU_SCREEN_ERROR_FAIL);
+       if(ret != SQLITE_OK) {
+               _E("Cannot finalize handle");
+       }
        free(handle);
 
        return MENU_SCREEN_ERROR_OK;
@@ -227,21 +232,20 @@ HAPI long long db_last_insert_rowid(void)
 
 HAPI menu_screen_error_e db_exec(const char *query)
 {
-       int ret;
-       char *errmsg;
-
        retv_if(NULL == query, MENU_SCREEN_ERROR_INVALID_PARAMETER);
        retv_if(NULL == db_info.db, MENU_SCREEN_ERROR_FAIL);
 
-       ret = sqlite3_exec(db_info.db, query, NULL, NULL, &errmsg);
-       if (ret != SQLITE_OK) {
-               _E("Cannot execute this query - %s. because %s",
-                               query, errmsg? errmsg:"uncatched error");
-               sqlite3_free(errmsg);
-               return MENU_SCREEN_ERROR_FAIL;
-       }
+       stmt_h *handle = db_prepare(query);
+       retv_if(NULL == handle, MENU_SCREEN_ERROR_FAIL);
+
+       goto_if(MENU_SCREEN_ERROR_FAIL == db_next(handle), ERROR);
+       if (MENU_SCREEN_ERROR_OK != db_finalize(handle)) return MENU_SCREEN_ERROR_FAIL;
 
        return MENU_SCREEN_ERROR_OK;
+
+ERROR:
+       if (handle) db_finalize(handle);
+       return MENU_SCREEN_ERROR_FAIL;
 }
 
 
@@ -306,7 +310,12 @@ HAPI menu_screen_error_e db_end_transaction(bool success)
                        }
                }
        } else {
-               sqlite3_exec(db_info.db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
+               ret = sqlite3_exec(db_info.db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
+               if (SQLITE_OK != ret) {
+                       _E("sqlite3_exec() Faild(%d)", ret);
+
+                       return MENU_SCREEN_ERROR_FAIL;
+               }
        }
 
        return MENU_SCREEN_ERROR_OK;
index 6158660..afac24b 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -42,6 +45,8 @@ HAPI inline void index_bring_in(Evas_Object *index, int idx)
 
 HAPI void index_destroy(Evas_Object *index)
 {
+       ret_if(NULL == index);
+
        evas_object_data_del(index, "win");
        evas_object_data_del(index, "layout");
        evas_object_data_del(index, "controlbar");
@@ -53,7 +58,7 @@ HAPI void index_destroy(Evas_Object *index)
 
 
 
-HAPI Evas_Object *index_create(Evas_Object *tab, unsigned int count,unsigned int current_idx)
+HAPI Evas_Object *index_create(Evas_Object *tab, unsigned int count, unsigned int current_idx)
 {
        Evas_Object *index;
        Evas_Object *scroller;
@@ -109,19 +114,17 @@ HAPI Evas_Object *index_create(Evas_Object *tab, unsigned int count,unsigned int
 
 HAPI Evas_Object *index_update(Evas_Object *layout, Evas_Object *index, unsigned int count)
 {
-       int idx;
-       Elm_Object_Item *idx_it;
-       idx_it = elm_index_selected_item_get(index, 0);
-       idx = (int) elm_object_item_data_get(idx_it);
+       int idx = 0;
 
-       if(count == idx)
-       {
-               idx--;
-       }
-       if(idx == -1)
-       {
-               idx = 0;
+       int cur_count = (int) evas_object_data_get(index, "count");
+       if (cur_count > 0) {
+               Elm_Object_Item *idx_it = elm_index_selected_item_get(index, 0);
+               if (idx_it) idx = (int) elm_object_item_data_get(idx_it);
        }
+
+       if(count == idx) idx--;
+       if(idx == -1) idx = 0;
+
        _D("Current index %d, Current count: %d", idx,count);
        index_destroy(index);
        return index_create(layout, count,idx);
index a3393cf..9313466 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
  */
 
 #include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
 #include <Elementary.h>
 #include <ail.h>
 #include <appsvc.h>
+#include <app_control.h>
 #include <aul.h>
 
 #include "menu_screen.h"
@@ -33,6 +39,7 @@
 #include "mapbuf.h"
 #include "page.h"
 #include "page_scroller.h"
+#include "pkgmgr.h"
 #include "popup.h"
 #include "util.h"
 
@@ -40,6 +47,8 @@
 #define LAYOUT_BLOCK_INTERVAL          1.0
 #define ITEM_GROUP_NAME "icon"
 
+#define DATA_KEY_ITEM_LAUNCH_MAIN_OPERATION "dk_it_launch"
+#define STR_ATTRIBUTE_PKGID "pkgid"
 #define STR_ATTRIBUTE_NAME "name"
 #define STR_ATTRIBUTE_ICON "icon"
 #define STR_ATTRIBUTE_PKG_NAME "package"
@@ -80,35 +89,36 @@ HAPI void item_set_icon(Evas_Object *edje, char *icon, int sync)
 
 
 
-HAPI inline char *item_get_icon(Evas_Object *edje)
+HAPI char *item_get_icon(Evas_Object *edje)
 {
        return evas_object_data_get(edje, STR_ATTRIBUTE_ICON);
 }
 
 
 
-
 HAPI void item_set_name(Evas_Object *edje, char *name, int sync)
 {
        char *tmp;
        int changed;
 
        tmp = evas_object_data_get(edje, STR_ATTRIBUTE_NAME);
+       if (!(tmp||name)) return;
        changed = (tmp && name) ? strcmp(name, tmp) : 1;
 
        if (!changed) {
                return;
        }
 
-       free(tmp);
+       if (tmp) free(tmp);
        evas_object_data_del(edje, STR_ATTRIBUTE_NAME);
-       if (name) {
+       if (name && (strcmp(name, "(NULL)"))) {
                tmp = strdup(name);
                ret_if(NULL == tmp);
                evas_object_data_set(edje, STR_ATTRIBUTE_NAME, tmp);
                if (edje_object_part_text_set(_EDJ(edje), "txt", tmp) == EINA_FALSE){
-                       //_E("Failed to set text on the part");
+                       _E("Failed to set text on the part");
                }
+               elm_object_signal_emit(edje, "text,on", "menu");
        }
 }
 
@@ -205,13 +215,47 @@ HAPI void item_set_package(Evas_Object *edje, char *package, int sync)
 
 
 
-HAPI inline char *item_get_package(Evas_Object *edje)
+HAPI char *item_get_package(Evas_Object *edje)
 {
        return evas_object_data_get(edje, STR_ATTRIBUTE_PKG_NAME);
 }
 
 
 
+HAPI void item_set_pkgid(Evas_Object *edje, char *package, int sync)
+{
+       char *tmp;
+       int changed;
+
+       tmp = evas_object_data_get(edje, STR_ATTRIBUTE_PKGID);
+       changed = (package && tmp) ? strcmp(tmp, package) : 1;
+
+       if (!changed) {
+               return;
+       }
+
+       free(tmp);
+       evas_object_data_del(edje, STR_ATTRIBUTE_PKGID);
+
+       if (package) {
+               tmp = strdup(package);
+               if (!tmp) {
+                       _E("No more space for string \"%s\"", package);
+               } else {
+                       evas_object_data_set(edje, STR_ATTRIBUTE_PKGID, tmp);
+               }
+       }
+}
+
+
+
+HAPI char *item_get_pkgid(Evas_Object *edje)
+{
+       return evas_object_data_get(edje, STR_ATTRIBUTE_PKGID);
+}
+
+
+
 HAPI void item_set_removable(Evas_Object *edje, int removable, int sync)
 {
        int value;
@@ -233,7 +277,7 @@ HAPI void item_set_removable(Evas_Object *edje, int removable, int sync)
 
 
 
-HAPI inline int item_get_removable(Evas_Object *edje)
+HAPI int item_get_removable(Evas_Object *edje)
 {
        return (int) evas_object_data_get(edje, STR_ATTRIBUTE_REMOVABLE);
 }
@@ -261,7 +305,7 @@ HAPI void item_set_page(Evas_Object *edje, Evas_Object *page, int sync)
 
 
 
-HAPI inline Evas_Object *item_get_page(Evas_Object *edje)
+HAPI Evas_Object *item_get_page(Evas_Object *edje)
 {
        return evas_object_data_get(edje, STR_ATTRIBUTE_PAGE);
 }
@@ -269,7 +313,7 @@ HAPI inline Evas_Object *item_get_page(Evas_Object *edje)
 
 
 
-HAPI inline void item_enable_delete(Evas_Object *item)
+HAPI void item_enable_delete(Evas_Object *item)
 {
        if (item_get_removable(item) > 0) {
                edje_object_signal_emit(_EDJ(item), "delete,on", "menu");
@@ -278,7 +322,7 @@ HAPI inline void item_enable_delete(Evas_Object *item)
 
 
 
-HAPI inline void item_disable_delete(Evas_Object *item)
+HAPI void item_disable_delete(Evas_Object *item)
 {
        if (item_get_removable(item) > 0) {
                edje_object_signal_emit(_EDJ(item), "delete,off", "menu");
@@ -498,6 +542,32 @@ HAPI menu_screen_error_e item_is_edje_icon(const char *icon)
 
 
 
+static int _is_main_operation_launch(Evas_Object *scroller, const char *package)
+{
+       Eina_List *main_operation_list;
+
+       retv_if(!package, 0);
+
+       main_operation_list = evas_object_data_get(scroller, DATA_KEY_MAIN_OPERATION_LIST);
+       if (!main_operation_list) {
+               _D("main operation list is NULL");
+               return 0;
+       }
+
+       const Eina_List *l, *l_next;
+       char *data;
+       EINA_LIST_FOREACH_SAFE(main_operation_list, l, l_next, data) {
+               continue_if(!data);
+               if (!strcmp(package, data)) {
+                       return 1;
+               }
+       }
+
+       return 0;
+}
+
+
+
 HAPI void item_update(Evas_Object *item, app_info_t *ai)
 {
        Evas_Object *icon = NULL;
@@ -506,11 +576,18 @@ HAPI void item_update(Evas_Object *item, app_info_t *ai)
        ret_if(NULL == ai);
 
        if (!ai->image) {
-               if (0 != access(ai->icon, R_OK)) {
-                       _E("Failed to access to [%s]", ai->icon);
+               if (ai->icon && 0 == access(ai->icon, R_OK)) {
+                       ;
                } else {
-                       FILE *fp;
+                       _E("Failed to access to [%s]", ai->icon);
+                       if (ai->icon) free(ai->icon);
+
+                       ai->icon = strdup(DEFAULT_ICON);
+                       if (!ai->icon) _E("Critical! strdup error");
+               }
 
+               if (ai->icon) {
+                       FILE *fp;
                        fp = fopen(ai->icon, "rb");
                        if (fp) {
                                fseek(fp, 0L, SEEK_END);
@@ -542,11 +619,12 @@ HAPI void item_update(Evas_Object *item, app_info_t *ai)
                evas_object_data_set(item, "icon_image", icon);
        }
 
+       item_set_pkgid(item, ai->pkgid, 0);
        item_set_package(item, ai->package, 0);
        item_set_desktop(item, ai->desktop, 0);
        item_set_name(item, ai->name, 0);
        item_set_icon(item, ai->icon, 0);
-       evas_object_data_set(item, STR_ATTRIBUTE_REMOVABLE, (void*) ai->x_slp_removable);
+       evas_object_data_set(item, STR_ATTRIBUTE_REMOVABLE, (void*)ai->removable);
        evas_object_data_set(item, "pid", (void *) ai->pid);
 
        item_badge_register(item);
@@ -564,6 +642,79 @@ HAPI void item_update(Evas_Object *item, app_info_t *ai)
 
 
 
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+       Evas_Object *item = data;
+       char *name = NULL;
+       name = item_get_name(item);
+       retv_if(NULL == name, NULL);
+
+       char *tmp = NULL;
+       tmp = strdup(name);
+       retv_if(NULL == tmp, NULL);
+       return tmp;
+}
+
+
+
+/* This function is similar to _item_up_cb. But it's apparently different */
+static void _focus_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *scroller;
+
+       Evas_Object *item = data;
+       ret_if(NULL == item);
+
+       _D("ITEM: mouse up event callback is invoked for %p", item);
+       PRINT_APPFWK();
+
+       scroller = evas_object_data_get(item, "scroller");
+       ret_if(NULL == scroller);
+
+       if (true == page_scroller_is_edited(scroller)) {
+               return;
+       }
+       item_launch(item);
+}
+
+
+
+#define IDS_AT_BODY_UNINSTALL "IDS_AT_BODY_UNINSTALL"
+static char *_access_uninstall_cb(void *data, Evas_Object *obj)
+{
+       char *info;
+       char *tmp;
+       info = _(IDS_AT_BODY_UNINSTALL);
+       if (!info) return NULL;
+       tmp = strdup(info);
+       if (!tmp) return NULL;
+       return tmp;
+}
+
+
+
+/* This function is similar to _uninstall_up_cb in item_event.c */
+static void _uninstall_focus_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *win;
+       char *package;
+
+       win = menu_screen_get_win();
+       ret_if(NULL == win);
+
+       _D("Uninstall button is up");
+
+       Evas_Object *item = data;
+       package = item_get_package(item);
+       ret_if(!package || strlen(package) == 0);
+
+       _D("Uninstalling... [%s]", package);
+
+       popup_create_uninstall(win, item);
+}
+
+
+
 HAPI Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai)
 {
        Evas_Object *item;
@@ -580,6 +731,32 @@ HAPI Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai)
                return NULL;
        }
 
+       Evas_Object *item_focus = NULL;
+       Evas_Object *focus = NULL;
+
+       do { // focus
+               item_focus = elm_button_add(item);
+               retv_if(NULL == item_focus, NULL);
+
+               elm_object_style_set(item_focus, "focus");
+               elm_object_part_content_set(item, "focus", item_focus);
+               elm_access_info_cb_set(item_focus, ELM_ACCESS_INFO, _access_info_cb, item);
+               evas_object_smart_callback_add(item_focus, "clicked", _focus_clicked_cb, item);
+       } while (0);
+
+       do { // make a button for a focus button of deleting.
+               focus = elm_button_add(item);
+               retv_if(NULL == focus, NULL);
+
+               elm_object_style_set(focus, "focus");
+               elm_object_part_content_set(item, "uninstall_focus", focus);
+               elm_access_info_cb_set(focus, ELM_ACCESS_INFO, _access_uninstall_cb, item);
+               evas_object_smart_callback_add(focus, "clicked", _uninstall_focus_clicked_cb, item);
+       } while (0);
+
+       elm_object_focus_next_object_set(item_focus, focus, ELM_FOCUS_UP);
+       elm_object_focus_next_object_set(focus, item_focus, ELM_FOCUS_DOWN);
+
        bg = evas_object_rectangle_add(menu_screen_get_evas());
        if (!bg) {
                _E("Cannot add an rectangle");
@@ -596,8 +773,6 @@ HAPI Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai)
        evas_object_size_hint_max_set(bg, item_width, item_height);
        elm_object_part_content_set(item, "bg", bg);
 
-       edje_object_text_class_set(_EDJ(item), "tizen", "TIZEN:style=medium", 24);
-
        evas_object_data_set(item, "win", evas_object_data_get(scroller, "win"));
        evas_object_data_set(item, "layout", evas_object_data_get(scroller, "layout"));
        evas_object_data_set(item, "controlbar", evas_object_data_get(scroller, "controlbar"));
@@ -609,9 +784,17 @@ HAPI Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai)
        evas_object_data_set(item, "x", (void *) 0);
        evas_object_data_set(item, "y", (void *) 0);
        evas_object_data_set(item, "dirty", (void *) 0);
+       if (_is_main_operation_launch(scroller, ai->package)) {
+               evas_object_data_set(item, DATA_KEY_ITEM_LAUNCH_MAIN_OPERATION, (void *) 1);
+       }
 
        item_update(item, ai);
        item_event_register(item);
+       if (MENU_SCREEN_ERROR_OK !=
+                                       pkgmgr_item_list_append_item(ai->pkgid, ai->package, item))
+       {
+               _E("Cannot append an item into the item list");
+       }
 
        return item;
 }
@@ -627,16 +810,27 @@ HAPI void item_destroy(Evas_Object *item)
        Eina_List *n;
        Eina_List *t;
        Evas_Object *pend_item;
-       int pending_idx;
        const char *icon_image_type;
+       char *pkgid = NULL;
+       char *package= NULL;
 
        ret_if(NULL == item);
 
+       pkgid = item_get_pkgid(item);
+       package = item_get_package(item);
+
+       if (pkgid
+               && package
+               && MENU_SCREEN_ERROR_OK !=
+                                       pkgmgr_item_list_remove_item(pkgid, package, item))
+       {
+               _E("Cannot remove an item in the item list");
+       }
+
        page = item_get_page(item);
        pending_list = evas_object_data_get(page, "pending,list");
        EINA_LIST_FOREACH_SAFE(pending_list, n, t, pend_item) {
                if (pend_item == item) {
-                       pending_idx = (int)evas_object_data_get(pend_item, "pending,idx");
                        pending_list = eina_list_remove(pending_list, pend_item);
                        evas_object_data_set(page, "pending,list", pending_list);
                        evas_object_data_del(pend_item, "pending,idx");
@@ -648,6 +842,7 @@ HAPI void item_destroy(Evas_Object *item)
        }
        item_event_unregister(item);
 
+       item_set_pkgid(item, NULL, 0);
        item_set_package(item, NULL, 1);
        item_set_desktop(item, NULL, 1);
        item_set_name(item, NULL, 1);
@@ -683,6 +878,24 @@ HAPI void item_destroy(Evas_Object *item)
        evas_object_data_del(item, "x");
        evas_object_data_del(item, "y");
        evas_object_data_del(item, "dirty");
+       evas_object_data_del(item, DATA_KEY_ITEM_LAUNCH_MAIN_OPERATION);
+
+       do {
+               Evas_Object *focus = NULL;
+               focus = elm_object_part_content_unset(item, "focus");
+               if (NULL == focus) break;
+               evas_object_smart_callback_del(focus, "clicked", _focus_clicked_cb);
+               evas_object_del(focus);
+       } while (0);
+
+       do {
+               Evas_Object *focus = NULL;
+               focus = elm_object_part_content_unset(item, "uninstall_focus");
+               if (NULL == focus) break;
+               evas_object_smart_callback_del(focus, "clicked", _uninstall_focus_clicked_cb);
+               evas_object_del(focus);
+       } while (0);
+
        layout_unload_edj(item);
 }
 
@@ -703,32 +916,32 @@ static void _run_cb(bundle *b, int request_code, appsvc_result_val result, void
 }
 
 
-
+#define BUNDLE_KEY_OPERATION    "__APP_SVC_OP_TYPE__"
 HAPI void item_launch(Evas_Object *obj)
 {
        char *package;
        char *name;
-       int ret_aul;
-       Evas_Object *layout;
+       bundle *b = NULL;
+       Evas_Object *layout = NULL;
 
-       ret_if(NULL == obj);
+       Evas_Object *item = obj;
+       ret_if(NULL == item);
 
-       name = item_get_name(obj);
-       package = item_get_package(obj);
+       name = item_get_name(item);
+       package = item_get_package(item);
        ret_if(NULL == package);
 
        layout = evas_object_data_get(menu_screen_get_win(), "layout");
        layout_enable_block(layout);
 
-       bool is_shortcut = (bool) evas_object_data_get(obj, "is_shortcut");
-       bool shortcut_launch_package = (bool) evas_object_data_get(obj, "shortcut_launch_package");
+       bool is_shortcut = (bool) evas_object_data_get(item, "is_shortcut");
+       bool shortcut_launch_package = (bool) evas_object_data_get(item, "shortcut_launch_package");
        if (is_shortcut && !shortcut_launch_package) {
-               bundle *b = NULL;
                b = bundle_create();
                ret_if(NULL == b);
 
                appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
-               appsvc_set_uri(b, evas_object_data_get(obj, "content_info"));
+               appsvc_set_uri(b, evas_object_data_get(item, "content_info"));
 
                int ret = -1;
                ret = appsvc_run_service(b, 0, _run_cb, NULL);
@@ -742,30 +955,55 @@ HAPI void item_launch(Evas_Object *obj)
 
                bundle_free(b);
        } else {
-               ret_aul = aul_open_app(package);
-               if (ret_aul == AUL_R_EINVAL) {
-                       char* sinform;
-                       int len;
-
-                       // IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS : "Unable to launch %s"
-                       len = strlen(D_("IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS")) + strlen(name) + 1;
-
-                       sinform = calloc(len, sizeof(char));
-                       if (!sinform) {
-                               _E("cannot calloc for popup.");
+               int ret_aul = AUL_R_OK;
+               if (evas_object_data_get(item, DATA_KEY_ITEM_LAUNCH_MAIN_OPERATION)) {
+                       b = bundle_create();
+                       ret_if(NULL == b);
+
+                       if (0 != bundle_add(b, BUNDLE_KEY_OPERATION, APP_CONTROL_OPERATION_MAIN)) {
+                               _E("Cannot add to a bundle");
+                               bundle_free(b);
                                return;
                        }
 
-                       snprintf(sinform, len, D_("IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"), name);
-                       popup_create(obj, sinform);
-
-                       free(sinform);
-                       layout_disable_block(layout);
+                       if (b) {
+                               ret_aul = aul_launch_app(package, b);
+                               if (AUL_R_EINVAL == ret_aul) {
+                                       _E("cannot launch app");
+                               }
+                               bundle_free(b);
+                       }
                } else {
-                       _D("Launch app's ret : [%d]", ret_aul);
-                       _T(package);
-                       ecore_timer_add(LAYOUT_BLOCK_INTERVAL, _unblock_cb, NULL);
+                       ret_aul = aul_open_app(package);
+                       if (AUL_R_EINVAL == ret_aul) {
+                               char* sinform;
+                               int len;
+
+                               if (!name) {
+                                       name = package;
+                               }
+
+                               // IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS : "Unable to launch %s"
+                               len = strlen(D_("IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS")) + strlen(name) + 1;
+
+                               sinform = calloc(len, sizeof(char));
+                               if (!sinform) {
+                                       _E("cannot calloc for popup.");
+                                       return;
+                               }
+
+                               snprintf(sinform, len, D_("IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"), name);
+                               popup_create_confirm(layout, sinform);
+
+                               free(sinform);
+                               layout_disable_block(layout);
+                       }
                }
+
+               _D("Launch app's ret : [%d]", ret_aul);
+
+               _T(package);
+               ecore_timer_add(LAYOUT_BLOCK_INTERVAL, _unblock_cb, NULL);
        }
 }
 
index 738fc4c..ce4c853 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index 759ba51..01aa4f1 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -73,7 +76,6 @@ static void _item_down_cb(void *data, Evas_Object *obj, const char* emission, co
 
 static void _item_up_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
 {
-       Evas_Object *scroller;
        Evas_Object *icon_image;
        Evas_Object *item;
 
@@ -92,16 +94,6 @@ static void _item_up_cb(void *data, Evas_Object *obj, const char* emission, cons
                return;
        }
        item_event_info.pressed_item = NULL;
-
-       if (mouse_is_scrolling()) return;
-
-       scroller = evas_object_data_get(item, "scroller");
-       ret_if(NULL == scroller);
-
-       if (true == page_scroller_is_edited(scroller)) {
-               return;
-       }
-       item_launch(item);
 }
 
 
@@ -118,8 +110,6 @@ static void _uninstall_down_cb(void *data, Evas_Object *obj, const char* emissio
 static void _uninstall_up_cb(void *item, Evas_Object *obj, const char* emission, const char* source)
 {
        Evas_Object *win;
-       Evas_Object *scroller;
-       char *package;
 
        ret_if(mouse_is_scrolling());
 
@@ -127,20 +117,11 @@ static void _uninstall_up_cb(void *item, Evas_Object *obj, const char* emission,
        ret_if(NULL == win);
 
        _D("Uninstall button is up");
-       scroller = evas_object_data_get(item, "scroller");
        obj = evas_object_data_get(obj, "evas_object");
        ret_if(NULL == obj);
        ret_if(NULL == evas_object_data_get(obj, "removing"));
 
        evas_object_data_del(obj, "removing");
-
-       package = item_get_package(obj);
-       ret_if(!package || strlen(package) == 0);
-       ret_if(pkgmgr_find_pended_object(package, 0, scroller, NULL));
-
-       _D("Uninstalling... [%s]", package);
-
-       popup_create_uninstall(win, item);
 }
 
 
diff --git a/src/key.c b/src/key.c
new file mode 100644 (file)
index 0000000..9c18633
--- /dev/null
+++ b/src/key.c
@@ -0,0 +1,234 @@
+/*
+ * MENU-SCREEN
+ *
+ * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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 <stdlib.h>
+#include <Elementary.h>
+//#include <utilX.h>
+//#include <Ecore_X.h>
+
+#include "conf.h"
+#include "key.h"
+#include "menu_screen.h"
+#include "page_scroller.h"
+#include "popup.h"
+#include "util.h"
+#include "all_apps/layout.h"
+#include "key.h"
+
+
+
+static struct {
+       Eina_Bool pressed;
+       Ecore_Event_Handler *press_handler;
+       Ecore_Event_Handler *release_handler;
+       Eina_Bool register_handler;
+       Ecore_Timer *long_press;
+       Eina_Bool home_grabbed;
+} key_info = {
+       .pressed = 0,
+       .press_handler = NULL,
+       .release_handler = NULL,
+       .register_handler = EINA_FALSE,
+       .long_press = NULL,
+       .home_grabbed = EINA_FALSE,
+};
+
+
+
+#define KEY_LEFT "Left"
+#define KEY_RIGHT "Right"
+#define KEY_UP "Up"
+#define KEY_DOWN "Down"
+static Eina_Bool _key_release_cb(void *data, int type, void *event)
+{
+       Evas_Event_Key_Up *ev = event;
+
+       retv_if(EINA_FALSE == key_info.register_handler, ECORE_CALLBACK_CANCEL);
+       retv_if(NULL == ev, ECORE_CALLBACK_CANCEL);
+
+       _D("Key(%s) released %d", ev->keyname, key_info.pressed);
+
+       if (key_info.pressed == EINA_FALSE) return ECORE_CALLBACK_CANCEL;
+
+       do {
+               Evas_Object *win;
+               win = menu_screen_get_win();
+               break_if(NULL == win);
+
+               Evas_Object *layout;
+               layout = evas_object_data_get(win, "layout");
+               break_if(NULL == layout);
+
+               Evas_Object *all_apps;
+               all_apps = evas_object_data_get(layout, "all_apps");
+               break_if(NULL == all_apps);
+
+               Evas_Object *scroller = evas_object_data_get(all_apps, "scroller");
+               break_if(NULL == scroller);
+
+               if (!strcmp(ev->keyname, KEY_SELECT) || !strcmp(ev->keyname, KEY_BACK)) {
+                       if (popup_exist()) {
+                               popup_destroy_all();
+                               break;
+                       }
+
+                       if (all_apps_layout_is_edited(all_apps)) {
+                               all_apps_layout_unedit(all_apps);
+                       }
+               } else if (!strcmp(ev->keyname, KEY_LEFT) ||
+                                       !strcmp(ev->keyname, KEY_RIGHT) ||
+                                       !strcmp(ev->keyname, KEY_UP) ||
+                                       !strcmp(ev->keyname, KEY_DOWN))
+               {
+                       int cur_idx = page_scroller_get_current_page_no(scroller);
+                       int idx = 0, x = 0, w = 0;
+                       elm_scroller_region_get(scroller, &x, NULL, &w, NULL);
+
+                       if (w) idx = x / w;
+                       if (cur_idx != idx) {
+                               page_scroller_bring_in(scroller, idx);
+                               break;
+                       }
+
+                       /* If there are no items to be focused after pressing keys,
+                          Menu-screen forces to focus the first item of the other page */
+                       int rest = x % w;
+                       if (rest) {
+                               page_scroller_focus_into_vector(scroller, rest > w / 2 ? -1 : 1);
+                       }
+               }
+               else if (!strcmp(ev->keyname, KEY_ESC))
+               {
+                       if (popup_exist())
+                       {
+                               popup_destroy_all();
+                               break;
+                       }
+                       if (all_apps_layout_is_edited(all_apps)) {
+                               all_apps_layout_unedit(all_apps);
+                       }
+               }
+       } while (0);
+
+       key_info.pressed = EINA_FALSE;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static Eina_Bool _key_press_cb(void *data, int type, void *event)
+{
+       Evas_Event_Key_Down *ev = event;
+
+       retv_if(EINA_FALSE == key_info.register_handler, ECORE_CALLBACK_CANCEL);
+       retv_if(NULL == ev, ECORE_CALLBACK_CANCEL);
+
+       key_info.pressed = EINA_TRUE;
+       _D("Key pressed %d", key_info.pressed);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+HAPI void key_register(void)
+{
+       if (!key_info.release_handler) {
+               key_info.release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL);
+               if (!key_info.release_handler) {
+                       _E("Failed to register a key up event handler");
+               }
+       }
+
+       if (!key_info.press_handler) {
+               key_info.press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL);
+               if (!key_info.press_handler) {
+                       _E("Failed to register a key down event handler");
+               }
+       }
+
+       key_info.pressed = EINA_FALSE;
+       key_info.register_handler = EINA_TRUE;
+}
+
+
+
+HAPI void key_unregister(void)
+{
+       if (key_info.long_press) {
+               ecore_timer_del(key_info.long_press);
+               key_info.long_press = NULL;
+       }
+
+       if (key_info.release_handler) {
+               ecore_event_handler_del(key_info.release_handler);
+               key_info.release_handler = NULL;
+       }
+
+       if (key_info.press_handler) {
+               ecore_event_handler_del(key_info.press_handler);
+               key_info.press_handler = NULL;
+       }
+
+       key_info.register_handler = EINA_FALSE;
+}
+
+
+
+HAPI void key_grab_home(void)
+{
+       if (EINA_TRUE == key_info.home_grabbed) return;
+
+       //Ecore_X_Window win = elm_win_xwindow_get(menu_screen_get_win());
+       //Display* dpy = ecore_x_display_get();
+
+       //int ret = utilx_grab_key(dpy, win, KEY_SELECT, TOP_POSITION_GRAB);
+       //ret_if(0 != ret);
+
+       //ret = utilx_grab_key(dpy, win, KEY_BACK, TOP_POSITION_GRAB);
+       //ret_if(0 != ret);
+
+       key_info.home_grabbed = EINA_TRUE;
+}
+
+
+
+HAPI void key_ungrab_home(void)
+{
+       if (key_info.home_grabbed == EINA_FALSE) return;
+
+       /*Ecore_X_Window win = elm_win_xwindow_get(menu_screen_get_win());
+       Display* dpy = ecore_x_display_get();
+
+       int ret = utilx_ungrab_key(dpy, win, KEY_SELECT);
+       ret_if(0 != ret);
+
+       ret = utilx_ungrab_key(dpy, win, KEY_BACK);
+       ret_if(0 != ret);*/
+
+       key_info.home_grabbed = EINA_FALSE;
+}
+
+
+
+// End of a file
index 47dba01..8fe34ad 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -18,6 +21,8 @@
  */
 
 #include <Elementary.h>
+//#include <Ecore_X.h>
+//#include <utilX.h>
 #include <vconf.h>
 
 #include "menu_screen.h"
@@ -26,6 +31,7 @@
 #include "layout.h"
 #include "mapbuf.h"
 #include "page.h"
+#include "page_scroller.h"
 #include "item.h"
 #include "util.h"
 #include "all_apps/layout.h"
@@ -35,6 +41,8 @@
 HAPI Evas_Object *layout_create(Evas_Object *conformant, const char *file, const char *group, int rotate)
 {
        Evas_Object *layout;
+       Evas_Object *bg;
+       Evas *evas;
 
        do {
                int width;
@@ -44,7 +52,7 @@ HAPI Evas_Object *layout_create(Evas_Object *conformant, const char *file, const
                retv_if(NULL == layout, NULL);
 
                width = menu_screen_get_root_width();
-               height = menu_screen_get_root_height() - INDEX_HEIGHT;
+               height = menu_screen_get_root_height();
 
                evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
                evas_object_size_hint_min_set(layout, width, height);
@@ -52,6 +60,14 @@ HAPI Evas_Object *layout_create(Evas_Object *conformant, const char *file, const
                evas_object_resize(layout, width, height);
                evas_object_show(layout);
 
+               evas = evas_object_evas_get(layout);
+               bg = evas_object_rectangle_add(evas);
+               evas_object_size_hint_min_set(bg, width, height);
+               evas_object_size_hint_max_set(bg, width, height);
+               evas_object_resize(bg, width, height);
+               elm_object_part_content_set(layout, "bg", bg);
+               evas_object_show(bg);
+
                evas_object_data_set(layout, "win", menu_screen_get_win());
                evas_object_data_set(layout, "rotate", (void *) rotate);
                evas_object_data_set(layout, "width", (void *) width);
@@ -147,4 +163,150 @@ HAPI void layout_unload_edj(Evas_Object *layout)
 
 
 
+HAPI void layout_create_package(Evas_Object *layout, const char *package)
+{
+       app_info_t ai = {0,};
+       Evas_Object *all_apps = NULL;
+       Evas_Object *scroller = NULL;
+       Evas_Object *item = NULL;
+
+       if (MENU_SCREEN_ERROR_FAIL == list_get_values(package, &ai)) {
+               list_free_values(&ai);
+               return;
+       }
+
+       if (ai.nodisplay) {
+               _D("This app(%s) is nodisplay", ai.package);
+               list_free_values(&ai);
+               return;
+       }
+
+
+       all_apps = evas_object_data_get(layout, "all_apps");
+       goto_if(!all_apps, EXIT);
+
+       scroller = evas_object_data_get(all_apps, "scroller");
+       goto_if(!scroller, EXIT);
+
+       /* Update the package */
+       item = page_scroller_find_item_by_package(scroller, ai.package, NULL);
+       if (item) {
+               _D("Package %s is found, update it!", package);
+               item_update(item, &ai);
+               goto EXIT;
+       }
+
+       /* Create the package */
+       _D("package %s is installed directly", package);
+       item = page_scroller_push_item_by_order(scroller, &ai);
+       if (!item) _E("item is NULL");
+
+EXIT:
+       list_free_values(&ai);
+       return;
+}
+
+
+
+HAPI void layout_update_package(Evas_Object *layout, const char *package)
+{
+    layout_create_package(layout, package);
+}
+
+
+
+static Evas_Object *_animated_unpack_item(Evas_Object *scroller, Evas_Object *page, unsigned int pos)
+{
+       Evas_Object *out = NULL;
+       Evas_Object *item;
+       Evas_Object *next_page;
+
+       char buf[32];
+       unsigned int page_max_app;
+       unsigned int page_no;
+       page_scroller_sort_type_e sort_type;
+
+       out = page_unpack_item_at(page, pos);
+       retv_if(NULL == out, NULL);
+
+       page_no = page_scroller_get_page_no(scroller, page);
+       page_max_app = (unsigned int) evas_object_data_get(scroller, "page_max_app");
+       sort_type = (page_scroller_sort_type_e) evas_object_data_get(scroller, "sort_type");
+
+       pos ++;
+       while (page && page_no < MAX_PAGE_NO) {
+               if (0 == page_count_item(page)) {
+                       page_destroy(scroller, page);
+                       break;
+               }
+
+               for (; pos < page_max_app; pos ++) {
+                       item = page_unpack_item_at(page, pos);
+                       if (NULL == item) continue;
+
+                       page_pack_item(page, pos - 1, item);
+                       snprintf(buf, 32, "menu%d", pos - 1);
+                       edje_object_signal_emit(_EDJ(page), STR_MOVE_NEXT, buf);
+                       edje_object_signal_emit(_EDJ(page), STR_ANI_RETURN, buf);
+               }
+
+               if (sort_type == PAGE_SCROLLER_SORT_MAX) {
+                       return NULL;
+               }
+
+               page_no ++;
+               next_page = page_scroller_get_page_at(scroller, page_no);
+               if (next_page) {
+                       item = page_unpack_item_at(next_page, 0);
+                       if (NULL == item) continue;
+
+                       page_pack_item(page, page_max_app - 1, item);
+               } else break;
+
+               pos = 1;
+               page = next_page;
+       }
+
+       return out;
+}
+
+
+
+HAPI void layout_delete_package(Evas_Object *layout, const char *package)
+{
+       Evas_Object *all_apps = NULL;
+       Evas_Object *scroller = NULL;
+       Evas_Object *page = NULL;
+       Evas_Object *item = NULL;
+       int page_no = 0;
+       register unsigned int i;
+       unsigned int page_max_app;
+
+       all_apps = evas_object_data_get(layout, "all_apps");
+       ret_if(!all_apps);
+
+       scroller = evas_object_data_get(all_apps, "scroller");
+       ret_if(!scroller);
+
+       item = page_scroller_find_item_by_package(scroller, package, &page_no);
+       if (!item) return;
+
+       page = page_scroller_get_page_at(scroller, page_no);
+       ret_if(!page);
+
+       page_max_app = (unsigned int) evas_object_data_get(scroller, "page_max_app");
+       for (i = 0; i < page_max_app; i++) {
+               if (item == page_get_item_at(page, i)) {
+                       break;
+               }
+       }
+       if (i == page_max_app) return;
+
+       item = _animated_unpack_item(scroller, page, i);
+       ret_if(!item);
+       item_destroy(item);
+}
+
+
+
 // End of file
index dae3f67..371c937 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -21,6 +24,7 @@
 #include <stdlib.h>
 #include <Elementary.h>
 #include <ail.h>
+#include <pkgmgr-info.h>
 
 #include "list.h"
 #include "util.h"
@@ -96,46 +100,45 @@ HAPI menu_screen_error_e list_get_item(app_list *list, app_list_item **item)
 
 
 
-
+/* FIXME : package -> appid */
 HAPI menu_screen_error_e list_get_values(const char *package, app_info_t *ai)
 {
-       ail_appinfo_h appinfo_h;
+       pkgmgrinfo_appinfo_h appinfo_h = NULL;
+       pkgmgrinfo_pkginfo_h pkghandle = NULL;
+       char *pkgid;
        char *exec;
        char *name;
        char *icon;
-       ail_error_e ret;
 
        retv_if(NULL == package, MENU_SCREEN_ERROR_FAIL);
        retv_if(NULL == ai, MENU_SCREEN_ERROR_FAIL);
        retv_if(NULL == (ai->package = strdup(package)), MENU_SCREEN_ERROR_FAIL);
 
-       ret = ail_get_appinfo(ai->package, &appinfo_h);
-       if (AIL_ERROR_OK == ret) {
-               do {
-                       break_if(ail_appinfo_get_str(appinfo_h, AIL_PROP_EXEC_STR, &exec) < 0);
-                       break_if(ail_appinfo_get_str(appinfo_h, AIL_PROP_NAME_STR, &name) < 0);
-                       break_if(ail_appinfo_get_str(appinfo_h, AIL_PROP_ICON_STR, &icon) < 0);
-                       break_if(ail_appinfo_get_bool(appinfo_h, AIL_PROP_NODISPLAY_BOOL, &ai->nodisplay) < 0);
-                       break_if(ail_appinfo_get_bool(appinfo_h, AIL_PROP_X_SLP_ENABLED_BOOL, &ai->enabled) < 0);
-                       break_if(ail_appinfo_get_bool(appinfo_h, AIL_PROP_X_SLP_REMOVABLE_BOOL, &ai->x_slp_removable) < 0);
-                       break_if(ail_appinfo_get_bool(appinfo_h, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &ai->x_slp_taskmanage) < 0);
-
-                       break_if(NULL == exec || NULL == (ai->exec = strdup(exec)));
-                       break_if(NULL == name || NULL == (ai->name = strdup(name)));
-                       break_if(NULL == icon || NULL == (ai->icon = strdup(icon)));
-
-                       ail_destroy_appinfo(appinfo_h);
-
-                       return MENU_SCREEN_ERROR_OK;
-               } while(0);
-
-               ail_destroy_appinfo(appinfo_h);
-               list_free_values(ai);
-               return MENU_SCREEN_ERROR_FAIL;
-       } else if (AIL_ERROR_NO_DATA == ret) {
-               return MENU_SCREEN_ERROR_OK;
-       }
+       goto_if(0 > pkgmgrinfo_appinfo_get_appinfo(ai->package, &appinfo_h), ERROR);
+
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid), ERROR);
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(appinfo_h, &name), ERROR);
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon), ERROR);
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_is_enabled(appinfo_h, &ai->enabled), ERROR);
+
+       do {
+               goto_if(NULL == pkgid || NULL == (ai->pkgid = strdup(pkgid)), ERROR);
+               goto_if(NULL == name || NULL == (ai->name = strdup(name)), ERROR);
+               goto_if(NULL == icon || NULL == (ai->icon = strdup(icon)), ERROR);
+               goto_if(0 > pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkghandle) || !pkghandle, ERROR);
+       } while (0);
 
+       goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_is_removable(pkghandle, &ai->removable), ERROR);
+       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_is_nodisplay(appinfo_h, &ai->nodisplay), ERROR);
+       if (ai->nodisplay) goto ERROR;
+
+       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+
+       return MENU_SCREEN_ERROR_OK;
+
+ERROR:
+       if (appinfo_h) pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+       list_free_values(ai);
        return MENU_SCREEN_ERROR_FAIL;
 }
 
@@ -146,6 +149,11 @@ HAPI void list_free_values(app_info_t *ai)
        ret_if(NULL == ai);
 
        /* Origin field */
+       if (ai->pkgid) {
+               free(ai->pkgid);
+               ai->pkgid = NULL;
+       }
+
        if (ai->package) {
                free(ai->package);
                ai->package = NULL;
@@ -207,4 +215,18 @@ HAPI menu_screen_error_e list_sort(app_list *list, int (*_sort_cb)(const void *d
 
 
 
+HAPI app_list_item *list_nth(app_list *parent, unsigned int nth)
+{
+       Eina_List *list;
+
+       retv_if(NULL == parent, NULL);
+
+       list = parent->list;
+       retv_if(NULL == list, NULL);
+
+       return eina_list_nth(list, nth);
+}
+
+
+
 // End of a file
index 36f31c9..a9fb5bb 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -59,6 +62,20 @@ HAPI Evas_Object *mapbuf_get_page(Evas_Object *obj)
 
 
 
+static void _move_pages(Evas_Object *page)
+{
+       if(NULL == page) return;
+
+       Evas_Object *scroller = evas_object_data_get(page, "scroller");
+       if(NULL == scroller) return;
+
+       Evas_Coord x, y;
+       evas_object_geometry_get(scroller, &x, &y, NULL, NULL);
+       evas_object_move(page, x, y);
+}
+
+
+
 HAPI menu_screen_error_e mapbuf_enable(Evas_Object *obj, int force)
 {
        Evas_Object *mapbuf;
@@ -70,13 +87,24 @@ HAPI menu_screen_error_e mapbuf_enable(Evas_Object *obj, int force)
                return MENU_SCREEN_ERROR_FAIL;
        }
 
-       if (force) {
+       Evas_Object *page = mapbuf_get_page(obj);
+       if(!page) {
+               return MENU_SCREEN_ERROR_FAIL;
+       }
+
+       if(menu_screen_is_tts()) {
                evas_object_data_set(mapbuf, "mapbuf_enabled", (void*)0);
-               //elm_mapbuf_enabled_set(mapbuf, 1); // Mapbuf has been disabled because of a mapbuf bug.
                elm_mapbuf_enabled_set(mapbuf, 0);
                return MENU_SCREEN_ERROR_OK;
        }
 
+       if (force) {
+               evas_object_data_set(mapbuf, "mapbuf_enabled", (void*)0);
+               _move_pages(page);
+               elm_mapbuf_enabled_set(mapbuf, 1); // Mapbuf has been disabled because of a mapbuf bug.
+               return MENU_SCREEN_ERROR_OK;
+       }
+
        cnt = (int)evas_object_data_get(mapbuf, "mapbuf_enabled");
        cnt ++;
        evas_object_data_set(mapbuf, "mapbuf_enabled", (void*)cnt);
@@ -84,8 +112,8 @@ HAPI menu_screen_error_e mapbuf_enable(Evas_Object *obj, int force)
 
        if (cnt == 0) {
                if (!elm_mapbuf_enabled_get(mapbuf)) {
-                       //elm_mapbuf_enabled_set(mapbuf, 1); // Mapbuf has been disabled because of a mapbuf bug.
-                       elm_mapbuf_enabled_set(mapbuf, 0);
+                       _move_pages(page);
+                       elm_mapbuf_enabled_set(mapbuf, 1); // Mapbuf has been disabled because of a mapbuf bug.
                        //_D("[%s] mapbuf enabled", __func__);
                }
        }
old mode 100644 (file)
new mode 100755 (executable)
index 3a1d9b5..33c9fc4
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 
 #include <ail.h>
 #include <app.h>
+#include <appcore-efl.h>
 #include <aul.h>
+//#include <Ecore_X.h>
 #include <Elementary.h>
 #include <stdbool.h>
 #include <system_info.h>
 #include <vconf.h>
+#include <app_preference.h>
+//#include <system_info_internal.h>
+#include <system_settings.h>
 
 #include "conf.h"
 #include "item.h"
+#include "key.h"
 #include "layout.h"
 #include "mapbuf.h"
 #include "menu_screen.h"
 #include "mouse.h"
 #include "page.h"
 #include "page_scroller.h"
+#include "pkgmgr.h"
 #include "util.h"
 
 #define MENU_SCREEN_ENGINE "file/private/org.tizen.menu-screen/engine"
 extern int aul_listen_app_dead_signal(int (*func)(int signal, void *data), void *data);
 static struct {
        int state;
+       int root_width;
+       int root_height;
+       int is_tts;
+       int booting_state;
+       Evas *evas;
+       Ecore_Evas *ee;
        Evas_Object *win;
        Elm_Theme *theme;
        bool is_done;
 } menu_screen_info = {
        .state = APP_STATE_PAUSE,
+       .is_tts = false,
+       .booting_state = 0,
+       .evas = NULL,
+       .ee = NULL,
        .win = NULL,
        .theme = NULL,
        .is_done = false,
@@ -60,24 +80,21 @@ static struct {
 
 HAPI Evas *menu_screen_get_evas(void)
 {
-       return evas_object_evas_get(menu_screen_info.win);
+       return menu_screen_info.evas;
 }
 
 
+
 HAPI int menu_screen_get_root_width(void)
 {
-       int width = 0;
-       elm_win_screen_size_get(menu_screen_get_win(), NULL, NULL, &width, NULL);
-       return width;
+       return menu_screen_info.root_width;
 }
 
 
 
 HAPI int menu_screen_get_root_height(void)
 {
-       int height = 0;
-       elm_win_screen_size_get(menu_screen_get_win(), NULL, NULL, NULL, &height);
-       return height;
+       return menu_screen_info.root_height;
 }
 
 
@@ -110,8 +127,110 @@ HAPI void menu_screen_set_done(bool is_done)
 
 
 
+HAPI int menu_screen_get_state(void)
+{
+       return menu_screen_info.state;
+}
+
+
+
+HAPI int menu_screen_is_tts(void)
+{
+       return menu_screen_info.is_tts;
+}
+
+
+static Eina_Bool _appcore_flush_cb(void *data)
+{
+       if (APP_STATE_PAUSE != menu_screen_info.state) return ECORE_CALLBACK_CANCEL;
+       if (0 != appcore_flush_memory()) _E("Cannot flush memory");
+       return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+HAPI void menu_screen_inc_booting_state(void)
+{
+       menu_screen_info.booting_state++;
+       if (BOOTING_STATE_DONE > menu_screen_info.booting_state) return;
+
+       menu_screen_error_e ret = MENU_SCREEN_ERROR_OK;
+       do {
+               ret = pkgmgr_reserve_list_pop_request();
+       } while (MENU_SCREEN_ERROR_OK == ret);
+
+       /*  Cache memory is cleared when the application paused (every time, after 5 seconds (in appcore)),
+       *  but after running in a minimized mode (HIDE_LAUNCH) application have status AS_RUNNING.
+       *  Application have status AS_PAUSED only after change of visibility to hidden condition by user (on hiding window)
+       *  Cleaning must be performed only once after application loading in hidden condition
+       *  (and stay in a hidden condition at time of cleaning).
+       */
+       if (APP_STATE_PAUSE == menu_screen_info.state)
+               ecore_timer_add(5, _appcore_flush_cb, NULL);
+}
+
+
+
+HAPI void menu_screen_dec_booting_state(void)
+{
+       menu_screen_info.booting_state --;
+}
+
+
+
+HAPI int menu_screen_get_booting_state(void)
+{
+       return menu_screen_info.booting_state;
+}
+
+
+
+static bool _is_emulator_on(void)
+{
+       int ret;
+       char *model;
+
+       ret = system_info_get_platform_string("tizen.org/system/model_name", &model);
+       if (SYSTEM_INFO_ERROR_NONE != ret) {
+               if (model) {
+                       free(model);
+               }
+               return false;
+       }
+
+       if (!strncmp(model, "Emulator", strlen(model))) {
+               _D("This model is on Emulator");
+               free(model);
+               return true;
+       }
+
+       _D("This model is NOT on Emulator");
+       free(model);
+       return false;
+}
+
+
+
 static menu_screen_error_e _create_canvas(char *name, char *title)
 {
+       //Ecore_X_Atom ATOM_WM_WINDOW_ROLE;
+       char *buf;
+
+       if (_is_emulator_on()) {
+               _D("ELM_ENGINE is set as [software_x11]");
+               elm_config_accel_preference_set("opengl");
+       } else {
+               buf = vconf_get_str(MENU_SCREEN_ENGINE);
+               if (buf) {
+                       _D("ELM_ENGINE is set as [%s]", buf);
+                       elm_config_accel_preference_set(buf);
+                       free(buf);
+               } else {
+                       _D("ELM_ENGINE is set as [gl]");
+                       elm_config_accel_preference_set("gl");
+               }
+       }
+
 
        menu_screen_info.win = elm_win_add(NULL, name, ELM_WIN_BASIC);
        retv_if(NULL == menu_screen_info.win, MENU_SCREEN_ERROR_FAIL);
@@ -120,10 +239,32 @@ static menu_screen_error_e _create_canvas(char *name, char *title)
                elm_win_title_set(menu_screen_info.win, title);
        }
        elm_win_borderless_set(menu_screen_info.win, EINA_TRUE);
+       elm_win_screen_size_get(menu_screen_info.win, NULL, NULL, &menu_screen_info.root_width, &menu_screen_info.root_height);
+
+       //ecore_x_icccm_name_class_set(elm_win_xwindow_get(menu_screen_info.win), "MENU_SCREEN", "MENU_SCREEN");
+       //ATOM_WM_WINDOW_ROLE = ecore_x_atom_get("WM_WINDOW_ROLE");
+       //if (ATOM_WM_WINDOW_ROLE) {
+//             ecore_x_window_prop_string_set(elm_win_xwindow_get(menu_screen_info.win), ATOM_WM_WINDOW_ROLE, "MENU_SCREEN");
+//     } else {
+//             _D("Failed to set the window role as MENU_SCREEN");
+//     }
+
+       //elm_win_role_set(menu_screen_info.win, "MENU_SCREEN");
+       //evas_object_resize(menu_screen_info.win, menu_screen_get_root_width(), menu_screen_get_root_height());
+
+       menu_screen_info.evas = evas_object_evas_get(menu_screen_info.win);
+       if (!menu_screen_info.evas) {
+               _E("[%s] Failed to get the evas object", __func__);
+       }
 
-       elm_win_role_set(menu_screen_info.win, "MENU_SCREEN");
-        evas_object_resize(menu_screen_info.win, menu_screen_get_root_width(), menu_screen_get_root_height());
+       menu_screen_info.ee = ecore_evas_ecore_evas_get(menu_screen_info.evas);
+       if (!menu_screen_info.ee) {
+               _E("[%s] Failed to get ecore_evas object", __func__);
+       }
 
+       evas_object_size_hint_min_set(menu_screen_info.win, menu_screen_info.root_width, menu_screen_info.root_height);
+       evas_object_size_hint_max_set(menu_screen_info.win, menu_screen_info.root_width, menu_screen_info.root_height);
+       evas_object_resize(menu_screen_info.win, menu_screen_info.root_width, menu_screen_info.root_height);
        evas_object_show(menu_screen_info.win);
 
        return MENU_SCREEN_ERROR_OK;
@@ -140,7 +281,6 @@ static void _destroy_canvas(void)
 
 static int _dead_cb(int pid, void *data)
 {
-       evas_object_show(menu_screen_get_win());
        return EXIT_SUCCESS;
 }
 
@@ -158,7 +298,7 @@ static void _create_bg(void)
        int width;
        int height;
 
-       buf = vconf_get_str(VCONFKEY_BGSET);
+       system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf);
        ret_if(NULL == buf);
 
        width = menu_screen_get_root_width();
@@ -174,7 +314,7 @@ static void _create_bg(void)
                evas_object_color_set(rect, 0, 0, 0, 255);
                evas_object_size_hint_min_set(rect, width, height);
                evas_object_size_hint_max_set(rect, width, height);
-               evas_object_resize(rect, width, height);
+               elm_win_resize_object_add(menu_screen_get_win(), rect);
                evas_object_show(rect);
 
                bg = evas_object_image_add(menu_screen_get_evas());
@@ -208,8 +348,7 @@ static void _create_bg(void)
 
        evas_object_image_load_size_set(bg, w, h);
        evas_object_image_fill_set(bg, 0, 0, w, h);
-       evas_object_move(bg, (width - w) / 2, (height - h) / 2);
-       evas_object_resize(bg, w, h);
+       elm_win_resize_object_add(menu_screen_get_win(), bg);
        evas_object_show(bg);
 
        free(buf);
@@ -266,8 +405,9 @@ static Evas_Object *_create_conformant(Evas_Object *win)
        conformant = elm_conformant_add(win);
        retv_if(NULL == conformant, NULL);
 
-       elm_object_style_set(conformant, "nokeypad");
+       elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_TRANSLUCENT);
        evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_indicator_mode_set(menu_screen_info.win, ELM_WIN_INDICATOR_SHOW);
        evas_object_data_set(conformant, "win", win);
        evas_object_show(conformant);
 
@@ -286,18 +426,62 @@ static void _destroy_conformant(Evas_Object *conformant)
 }
 
 
+static char *_replace_str(char *str, const char *before, const char *after)
+{
+       retv_if(NULL == str, NULL);
+       retv_if(NULL == before, NULL);
+       retv_if(NULL == after, NULL);
+
+       size_t before_len = strlen(before);
+       retv_if(before_len < 1, str);
+
+       size_t after_len = strlen(after);
+       size_t i, count = 0;
+       if (after_len != before_len) {
+               for (i = 0; str[i] != '\0';) {
+                       if (0 == memcmp(&str[i], before, before_len)) {
+                               count++;
+                               i += before_len;
+                       } else {
+                               i++;
+                       }
+               }
+       } else {
+               i = strlen(str);
+       }
+
+       char *result;
+       result = malloc(i + 1 + count * (after_len - before_len));
+       retv_if(result == NULL, NULL);
+
+       char *sr;
+       sr = result;
+       while (*str) {
+               if (0 == memcmp(str, before, before_len)) {
+                       memcpy(sr, after, after_len);
+                       sr += after_len;
+                       str += before_len;
+               } else {
+                       *sr++ = *str++;
+               }
+       }
+       *sr = '\0';
+
+       return result;
+}
+
+
 
 static bool _create_cb(void *data)
 {
        Evas_Object *conformant;
 
        _init_theme();
-       retv_if(MENU_SCREEN_ERROR_FAIL == _create_canvas("MENU_SCREEN", PACKAGE), false);
-       elm_win_indicator_mode_set(menu_screen_info.win, ELM_WIN_INDICATOR_SHOW);
+       retv_if(MENU_SCREEN_ERROR_FAIL == _create_canvas(PACKAGE, PACKAGE), false);
 
-       if (vconf_notify_key_changed(VCONFKEY_BGSET, _change_bg_cb, NULL) < 0) {
-               _E("Failed to register a vconf cb for %s\n", VCONFKEY_BGSET);
-       }
+       //if (system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, _change_bg_cb, NULL) < 0) {
+       //      _E("Failed to register a settings change cb for %s\n", SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN);
+       //}
        _create_bg();
 
        conformant = _create_conformant(menu_screen_info.win);
@@ -315,8 +499,13 @@ static bool _create_cb(void *data)
        evas_object_data_set(menu_screen_info.win, "layout", layout);
 
        elm_object_content_set(conformant, layout);
+
        mouse_register();
        aul_listen_app_dead_signal(_dead_cb, NULL);
+       key_register();
+
+       // FIXME : This will be enabled after rebuilding the routine for appid <-> pkgid.
+       pkgmgr_init();
 
        return true;
 }
@@ -328,12 +517,16 @@ static void _terminate_cb(void *data)
        Evas_Object *conformant;
        Evas_Object *layout;
 
-       if (vconf_ignore_key_changed(VCONFKEY_BGSET, _change_bg_cb) < 0) {
-               _E("Failed to remove bgset [%s]\n", VCONFKEY_BGSET);
+       // FIXME : This will be enabled after rebuilding the routine for appid <-> pkgid.
+       pkgmgr_fini();
+
+       if (system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN) < 0) {
+               _E("Failed to remove bgset [%s]\n", SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN);
        }
 
        evas_object_hide(menu_screen_info.win);
 
+       key_unregister();
        mouse_unregister();
 
        layout = evas_object_data_del(menu_screen_info.win, "layout");
@@ -354,10 +547,6 @@ static void _pause_cb(void *data)
 {
        _D("Pause start");
 
-       if (vconf_set_int(VCONFKEY_IDLE_SCREEN_TOP, VCONFKEY_IDLE_SCREEN_TOP_FALSE) < 0) {
-               _E("Failed to set %s to 0", VCONFKEY_IDLE_SCREEN_TOP);
-       }
-
        menu_screen_info.state = APP_STATE_PAUSE;
 }
 
@@ -367,31 +556,45 @@ static void _resume_cb(void *data)
 {
        _D("START RESUME");
 
-       if (vconf_set_int(VCONFKEY_IDLE_SCREEN_TOP, VCONFKEY_IDLE_SCREEN_TOP_TRUE) < 0) {
-               _E("Failed to set %s to 1", VCONFKEY_IDLE_SCREEN_TOP);
-       }
+       do { // Focus
+               Evas_Object *layout = evas_object_data_get(menu_screen_info.win, "layout");
+               break_if(NULL == layout);
+
+               Evas_Object *all_apps = evas_object_data_get(layout, "all_apps");
+               break_if(NULL == all_apps);
+
+               Evas_Object *scroller = elm_object_part_content_get(all_apps, "content");
+               break_if(NULL == scroller);
 
-       evas_object_show(menu_screen_get_win());
+               page_scroller_focus(scroller);
+       } while (0);
 
        menu_screen_info.state = APP_STATE_RESUME;
 }
 
 
 
-static void _service_cb(service_h service, void *data)
+static void _app_control_cb(app_control_h service, void *data)
 {
        _D("START RESET : %d", menu_screen_info.state);
 
-       if (vconf_set_int(VCONFKEY_IDLE_SCREEN_TOP, VCONFKEY_IDLE_SCREEN_TOP_TRUE) < 0) {
-               _E("Failed to set %s to 1", VCONFKEY_IDLE_SCREEN_TOP);
-       }
+       do { // Focus
+               Evas_Object *layout = evas_object_data_get(menu_screen_info.win, "layout");
+               break_if(NULL == layout);
+
+               Evas_Object *all_apps = evas_object_data_get(layout, "all_apps");
+               break_if(NULL == all_apps);
 
-       evas_object_show(menu_screen_get_win());
+               Evas_Object *scroller = elm_object_part_content_get(all_apps, "content");
+               break_if(NULL == scroller);
+
+               page_scroller_focus(scroller);
+       } while (0);
 }
 
 
 
-static void _language_changed_cb(void *data)
+static void _language_changed_cb(app_event_info_h event_info, void *data)
 {
        register unsigned int i;
        register unsigned int j;
@@ -432,7 +635,10 @@ static void _language_changed_cb(void *data)
                        item = page_get_item_at(page, j);
                        if (!item) continue;
 
-                       if (ail_get_appinfo(item_get_package(item), &ai) < 0) continue;
+                       if (ail_get_appinfo(item_get_package(item), &ai) < 0) {
+                               ail_destroy_appinfo(ai);
+                               continue;
+                       }
                        if (ail_appinfo_get_str(ai, AIL_PROP_NAME_STR, &name) < 0) {
                                ail_destroy_appinfo(ai);
                                continue;
@@ -454,84 +660,55 @@ static void _language_changed_cb(void *data)
 
 
 
-static void _init(app_event_callback_s *event_callback)
+static void _init(ui_app_lifecycle_callback_s *lifecycle_callback, app_event_handler_h *event_handlers)
 {
-       event_callback->create = _create_cb;
-       event_callback->terminate = _terminate_cb;
-       event_callback->pause = _pause_cb;
-       event_callback->resume = _resume_cb;
-       event_callback->service = _service_cb;
-       event_callback->low_memory = NULL;
-       event_callback->low_battery = NULL;
-       event_callback->device_orientation = NULL;
-       event_callback->language_changed = _language_changed_cb;
-       event_callback->region_format_changed = NULL;
+       lifecycle_callback->create = _create_cb;
+       lifecycle_callback->terminate = _terminate_cb;
+       lifecycle_callback->pause = _pause_cb;
+       lifecycle_callback->resume = _resume_cb;
+       lifecycle_callback->app_control = _app_control_cb;
+
+       ui_app_add_event_handler(&event_handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, NULL, NULL);
+       ui_app_add_event_handler(&event_handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, NULL, NULL);
+       ui_app_add_event_handler(&event_handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, NULL);
+       ui_app_add_event_handler(&event_handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _language_changed_cb, NULL);
+       ui_app_add_event_handler(&event_handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, NULL, NULL);
+
 }
 
 
 
-static void _fini(void)
+static void _fini(app_event_handler_h *event_handlers)
 {
+       ui_app_remove_event_handler(event_handlers[APP_EVENT_LOW_BATTERY]);
+       ui_app_remove_event_handler(event_handlers[APP_EVENT_LOW_MEMORY]);
+       ui_app_remove_event_handler(event_handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED]);
+       ui_app_remove_event_handler(event_handlers[APP_EVENT_LANGUAGE_CHANGED]);
+       ui_app_remove_event_handler(event_handlers[APP_EVENT_REGION_FORMAT_CHANGED]);
+
 }
 
 
 
-#define QP_EMUL_STR            "Emulator"
-static bool _is_emulator_on(void)
+static void _init_reference_value(void)
 {
-       int ret;
-       char *model = NULL;
-
-       ret = system_info_get_platform_string("tizen.org/system/model_name", &model);
-       if (SYSTEM_INFO_ERROR_NONE != ret) {
-               if (model) {
-                       free(model);
-               }
-               return false;
-       }
-
-       if (!strncmp(model, QP_EMUL_STR, strlen(model))) {
-               _D("This model is on Emulator");
-               free(model);
-               return true;
-       }
-
-       _D("This model is NOT on Emulator");
-       free(model);
-       return false;
+       preference_set_string(MENU_SCREEN_ENGINE, "gl");
 }
 
 
-
 int main(int argc, char *argv[])
 {
        char *buf;
-       app_event_callback_s event_callback;
+       ui_app_lifecycle_callback_s lifecycle_callback = {0, };
+       app_event_handler_h event_handlers[5] = {NULL, };
 
-       if (_is_emulator_on()) {
-               _D("ELM_ENGINE is set as [software_x11]");
-               setenv("ELM_ENGINE", "software_x11", 1);
-       } else {
-               buf = vconf_get_str(MENU_SCREEN_ENGINE);
-               if (buf) {
-                       _D("ELM_ENGINE is set as [%s]", buf);
-                       setenv("ELM_ENGINE", buf, 1);
-                       free(buf);
-               } else {
-                       _D("ELM_ENGINE is set as [gl]");
-                       setenv("ELM_ENGINE", "gl", 1);
-               }
-       }
-
-       _init(&event_callback);
-       app_efl_main(&argc, &argv, &event_callback, NULL);
-       _fini();
+       _init(&lifecycle_callback, event_handlers);
+       ui_app_main(argc, argv, &lifecycle_callback, NULL);
+       _fini(event_handlers);
 
        return EXIT_SUCCESS;
 }
 
 
 
-
-
 // End of a file
index 9827d95..1dec1db 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
index ea3d082..e51349b 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -148,8 +151,6 @@ HAPI Evas_Object *page_create(Evas_Object *scroller, int idx, int rotate)
        Evas_Object *box;
 
        char *page_edje;
-       bool enable_bg_image;
-
        unsigned int count;
        int page_height;
        int page_width;
@@ -157,7 +158,6 @@ HAPI Evas_Object *page_create(Evas_Object *scroller, int idx, int rotate)
        _D("Create a new page[%d]", idx);
 
        page_edje = evas_object_data_get(scroller, "page_edje");
-       enable_bg_image = (bool) evas_object_data_get(scroller, "enable_bg_image");
 
        page = layout_load_edj(scroller, page_edje, PAGE_GROUP_NAME);
        retv_if(!page, NULL);
@@ -211,7 +211,8 @@ HAPI Evas_Object *page_create(Evas_Object *scroller, int idx, int rotate)
        if (index) {
                tab = evas_object_data_get(scroller, "tab");
                count = page_scroller_count_page(scroller);
-               index_update(tab, index, count);
+               index = index_update(tab, index, count);
+               evas_object_data_set(scroller, "index", index);
        }
 
        return page;
@@ -259,10 +260,17 @@ HAPI void page_destroy(Evas_Object *scroller, Evas_Object *page)
        }
 
        index = evas_object_data_get(scroller, "index");
-       if (index) {
-               tab = evas_object_data_get(scroller, "tab");
+       tab = evas_object_data_get(scroller, "tab");
+       if (index && tab) {
                count = page_scroller_count_page(scroller);
-               index_update(tab, index, count);
+               if (count) {
+                       index = index_update(tab, index, count);
+                       evas_object_data_set(scroller, "index", index);
+               }
+               else {
+                       index_destroy(index);
+                       evas_object_data_set(scroller, "index", NULL);
+               }
        }
 
        evas_object_data_del(page, "win");
index 0beedd9..ba393e8 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
@@ -18,6 +21,7 @@
  */
 
 #include <Elementary.h>
+#include <stdio.h>
 #include <vconf.h>
 
 #include "item_badge.h"
 
 
 
-static int _count_pages(Evas_Object *scroller)
-{
-       const Eina_List *children;
-       Evas_Object *box;
-
-       box = evas_object_data_get(scroller, "box");
-       retv_if(NULL == box, 0);
-
-       children = elm_box_children_get(box);
-       return eina_list_count(children);
-}
-
-
-
 HAPI void page_scroller_bring_in(Evas_Object *scroller, int idx)
 {
        Evas_Object *index;
@@ -96,49 +86,44 @@ HAPI void page_scroller_show_region(Evas_Object *scroller, int idx)
 
 static void _anim_stop_cb(void *data, Evas_Object *scroller, void *event_info)
 {
-       _D("Invoked");
-}
+       _D("stop the scroller(%p) animation", scroller);
 
+       /* page_scroller_focus & index_bring_in in _drag_stop_cb & _anim_stop_cb */
+       Evas_Coord x, y, w, h;
+       elm_scroller_region_get(scroller, &x, &y, &w, &h);
 
+       if (x % w) return;
 
-static void _anim_start_cb(void *data, Evas_Object *scroller, void *event_info)
-{
-       Evas_Coord x;
-       Evas_Coord y;
-       Evas_Coord w;
-       Evas_Coord h;
-       Evas_Object *index;
-       Elm_Object_Item *idx_it;
+       if(evas_object_data_get(scroller, "mouse_wheel_scroller_start")) {
+               // "page_scroller_bring_in" was invoked in "_mouse_wheel_cb",
+               // so condition cur_idx == idx will be true and "page_scroller_focus" won't be executed
+               // so "page_scroller_focus" is executed here.
+               evas_object_data_set(scroller, "mouse_wheel_scroller_start", (void *) 0);
+               page_scroller_focus(scroller);
+       }
 
-       int idx;
-       int drag_start;
-       int previous_x;
-       int threshold;
+       int cur_idx = page_scroller_get_current_page_no(scroller);
+       int idx = 0;
+       if (w) idx = x / w;
+       if (cur_idx == idx) return;
 
-       _D("Invoked");
+       page_scroller_bring_in(scroller, idx);
+       page_scroller_focus(scroller);
+}
 
-       drag_start = (int) evas_object_data_get(scroller, "drag_start");
-       previous_x = (int) evas_object_data_get(scroller, "previous_x");
-       index = evas_object_data_get(scroller, "index");
 
-       ret_if(drag_start == 0);
-       evas_object_data_set(scroller, "drag_start", (void *) 0);
 
-       elm_scroller_region_get(scroller, &x, &y, &w, &h);
-       threshold = w * PAGE_SCROLL_SENSITIVE;
+static void _anim_start_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       _D("start the scroller(%p) animation", scroller);
 
-       idx_it = elm_index_selected_item_get(index, 0);
-       idx = (int) elm_object_item_data_get(idx_it);
+       int drag_start = (int) evas_object_data_get(scroller, "drag_start");
+       if (drag_start == 0) return;
+       evas_object_data_set(scroller, "drag_start", (void *) 0);
+}
 
-       if (abs(previous_x - x) > threshold) {
-               if (x > previous_x) idx ++;
-               else if ((x < previous_x) && (idx != 0)) idx --;
-       }
 
-       ret_if(idx >= _count_pages(scroller) || idx < 0);
 
-       page_scroller_bring_in(scroller, idx);
-}
 
 
 
@@ -157,10 +142,7 @@ static void _drag_start_cb(void *data, Evas_Object *scroller, void *event_info)
 
 static void _drag_stop_cb(void *data, Evas_Object *scroller, void *event_info)
 {
-       Evas_Coord x;
-       Evas_Coord w;
-       Evas_Coord y;
-       Evas_Coord h;
+       Evas_Coord x, y, w, h;
        int previous_x;
 
        _D("Invoked");
@@ -170,26 +152,74 @@ static void _drag_stop_cb(void *data, Evas_Object *scroller, void *event_info)
        if (x == previous_x) {
                _D("\e[33mHold scroller (previous) %d (current) %d\e[0m", previous_x, x);
        }
-}
 
+       /* page_scroller_focus & index_bring_in in _drag_stop_cb & _anim_stop_cb */
+       if (x % w) return;
+
+       int cur_idx = page_scroller_get_current_page_no(scroller);
+       int idx = 0;
+       if (w) idx = x / w;
 
+       if (cur_idx == idx) return;
 
-static void _scroller_register(Evas_Object *scroller)
+       page_scroller_bring_in(scroller, idx);
+       page_scroller_focus(scroller);
+}
+
+
+static void _scroll_cb(void *data, Evas_Object *scroller, void *event_info)
 {
-       evas_object_smart_callback_add(scroller, "scroll,anim,start", _anim_start_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll,anim,stop", _anim_stop_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll,drag,start", _drag_start_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll,drag,stop", _drag_stop_cb, NULL);
+       _drag_stop_cb(data, scroller, event_info);
 }
 
 
 
-static void _scroller_unregister(Evas_Object *scroller)
+static menu_screen_error_e _find_position_all_page(Evas_Object *scroller, int *candidate_page, int *candidate_pos, void *data)
 {
-       evas_object_smart_callback_del(scroller, "scroll,anim,start", _anim_start_cb);
-       evas_object_smart_callback_del(scroller, "scroll,anim,stop", _anim_stop_cb);
-       evas_object_smart_callback_del(scroller, "scroll,drag,start", _drag_start_cb);
-       evas_object_smart_callback_del(scroller, "scroll,drag,stop", _drag_stop_cb);
+       Evas_Object *page;
+       Evas_Object *item;
+       register unsigned int page_no;
+       register unsigned int position_no;
+       int nr_of_pages;
+       int page_max_app;
+
+       retv_if(NULL == scroller, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == candidate_page, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == candidate_pos, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+
+       *candidate_page = -1;
+       *candidate_pos = -1;
+       nr_of_pages = page_scroller_count_page(scroller);
+       page_max_app = (int) evas_object_data_get(scroller, "page_max_app");
+
+       page = page_scroller_get_page_at(scroller, nr_of_pages-1);
+       page_no = nr_of_pages-1;
+       for (position_no = 0; position_no < page_max_app; position_no ++) {
+               item = page_get_item_at(page, position_no);
+               if (!item) {
+                       *candidate_page = page_no;
+                       *candidate_pos = position_no;
+                       return MENU_SCREEN_ERROR_OK;
+               }
+       }
+
+       for (page_no = 0; page_no < nr_of_pages -1; page_no ++) {
+               page = page_scroller_get_page_at(scroller, page_no);
+               if(!page) {
+                       return MENU_SCREEN_ERROR_FAIL;
+               }
+
+               for (position_no = 0; position_no < page_max_app; position_no ++) {
+                       item = page_get_item_at(page, position_no);
+                       if (!item) {
+                               *candidate_page = page_no;
+                               *candidate_pos = position_no;
+                               return MENU_SCREEN_ERROR_OK;
+                       }
+               }
+       }
+
+       return MENU_SCREEN_ERROR_OK;
 }
 
 
@@ -386,63 +416,6 @@ static menu_screen_error_e _animated_pack_item(Evas_Object *item, Evas_Object *s
 
 
 
-static Evas_Object *_animated_unpack_item(Evas_Object *scroller, Evas_Object *page, unsigned int pos)
-{
-       Evas_Object *out = NULL;
-       Evas_Object *item;
-       Evas_Object *next_page;
-
-       char buf[32];
-       unsigned int page_max_app;
-       unsigned int page_no;
-       page_scroller_sort_type_e sort_type;
-
-       out = page_unpack_item_at(page, pos);
-       retv_if(NULL == out, NULL);
-
-       page_no = page_scroller_get_page_no(scroller, page);
-       page_max_app = (unsigned int) evas_object_data_get(scroller, "page_max_app");
-       sort_type = (page_scroller_sort_type_e) evas_object_data_get(scroller, "sort_type");
-
-       pos ++;
-       while (page && page_no < MAX_PAGE_NO) {
-               if (0 == page_count_item(page)) {
-                       page_destroy(scroller, page);
-                       break;
-               }
-
-               for (; pos < page_max_app; pos ++) {
-                       item = page_unpack_item_at(page, pos);
-                       if (NULL == item) continue;
-
-                       page_pack_item(page, pos - 1, item);
-                       snprintf(buf, 32, "menu%d", pos - 1);
-                       edje_object_signal_emit(_EDJ(page), STR_MOVE_NEXT, buf);
-                       edje_object_signal_emit(_EDJ(page), STR_ANI_RETURN, buf);
-               }
-
-               if (sort_type == PAGE_SCROLLER_SORT_MAX) {
-                       return NULL;
-               }
-
-               page_no ++;
-               next_page = page_scroller_get_page_at(scroller, page_no);
-               if (next_page) {
-                       item = page_unpack_item_at(next_page, 0);
-                       if (NULL == item) continue;
-
-                       page_pack_item(page, page_max_app - 1, item);
-               } else break;
-
-               pos = 1;
-               page = next_page;
-       }
-
-       return out;
-}
-
-
-
 HAPI Evas_Object *page_scroller_push_item(Evas_Object *scroller, app_info_t *ai)
 {
        Evas_Object *page;
@@ -509,303 +482,138 @@ HAPI Evas_Object *page_scroller_push_item(Evas_Object *scroller, app_info_t *ai)
 
 
 
-static inline menu_screen_error_e _create_cb(const char *package, void *data)
+HAPI Evas_Object *page_scroller_push_item_by_order(Evas_Object *scroller, app_info_t *ai)
 {
-       app_info_t ai = {0,};
-       Evas_Object *item;
-       Evas_Object *scroller = data;
-
-       if (MENU_SCREEN_ERROR_FAIL == list_get_values(package, &ai)) {
-               list_free_values(&ai);
-               return MENU_SCREEN_ERROR_FAIL;
-       }
-
-       do {
-               if (!scroller) {
-                       _D("Scroller is NULL.");
-                       break;
-               }
-
-               if (ai.nodisplay || !ai.enabled)
-               {
-                       Evas_Object *page;
-
-                       _D("package %s is not visible", package);
-                       item = pkgmgr_find_pended_object(ai.package, 1, scroller, &page);
-                       if (item) {
-                               if (page) {
-                                       page_unpack_item(page, item);
-                                       page_scroller_trim_items(scroller);
-                               }
-
-                               item_destroy(item);
-                       }
+       int candidate_page = -1;
+       int candidate_pos = -1;
+       Evas_Object *item = NULL;
 
-                       break;
+       if (MAX_PAGE_NO == page_scroller_count_page(scroller)) {
+               _find_position_all_page(scroller, &candidate_page, &candidate_pos, &ai);
+               if (-1 != candidate_page || -1 != candidate_pos) {
+                       item = page_scroller_push_item(scroller, ai);
                }
+       }
+       else item = page_scroller_push_item(scroller, ai);
 
-               item = pkgmgr_find_pended_object(ai.package, 1, scroller, NULL);
-               if (!item) {
-                       item = page_scroller_find_item_by_package(scroller, ai.package, NULL);
-                       if (!item) {
-                               Evas_Object *item;
-                               _D("package %s is installed directly", package);
-                               item = page_scroller_push_item(scroller, &ai);
-                               if (item) {
-                                       break;
-                               } else {
-                                       list_free_values(&ai);
-                                       retv_if(1, MENU_SCREEN_ERROR_FAIL);
-                               }
-                       }
-               }
-
-               _D("Package %s is found, update it!", package);
-               item_update(item, &ai);
-       } while(0);
-
-       list_free_values(&ai);
-       return MENU_SCREEN_ERROR_OK;
+       return item;
 }
 
 
 
-static inline menu_screen_error_e _update_cb(const char *package, void *data)
+static void _mouse_wheel_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
+       Evas_Event_Mouse_Wheel *ei = event_info;
        Evas_Object *scroller = data;
-       Evas_Object *item;
-       int page_no = 0;
-       app_info_t ai = {0,};
-
-       if (MENU_SCREEN_ERROR_FAIL == list_get_values(package, &ai)) {
-               list_free_values(&ai);
-               return MENU_SCREEN_ERROR_FAIL;
-       }
-
-       do {
-               if (!scroller) {
-                       _D("Scroller is NULL.");
-                       break;
-               }
-
-               item = page_scroller_find_item_by_package(scroller, package, &page_no);
-               if (!item) {
-                       Evas_Object *page;
-                       _D("There is no loaded item is found");
-                       item = pkgmgr_find_pended_object(package, 1, scroller, &page);
-                       if (item) {
-                               if (!ai.nodisplay && ai.enabled) {
-                                       _D("Item is found for updating from the install list, Ignore this.");
-                                       item_update(item, &ai);
-                               } else {
-                                       _D("Item is found for updating from the install list, But nodisplay");
-                                       if (page) {
-                                               page_unpack_item(page, item);
-                                               page_scroller_trim_items(scroller);
-                                       }
-                                       item_destroy(item);
-                               }
-                       } else {
-                               Evas_Object *item;
-                               _D("Item is not found. Create a new one");
-                               item = ((!ai.nodisplay && ai.enabled) ? page_scroller_push_item(scroller, &ai) : NULL);
-                               if (item) {
-                                       break;
-                               } else {
-                                       list_free_values(&ai);
-                                       retv_if(1, MENU_SCREEN_ERROR_FAIL);
-                               }
-                       }
-               } else {
-                       Evas_Object *page;
-                       Evas_Object *pended_item;
-
-                       pended_item = pkgmgr_find_pended_object(package, 1, scroller, &page);
-                       if (!pended_item ) {
-                               _D("Cannot find package in the install list");
-                       }
+       int x, y, w, h;
+       int idx = -1;
 
-                       if (!ai.nodisplay && ai.enabled) {
-                               item_update(item, &ai);
-                               break;
-                       }
+       _D("Wheel's up or down(%d)", ei->z);
 
-                       page = page_scroller_get_page_at(scroller, page_no);
-                       if (page) {
-                               page_unpack_item(page, item);
-                               page_scroller_trim_items(scroller);
-                       }
-                       item_destroy(item);
-               }
-       } while (0);
+       elm_scroller_region_get(scroller, &x, &y, &w, &h);
+       if (ei->z > 0) { // Wheel's up
+               idx = x / w;
+               idx ++;
+       } else if (ei->z < 0) { // Wheel's down
+               idx = x / w; // Scroller got ECORE events at first, then Menu-screen gets EVAS events.
+       } else { // Wheel's not moving.
+               _D("Wheel's not moving");
+       }
 
-       list_free_values(&ai);
-       return MENU_SCREEN_ERROR_OK;
+       if (idx >= page_scroller_count_page(scroller) || idx < 0) return;
+       evas_object_data_set(scroller, "mouse_wheel_scroller_start", (void *) 1);
+       page_scroller_bring_in(scroller, idx);
 }
 
 
 
-static inline menu_screen_error_e _delete_cb(const char *package, void *data)
+static inline char *_ltrim(char *str)
 {
-       Evas_Object *item;
-       Evas_Object *page;
-       Evas_Object *scroller = data;
-       Evas_Object *tmp;
-       int page_no = 0;
-       register unsigned int i;
-       unsigned int page_max_app;
-
-       do {
-               if (!scroller) {
-                       _D("Scroller is NULL.");
-                       break;
-               }
-
-               tmp = pkgmgr_find_pended_object(package, 1, scroller, NULL);
+       retv_if(NULL == str, NULL);
+       while (*str && (*str == ' ' || *str == '\t' || *str == '\n')) str ++;
+       return str;
+}
 
-               item = page_scroller_find_item_by_package(scroller, package, &page_no);
-               retv_if(NULL == item, MENU_SCREEN_ERROR_FAIL);
 
-               if (tmp != item) {
-                       _D("Pended item is %p, Found item is %p", tmp, item);
-               }
 
-               page = page_scroller_get_page_at(scroller, page_no);
-               retv_if(NULL == page, MENU_SCREEN_ERROR_FAIL);
+static inline int _rtrim(char *str)
+{
+       int len;
 
-               page_max_app = (unsigned int) evas_object_data_get(scroller, "page_max_app");
-               for (i = 0; i < page_max_app; i++) {
-                       if (item == page_get_item_at(page, i)) {
-                               break;
-                       }
-               }
+       retv_if(NULL == str, 0);
 
-               item = _animated_unpack_item(scroller, page, i);
-               retv_if(NULL == item, MENU_SCREEN_ERROR_FAIL);
-               item_destroy(item);
-       } while (0);
+       len = strlen(str);
+       while (--len >= 0 && (str[len] == ' ' || str[len] == '\n' || str[len] == '\t')) {
+               str[len] = '\0';
+       }
 
-       return MENU_SCREEN_ERROR_OK;
+       return len;
 }
 
 
 
-static struct pkg_event_handler {
-       const char *event_name;
-       int (*event_handler)(const char *package, void *data);
-} event_table[] = {
-       {
-               .event_name = "create",
-               .event_handler = _create_cb,
-       },
-       {
-               .event_name = "update",
-               .event_handler = _update_cb,
-       },
-       {
-               .event_name = "delete",
-               .event_handler = _delete_cb,
-       },
-       {
-               .event_name = NULL,
-               .event_handler = NULL,
-       },
-};
-
-
-
-static void _desktop_cb(keynode_t *node, void *data)
+static int _create_main_operation_list(Evas_Object *scroller)
 {
-       char *event;
-       char type[10];
-       char package[BUFSZE];
-       register int i;
-
-       event = vconf_get_str(vconf_keynode_get_name(node));
-       ret_if(NULL == event);
-
-       if (sscanf(event, "%10[^:]:%1023s", type, package) != 2) {
-               _D("Failed to parse the event format : [%s], [%s]", type, package);
+       FILE *fp;
+       const char *filename = RESDIR"/data/main_operation.launch";
+       char *line = NULL;
+       size_t size = 0;
+       ssize_t read;
+       char *data = NULL;
+       Eina_List *main_operation_list = NULL;
+
+       fp = fopen(filename, "r");
+       if (!fp) {
+               _D("cannot open fp");
+               return 0;
        }
 
-       _D("command[%s], package[%s]", type, package);
-
-       for (i = 0; event_table[i].event_name; i ++) {
-               if (!strcasecmp(type, event_table[i].event_name)) {
-                       if (event_table[i].event_handler(package, data) == MENU_SCREEN_ERROR_FAIL) {
-                               _E("Failed to handles the desktop notification event");
-                       }
+       while ((read = getline(&line, &size, fp)) != -1) {
+               char *begin;
 
-                       free(event);
-                       return;
+               if (size <= 0) {
+                       free(line);
+                       line = NULL;
+                       break;
                }
-       }
 
-       _E("Failed to find a proper event handler");
-       free(event);
-}
+               begin = _ltrim(line);
+               _rtrim(line);
 
+               if (*begin == '#' || *begin == '\0') {
+                       free(line);
+                       line = NULL;
+                       continue;
+               }
 
+               data = strdup(begin);
+               main_operation_list = eina_list_append(main_operation_list, data);
 
-static void _mapbuf_cb(keynode_t *node, void *data)
-{
-       int value;
-       int nr_of_pages;
-       register int i;
-       Evas_Object *page;
-
-       if (vconf_get_int("memory/menuscreen/mapbuf", &value) < 0) {
-               _D("Failed to get mapbuf status");
-               return;
+               if (line) {
+                       free(line);
+                       line = NULL;
+               }
        }
 
-       nr_of_pages = page_scroller_count_page(data);
-       if (value) {
-               for (i = 0; i < nr_of_pages; i ++) {
-                       page = page_scroller_get_page_at(data, i);
-                       if (!page) continue;
+       fclose(fp);
+       evas_object_data_set(scroller, DATA_KEY_MAIN_OPERATION_LIST, main_operation_list);
 
-                       if (!mapbuf_is_enabled(page)) {
-                               _D("Enable mapbuf %d", i);
-                               mapbuf_enable(page, 1);
-                       }
-               }
-       } else {
-               for (i = 0; i < nr_of_pages; i ++) {
-                       page = page_scroller_get_page_at(data, i);
-                       if (!page) continue;
-
-                       if (mapbuf_is_enabled(page)) {
-                               _D("Disable mapbuf %d", i);
-                               mapbuf_disable(page, 1);
-                       }
-               }
-       }
+       return 1;
 }
 
 
 
-static void _mouse_wheel_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+static void _destroy_main_operation_list(Evas_Object *scroller)
 {
-       Evas_Event_Mouse_Wheel *ei = event_info;
-       Evas_Object *scroller = data;
-       int x, y, w, h;
-       int idx = -1;
+       char *data = NULL;
+       Eina_List *main_operation_list = NULL;
 
-       _D("Wheel's up or down(%d)", ei->z);
+       main_operation_list = evas_object_data_del(scroller, DATA_KEY_MAIN_OPERATION_LIST);
+       ret_if(!main_operation_list);
 
-       elm_scroller_region_get(scroller, &x, &y, &w, &h);
-       if (ei->z > 0) { // Wheel's up
-               idx = x / w;
-               idx ++;
-       } else if (ei->z < 0) { // Wheel's down
-               idx = x / w; // Scroller got ECORE events at first, then Menu-screen gets EVAS events.
-       } else { // Wheel's not moving.
-               _D("Wheel's not moving");
+       EINA_LIST_FREE(main_operation_list, data) {
+               free(data);
        }
-
-       if (idx >= page_scroller_count_page(scroller) || idx < 0) return;
-       page_scroller_bring_in(scroller, idx);
 }
 
 
@@ -827,14 +635,13 @@ HAPI Evas_Object *page_scroller_create(Evas_Object *tab, Evas_Object *index, pag
        width = menu_screen_get_root_width();
        height = (int) ((double) PROP_PORTRAIT_HEIGHT * ((double) menu_screen_get_root_height()));
        elm_scroller_page_size_set(scroller, width, height);
+       elm_scroller_page_scroll_limit_set(scroller, 1, 1);
 
        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_min_set(scroller, width, height);
        evas_object_size_hint_max_set(scroller, width, height);
 
-       _scroller_register(scroller);
-
        box = elm_box_add(scroller);
        if (!box) {
                _D("Failed to create box");
@@ -866,23 +673,21 @@ HAPI Evas_Object *page_scroller_create(Evas_Object *tab, Evas_Object *index, pag
        evas_object_data_set(scroller, "is_edited", (void *) false);
        elm_object_content_set(scroller, box);
 
+       evas_object_smart_callback_add(scroller, "scroll,anim,start", _anim_start_cb, NULL);
+       evas_object_smart_callback_add(scroller, "scroll,anim,stop", _anim_stop_cb, NULL);
+       evas_object_smart_callback_add(scroller, "scroll,drag,start", _drag_start_cb, NULL);
+       evas_object_smart_callback_add(scroller, "scroll,drag,stop", _drag_stop_cb, NULL);
+       evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, NULL);
        evas_object_event_callback_add(box, EVAS_CALLBACK_DEL, _evas_object_event_del_cb, "BOX");
        evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel_cb, scroller);
 
        evas_object_show(box);
        evas_object_show(scroller);
 
-       if (vconf_notify_key_changed(VCONFKEY_AIL_INFO_STATE, _desktop_cb, scroller) < 0) {
-               _E("Failed to register a desktop change event handler");
-       }
-
-       if (vconf_notify_key_changed("memory/menuscreen/mapbuf", _mapbuf_cb, scroller) < 0) {
-               _E("Failed to register a vconf cb for %s", "memory/menuscreen/mapbuf");
-       }
-
-       // FIXME : This will be enabled after rebuilding the routine for appid <-> pkgid.
-       //pkgmgr_init(scroller);
        item_badge_register_changed_cb(scroller);
+       if (!_create_main_operation_list(scroller)) {
+               _E("Cannot create the main operation list");
+       }
 
        return scroller;
 }
@@ -903,11 +708,9 @@ HAPI void page_scroller_destroy(Evas_Object *scroller)
        ret_if(NULL == (box = evas_object_data_get(scroller, "box")));
        ret_if(NULL == (page_list = elm_box_children_get(box)));
 
+       _destroy_main_operation_list(scroller);
        item_badge_unregister_changed_cb();
 
-       // FIXME : This will be enabled after rebuilding the routine for appid <-> pkgid.
-       //pkgmgr_fini();
-
        EINA_LIST_FOREACH_SAFE(page_list, l, ln, page) {
                int count;
 
@@ -931,7 +734,6 @@ HAPI void page_scroller_destroy(Evas_Object *scroller)
        box = elm_object_content_unset(scroller);
        evas_object_del(box);
 
-       _scroller_unregister(scroller);
        evas_object_data_del(scroller, "win");
        evas_object_data_del(scroller, "layout");
        evas_object_data_del(scroller, "controlbar");
@@ -953,17 +755,16 @@ HAPI void page_scroller_destroy(Evas_Object *scroller)
        evas_object_data_del(scroller, "is_edited");
        evas_object_data_del(scroller, "install_list");
 
-       evas_object_del(scroller);
+       evas_object_smart_callback_del(scroller, "scroll,anim,start", _anim_start_cb);
+       evas_object_smart_callback_del(scroller, "scroll,anim,stop", _anim_stop_cb);
+       evas_object_smart_callback_del(scroller, "scroll,drag,start", _drag_start_cb);
+       evas_object_smart_callback_del(scroller, "scroll,drag,stop", _drag_stop_cb);
+       evas_object_smart_callback_del(scroller, "scroll", _scroll_cb);
        evas_object_event_callback_del(box, EVAS_CALLBACK_DEL, _evas_object_event_del_cb);
        evas_object_event_callback_del(scroller, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel_cb);
 
-       if (vconf_ignore_key_changed(VCONFKEY_AIL_INFO_STATE, _desktop_cb) < 0) {
-               _E("Failed to ignore the desktop event");
-       }
+       evas_object_del(scroller);
 
-       if (vconf_ignore_key_changed("memory/menuscreen/mapbuf", _mapbuf_cb) < 0) {
-               _E("Failed to remove vconf %s", "memory/menuscreen/mapbuf");
-       }
 }
 
 
@@ -1007,7 +808,7 @@ HAPI Evas_Object *page_scroller_get_page_at(Evas_Object *scroller, unsigned int
        Evas_Object *item;
        Evas_Object *box;
 
-       retv_if(idx >= MAX_PAGE_NO, NULL);
+       retv_if(idx > MAX_PAGE_NO, NULL);
 
        box = evas_object_data_get(scroller, "box");
        retv_if(NULL == box, NULL);
@@ -1072,6 +873,13 @@ HAPI int page_scroller_get_page_no(Evas_Object* scroller, Evas_Object *page)
 
 
 
+HAPI int page_scroller_get_current_page_no(Evas_Object *scroller)
+{
+       return (int) evas_object_data_get(scroller, "current_idx");
+}
+
+
+
 HAPI Evas_Object *page_scroller_find_item_by_package(Evas_Object *scroller, const char *package, int *page_no)
 {
        register int i;
@@ -1198,7 +1006,7 @@ HAPI void page_scroller_edit(Evas_Object *scroller)
        page_max_app = (int) evas_object_data_get(scroller, "page_max_app");
        for (page_no = 0; page_no < nr_of_pages; page_no ++) {
                page = page_scroller_get_page_at(scroller, page_no);
-               ret_if(NULL == page);
+               if(!page) continue;
 
                for (position_no = 0; position_no < page_max_app; position_no ++) {
                        item = page_get_item_at(page, position_no);
@@ -1233,11 +1041,8 @@ HAPI void page_scroller_unedit(Evas_Object *scroller)
        page_max_app = (int) evas_object_data_get(scroller, "page_max_app");
 
        for (page_no = nr_of_pages - 1; page_no >= 0; page_no --) {
-               int count;
-
                page = page_scroller_get_page_at(scroller, page_no);
-               if (NULL == page) break;
-               count = page_count_item(page);
+               if(NULL == page) continue;
 
                page_scroller_trim_items(scroller);
 
@@ -1263,4 +1068,55 @@ HAPI bool page_scroller_is_edited(Evas_Object *scroller)
 
 
 
+HAPI void page_scroller_focus(Evas_Object *scroller)
+{
+       int idx = 0;
+       idx = page_scroller_get_current_page_no(scroller);
+
+       Evas_Object *page = NULL;
+       page = page_scroller_get_page_at(scroller, (unsigned int) idx);
+       ret_if(NULL == page);
+
+       Evas_Object *item = NULL;
+       item = page_get_item_at(page, 0);
+       ret_if(NULL == item);
+
+       Evas_Object *focus_button = NULL;
+       focus_button = elm_object_part_content_get(item, "focus");
+       ret_if(NULL == focus_button);
+
+       _D("Focus set scroller(%p), page:%d, item:%s", scroller, idx, item_get_name(item));
+       elm_object_focus_set(focus_button, EINA_TRUE);
+}
+
+
+
+HAPI void page_scroller_focus_into_vector(Evas_Object *scroller, int vector)
+{
+       int idx = 0;
+       idx = page_scroller_get_current_page_no(scroller);
+       idx += vector;
+
+       ret_if(0 > idx);
+
+       Evas_Object *page = NULL;
+       page = page_scroller_get_page_at(scroller, (unsigned int) idx);
+       ret_if(NULL == page);
+
+       Evas_Object *item = NULL;
+       item = page_get_item_at(page, 0);
+       ret_if(NULL == item);
+
+       Evas_Object *focus_button = NULL;
+       focus_button = elm_object_part_content_get(item, "focus");
+       ret_if(NULL == focus_button);
+
+       _D("Focus set scroller(%p), page:%d, item:%s", scroller, idx, item_get_name(item));
+       elm_object_focus_set(focus_button, EINA_TRUE);
+
+       page_scroller_bring_in(scroller, idx);
+}
+
+
+
 // End of a file
index 67243b5..8ffe7ed 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #include <pkgmgr-info.h>
 
 #include "conf.h"
-#include "index.h"
+#include "menu_screen.h"
 #include "item.h"
+#include "layout.h"
 #include "list.h"
 #include "page.h"
 #include "page_scroller.h"
-#include "mapbuf.h"
 #include "pkgmgr.h"
 #include "util.h"
 
@@ -38,276 +41,330 @@ struct pkgmgr_handler {
        int (*func)(const char *package, const char *val, void *data);
 };
 
+typedef struct {
+       char* package;
+       char* key;
+       char* val;
+} pkgmgr_reserve_s;
+
+typedef struct {
+       char* package;
+       char* status;
+} pkgmgr_request_s;
 
+typedef struct {
+       char* pkg_id;
+       char* app_id;
+       Evas_Object *item;
+} pkgmgr_install_s;
 
 static struct {
        pkgmgr_client *listen_pc;
+       Eina_List *reserve_list;
+       Eina_List *request_list;
+       Eina_List *item_list;
 } pkg_mgr_info = {
        .listen_pc = NULL,
+       .reserve_list = NULL,
+       .request_list = NULL,
+       .item_list = NULL,
 };
 
 
 
-HAPI inline menu_screen_error_e pkgmgr_uninstall(Evas_Object *item)
+static menu_screen_error_e _append_request_in_list(const char *package, const char *status)
 {
-       int ret = MENU_SCREEN_ERROR_OK;
+       retv_if(NULL == package, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == status, MENU_SCREEN_ERROR_INVALID_PARAMETER);
 
-       retv_if(NULL == item, MENU_SCREEN_ERROR_FAIL);
+       pkgmgr_request_s *rt = calloc(1, sizeof(pkgmgr_request_s));
+       retv_if(NULL == rt, MENU_SCREEN_ERROR_FAIL);
 
-       char *pkgid = NULL;
-       char *appid = item_get_package(item);
-       retv_if(NULL == appid, MENU_SCREEN_ERROR_FAIL);
+       rt->package = strdup(package);
+       goto_if(NULL == rt->package, ERROR);
 
-       pkgmgr_client *req_pc = NULL;
-       req_pc = pkgmgr_client_new(PC_REQUEST);
-       retv_if(NULL == req_pc, MENU_SCREEN_ERROR_FAIL);
+       rt->status = strdup(status);
+       goto_if(NULL == rt->status, ERROR);
 
-       pkgmgrinfo_appinfo_h handle;
-       if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_appinfo(appid, &handle)) {
-               if (PKGMGR_R_OK != pkgmgr_client_free(req_pc)) {
-                       _E("cannot free pkgmgr_client for request.");
-               }
-               return MENU_SCREEN_ERROR_FAIL;
-       }
+       pkg_mgr_info.request_list = eina_list_append(pkg_mgr_info.request_list, rt);
+       goto_if(NULL == pkg_mgr_info.request_list, ERROR);
 
-       if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid)) {
-               if (PMINFO_R_OK != pkgmgrinfo_appinfo_destroy_appinfo(handle)) {
-                       _E("cannot destroy the appinfo");
-               }
+       return MENU_SCREEN_ERROR_OK;
 
-               if (PKGMGR_R_OK != pkgmgr_client_free(req_pc)) {
-                       _E("cannot free pkgmgr_client for request.");
-               }
+ERROR:
+       if (rt->status) free(rt->status);
+       if (rt->package) free(rt->package);
+       if (rt) free(rt);
 
-               return MENU_SCREEN_ERROR_FAIL;
-       }
+       return MENU_SCREEN_ERROR_FAIL;
+}
 
-       if (!pkgid) pkgid = appid;
 
-       _D("Uninstall a package[%s] from an app[%s]", pkgid, appid);
-       if (pkgmgr_client_uninstall(req_pc, NULL, pkgid, PM_QUIET, NULL, NULL) < 0) {
-               _E("cannot uninstall %s.", item_get_package(item));
-               ret = MENU_SCREEN_ERROR_FAIL;
+
+static menu_screen_error_e _remove_request_in_list(const char *package)
+{
+       retv_if(NULL == package, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+
+       if (NULL == pkg_mgr_info.request_list) return MENU_SCREEN_ERROR_OK;
+
+       const Eina_List *l = NULL;
+       const Eina_List *ln = NULL;
+       pkgmgr_request_s *rt = NULL;
+       EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) {
+               if (!rt) continue;
+               if (!rt->package) continue;
+               if (strcmp(rt->package, package)) continue;
+
+               pkg_mgr_info.request_list = eina_list_remove(pkg_mgr_info.request_list, rt);
+               free(rt->package);
+               if (rt->status) free(rt->status);
+               free(rt);
+               return MENU_SCREEN_ERROR_OK;
        }
 
-       if (PMINFO_R_OK != pkgmgrinfo_appinfo_destroy_appinfo(handle)) {
-               _E("cannot destroy the appinfo");
-               ret = MENU_SCREEN_ERROR_FAIL;
+       return MENU_SCREEN_ERROR_FAIL;
+}
+
+
+
+static int _exist_request_in_list(const char *package)
+{
+       retv_if(NULL == package, 0);
+
+       if (NULL == pkg_mgr_info.request_list) return 0;
+
+       const Eina_List *l = NULL;
+       const Eina_List *ln = NULL;
+       pkgmgr_request_s *rt = NULL;
+       EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) {
+               if (!rt) continue;
+               if (!rt->package) continue;
+               if (strcmp(rt->package, package)) continue;
+               return 1;
        }
 
-       if (PMINFO_R_OK != pkgmgr_client_free(req_pc)) {
-               _E("cannot free pkgmgr_client");
-               ret = MENU_SCREEN_ERROR_FAIL;
+       return 0;
+}
+
+
+
+static pkgmgr_request_s *_get_request_in_list(const char *package)
+{
+       retv_if(NULL == package, NULL);
+
+       if (NULL == pkg_mgr_info.request_list) return NULL;
+
+       const Eina_List *l = NULL;
+       const Eina_List *ln = NULL;
+       pkgmgr_request_s *rt = NULL;
+       EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) {
+               if (!rt) continue;
+               if (!rt->package) continue;
+               if (strcmp(rt->package, package)) continue;
+               return rt;
        }
 
-       return ret;
+       return NULL;
 }
 
 
 
-static menu_screen_error_e _start_download(const char *package, void *scroller)
+HAPI menu_screen_error_e pkgmgr_item_list_append_item(const char *pkg_id, const char *app_id, Evas_Object *item)
 {
-       struct package_info *pi;
-       Eina_List *install_list;
+       retv_if(NULL == pkg_id, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == app_id, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == item, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+
+       char *tmp_pkg_id = NULL;
+       char *tmp_app_id = NULL;
+
+       pkgmgr_install_s *pi = calloc(1, sizeof(pkgmgr_install_s));
+       goto_if(NULL == pi, ERROR);
 
-       install_list = evas_object_data_get(scroller, "install_list");
-       pi = calloc(1, sizeof(struct package_info));
-       retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
+       tmp_pkg_id = strdup(pkg_id);
+       goto_if(NULL == tmp_pkg_id, ERROR);
 
-       pi->status = DOWNLOAD_BEGIN;
-       pi->ai.package = strdup(package);
-       pi->ai.name = strdup("Download");
+       tmp_app_id = strdup(app_id);
+       goto_if(NULL == tmp_app_id, ERROR);
 
-       install_list = eina_list_append(install_list, pi);
-       evas_object_data_set(scroller, "install_list", install_list);
-       _D("Package [%s] is jump into the downloading phase", package);
+       pi->pkg_id = tmp_pkg_id;
+       pi->app_id = tmp_app_id;
+       pi->item = item;
+
+       pkg_mgr_info.item_list = eina_list_append(pkg_mgr_info.item_list, pi);
+       goto_if(NULL == pkg_mgr_info.item_list, ERROR);
 
        return MENU_SCREEN_ERROR_OK;
+
+ERROR:
+       if (tmp_app_id) free(tmp_app_id);
+       if (tmp_pkg_id) free(tmp_pkg_id);
+       free(pi);
+
+       return MENU_SCREEN_ERROR_FAIL;
 }
 
 
 
-static menu_screen_error_e _start_uninstall(const char *package, void *scroller)
+HAPI menu_screen_error_e pkgmgr_item_list_remove_item(const char *pkg_id, const char *app_id, Evas_Object *item)
 {
-       Eina_List *l;
-       Eina_List *tmp;
-       int page_no = 0;
-       struct package_info *pi = NULL;
-       Eina_List *install_list;
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-               pi = NULL;
-       }
+       retv_if(NULL == pkg_id, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == app_id, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == item, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+
+       const Eina_List *l = NULL;
+       const Eina_List *ln = NULL;
+       pkgmgr_install_s *pi = NULL;
+       EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) {
+               continue_if(NULL == pi);
+               continue_if(NULL == pi->pkg_id);
+               continue_if(NULL == pi->app_id);
+               continue_if(NULL == pi->item);
+
+               if (strcmp(pi->pkg_id, pkg_id)) continue;
+               if (strcmp(pi->app_id, app_id)) continue;
+               if (pi->item != item) continue;
+
+               pkg_mgr_info.item_list = eina_list_remove(pkg_mgr_info.item_list, pi);
+
+               free(pi->app_id);
+               free(pi->pkg_id);
+               free(pi);
 
-       retv_if(pi, MENU_SCREEN_ERROR_FAIL);
+               return MENU_SCREEN_ERROR_OK;
+       }
 
-       pi = calloc(1, sizeof(struct package_info));
-       retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
+       return MENU_SCREEN_ERROR_FAIL;
+}
 
-       pi->status = UNINSTALL_BEGIN;
-       pi->ai.package = strdup(package);
-       pi->ai.nodisplay = false;
-       pi->ai.enabled = true;
-       pi->item = page_scroller_find_item_by_package(scroller, package, &page_no);
-       pi->page = page_scroller_get_page_at(scroller, page_no);
 
-       install_list = eina_list_append(install_list, pi);
-       evas_object_data_set(scroller, "install_list", install_list);
 
-       return MENU_SCREEN_ERROR_OK;
+HAPI void pkgmgr_item_list_affect_pkgid(const char *pkg_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data)
+{
+       ret_if(NULL == pkg_mgr_info.item_list);
+       ret_if(NULL == pkg_id);
+       ret_if(NULL == _affected_cb);
+
+       const Eina_List *l;
+       const Eina_List *ln;
+       pkgmgr_install_s *pi;
+       EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) {
+               continue_if(NULL == pi);
+               continue_if(NULL == pi->app_id);
+               continue_if(NULL == pi->item);
+
+               if (strcmp(pkg_id, pi->pkg_id)) continue;
+               /* It's possible that many items with the same package name are in the install list */
+               continue_if(EINA_TRUE != _affected_cb(pi->app_id, pi->item, data));
+       }
 }
 
 
 
-static menu_screen_error_e _start_update(const char *package, void *scroller)
+HAPI void pkgmgr_item_list_affect_appid(const char *app_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data)
 {
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi = NULL;
-       Eina_List *install_list;
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-               pi = NULL;
+       ret_if(NULL == pkg_mgr_info.item_list);
+       ret_if(NULL == app_id);
+       ret_if(NULL == _affected_cb);
+
+       const Eina_List *l;
+       const Eina_List *ln;
+       pkgmgr_install_s *pi;
+       EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) {
+               continue_if(NULL == pi);
+               continue_if(NULL == pi->app_id);
+               continue_if(NULL == pi->item);
+
+               if (strcmp(app_id, pi->app_id)) continue;
+               /* It's possible that many items with the same package name are in the install list */
+               if (EINA_FALSE == _affected_cb(pi->app_id, pi->item, data)) break;
        }
+}
 
-       if (!pi) {
-               int page_no = 0;
-               _D("Package [%s] is starting update phase directly (without downloading phase)", package);
 
-               pi = calloc(1, sizeof(struct package_info));
-               retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
 
-               pi->ai.package = strdup(package);
-               pi->item = page_scroller_find_item_by_package(scroller, package, &page_no);
-               if (pi->item) {
-                       pi->page = page_scroller_get_page_at(scroller, page_no);
-               }
+HAPI inline menu_screen_error_e pkgmgr_uninstall(Evas_Object *item)
+{
+       char *pkgid = NULL;
+       char *appid = NULL;
+       pkgmgr_client *req_pc = NULL;
+       pkgmgrinfo_appinfo_h handle = NULL;
+       int ret = MENU_SCREEN_ERROR_OK;
 
-               if (pi->item && pi->page) {
-                       pi->ai.nodisplay = false;
-                       pi->ai.enabled = true;
-               }
+       retv_if(NULL == item, MENU_SCREEN_ERROR_FAIL);
 
-               install_list = eina_list_append(install_list, pi);
-               evas_object_data_set(scroller, "install_list", install_list);
-       } else {
-               if (pi->status != DOWNLOAD_END && pi->status != INSTALL_END) {
-                       _D("Package [%s] is in invalid state (%d), cancel this", package, pi->status);
-                       install_list = eina_list_remove(install_list, pi);
-                       evas_object_data_set(scroller, "install_list", install_list);
-                       if (pi->item) {
-                               page_unpack_item(pi->page, pi->item);
-                               page_scroller_trim_items(scroller);
-                               item_destroy(pi->item);
-                       }
-
-                       list_free_values(&pi->ai);
-                       free(pi);
-                       return MENU_SCREEN_ERROR_FAIL;
+       pkgid = item_get_pkgid(item);
+       retv_if(NULL == pkgid, MENU_SCREEN_ERROR_FAIL);
+
+       appid = item_get_package(item);
+       retv_if(NULL == appid, MENU_SCREEN_ERROR_FAIL);
+
+       req_pc = pkgmgr_client_new(PC_REQUEST);
+       retv_if(NULL == req_pc, MENU_SCREEN_ERROR_FAIL);
+
+       if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_appinfo(appid, &handle)) {
+               if (PKGMGR_R_OK != pkgmgr_client_free(req_pc)) {
+                       _E("cannot free pkgmgr_client for request.");
                }
+               return MENU_SCREEN_ERROR_FAIL;
        }
 
-       pi->status = UPDATE_BEGIN;
-       pi->ai.name = strdup("Update");
-       if (pi->item) {
-               item_set_name(pi->item, pi->ai.name, 0);
+       if (PMINFO_R_OK != pkgmgrinfo_appinfo_destroy_appinfo(handle)) {
+               _E("cannot destroy the appinfo");
+               ret = MENU_SCREEN_ERROR_FAIL;
        }
 
-       _D("Package [%s] is jump into the updating phase", package);
+       _D("Uninstall a package[%s] from an app[%s]", pkgid, appid);
+       if (pkgmgr_client_uninstall(req_pc, NULL, pkgid, PM_QUIET, NULL, NULL) < 0) {
+               _E("cannot uninstall %s.", item_get_package(item));
+               ret = MENU_SCREEN_ERROR_FAIL;
+       }
 
-       return MENU_SCREEN_ERROR_OK;
+       if (PMINFO_R_OK != pkgmgr_client_free(req_pc)) {
+               _E("cannot free pkgmgr_client");
+               ret = MENU_SCREEN_ERROR_FAIL;
+       }
+
+       return ret;
 }
 
 
 
-static menu_screen_error_e _start_recover(const char *package, void *scroller)
+static menu_screen_error_e _start_download(const char *package, void *scroller)
 {
+       _D("Start downloading for the package(%s)", package);
        return MENU_SCREEN_ERROR_OK;
 }
 
 
 
-static menu_screen_error_e _start_install(const char *package, void *scroller)
+static menu_screen_error_e _start_uninstall(const char *package, void *scroller)
 {
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi = NULL;
-       Eina_List *install_list;
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-               pi = NULL;
-       }
+       _D("Start uninstalling for the package(%s)", package);
+       return MENU_SCREEN_ERROR_OK;
+}
 
-       if (!pi) {
-               int page_no = 0;
-               _D("Package [%s] is starting install phase directly (without downloading phase)", package);
-               pi = calloc(1, sizeof(struct package_info));
-               retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
 
-               pi->ai.package = strdup(package);
-               if (!pi->ai.package) {
-                       free(pi);
-                       return MENU_SCREEN_ERROR_FAIL;
-               }
 
-               pi->ai.icon = strdup(DEFAULT_ICON);
-               if (!pi->ai.icon) {
-                       free(pi->ai.package);
-                       free(pi);
-                       return MENU_SCREEN_ERROR_FAIL;
-               }
+static menu_screen_error_e _start_update(const char *package, void *scroller)
+{
+       _D("Start updating for the package(%s)", package);
+       return MENU_SCREEN_ERROR_OK;
+}
 
-               pi->item = page_scroller_find_item_by_package(scroller, package, &page_no);
-               if (!pi->item) {
-                       if (NULL == page_scroller_push_item(scroller, &pi->ai)) _E("Cannot push an item");
-               }
-               pi->item = page_scroller_find_item_by_package(scroller, package, &page_no);
-               pi->page = page_scroller_get_page_at(scroller, page_no);
 
-               if (pi->item && pi->page) {
-                       pi->ai.nodisplay = false;
-                       pi->ai.enabled = true;
-               }
 
-               install_list = eina_list_append(install_list, pi);
-               evas_object_data_set(scroller, "install_list", install_list);
-       } else {
-               if (pi->status != DOWNLOAD_END && pi->status != INSTALL_END) {
-                       _D("Package [%s] is in invalid state (%d), cancel this", package, pi->status);
-                       install_list = eina_list_remove(install_list, pi);
-                       evas_object_data_set(scroller, "install_list", install_list);
-                       if (pi->item) {
-                               page_unpack_item(pi->page, pi->item);
-                               page_scroller_trim_items(scroller);
-                               item_destroy(pi->item);
-                       }
-
-                       list_free_values(&pi->ai);
-                       free(pi);
-                       return MENU_SCREEN_ERROR_FAIL;
-               }
-       }
+static menu_screen_error_e _start_recover(const char *package, void *scroller)
+{
+       _D("Start recovering for the package(%s)", package);
+       return MENU_SCREEN_ERROR_OK;
+}
 
-       pi->status = INSTALL_BEGIN;
-       pi->ai.name = strdup("Install");
-       if (pi->item) {
-               // Update app name to install
-               item_set_name(pi->item, pi->ai.name, 0);
-       }
-       _D("Package [%s] is jump into the installing phase", package);
 
+
+static menu_screen_error_e _start_install(const char *package, void *scroller)
+{
+       _D("Start installing for the package(%s)", package);
        return MENU_SCREEN_ERROR_OK;
 }
 
@@ -345,18 +402,18 @@ static menu_screen_error_e _start(const char *package, const char *val, void *sc
                },
        };
 
-       register unsigned int i;
-
-       _D("package [%s]", package);
+       _D("package [%s], val [%s]", package, val);
+       retv_if(_exist_request_in_list(package), MENU_SCREEN_ERROR_FAIL);
+       retv_if(MENU_SCREEN_ERROR_OK != _append_request_in_list(package, val), MENU_SCREEN_ERROR_FAIL);
 
+       register unsigned int i;
        for (i = 0; start_cb[i].name; i ++) {
-               if (!strcasecmp(val, start_cb[i].name) && start_cb[i].handler) {
-                       return start_cb[i].handler(package, scroller);
-               }
+               if (strcasecmp(val, start_cb[i].name)) continue;
+               break_if(NULL == start_cb[i].handler);
+               return start_cb[i].handler(package, scroller);
        }
 
-       _D("Unknown status for starting phase signal'd from package manager");
-
+       _E("Unknown status for starting phase signal'd from package manager");
        return MENU_SCREEN_ERROR_OK;
 }
 
@@ -364,47 +421,7 @@ static menu_screen_error_e _start(const char *package, const char *val, void *sc
 
 static menu_screen_error_e _icon_path(const char *package, const char *val, void *scroller)
 {
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi = NULL;
-       Eina_List *install_list;
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       retv_if(!package, MENU_SCREEN_ERROR_FAIL);
-       retv_if(!val, MENU_SCREEN_ERROR_FAIL);
-
-       _D("package [%s] with %s", package, val);
-
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-               pi = NULL;
-       }
-       retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
-
-       if (strlen(val)) {
-               pi->ai.icon = strdup(val);
-               retv_if (NULL == pi->ai.icon, MENU_SCREEN_ERROR_OUT_OF_MEMORY);
-
-               if (!pi->item) {
-                       _D("There is no item for [%s]", package);
-                       pi->ai.nodisplay = false;
-                       pi->ai.enabled = true;
-
-                       if (NULL == page_scroller_push_item(scroller, &pi->ai)) {
-                               _E("Failed to create a new item, remove this package from the installing list");
-                               list_free_values(&pi->ai);
-                               install_list = eina_list_remove(install_list, pi);
-                               evas_object_data_set(scroller, "install_list", install_list);
-                               free(pi);
-                       }
-               } else {
-                       _D("There is an item for [%s:%p]", package, pi->item);
-                       item_update(pi->item, &pi->ai);
-               }
-       }
-
+       _D("package(%s) with %s", package, val);
        return MENU_SCREEN_ERROR_OK;
 }
 
@@ -412,39 +429,7 @@ static menu_screen_error_e _icon_path(const char *package, const char *val, void
 
 static menu_screen_error_e _download_percent(const char *package, const char *val, void *scroller)
 {
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi = NULL;
-       Eina_List *install_list;
-
-       _D("package [%s] with %s", package, val);
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-               pi = NULL;
-       }
-
-       retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
-
-       if (pi->status == DOWNLOAD_BEGIN) {
-               pi->status = DOWNLOADING;
-       } else if (pi->status == DOWNLOADING) {
-               // Do nothing, just we are in proper state
-       } else {
-               _D("Invalid state for %s, This is not started from the download_begin state(%s)", package, val);
-       }
-
-       if (!pi->ai.nodisplay && pi->ai.enabled && pi->item) {
-               if (!item_is_enabled_progress(pi->item)) {
-                       item_enable_progress(pi->item);
-               }
-
-               item_update_progress(pi->item, atoi(val));
-       }
-
+       _D("package(%s) with %s", package, val);
        return MENU_SCREEN_ERROR_OK;
 }
 
@@ -452,51 +437,9 @@ static menu_screen_error_e _download_percent(const char *package, const char *va
 
 static menu_screen_error_e _install_percent(const char *package, const char *val, void *scroller)
 {
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi;
-       int progress;
-       Eina_List *install_list;
-
-       _D("package [%s] with %s", package, val);
-
-       pi = NULL;
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-
-               pi = NULL;
-       }
-
-       retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
-
-       progress = atoi(val);
-
-       if (pi->status == INSTALL_BEGIN) {
-               pi->status = INSTALLING;
-       } else if (pi->status == UNINSTALL_BEGIN) {
-               progress = 100 - progress;
-               pi->status = UNINSTALLING;
-       } else if (pi->status == UPDATE_BEGIN) {
-               pi->status = UPDATING;
-       } else if (pi->status == INSTALLING) {
-       } else if (pi->status == UNINSTALLING) {
-               progress = 100 - progress;
-       } else if (pi->status == UPDATING) {
-       } else {
-               _D("Invalid state for %s, This is not the uninstall or install_begin state(%s)", package, val);
-       }
-
-       if (!pi->ai.nodisplay && pi->ai.enabled && pi->item) {
-               if (!item_is_enabled_progress(pi->item)) {
-                       item_enable_progress(pi->item);
-               }
-
-               item_update_progress(pi->item, progress);
-       }
-
+       _D("package(%s) with %s", package, val);
+       if (_exist_request_in_list(package)) return MENU_SCREEN_ERROR_OK;
+       retv_if(MENU_SCREEN_ERROR_OK != _append_request_in_list(package, "install"), MENU_SCREEN_ERROR_FAIL);
        return MENU_SCREEN_ERROR_OK;
 }
 
@@ -504,250 +447,115 @@ static menu_screen_error_e _install_percent(const char *package, const char *val
 
 static menu_screen_error_e _error(const char *package, const char *val, void *scroller)
 {
-       struct package_info *pi = NULL;
-       Eina_List *l;
-       Eina_List *tmp;
-       Eina_List *install_list;
-
-       _D("package [%s] with %s", package, val);
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-
-               pi = NULL;
-       }
-
-       retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
-
-       pi->error_count ++;
+       _D("package(%s) with %s", package, val);
        return MENU_SCREEN_ERROR_OK;
 }
 
 
 
-static menu_screen_error_e _end_downloading(const char *package, struct package_info *pi, void *scroller)
+static int _end_cb(pkgmgrinfo_appinfo_h handle, void *user_data)
 {
-       pi->status = DOWNLOAD_END;
-       _D("Package downloading is complete, waiting install progress");
-       return MENU_SCREEN_ERROR_OK;
-}
+       retv_if(NULL == handle, -1);
+       retv_if(NULL == user_data, -1);
 
+       char *appid = NULL;
+       pkgmgrinfo_appinfo_get_appid(handle, &appid);
 
+       Evas_Object *layout = evas_object_data_get(menu_screen_get_win(), "layout");
+       retv_if(NULL == layout, MENU_SCREEN_ERROR_FAIL);
 
-static menu_screen_error_e _end_installing(const char *package, struct package_info *pi, void *scroller)
-{
-       // This status will not be referenced from the others.
-       // because it will be freed right after set it. ;)
-       Eina_List *install_list;
-
-       pi->status = INSTALL_END;
-       _D("Package installing is complete");
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       if (pi->desktop_file_found == 1) {
-               install_list = eina_list_remove(install_list, pi);
-               evas_object_data_set(scroller, "install_list", install_list);
-               list_free_values(&pi->ai);
-               free(pi);
+       pkgmgr_request_s *rt = user_data;
+       if (!strcmp(rt->status, "install")) {
+               layout_create_package(layout, appid);
+       } else if (!strcmp(rt->status, "update")) {
+               layout_update_package(layout, appid);
+       } else {
+               _E("No routines for this status (%s:%s)", rt->package, rt->status);
        }
 
-
-       // TODO: Need to register a timer callback
-       return MENU_SCREEN_ERROR_OK;
+       return 0;
 }
 
 
 
-static menu_screen_error_e _end_updating(const char *package, struct package_info *pi, void *scroller)
+static Eina_Bool _uninstall_cb(const char *app_id, Evas_Object *item, void *data)
 {
-       // This status will not be referenced from the others.
-       // because it will be freed right after set it. ;)
-       Eina_List *install_list;
-
-       pi->status = UPDATE_END;
-       _D("Package updating is complete");
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       if (pi->desktop_file_found == 1) {
-               install_list = eina_list_remove(install_list, pi);
-               evas_object_data_set(scroller, "install_list", install_list);
-               list_free_values(&pi->ai);
-               free(pi);
-       }
+       retv_if(NULL == data, EINA_FALSE);
 
+       Evas_Object *layout = data;
+       layout_delete_package(layout, app_id);
 
-       // TODO: Need to register a timer callback
-       return MENU_SCREEN_ERROR_OK;
+       return EINA_TRUE;
 }
 
 
 
-static menu_screen_error_e _end_uninstalling(const char *package, struct package_info *pi, void *scroller)
+static Eina_Bool _set_removable_cb(const char *app_id, Evas_Object *item, void *data)
 {
-       Eina_List *install_list;
+       retv_if(NULL == item, EINA_FALSE);
 
-       pi->status = UNINSTALL_END;
-       _D("Package uninstalling is complete");
+       item_set_removable(item, 1, 0);
+       elm_object_signal_emit(item, "uninstall,on", "menu");
 
-       install_list = evas_object_data_get(scroller, "install_list");
-       if (pi->desktop_file_found == 1) {
-               install_list = eina_list_remove(install_list, pi);
-               evas_object_data_set(scroller, "install_list", install_list);
-               list_free_values(&pi->ai);
-               free(pi);
-       }
-
-       return MENU_SCREEN_ERROR_OK;
+       return EINA_TRUE;
 }
 
 
 
-static menu_screen_error_e _end_unknown(const char *package, struct package_info *pi, void *scroller)
+static menu_screen_error_e _end(const char *package, const char *val, void *data)
 {
-       Eina_List *install_list;
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       install_list = eina_list_remove(install_list, pi);
-       evas_object_data_set(scroller, "install_list", install_list);
-
-       if (pi->item) {
-               // Remove an item only if it is installing.
-               if (
-                       pi->status == INSTALL_BEGIN || pi->status == INSTALLING || pi->status == INSTALL_END ||
-                       pi->status == DOWNLOAD_BEGIN || pi->status == DOWNLOADING || pi->status == DOWNLOAD_END
-               )
-               {
-                       if (pi->page) {
-                               page_unpack_item(pi->page, pi->item);
-                               page_scroller_trim_items(scroller);
-                       } else {
-                               _D("Page is not valid (%s)", package);
-                       }
-                       item_destroy(pi->item);
-                       page_scroller_trim_items(scroller);
-               }
-       }
+       pkgmgrinfo_pkginfo_h handle = NULL;
 
-       list_free_values(&pi->ai);
-       free(pi);
-
-       return MENU_SCREEN_ERROR_OK;
-}
+       retv_if(!_exist_request_in_list(package), MENU_SCREEN_ERROR_FAIL);
 
+       pkgmgr_request_s *rt = _get_request_in_list(package);
+       retv_if(NULL == rt, MENU_SCREEN_ERROR_FAIL);
+       if(strcasecmp(val, "ok")) {
+               pkgmgr_item_list_affect_pkgid(package, _set_removable_cb, NULL);
+               _E("cannot end that package(%s) is %s", rt->package, rt->status);
 
+               goto ERROR;
+       }
 
-static menu_screen_error_e _end(const char *package, const char *val, void *scroller)
-{
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi;
-       register int i;
-       struct end_cb_set {
-               int status;
-               int (*handler)(const char *package, struct package_info *pi, void *scroller);
-       } end_cb[] = {
-               {
-                       .status = DOWNLOADING,
-                       .handler = _end_downloading,
-               },
-               {
-                       .status = INSTALLING,
-                       .handler = _end_installing,
-               },
-               {
-                       .status = UNINSTALLING,
-                       .handler = _end_uninstalling,
-               },
-               {
-                       .status = UPDATING,
-                       .handler = _end_updating,
-               },
-               {
-                       .status = UNKNOWN,
-                       .handler = _end_unknown,
-               },
-               {
-                       .status = MAX_STATUS,
-                       .handler = NULL,
-               },
-       };
-       Eina_List *install_list;
+       _D("Package(%s) : key(%s) - val(%s)", package, rt->status, val);
 
-       _D("package [%s], val [%s]", package, val);
+       /* Criteria : pkgid */
+       if (!strcasecmp("uninstall", rt->status)) {
+               Evas_Object *layout = evas_object_data_get(menu_screen_get_win(), "layout");
+               goto_if(NULL == layout, ERROR);
 
-       pi = NULL;
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       break;
-               }
-               pi = NULL;
+               pkgmgr_item_list_affect_pkgid(package, _uninstall_cb, layout);
+               goto OUT;
        }
 
-       retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
-
-       list_free_values(&pi->ai);
-       if (MENU_SCREEN_ERROR_OK != list_get_values(package, &pi->ai)) _E("Cannot get values");
-       item_update(pi->item, &pi->ai);
+       goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_pkginfo(package, &handle), ERROR);
 
-       if (item_is_enabled_progress(pi->item)) {
-               item_disable_progress(pi->item);
+       /* Criteria : appid */
+       if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_list(handle, PMINFO_UI_APP, _end_cb, rt)) {
+               goto ERROR;
        }
 
-       // NOTE: Don't release the 'pi'
-       //       Release it from each handler
-       for (i = 0; end_cb[i].handler; i ++) {
-               if (end_cb[i].status == pi->status && end_cb[i].handler) {
-                       int ret;
+OUT:
+       if (MENU_SCREEN_ERROR_OK != _remove_request_in_list(package))
+               _E("cannot remove a request(%s:%s)", rt->package, rt->status);
+       if (handle) pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
 
-                       if (strcasecmp(val, "ok")) {
-                               ret = _end_unknown(package, pi, scroller);
-                       } else {
-                               ret = end_cb[i].handler(package, pi, scroller);
-                       }
+       return MENU_SCREEN_ERROR_OK;
 
-                       return ret;
-               }
-       }
+ERROR:
+       if (MENU_SCREEN_ERROR_OK != _remove_request_in_list(package))
+               _E("cannot remove a request(%s:%s)", rt->package, rt->status);
+       if (handle) pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
 
-       return _end_unknown(package, pi, scroller);
+       return MENU_SCREEN_ERROR_FAIL;
 }
 
 
 
 static menu_screen_error_e _change_pkg_name(const char *package, const char *val, void *scroller)
 {
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi;
-       Eina_List *install_list;
-
-       _D("package [%s]", package);
-
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (!pi) {
-                       continue;
-               }
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       _D("Replace package name %s to %s", pi->ai.package, val);
-                       free(pi->ai.package);
-                       pi->ai.package = strdup(val);
-                       if (!pi->ai.package) {
-                               _E("cannot strdup");
-                               return MENU_SCREEN_ERROR_FAIL;
-                       }
-                       if (pi->item) {
-                               item_set_package(pi->item, (char*) val, 0);
-                       }
-                       return MENU_SCREEN_ERROR_OK;
-               }
-       }
-
-       return MENU_SCREEN_ERROR_FAIL;
+       _D("package(%s) with %s", package, val);
+       return MENU_SCREEN_ERROR_OK;
 }
 
 
@@ -768,21 +576,23 @@ static struct pkgmgr_handler pkgmgr_cbs[] = {
 static menu_screen_error_e _pkgmgr_cb(int req_id, const char *pkg_type, const char *package, const char *key, const char *val, const void *pmsg, void *data)
 {
        register unsigned int i;
-       Evas_Object *scroller = data;
 
-       _D("pkgmgr request [%s] for %s, val(%s)", key, package, val);
+       _D("pkgmgr request [%s:%s] for %s", key, val, package);
+
+       if (BOOTING_STATE_DONE > menu_screen_get_booting_state()) {
+               pkgmgr_reserve_list_push_request(package, key, val);
+               return MENU_SCREEN_ERROR_OK;
+       }
 
        for (i = 0; i < sizeof(pkgmgr_cbs) / sizeof(struct pkgmgr_handler); i++) {
-               if (!strcasecmp(pkgmgr_cbs[i].key, key)) {
-                       if (pkgmgr_cbs[i].func) {
-                               if (MENU_SCREEN_ERROR_OK != pkgmgr_cbs[i].func(package, val, scroller)) {
-                                       _E("pkgmgr_cbs[%u].func has errors.", i);
-                               }
-                       } else {
-                               _E("Cannot find pkgmgr_cbs[%u].func.", i);
-                       }
-                       return MENU_SCREEN_ERROR_OK;
+               if (strcasecmp(pkgmgr_cbs[i].key, key)) continue;
+               break_if(!pkgmgr_cbs[i].func);
+
+               if (MENU_SCREEN_ERROR_OK != pkgmgr_cbs[i].func(package, val, NULL)) {
+                       _E("pkgmgr_cbs[%u].func has errors.", i);
                }
+
+               return MENU_SCREEN_ERROR_OK;
        }
 
        return MENU_SCREEN_ERROR_FAIL;
@@ -790,7 +600,76 @@ static menu_screen_error_e _pkgmgr_cb(int req_id, const char *pkg_type, const ch
 
 
 
-HAPI menu_screen_error_e pkgmgr_init(Evas_Object *scroller)
+HAPI menu_screen_error_e pkgmgr_reserve_list_push_request(const char *package, const char *key, const char *val)
+{
+       retv_if(NULL == package, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == key, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == val, MENU_SCREEN_ERROR_INVALID_PARAMETER);
+
+       char *tmp_package = NULL;
+       char *tmp_key = NULL;
+       char *tmp_val = NULL;
+
+       pkgmgr_reserve_s *pr = calloc(1, sizeof(pkgmgr_reserve_s));
+       retv_if(NULL == pr, MENU_SCREEN_ERROR_FAIL);
+
+       tmp_package = strdup(package);
+       goto_if(NULL == tmp_package, ERROR);
+       pr->package = tmp_package;
+
+       tmp_key = strdup(key);
+       goto_if(NULL == tmp_key, ERROR);
+       pr->key = tmp_key;
+
+       tmp_val = strdup(val);
+       goto_if(NULL == tmp_val, ERROR);
+       pr->val = tmp_val;
+
+       pkg_mgr_info.reserve_list = eina_list_append(pkg_mgr_info.reserve_list, pr);
+       goto_if(NULL == pkg_mgr_info.reserve_list, ERROR);
+
+       return MENU_SCREEN_ERROR_OK;
+
+ERROR:
+       if (tmp_val) free(tmp_val);
+       if (tmp_key) free(tmp_key);
+       if (tmp_package) free(tmp_package);
+       free(pr);
+
+       return MENU_SCREEN_ERROR_FAIL;
+}
+
+
+
+HAPI menu_screen_error_e pkgmgr_reserve_list_pop_request(void)
+{
+       if (!pkg_mgr_info.reserve_list) return MENU_SCREEN_ERROR_NO_DATA;
+
+       pkgmgr_reserve_s *pr = eina_list_nth(pkg_mgr_info.reserve_list, 0);
+       if (!pr) return MENU_SCREEN_ERROR_NO_DATA;
+       pkg_mgr_info.reserve_list = eina_list_remove(pkg_mgr_info.reserve_list, pr);
+
+       goto_if(MENU_SCREEN_ERROR_OK != _pkgmgr_cb(0, NULL, pr->package, pr->key, pr->val, NULL, NULL), ERROR);
+
+       if (pr->package) free(pr->package);
+       if (pr->key) free(pr->key);
+       if (pr->val) free(pr->val);
+       free(pr);
+
+       return MENU_SCREEN_ERROR_OK;
+
+ERROR:
+       if (pr->package) free(pr->package);
+       if (pr->key) free(pr->key);
+       if (pr->val) free(pr->val);
+       free(pr);
+
+       return MENU_SCREEN_ERROR_FAIL;
+}
+
+
+
+HAPI menu_screen_error_e pkgmgr_init(void)
 {
        if (NULL != pkg_mgr_info.listen_pc) {
                return MENU_SCREEN_ERROR_OK;
@@ -799,7 +678,7 @@ HAPI menu_screen_error_e pkgmgr_init(Evas_Object *scroller)
        pkg_mgr_info.listen_pc = pkgmgr_client_new(PC_LISTENING);
        retv_if(NULL == pkg_mgr_info.listen_pc, MENU_SCREEN_ERROR_FAIL);
        retv_if(pkgmgr_client_listen_status(pkg_mgr_info.listen_pc,
-                       _pkgmgr_cb, scroller) != PKGMGR_R_OK, MENU_SCREEN_ERROR_FAIL);
+                       _pkgmgr_cb, NULL) != PKGMGR_R_OK, MENU_SCREEN_ERROR_FAIL);
 
        return MENU_SCREEN_ERROR_OK;
 }
@@ -817,50 +696,4 @@ HAPI void pkgmgr_fini(void)
 
 
 
-HAPI Evas_Object *pkgmgr_find_pended_object(const char *package, int with_desktop_file, Evas_Object *scroller, Evas_Object **page)
-{
-       Eina_List *l;
-       Eina_List *tmp;
-       struct package_info *pi;
-       Eina_List *install_list;
-
-       _D("package [%s]", package);
-
-       retv_if(NULL == package, NULL);
-       install_list = evas_object_data_get(scroller, "install_list");
-       EINA_LIST_FOREACH_SAFE(install_list, l, tmp, pi) {
-               if (!pi) {
-                       continue;
-               }
-               if (pi->ai.package && !strcmp(pi->ai.package, package)) {
-                       Evas_Object *item;
-                       _D("Installing(Downloading) package is found (%p)", pi->item);
-
-                       item = pi->item;
-
-                       if (with_desktop_file) {
-                               pi->desktop_file_found = 1;
-
-                               if (pi->status == INSTALL_END || pi->status == UNINSTALL_END || pi->status == UPDATE_END) {
-                                       install_list = eina_list_remove(install_list, pi);
-                                       evas_object_data_set(scroller, "install_list", install_list);
-                                       list_free_values(&pi->ai);
-                                       free(pi);
-                                       pi = NULL;
-                               }
-                       }
-
-                       if (page) {
-                               *page = pi ? pi->page : NULL;
-                       }
-                       return item;
-               }
-       }
-
-       _D("Failed to find a installing/downloading package");
-       return NULL;
-}
-
-
-
 // End of a file
index 3ada82e..1609621 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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
 #include "all_apps/shortcut.h"
 
 #define BUFSZE 1024
+#define ELLIPSIS "..."
+#define STRSZE 128
 
 
-static void _response_cb(void *data, Evas_Object *obj, void *event_info)
-{
+
+static struct {
        Evas_Object *popup;
+} popup_info = {
+       .popup = NULL,
+};
+
+
+
+HAPI Evas_Object *popup_exist(void)
+{
+       return popup_info.popup;
+}
+
+
+
+HAPI void popup_destroy_all(void)
+{
+       void (*_destroy_popup)(void *data, Evas_Object *obj, void *event_info);
+
+       if (NULL == popup_info.popup) return;
 
+       _destroy_popup = evas_object_data_get(popup_info.popup, "func_destroy_popup");
+       if (_destroy_popup) _destroy_popup(popup_info.popup, NULL, NULL);
+
+       popup_info.popup = NULL;
+}
+
+
+
+static void _response_cb(void *data, Evas_Object *obj, void *event_info)
+{
        ret_if(NULL == data);
-       popup = data;
+
+       Evas_Object *popup = data;
+       evas_object_data_del(popup, "func_destroy_popup");
+       popup_info.popup = NULL;
+
        evas_object_del(evas_object_data_del(popup, "button"));
        evas_object_del(popup);
 }
 
 
 
-HAPI Evas_Object *popup_create(Evas_Object *parent, const char *warning)
+HAPI Evas_Object *popup_create_confirm(Evas_Object *parent, const char *warning)
 {
        Evas_Object *popup;
        Evas_Object *btn;
 
        retv_if(NULL == warning, NULL);
 
+       popup_destroy_all();
+
        popup = elm_popup_add(parent);
        retv_if(NULL == popup, NULL);
 
@@ -62,24 +101,46 @@ HAPI Evas_Object *popup_create(Evas_Object *parent, const char *warning)
 
        elm_object_part_content_set(popup, "button1", btn);
        evas_object_smart_callback_add(btn, "clicked", _response_cb, popup);
-
        evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
        elm_object_part_text_set(popup, "title,text", D_("IDS_COM_POP_WARNING"));
        elm_object_text_set(popup, warning);
+       elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
        evas_object_show(popup);
 
+       evas_object_data_set(popup, "func_destroy_popup", _response_cb);
+       popup_info.popup = popup;
+
        return popup;
 }
 
 
-static void _uninstall_yes_cb(void *data, Evas_Object *obj, void *event_info)
+
+static void _uninstall_no_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       Evas_Object *popup;
-       Evas_Object *item;
+       ret_if(NULL == data);
 
+       Evas_Object *popup = data;
+       evas_object_data_del(popup, "func_destroy_popup");
+       popup_info.popup = NULL;
+
+       evas_object_del(evas_object_data_del(popup, "button1"));
+       evas_object_del(evas_object_data_del(popup, "button2"));
+       evas_object_data_del(popup, "item");
+       evas_object_del(popup);
+}
+
+
+
+static void _uninstall_yes_cb(void *data, Evas_Object *obj, void *event_info)
+{
        ret_if(NULL == data);
 
-       popup = data;
+       Evas_Object *popup = data;
+       evas_object_data_del(popup, "func_destroy_popup");
+       popup_info.popup = NULL;
+
+       Evas_Object *item;
        item = evas_object_data_del(popup, "item");
 
        evas_object_del(evas_object_data_del(popup, "button1"));
@@ -100,16 +161,29 @@ static void _uninstall_yes_cb(void *data, Evas_Object *obj, void *event_info)
 
 
 
-static void _uninstall_no_cb(void *data, Evas_Object *obj, void *event_info)
+static char *_popup_set_name(Evas_Object *item)
 {
-       Evas_Object *popup;
+       char *name;
+       char *get_name = item_get_name(item);
+       if(!get_name) get_name = item_get_package(item);
+       retv_if(NULL == get_name, NULL);
 
-       ret_if(NULL == data);
-       popup = data;
-       evas_object_del(evas_object_data_del(popup, "button1"));
-       evas_object_del(evas_object_data_del(popup, "button2"));
-       evas_object_data_del(popup, "item");
-       evas_object_del(popup);
+       name = calloc(strlen(get_name)+1, sizeof(char));
+       retv_if(NULL == name, NULL);
+       strncpy(name, get_name, strlen(get_name));
+
+       if (strlen(name) > STRSZE) {
+               char *temp, *ellipsis = ELLIPSIS;
+
+               name = realloc(name, (STRSZE + strlen(ellipsis) + 1)*sizeof(char));
+               retv_if(NULL == name, NULL);
+
+               temp = name + STRSZE;
+
+               while (*ellipsis) *temp++ = *ellipsis++;
+               *temp = '\0';
+       }
+       return name;
 }
 
 
@@ -122,6 +196,8 @@ HAPI Evas_Object *popup_create_uninstall(Evas_Object *parent, Evas_Object *item)
        Evas_Object *btn2;
        char warning[BUFSZE];
 
+       popup_destroy_all();
+
        popup = elm_popup_add(parent);
        retv_if(NULL == popup, NULL);
 
@@ -132,31 +208,39 @@ HAPI Evas_Object *popup_create_uninstall(Evas_Object *parent, Evas_Object *item)
                evas_object_del(popup);
                return NULL;
        }
-       elm_object_text_set(btn1, D_("IDS_COM_SK_YES"));
+       elm_object_style_set(btn1, "popup_button/default");
+       elm_object_text_set(btn1, D_("IDS_COM_SK_CANCEL"));
        evas_object_data_set(popup, "button1", btn1);
        elm_object_part_content_set(popup, "button1", btn1);
-       evas_object_smart_callback_add(btn1, "clicked", _uninstall_yes_cb, popup);
+       evas_object_smart_callback_add(btn1, "clicked", _uninstall_no_cb, popup);
 
        btn2 = elm_button_add(popup);
        if (NULL == btn2) {
                evas_object_del(popup);
                return NULL;
        }
-       elm_object_text_set(btn2, D_("IDS_COM_SK_NO"));
+       elm_object_style_set(btn2, "popup_button/default");
+       elm_object_text_set(btn2, D_("IDS_COM_SK_OK"));
        evas_object_data_set(popup, "button2", btn2);
        elm_object_part_content_set(popup, "button2", btn2);
-       evas_object_smart_callback_add(btn2, "clicked", _uninstall_no_cb, popup);
+       evas_object_smart_callback_add(btn2, "clicked", _uninstall_yes_cb, popup);
 
        evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_data_set(popup, "func_destroy_popup", _uninstall_no_cb);
+       popup_info.popup = popup;
        evas_object_show(popup);
-
-       char *name= item_get_name(item);
+       char *name = _popup_set_name(item);
        retv_if(NULL == name, popup);
 
        char *markup_name = elm_entry_utf8_to_markup(name);
-       retv_if(NULL == markup_name, popup);
+       if (NULL == markup_name) {
+               _E("(NULL == markup_name) -> %s() return", __func__);
+               free(name);
+               return popup;
+       }
 
        snprintf(warning, sizeof(warning), _(IDS_AT_POP_UNINSTALL_PS_Q), markup_name);
+       free(name);
        free(markup_name);
 
        elm_object_text_set(popup, warning);
diff --git a/src/smart_menu.c b/src/smart_menu.c
deleted file mode 100644 (file)
index 3c97633..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd.
- *
- * 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/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 <app_control.h>
-#include <Elementary.h>
-#include <ui-gadget-module.h>
-
-#include "smart_menu.h"
-#include "smart_menu_internal.h"
-#include "layout.h"
-#include "log.h"
-
-#define EAPI __attribute__ ((visibility("default")))
-
-#define MENU_SCREEN_CLASS_NAME "smart-menu"
-#define MENU_SCREEN_DOMAIN "smart-menu"
-
-
-
-static struct {
-       Evas_Smart_Class smart_class;
-       Evas_Smart *smart;
-       Evas_Object *conformant;
-} smart_menu_class_info = {
-       .smart_class = EVAS_SMART_CLASS_INIT_NAME_VERSION(MENU_SCREEN_CLASS_NAME),
-       .smart = NULL,
-       .conformant = NULL,
-};
-
-
-
-static void __smart_menu_add(Evas_Object *smart_menu)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = calloc(1, sizeof(smart_menu_s));
-       ret_if(!smart_menu_info);
-       evas_object_smart_data_set(smart_menu, smart_menu_info);
-       evas_object_size_hint_weight_set(smart_menu, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       //elm_object_part_content_set(smart_menu_class_info.conformant, "elm.swallow.smart_menu", smart_menu);
-
-       smart_menu_info->smart_menu = smart_menu;
-       smart_menu_info->conformant = smart_menu_class_info.conformant;
-       smart_menu_info->layout = _layout_create(smart_menu, smart_menu_info);
-       if (!smart_menu_info->layout) {
-               free(smart_menu_info);
-       }
-
-       _layout_create(smart_menu_info);
-       _smart_menu_show(smart_menu_info);
-}
-
-
-
-static void __smart_menu_del(Evas_Object *smart_menu)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-
-       _layout_destroy(smart_menu_info);
-       free(smart_menu_info);
-}
-
-
-
-static void __smart_menu_move(Evas_Object *smart_menu, Evas_Coord x, Evas_Coord y)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-       ret_if(!smart_menu_info->layout);
-
-       evas_object_move(smart_menu_info->layout, x, y);
-}
-
-
-
-static void __smart_menu_resize(Evas_Object *smart_menu, Evas_Coord w, Evas_Coord h)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-       ret_if(!smart_menu_info->layout);
-
-       evas_object_resize(smart_menu_info->layout, w, h);
-}
-
-
-
-static void __smart_menu_show(Evas_Object *smart_menu)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-       ret_if(!smart_menu_info->layout);
-
-       evas_object_show(smart_menu_info->layout);
-}
-
-
-
-static void __smart_menu_hide(Evas_Object *smart_menu)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-       ret_if(!smart_menu_info->layout);
-
-       evas_object_hide(smart_menu_info->layout);
-}
-
-
-
-static void __smart_menu_color_set(Evas_Object *smart_menu, int r, int g, int b, int a)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-       ret_if(!smart_menu_info->layout);
-
-       evas_object_color_set(smart_menu_info->layout, r, g, b, a);
-}
-
-
-
-static void __smart_menu_clip_set(Evas_Object *smart_menu, Evas_Object *clip)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-       ret_if(!smart_menu_info->layout);
-
-       evas_object_clip_set(smart_menu_info->layout, clip);
-}
-
-
-
-static void __smart_menu_clip_unset(Evas_Object *smart_menu)
-{
-       smart_menu_s *smart_menu_info = NULL;
-
-       ret_if(!smart_menu);
-
-       smart_menu_info = evas_object_smart_data_get(smart_menu);
-       ret_if(!smart_menu_info);
-       ret_if(!smart_menu_info->layout);
-
-       evas_object_clip_unset(smart_menu_info->layout);
-}
-
-
-
-EAPI Evas_Object *smart_menu_add(Evas_Object *conformant)
-{
-       Evas_Object *smart_menu = NULL;
-       Evas *e = NULL;
-
-       retv_if(!conformant, NULL);
-
-       bindtextdomain(MENU_SCREEN_DOMAIN, LOCALEDIR);
-
-       e = evas_object_evas_get(conformant);
-       retv_if(!e, NULL);
-
-       smart_menu_class_info.conformant = conformant;
-
-       /* We need only one attach panel class even if there are many attach panels */
-       if (!smart_menu_class_info.smart) {
-               smart_menu_class_info.smart_class.add = __smart_menu_add;
-               smart_menu_class_info.smart_class.del = __smart_menu_del;
-               smart_menu_class_info.smart_class.move = __smart_menu_move;
-               smart_menu_class_info.smart_class.resize = __smart_menu_resize;
-               smart_menu_class_info.smart_class.show = __smart_menu_show;
-               smart_menu_class_info.smart_class.hide = __smart_menu_hide;
-               smart_menu_class_info.smart_class.color_set = __smart_menu_color_set;
-               smart_menu_class_info.smart_class.clip_set = __smart_menu_clip_set;
-               smart_menu_class_info.smart_class.clip_unset = __smart_menu_clip_unset;
-               smart_menu_class_info.smart = evas_smart_class_new(&smart_menu_class_info.smart_class);
-       }
-
-       smart_menu = evas_object_smart_add(e, smart_menu_class_info.smart);
-       retv_if(!smart_menu, NULL);
-
-       return smart_menu;
-}
-
-
-
-// End of this file
index d150005..2f518bc 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
  *
+ * Contact: Jin Yoon <jinny.yoon@samsung.com>
+ *          Junkyu Han <junkyu.han@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