Jin Yoon <jinny.yoon at samsung dot com>
+Junkyu Han <junkyu.han at samsung dot com>
Youngjoo Park <yjoo93.part at samsung dot com>
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
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}\"")
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)
src/item.c
src/item_badge.c
src/item_event.c
+ src/key.c
src/layout.c
src/list.c
src/mapbuf.c
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)
+++ /dev/null
-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
-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)
*
* 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 {
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;
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;
}
}
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;
}
}
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;
}
*
* 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 {
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 {
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;
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;
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;
}
}
}
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 {
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";
}
}
*
* 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 {
*
* 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 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";
*
* 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 _ITEM_HEIGHT 180.0
+#define _ITEM_WIDTH 198.0
styles {
style {
image: "../images/menu_badge_01.png" COMP;
}
+
+
collections {
+ base_scale: 1.8;
group {
name: "icon";
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 {
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;
}
}
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;
}
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";
}
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 {
}
}
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;
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;
text {
text_class: "tizen";
font: "TIZEN:style=medium";
- size: 16;
- text: "Icon";
+ size: 24;
align: 0.5 0.1;
}
+ visible: 1;
}
description
{
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 {
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 {
target: "block_event";
target: "uninstall";
target: "uninstall_event";
+ target: "uninstall_focus";
}
program {
name: "uninstall,off";
target: "block_event";
target: "uninstall";
target: "uninstall_event";
+ target: "uninstall_focus";
}
program {
name: "uninstall,down";
*
* 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;
}
}
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
--- /dev/null
+org.tizen.phone
+org.tizen.contacts
+++ /dev/null
-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
<?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>
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
lv.po
mk.po
nb.po
- nl_NL.po
+ nl.po
pl.po
pt_BR.po
pt_PT.po
uz.po
zh_CN.po
zh_HK.po
- zh_SG.po
zh_TW.po
+ zh_SG.po
)
SET(MSGFMT "/usr/bin/msgfmt")
msgstr "تم"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "هل تريد إلغاء تثبيت %s؟"
\ No newline at end of file
+msgstr "هل تريد إلغاء تثبيت %s؟"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "إلغاء التثبيت"
+
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"
+
msgstr "Готово"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Деинсталиране на %s?"
\ No newline at end of file
+msgstr "Деинсталиране на %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Деинсталиране"
+
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"
+
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"
+
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"
+
--- /dev/null
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "Fertig"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "%s deinstallieren?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Deinstallieren"
+
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
msgstr "Τέλος"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Κατάργηση της εγκατάστασης του %s;"
\ No newline at end of file
+msgstr "Κατάργηση της εγκατάστασης του %s;"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Κατάργηση εγκατάστασης"
+
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"
+
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"
+
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"
+
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"
+
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
--- /dev/null
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "Aceptar"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "¿Desinstalar %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Desinstalar"
+
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"
+
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"
+
--- /dev/null
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "انجام شد"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "لغو نصب %s؟"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "لغو نصب"
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"
+
--- /dev/null
+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"
+
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"
+
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
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"
+
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"
+
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 "स्थापना रद्द करें"
+
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"
+
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"
+
msgstr "Արված է"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Ապատեղադրե՞լ %s-ը:"
\ No newline at end of file
+msgstr "Ապատեղադրե՞լ %s-ը:"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Ապատեղադրել"
+
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"
+
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"
+
msgstr "完了"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%sをアンインストールしますか?"
\ No newline at end of file
+msgstr "%sをアンインストールしますか?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+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 "ინსტალაციის გაუქმება"
+
msgstr "Дайын"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "%s жою керек пе?"
\ No newline at end of file
+msgstr "%s жою керек пе?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+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 "삭제"
+
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"
+
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"
+
msgstr "Готово"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Да се деинсталира %s?"
\ No newline at end of file
+msgstr "Да се деинсталира %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Деинсталирај"
+
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
--- /dev/null
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "Gereed"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "%s verwijderen?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Verwijderen"
+
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
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"
+
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"
+
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"
+
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"
+
msgstr "Готово"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Удалить %s?"
\ No newline at end of file
+msgstr "Удалить %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Удалить"
+
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ť"
+
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"
+
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"
+
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"
+
--- /dev/null
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "เรียบร้อย"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "ถอนการติดตั้ง %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "ลบการติดตั้ง"
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"
+
msgstr "Готово"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "Видалити %s?"
\ No newline at end of file
+msgstr "Видалити %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "Видалити"
+
--- /dev/null
+msgid "IDS_HS_BUTTON_DONE"
+msgstr "مکمل"
+
+msgid "IDS_AT_POP_UNINSTALL_PS_Q"
+msgstr "%s نا تنصیب کریں؟"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+msgstr "نا تنصیب کریں"
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"
+
msgstr "完成"
msgid "IDS_AT_POP_UNINSTALL_PS_Q"
-msgstr "是否卸载 %s?"
\ No newline at end of file
+msgstr "是否卸载 %s?"
+
+msgid "IDS_AT_BODY_UNINSTALL"
+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 "解除安裝"
+
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
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 "解除安裝"
+
+++ /dev/null
-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
+++ /dev/null
-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)
+++ /dev/null
-/usr/share/*
-@TZ_SYS_RW_APP@/org.tizen.menu-screen/*
-@TZ_SYS_RW_PACKAGES@/*
+++ /dev/null
-#!/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
+++ /dev/null
-#!/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
*
* 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 _db_info {
long long rowid;
int type;
-
char *appid;
char *name;
char *content_info;
*
* 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);
*
* 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 __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__
*
* 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
*
* 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_
*
* 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
*
* 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
*
* 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
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);
*
* 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
*
* 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
--- /dev/null
+/*
+ * 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
*
* 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
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
*
* 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;
char *package;
pid_t pid;
time_t launch_time;
- long long installed_time;
+ int installed_time;
void *data;
} app_list_item;
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__
*
* 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
*
* 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
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__
*
* 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
*
* 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
*
* 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
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);
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
*
* 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__
*
* 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__
*
* 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)
--- /dev/null
+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- ------
--- /dev/null
+<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>
+++ /dev/null
-#!/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
-
+++ /dev/null
-<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>
+%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
*
* 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,"\
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);
*
* 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();
}
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 {
-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");
}
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;
}
{
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);
}
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;
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;
}
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;
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();
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);
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.");
}
} 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");
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);
}
/*
- * 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);
}
+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;
}
*
* 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
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);
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);
*
* 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
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;
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;
}
}
}
} 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;
*
* 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
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");
-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;
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);
*
* 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"
#include "mapbuf.h"
#include "page.h"
#include "page_scroller.h"
+#include "pkgmgr.h"
#include "popup.h"
#include "util.h"
#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"
-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");
}
}
-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;
-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);
}
-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);
}
-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");
-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");
+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;
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);
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);
+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;
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");
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"));
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;
}
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");
}
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);
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);
}
}
-
+#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);
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);
}
}
*
* 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
*
* 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
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;
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);
}
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());
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);
}
--- /dev/null
+/*
+ * 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
*
* 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 <Elementary.h>
+//#include <Ecore_X.h>
+//#include <utilX.h>
#include <vconf.h>
#include "menu_screen.h"
#include "layout.h"
#include "mapbuf.h"
#include "page.h"
+#include "page_scroller.h"
#include "item.h"
#include "util.h"
#include "all_apps/layout.h"
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;
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);
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);
+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
*
* 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 <Elementary.h>
#include <ail.h>
+#include <pkgmgr-info.h>
#include "list.h"
#include "util.h"
-
+/* 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;
}
ret_if(NULL == ai);
/* Origin field */
+ if (ai->pkgid) {
+ free(ai->pkgid);
+ ai->pkgid = NULL;
+ }
+
if (ai->package) {
free(ai->package);
ai->package = NULL;
+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
*
* 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
+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;
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);
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__);
}
}
*
* 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,
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;
}
+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);
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;
static int _dead_cb(int pid, void *data)
{
- evas_object_show(menu_screen_get_win());
return EXIT_SUCCESS;
}
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();
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());
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);
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);
}
+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);
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;
}
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");
{
_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;
}
{
_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;
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;
-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
*
* 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
*
* 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
Evas_Object *box;
char *page_edje;
- bool enable_bg_image;
-
unsigned int count;
int page_height;
int page_width;
_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);
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;
}
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");
*
* 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 <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;
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);
-}
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");
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;
}
-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;
-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);
}
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");
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;
}
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;
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");
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");
- }
}
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);
+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;
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);
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);
+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
*
* 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"
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;
}
},
};
- 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;
}
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;
}
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;
}
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;
}
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;
}
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;
-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;
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;
}
-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
*
* 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);
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"));
-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;
}
Evas_Object *btn2;
char warning[BUFSZE];
+ popup_destroy_all();
+
popup = elm_popup_add(parent);
retv_if(NULL == popup, NULL);
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);
+++ /dev/null
-/*
- * 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
*
* 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