From: Kamil Lipiszko Date: Wed, 27 Jan 2016 11:33:40 +0000 (+0100) Subject: migrate to Tizen 3.0 SDK X-Git-Tag: submit/tizen_app/20160312.110846~3 X-Git-Url: http://review.tizen.org/git/?p=apps%2Fcore%2Fpreloaded%2Ftaskmanager.git;a=commitdiff_plain;h=ac242c91531fc1d0c9250ae12febb75ea78be050 migrate to Tizen 3.0 SDK Changes: - remove previous build system files, - change dir structure to adjust Tizen IDE, - replace pkgmgrinfo with app_info API, - replace rua with context_history, - add necessary privileges. Change-Id: Ica60de8afed513d34dfc8923e51d4bda45845de0 --- diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..40c5eea --- /dev/null +++ b/.cproject @@ -0,0 +1,584 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.exportMap b/.exportMap new file mode 100644 index 0000000..43e310e --- /dev/null +++ b/.exportMap @@ -0,0 +1,4 @@ +{ + global: main; + local: *; +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..364186e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/Debug +/Release diff --git a/.project b/.project new file mode 100644 index 0000000..9ad9417 --- /dev/null +++ b/.project @@ -0,0 +1,47 @@ + + + taskmanager + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + 1453299766335 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + 1453299766351 + + 6 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-project_def.prop + + + + diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 512f3fa..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,73 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(task-mgr) -# FIND ALL SOURCE IN A SOURCE DIRECTORY -AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src SRCS) - -#INCLUDE FILE -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) -SET(PACKAGE "${PROJECT_NAME}") -SET(RESOURCE_DIR "${CMAKE_SOURCE_DIR}/res") -SET(EDJDIR "${RESOURCE_DIR}/edje/${PACKAGE}") - -INCLUDE(FindPkgConfig) -pkg_check_modules(pkgs REQUIRED - appcore-efl - evas - edje - elementary - ecore - eina - capi-appfw-application - capi-system-info - capi-appfw-package-manager - capi-appfw-app-manager - dlog - pkgmgr-info - rua - feedback -) - -SET(PREFIX ${CMAKE_INSTALL_PREFIX}) -SET(RESDIR "${PREFIX}/res") -SET(EDJEDIR "${RESDIR}/edje") -SET(IMAGEDIR "${RESDIR}/images") -SET(LOCALEDIR "${RESDIR}/locale") - -FOREACH(flag ${pkgs_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") -ENDFOREACH(flag) - -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE") -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_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") - -MESSAGE(${CMAKE_C_FLAGS}) - -ADD_DEFINITIONS("-DEDJEDIR=\"${EDJEDIR}\"") -ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") -ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"") - -ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) - -TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) - -# Install -INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) - -#Install images -INSTALL(DIRECTORY res/images/ DESTINATION res/images) - -# Install Manifest File -INSTALL(FILES data/org.tizen.task-mgr.xml DESTINATION /usr/share/packages) -# End of a file -ADD_SUBDIRECTORY(res) diff --git a/data/org.tizen.task-mgr.xml b/data/org.tizen.task-mgr.xml deleted file mode 100644 index 5a8d5be..0000000 --- a/data/org.tizen.task-mgr.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - Moonkyoung Park - TASK MANAGER APPLICATION - - - - - - http://tizen.org/privilege/appmanager.launch - http://tizen.org/privilege/appmanager.kill - - diff --git a/include/conf.h b/inc/conf.h similarity index 84% rename from include/conf.h rename to inc/conf.h index ad6bb97..f77b622 100644 --- a/include/conf.h +++ b/inc/conf.h @@ -42,9 +42,13 @@ #define BG_COLOR (255*0.5) //edc -#define LAYOUT EDJEDIR"/layout.edj" -#define BOX_LAYOUT EDJEDIR"/box.edj" -#define ITEM_LAYOUT EDJEDIR"/item.edj" +#define EDJE_DIR "edje" +#define LAYOUT_EDJ EDJE_DIR"/layout.edj" +#define BOX_LAYOUT_EDJ EDJE_DIR"/box.edj" +#define ITEM_LAYOUT_EDJ EDJE_DIR"/item.edj" + +#define IMAGES_DIR "images" +#define DEFAULT_ICON IMAGES_DIR"/default.png" #define BOX_GROUP_NAME "box" diff --git a/include/item.h b/inc/item.h similarity index 100% rename from include/item.h rename to inc/item.h diff --git a/include/list.h b/inc/list.h similarity index 86% rename from include/list.h rename to inc/list.h index 2d5361e..897560f 100644 --- a/include/list.h +++ b/inc/list.h @@ -20,6 +20,8 @@ #ifndef __TASK_MGR_LIST_H__ #define __TASK_MGR_LIST_H__ +#include +#include #include "util.h" typedef struct { @@ -31,13 +33,13 @@ typedef struct { char *arg; int pid; - Eina_Bool nodisplay; + bool nodisplay; Eina_Bool taskmanage; Eina_Bool unmounted; Eina_Bool multi_launch; Eina_Bool isAlreadySet; - time_t launch_time; + int launch_time; } list_type_default_s; @@ -46,6 +48,6 @@ typedef struct { extern task_mgr_error_e list_create(Eina_List **pkg_list); extern void list_destroy(Eina_List *pkg_list); -extern task_mgr_error_e list_sort(Eina_List *pkg_list, int (*_sort_cb)(const void *d1, const void *d2)); +extern Eina_List *list_sort(Eina_List *pkg_list, int (*_sort_cb)(const void *d1, const void *d2)); #endif //__TASK_MGR_LIST_H__ diff --git a/include/log.h b/inc/log.h similarity index 100% rename from include/log.h rename to inc/log.h diff --git a/include/main.h b/inc/main.h similarity index 100% rename from include/main.h rename to inc/main.h diff --git a/include/scroller.h b/inc/scroller.h similarity index 100% rename from include/scroller.h rename to inc/scroller.h diff --git a/include/util.h b/inc/util.h similarity index 80% rename from include/util.h rename to inc/util.h index af2c727..183c376 100644 --- a/include/util.h +++ b/inc/util.h @@ -33,7 +33,6 @@ #endif - /* Enum */ typedef enum { TASK_MGR_ERROR_NONE = 0, @@ -44,9 +43,21 @@ typedef enum { TASK_MGR_ERROR_NO_DATA = -5, } task_mgr_error_e; +typedef enum { + APP_DIR_DATA = 0, + APP_DIR_CACHE, + APP_DIR_RESOURCE, + APP_DIR_SHARED_DATA, + APP_DIR_SHARED_RESOURCE, + APP_DIR_SHARED_TRUSTED, + APP_DIR_EXTERNAL_DATA, + APP_DIR_EXTERNAL_CACHE, + APP_DIR_EXTERNAL_SHARED_DATA, +} app_subdir; + extern Eina_Bool util_kill_app(const char *appid); extern Eina_Bool util_launch_app(const char *appid); - +extern const char *util_get_file_path(app_subdir dir, const char *relative); #endif //__TASK_MGR_UTIL_H__ diff --git a/org.tizen.task-mgr.manifest b/org.tizen.task-mgr.manifest deleted file mode 100644 index a76fdba..0000000 --- a/org.tizen.task-mgr.manifest +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packaging/org.tizen.task-mgr.spec b/packaging/org.tizen.task-mgr.spec deleted file mode 100644 index 6520e59..0000000 --- a/packaging/org.tizen.task-mgr.spec +++ /dev/null @@ -1,66 +0,0 @@ -%define Exec task-mgr -%define AppInstallPath /usr/apps/%{name} - -Name: org.tizen.task-mgr -Summary: Taskmanager application -Version: 0.0.1 -Release: 1 -License: Apache-2.0 -Source0: %{name}-%{version}.tar.gz - -%if "%{?tizen_profile_name}" == "wearable" -ExcludeArch: %{arm} %ix86 x86_64 -%endif - -%if "%{?tizen_profile_name}" == "tv" -ExcludeArch: %{arm} %ix86 x86_64 -%endif - -BuildRequires: pkgconfig(appcore-efl) -BuildRequires: pkgconfig(capi-appfw-application) -BuildRequires: pkgconfig(ecore) -BuildRequires: pkgconfig(eina) -BuildRequires: pkgconfig(evas) -BuildRequires: pkgconfig(edje) -BuildRequires: edje-tools -BuildRequires: gettext-tools -BuildRequires: pkgconfig(dlog) -BuildRequires: pkgconfig(elementary) -BuildRequires: pkgconfig(capi-system-info) -BuildRequires: pkgconfig(capi-appfw-package-manager) -BuildRequires: pkgconfig(capi-appfw-app-manager) -BuildRequires: cmake -BuildRequires: pkgconfig(pkgmgr-info) -BuildRequires: pkgconfig(rua) -BuildRequires: pkgconfig(feedback) - -%description -Taskmanager application. - -%prep -%setup -q - -%build -export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE" -export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE" -export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE" - -cmake . -DCMAKE_INSTALL_PREFIX="%{AppInstallPath}" -DCMAKE_TARGET="%{Exec}" -DCMAKE_PACKAGE="%{name}" -make %{?jobs:-j%jobs} - -%install -rm -rf %{buildroot} -%make_install - -%post -/sbin/ldconfig - -%postun -p /sbin/ldconfig - -%files -%manifest %{name}.manifest -%defattr(-,root,root,-) -%{AppInstallPath}/bin/task-mgr -%{AppInstallPath}/res/* -%{_datarootdir}/packages/%{name}.xml -%{AppInstallPath}/res/locale/*/LC_MESSAGES/* diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt deleted file mode 100644 index 5cc2056..0000000 --- a/res/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -ADD_SUBDIRECTORY(edje) -#ADD_SUBDIRECTORY(images) -ADD_SUBDIRECTORY(po) diff --git a/res/edje/CMakeLists.txt b/res/edje/CMakeLists.txt deleted file mode 100644 index 26955b0..0000000 --- a/res/edje/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -#install edj -ADD_CUSTOM_TARGET(layout.edj - COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images - ${CMAKE_CURRENT_SOURCE_DIR}/layout.edc layout.edj - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/layout.edc -) -ADD_DEPENDENCIES(${PROJECT_NAME} layout.edj) -INSTALL(FILES layout.edj DESTINATION ${EDJEDIR}) - -ADD_CUSTOM_TARGET(box.edj - COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images - ${CMAKE_CURRENT_SOURCE_DIR}/box.edc box.edj - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/box.edc -) -ADD_DEPENDENCIES(${PROJECT_NAME} box.edj) -INSTALL(FILES box.edj DESTINATION ${EDJEDIR}) - -ADD_CUSTOM_TARGET(item.edj - COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images - ${CMAKE_CURRENT_SOURCE_DIR}/item.edc item.edj - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/item.edc -) -ADD_DEPENDENCIES(${PROJECT_NAME} item.edj) -INSTALL(FILES item.edj DESTINATION ${EDJEDIR}) - diff --git a/res/edje/conf.h b/res/edje/conf.h index de97229..9c2356f 120000 --- a/res/edje/conf.h +++ b/res/edje/conf.h @@ -1 +1 @@ -../../include/conf.h \ No newline at end of file +../../inc/conf.h \ No newline at end of file diff --git a/src/.util.c.swp b/src/.util.c.swp new file mode 100644 index 0000000..123e66e Binary files /dev/null and b/src/.util.c.swp differ diff --git a/src/item.c b/src/item.c index b6ef2c2..442c45c 100644 --- a/src/item.c +++ b/src/item.c @@ -20,7 +20,6 @@ #include #include #include -#include #include "conf.h" #include "item.h" @@ -53,7 +52,7 @@ -extern list_type_default_s *item_get_info(Evas_Object *item) +list_type_default_s *item_get_info(Evas_Object *item) { retv_if(!item, NULL); list_type_default_s *info = NULL; @@ -65,7 +64,7 @@ extern list_type_default_s *item_get_info(Evas_Object *item) -extern void item_clear_set_disable(Evas_Object *scroller) +void item_clear_set_disable(Evas_Object *scroller) { Evas_Object *clear_item = NULL; ret_if(!scroller); @@ -89,7 +88,7 @@ static void _clear_all_clicked_cb(void *data, Evas_Object *obj, const char *emis -extern Evas_Object *item_clear_all_create(Evas_Object *scroller) +Evas_Object *item_clear_all_create(Evas_Object *scroller) { retv_if(!scroller, NULL); @@ -98,7 +97,7 @@ extern Evas_Object *item_clear_all_create(Evas_Object *scroller) clear_item = elm_layout_add(scroller); retv_if(!clear_item, NULL); - if (!elm_layout_file_set(clear_item, ITEM_LAYOUT, "clear_item")) { + if (!elm_layout_file_set(clear_item, util_get_file_path(APP_DIR_RESOURCE, ITEM_LAYOUT_EDJ), "clear_item")) { _E("Failed to set the layout"); evas_object_del(clear_item); return NULL; @@ -118,7 +117,7 @@ extern Evas_Object *item_clear_all_create(Evas_Object *scroller) -extern void item_clear_all_destroy(Evas_Object *scroller) +void item_clear_all_destroy(Evas_Object *scroller) { ret_if(!scroller); @@ -592,7 +591,7 @@ static void _clicked_cb(void *data, Evas_Object *obj, void *event_info) -extern Evas_Object *item_create(Evas_Object *scroller, list_type_default_s *info) +Evas_Object *item_create(Evas_Object *scroller, list_type_default_s *info) { retv_if(NULL == scroller, NULL); retv_if(NULL == info, NULL); @@ -604,13 +603,13 @@ extern Evas_Object *item_create(Evas_Object *scroller, list_type_default_s *info item = elm_layout_add(scroller); retv_if(NULL == item, NULL); - elm_layout_file_set(item, ITEM_LAYOUT, "item"); + elm_layout_file_set(item, util_get_file_path(APP_DIR_RESOURCE, ITEM_LAYOUT_EDJ), "item"); evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(item); item_inner = elm_layout_add(scroller); goto_if(NULL == item_inner, ERROR); - elm_layout_file_set(item_inner, ITEM_LAYOUT, "item_inner"); + elm_layout_file_set(item_inner, util_get_file_path(APP_DIR_RESOURCE, ITEM_LAYOUT_EDJ), "item_inner"); evas_object_size_hint_weight_set(item_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(item_inner); elm_object_part_content_set(item, "inner", item_inner); @@ -643,7 +642,7 @@ ERROR: -extern void item_destroy(Evas_Object *item) +void item_destroy(Evas_Object *item) { ret_if(!item); @@ -678,7 +677,7 @@ extern void item_destroy(Evas_Object *item) -extern void item_terminate(Evas_Object *item) +void item_terminate(Evas_Object *item) { char *appid = NULL; int ret; @@ -696,10 +695,6 @@ extern void item_terminate(Evas_Object *item) if (running) { util_kill_app(appid); } - - if (0 != rua_delete_history_with_pkgname(appid)) { - _E("Cannot delete history for package(%s)", appid); - } } diff --git a/src/list.c b/src/list.c index dad2c76..4051d45 100644 --- a/src/list.c +++ b/src/list.c @@ -18,13 +18,14 @@ */ #include -#include -#include +#include +#include #include "list.h" #include "log.h" #include "main.h" #include "util.h" +#include "conf.h" typedef struct pkginfo { char *appid; @@ -40,13 +41,6 @@ typedef struct { int pid; } private_pid_s; -static struct { - Eina_Hash *pkginfo_table; -} private_table_s = { - .pkginfo_table = NULL, -}; - - static void _pkglist_unretrieve_item(list_type_default_s *default_info) { @@ -54,231 +48,187 @@ static void _pkglist_unretrieve_item(list_type_default_s *default_info) return; } - if (default_info->name) { - free(default_info->name); - default_info->name = NULL; - } - if (default_info->icon) { - free(default_info->icon); - default_info->icon = NULL; - } - if (default_info->pkgid) { - free(default_info->pkgid); - default_info->pkgid = NULL; - } - if (default_info->arg) { - free(default_info->arg); - default_info->arg = NULL; - } - if (default_info->appid) { - free(default_info->appid); - default_info->appid = NULL; - } - if (default_info) { - free(default_info); - default_info = NULL; - } -} + free(default_info->name); + default_info->name = NULL; + free(default_info->icon); + default_info->icon = NULL; + free(default_info->pkgid); + default_info->pkgid = NULL; -static list_type_default_s *_pkglist_retrieve_item(const char *appid, const char *arg, time_t launch_time) -{ - retv_if(!appid, NULL); + free(default_info->arg); + default_info->arg = NULL; - private_pkginfo_s *pkg_info = NULL; - list_type_default_s *default_info = NULL; + free(default_info->appid); + default_info->appid = NULL; - pkg_info = eina_hash_find(private_table_s.pkginfo_table, appid); - if (!pkg_info) { - _D("app(%s) is not taskmanage app", appid); - return NULL; - } + free(default_info); + default_info = NULL; +} - if (!pkg_info->taskmanage) { - _D("app(%s) is not taskmanage app", appid); - return NULL; - } +static task_mgr_error_e _get_app_launchtime(Eina_List *pkg_list) +{ - default_info = calloc(1, sizeof(*default_info)); - retv_if(!default_info, NULL); + _D(""); - default_info->taskmanage = pkg_info->taskmanage; - default_info->launch_time = launch_time; - default_info->nodisplay = pkg_info->nodisplay; + int ret = CONTEXT_HISTORY_ERROR_NONE; + int rec_size = 0; + int last_launch_time; + char *context_app_id; + unsigned pkg_size; + unsigned cxt_size; + Eina_List *l; + list_type_default_s *pkg_info = NULL; - default_info->appid = strdup(appid); - goto_if(!default_info->appid, ERROR); + context_history_h history_handle; + context_history_list_h history_app_list; + context_history_record_h history_record; - if (arg) { - default_info->arg = strdup(arg); - goto_if(!default_info->arg, ERROR); - } + ret = context_history_create(&history_handle); + retv_if(ret != CONTEXT_HISTORY_ERROR_NONE, TASK_MGR_ERROR_FAIL); - if (pkg_info->pkgid) { - default_info->pkgid = strdup(pkg_info->pkgid); - goto_if(!default_info->pkgid, ERROR); - } else { - _E("Fail to get pkgid from pkg info table"); - goto ERROR; - } + ret = context_history_get_list(history_handle, CONTEXT_HISTORY_RECENTLY_USED_APP, NULL, &history_app_list); - if (pkg_info->icon) { - default_info->icon = strdup(pkg_info->icon); - goto_if(!default_info->icon, ERROR); - } else { - _E("Fail to get icon from pkg info table"); - goto ERROR; + if (ret != CONTEXT_HISTORY_ERROR_NONE) { + context_history_destroy(history_handle); + return TASK_MGR_ERROR_FAIL; } - if (pkg_info->name) { - default_info->name = strdup(pkg_info->name); - goto_if(!default_info->name, ERROR); - } else { - _E("Fail to get name from pkg info table"); - goto ERROR; + ret = context_history_list_get_count(history_app_list, &rec_size); + if (ret != CONTEXT_HISTORY_ERROR_NONE) { + context_history_list_destroy(history_app_list); + context_history_destroy(history_handle); + return TASK_MGR_ERROR_FAIL; } - _D("list add id : [%s], icon : [%s], name : [%s]", pkg_info->pkgid, pkg_info->icon, pkg_info->name); - - return default_info; + _D("Num of records: %d", rec_size); -ERROR: - - _pkglist_unretrieve_item(default_info); - return NULL; -} + int i; + for (i = 0; i < rec_size; ++i) { + context_history_list_get_current(history_app_list, &history_record); + context_history_record_get_int(history_record, CONTEXT_HISTORY_LAST_TIME, &last_launch_time); + context_history_record_get_string(history_record, CONTEXT_HISTORY_APP_ID, &context_app_id); + if (!context_app_id) { + _D("Context_app_id == NULL"); + context_history_record_destroy(history_record); + context_history_list_move_next(history_app_list); + continue; + } -#define DEFAULT_ICON IMAGEDIR"/default.png" -int _get_pkginfo_cb(pkgmgrinfo_appinfo_h app_handle, void *user_data) -{ - char *appid = NULL; - char *pkgid = NULL; - char *name = NULL; - char *icon = NULL; - private_pkginfo_s *pkg_info = NULL; + EINA_LIST_FOREACH(pkg_list, l, pkg_info) { - pkg_info = calloc(1, sizeof(*pkg_info)); - retv_if(!pkg_info, PMINFO_R_ERROR); + if (!pkg_info || !pkg_info->appid) + continue; - memset(pkg_info, 0, sizeof(private_pkginfo_s)); + pkg_size = strlen(pkg_info->appid); + cxt_size = strlen(context_app_id); - pkgmgrinfo_appinfo_get_appid(app_handle, &appid); - goto_if(!appid, ERROR); + if (!strncmp(pkg_info->appid, context_app_id, + pkg_size > cxt_size ? pkg_size : cxt_size) + && strlen(pkg_info->appid) == strlen(context_app_id)) - pkg_info->appid = strdup(appid); - goto_if(!pkg_info->appid, ERROR); + pkg_info->launch_time = last_launch_time; + } - if (PMINFO_R_OK != pkgmgrinfo_appinfo_is_taskmanage(app_handle, &pkg_info->taskmanage)) { - goto ERROR; - } + free(context_app_id); - if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(app_handle, &pkgid)) { - goto ERROR; + context_history_record_destroy(history_record); + context_history_list_move_next(history_app_list); } - pkg_info->pkgid = strdup(pkgid); - goto_if(!pkg_info->pkgid, ERROR); - if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(app_handle, &icon)) { - goto ERROR; - } - if (icon && 0 == access(icon, F_OK)) { - pkg_info->icon= strdup(icon); - } else { - _D("Fail to access icon path"); - pkg_info->icon = strdup(DEFAULT_ICON); - } - goto_if(!pkg_info->icon, ERROR); + context_history_list_destroy(history_app_list); + context_history_destroy(history_handle); - if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(app_handle, &name)) { - goto ERROR; - } - if (name) { - pkg_info->name= strdup(name); - goto_if(!pkg_info->name, ERROR); - } + return TASK_MGR_ERROR_NONE; - if (PMINFO_R_OK != pkgmgrinfo_appinfo_is_nodisplay(app_handle, &pkg_info->nodisplay)) { - goto ERROR; - } +} - eina_hash_add(private_table_s.pkginfo_table, pkg_info->appid, pkg_info); +static void _release_pkg_info(list_type_default_s *pkg_info) +{ + _D(""); - return PMINFO_R_OK; + if (!pkg_info) + return; -ERROR: - if (pkg_info->name) free(pkg_info->name); - if (pkg_info->icon) free(pkg_info->icon); - if (pkg_info->pkgid) free(pkg_info->pkgid); - if (pkg_info->appid) free(pkg_info->appid); + free(pkg_info->name); + free(pkg_info->icon); + free(pkg_info->pkgid); + free(pkg_info->appid); free(pkg_info); - return PMINFO_R_ERROR; } - - -static task_mgr_error_e _create_pkginfo_table(void) +static bool _get_pkginfo_cb(app_info_h app_handle, void *user_data) { _D(""); - pkgmgrinfo_appinfo_filter_h handle; - int ret = 0; + bool is_running = false; + Eina_List **pkg_list = (Eina_List **) user_data; - private_table_s.pkginfo_table = eina_hash_string_superfast_new(NULL); + list_type_default_s *pkg_info = calloc(1, sizeof(list_type_default_s)); + retv_if(!pkg_info, false); - ret = pkgmgrinfo_appinfo_filter_create(&handle); - if (PMINFO_R_OK != ret) { - return TASK_MGR_ERROR_FAIL; - } + if (app_info_get_app_id(app_handle, &pkg_info->appid) != APP_MANAGER_ERROR_NONE + || !pkg_info->appid) { - ret = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_TASKMANAGE, 1); - if (PMINFO_R_OK != ret) { - pkgmgrinfo_appinfo_filter_destroy(handle); - return TASK_MGR_ERROR_FAIL; + _release_pkg_info(pkg_info); + return false; } - ret = pkgmgrinfo_appinfo_usr_filter_foreach_appinfo(handle, _get_pkginfo_cb, NULL, getuid()); - if (ret != PMINFO_R_OK) { - pkgmgrinfo_appinfo_filter_destroy(handle); - return TASK_MGR_ERROR_FAIL; + if (app_manager_is_running(pkg_info->appid, &is_running) != APP_MANAGER_ERROR_NONE + || !is_running) { + + _D("Application %s is not running", pkg_info->appid); + _release_pkg_info(pkg_info); + return true; } - pkgmgrinfo_appinfo_filter_destroy(handle); + if (app_info_get_package(app_handle, &pkg_info->pkgid) != APP_MANAGER_ERROR_NONE + || !pkg_info->pkgid) { - return TASK_MGR_ERROR_NONE; -} + _release_pkg_info(pkg_info); + return false; + } + if (app_info_get_label(app_handle, &pkg_info->name) != APP_MANAGER_ERROR_NONE + || !pkg_info->name) { + _release_pkg_info(pkg_info); + return false; + } -static Eina_Bool _remove_pkginfo(const Eina_Hash *hash, const void *key, void *data, void *fdata) -{ - retv_if(!data, EINA_FALSE); + if (app_info_is_nodisplay(app_handle, &pkg_info->nodisplay) != APP_MANAGER_ERROR_NONE) { - private_pkginfo_s *pkg_info = data; + _release_pkg_info(pkg_info); + return false; + } - if (pkg_info->name) free(pkg_info->name); - if (pkg_info->icon) free(pkg_info->icon); - if (pkg_info->pkgid) free(pkg_info->pkgid); - if (pkg_info->appid) free(pkg_info->appid); + if (app_info_get_icon(app_handle, &pkg_info->icon) != APP_MANAGER_ERROR_NONE + || !pkg_info->icon) { - return EINA_TRUE; -} + _release_pkg_info(pkg_info); + return false; + } + if (0 != access(pkg_info->icon, F_OK)) { + _D("Fail to access icon path"); + pkg_info->icon = strdup(util_get_file_path(APP_DIR_RESOURCE, ITEM_LAYOUT_EDJ)); + } -static void _destroy_pkginfo_table(void) -{ - _D(""); + _D("AppID: %s", pkg_info->appid); + _D("PkgID: %s", pkg_info->pkgid); + _D("Icon: %s", pkg_info->icon); + _D("Label: %s", pkg_info->name); - eina_hash_foreach(private_table_s.pkginfo_table, _remove_pkginfo, NULL); - eina_hash_free(private_table_s.pkginfo_table); - private_table_s.pkginfo_table = NULL; -} + *pkg_list = eina_list_append(*pkg_list, pkg_info); + return true; +} static int _launch_time_sort_cb(const void *d1, const void *d2) { @@ -294,74 +244,74 @@ static int _launch_time_sort_cb(const void *d1, const void *d2) return tmp1->launch_time >= tmp2->launch_time ? -1 : 1; } +static task_mgr_error_e _get_running_apps(Eina_List **pkg_list) +{ + _D(""); + app_info_filter_h handle; + int ret = 0; -extern task_mgr_error_e list_sort(Eina_List *list, int (*_sort_cb)(const void *d1, const void *d2)) -{ - retv_if(!list, TASK_MGR_ERROR_INVALID_PARAMETER); + ret = app_info_filter_create(&handle); + if (ret != APP_MANAGER_ERROR_NONE) + return TASK_MGR_ERROR_FAIL; - list = eina_list_sort(list, eina_list_count(list), _sort_cb); - retv_if(!list, TASK_MGR_ERROR_FAIL); + ret = app_info_filter_add_bool(handle, PACKAGE_INFO_PROP_APP_TASKMANAGE, 1); + if (ret != APP_MANAGER_ERROR_NONE) { + app_info_filter_destroy(handle); + return TASK_MGR_ERROR_FAIL; + } - return TASK_MGR_ERROR_NONE; -} + ret = app_info_filter_foreach_appinfo(handle, _get_pkginfo_cb, pkg_list); + if (ret != APP_MANAGER_ERROR_NONE) { + app_info_filter_destroy(handle); + return TASK_MGR_ERROR_FAIL; + } + app_info_filter_destroy(handle); + return TASK_MGR_ERROR_NONE; +} -extern task_mgr_error_e list_create(Eina_List **pkg_list) +Eina_List *list_sort(Eina_List *list, int (*_sort_cb)(const void *d1, const void *d2)) { - _D(""); + retv_if(!list, NULL); - rua_init(); - char **table = NULL; - list_type_default_s *default_info = NULL; + list = eina_list_sort(list, eina_list_count(list), _sort_cb); + retv_if(!list, NULL); - int nrows = 0, ncols = 0; - int row = 0; + return list; +} - retv_if (TASK_MGR_ERROR_NONE != _create_pkginfo_table(), TASK_MGR_ERROR_FAIL); +extern task_mgr_error_e list_create(Eina_List **pkg_list) +{ + int ret = TASK_MGR_ERROR_NONE; - if (-1 == rua_history_load_db(&table, &nrows, &ncols)) { - if (table) { - rua_history_unload_db(&table); - } + ret = _get_running_apps(pkg_list); + if (ret != TASK_MGR_ERROR_NONE || !*pkg_list) { + list_destroy(*pkg_list); return TASK_MGR_ERROR_FAIL; } - _D("Apps in rua history is %d", nrows); - - for (; row < nrows; row++) { - struct rua_rec rec_result = {0, }; - rua_history_get_rec(&rec_result, table, nrows, ncols, row); - default_info = _pkglist_retrieve_item(rec_result.pkg_name, rec_result.arg, rec_result.launch_time); - if (default_info) { - *pkg_list = eina_list_append(*pkg_list, default_info); - } - } - - if (*pkg_list && TASK_MGR_ERROR_NONE != list_sort(*pkg_list, _launch_time_sort_cb)) { - _E("Cannot sort pkg_list"); + ret = _get_app_launchtime(*pkg_list); + if (ret != TASK_MGR_ERROR_NONE || !*pkg_list) { + list_destroy(*pkg_list); + return TASK_MGR_ERROR_FAIL; } - if (!eina_list_count(*pkg_list)) { - _D("list is empty."); - _pkglist_unretrieve_item(default_info); - return TASK_MGR_ERROR_NO_DATA; - + *pkg_list = list_sort(*pkg_list, _launch_time_sort_cb); + if (!*pkg_list) { + list_destroy(*pkg_list); + return TASK_MGR_ERROR_FAIL; } return TASK_MGR_ERROR_NONE; } - - extern void list_destroy(Eina_List *pkg_list) { _D(""); list_type_default_s *default_info = NULL; - _destroy_pkginfo_table(); - if (!pkg_list) { _D("pkg_list is null"); return; @@ -375,5 +325,4 @@ extern void list_destroy(Eina_List *pkg_list) } pkg_list = NULL; - rua_fini(); } diff --git a/src/main.c b/src/main.c index ba76a5b..539deee 100644 --- a/src/main.c +++ b/src/main.c @@ -18,9 +18,7 @@ */ #include -#include #include -#include #include #include "conf.h" @@ -49,7 +47,7 @@ static main_s main_info = { -extern main_h main_get_info(void) +main_h main_get_info(void) { return &main_info; } @@ -83,7 +81,7 @@ static task_mgr_error_e _create_layout(Evas_Object *parent) layout = elm_layout_add(parent); goto_if (!layout, ERROR); - ret = elm_layout_file_set(layout, LAYOUT, "layout"); + ret = elm_layout_file_set(layout, util_get_file_path(APP_DIR_RESOURCE, LAYOUT_EDJ), "layout"); goto_if(EINA_FALSE == ret, ERROR); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -136,7 +134,8 @@ static Eina_Bool _list_timer_cb(void *data) scroller_push_item(main_info.scroller, clear_item); ret = list_create(&main_info.pkg_list); - elm_object_part_text_set(main_info.layout, "no,apps,txt", _("IDS_TASKMGR_NPBODY_NO_APPLICATIONS_ABB2")); + elm_object_part_text_set(main_info.layout, "no,apps,txt", _("IDS_TASKMGR_NPBODY_NO_APPLICATIONS_ABB2")); + if (TASK_MGR_ERROR_NO_DATA == ret) { _D("There is no application"); item_clear_set_disable(main_info.scroller); @@ -210,7 +209,6 @@ static void _terminate_cb(void *data) elm_cache_all_flush(); malloc_trim(0); - appcore_flush_memory(); scroller_destroy(main_info.layout); _destroy_layout(); diff --git a/src/scroller.c b/src/scroller.c index c6fbb64..ec25b86 100644 --- a/src/scroller.c +++ b/src/scroller.c @@ -35,7 +35,7 @@ -extern task_mgr_error_e scroller_push_item(Evas_Object *scroller, Evas_Object *item) +task_mgr_error_e scroller_push_item(Evas_Object *scroller, Evas_Object *item) { _D(""); retv_if(!scroller, TASK_MGR_ERROR_INVALID_PARAMETER); @@ -57,7 +57,7 @@ extern task_mgr_error_e scroller_push_item(Evas_Object *scroller, Evas_Object *i -extern void scroller_pop_item(Evas_Object *scroller, Evas_Object *item, int terminate) +void scroller_pop_item(Evas_Object *scroller, Evas_Object *item, int terminate) { ret_if(!scroller); ret_if(!item); @@ -92,7 +92,7 @@ extern void scroller_pop_item(Evas_Object *scroller, Evas_Object *item, int term -extern task_mgr_error_e scroller_push_all_item(Evas_Object *scroller, Eina_List *list) +task_mgr_error_e scroller_push_all_item(Evas_Object *scroller, Eina_List *list) { const Eina_List *l = NULL; const Eina_List *ln = NULL; @@ -152,7 +152,7 @@ END: -extern void scroller_pop_all_item(Evas_Object *scroller, int terminate) +void scroller_pop_all_item(Evas_Object *scroller, int terminate) { Evas_Object *box_layout = NULL; Evas_Object *box = NULL; @@ -202,7 +202,7 @@ extern void scroller_pop_all_item(Evas_Object *scroller, int terminate) -extern int scroller_count(Evas_Object *scroller) +int scroller_count(Evas_Object *scroller) { Evas_Object *box_layout = NULL; Evas_Object *box = NULL; @@ -227,14 +227,14 @@ extern int scroller_count(Evas_Object *scroller) -extern Eina_Bool scroller_is_scrolling(Evas_Object *scroller) +Eina_Bool scroller_is_scrolling(Evas_Object *scroller) { return evas_object_data_get(scroller, DATA_KEY_IS_SCROLLING)? EINA_TRUE:EINA_FALSE; } -extern void scroller_freeze(Evas_Object *scroller) +void scroller_freeze(Evas_Object *scroller) { Evas_Object *box_layout = NULL; Evas_Object *box = NULL; @@ -252,7 +252,7 @@ extern void scroller_freeze(Evas_Object *scroller) -extern void scroller_unfreeze(Evas_Object *scroller) +void scroller_unfreeze(Evas_Object *scroller) { Evas_Object *box_layout = NULL; Evas_Object *box = NULL; @@ -330,7 +330,7 @@ static void _scroll_cb(void *data, Evas_Object *scroller, void *event_info) -extern Evas_Object *scroller_create(Evas_Object *layout) +Evas_Object *scroller_create(Evas_Object *layout) { retv_if(!layout, NULL); @@ -363,7 +363,7 @@ extern Evas_Object *scroller_create(Evas_Object *layout) evas_object_del(scroller); return NULL; } - elm_layout_file_set(box_layout, BOX_LAYOUT, BOX_GROUP_NAME); + elm_layout_file_set(box_layout, util_get_file_path(APP_DIR_RESOURCE, BOX_LAYOUT_EDJ), BOX_GROUP_NAME); evas_object_size_hint_align_set(box_layout, 0.5, 1.0); evas_object_size_hint_weight_set(box_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(box_layout); diff --git a/src/util.c b/src/util.c index 3dba7a6..66721e8 100644 --- a/src/util.c +++ b/src/util.c @@ -16,11 +16,11 @@ * limitations under the License. * */ - #include #include -//#include +#include #include +#include #include #include "log.h" @@ -28,7 +28,7 @@ -extern Eina_Bool util_kill_app(const char *appid) +Eina_Bool util_kill_app(const char *appid) { app_context_h context = NULL; Eina_Bool ret = EINA_TRUE; @@ -56,7 +56,7 @@ extern Eina_Bool util_kill_app(const char *appid) -extern Eina_Bool util_launch_app(const char *appid) +Eina_Bool util_launch_app(const char *appid) { int ret; bool running = false; @@ -105,6 +105,51 @@ extern Eina_Bool util_launch_app(const char *appid) return EINA_TRUE; } +const char *util_get_file_path(app_subdir dir, const char *relative) +{ + static char buf[PATH_MAX]; + char *prefix; + + switch (dir) { + case APP_DIR_DATA: + prefix = app_get_data_path(); + break; + case APP_DIR_CACHE: + prefix = app_get_cache_path(); + break; + case APP_DIR_RESOURCE: + prefix = app_get_resource_path(); + break; + case APP_DIR_SHARED_DATA: + prefix = app_get_shared_data_path(); + break; + case APP_DIR_SHARED_RESOURCE: + prefix = app_get_shared_resource_path(); + break; + case APP_DIR_SHARED_TRUSTED: + prefix = app_get_shared_trusted_path(); + break; + case APP_DIR_EXTERNAL_DATA: + prefix = app_get_external_data_path(); + break; + case APP_DIR_EXTERNAL_CACHE: + prefix = app_get_external_cache_path(); + break; + case APP_DIR_EXTERNAL_SHARED_DATA: + prefix = app_get_external_shared_data_path(); + break; + default: + LOGE("Not handled directory type."); + return NULL; + } + size_t res = eina_file_path_join(buf, sizeof(buf), prefix, relative); + free(prefix); + if (res > sizeof(buf)) { + LOGE("Path exceeded PATH_MAX"); + return NULL; + } + return &buf[0]; +} //End of file diff --git a/tizen-manifest.xml b/tizen-manifest.xml new file mode 100644 index 0000000..4fe65a1 --- /dev/null +++ b/tizen-manifest.xml @@ -0,0 +1,14 @@ + + + + + + taskmanager.png + + + http://tizen.org/privilege/packagemanager.info + http://tizen.org/privilege/appmanager.kill.bgapp + http://tizen.org/privilege/appmanager.launch + http://tizen.org/privilege/apphistory.read + +