From 72dcff61a549d96f2612060cac8645e825dcf48d Mon Sep 17 00:00:00 2001 From: Sungbae Yoo Date: Tue, 28 Jun 2016 18:20:08 +0900 Subject: [PATCH] Change kaskit to be launched in the zone Signed-off-by: Sungbae Yoo Change-Id: I0dd5b0d0618d38b57188e1fe5b96b95c42b09194 --- packaging/device-policy-manager.spec | 7 +- server/zone/zone.cpp | 19 ++-- zone/kaskit/CMakeLists.txt | 7 +- zone/kaskit/org.tizen.kaskit.xml | 4 +- zone/kaskit/src/main.c | 111 ++++------------------ zone/setup-wizard/CMakeLists.txt | 1 + zone/setup-wizard/include/zone-setup.h | 4 + zone/setup-wizard/org.tizen.zone-setup-wizard.xml | 1 + zone/setup-wizard/src/main.c | 90 ++++++++++++++---- 9 files changed, 123 insertions(+), 121 deletions(-) diff --git a/packaging/device-policy-manager.spec b/packaging/device-policy-manager.spec index 1944a41..57a8c5e 100755 --- a/packaging/device-policy-manager.spec +++ b/packaging/device-policy-manager.spec @@ -213,6 +213,7 @@ BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(evas) BuildRequires: pkgconfig(notification) +BuildRequires: pkgconfig(shortcut) Requires: libzone = %{version}-%{release} %description -n org.tizen.zone-setup-wizard @@ -235,8 +236,9 @@ Group: Security/Other BuildRequires: pkgconfig(efl-extension) BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-appfw-package-manager) +BuildRequires: pkgconfig(capi-appfw-app-manager) BuildRequires: pkgconfig(evas) -BuildRequires: pkgconfig(shortcut) %description -n org.tizen.kaskit Tizen Krate launcher interface for zone @@ -277,8 +279,9 @@ Tizen Krate keyguard interface for zone %package -n libzone Summary: Tizen Zone Client library Group: Development/Libraries +BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(capi-appfw-package-manager) -BuildRequires: pkgconfig(capi-appfw-app-manager) +BuildRequires: pkgconfig(capi-appfw-app-control) BuildRequires: pkgconfig(libtzplatform-config) Requires: %{name} = %{version}-%{release} Requires(post): /sbin/ldconfig diff --git a/server/zone/zone.cpp b/server/zone/zone.cpp index 2f7bc11..e9f766d 100644 --- a/server/zone/zone.cpp +++ b/server/zone/zone.cpp @@ -42,7 +42,7 @@ #define DEFAULT_SHELL "/bin/bash" -#define ZONE_LAUNCHER_APP "org.tizen.kaskit" +#define ZONE_DELEGATOR_APP "org.tizen.zone-setup-wizard" #define NOTIFICATION_SUB_ICON_PATH DATA_PATH "/zone_noti_list_sub_icon.png" namespace DevicePolicyManager { @@ -376,10 +376,9 @@ void zoneProcessMonitor() void notiProxyInsert(const runtime::User& owner, const runtime::User& user, int privId, notification_h noti) { + std::string zoneLauncherUri; notification_h newNoti; app_control_h appControl; - char zoneLauncherUri[PATH_MAX]; - char UriParameter[PATH_MAX]; char* pkgId; notification_clone(noti, &newNoti); @@ -398,17 +397,18 @@ void notiProxyInsert(const runtime::User& owner, const runtime::User& user, int appId = strdup(""); } - UriParameter[0] = '\0'; + zoneLauncherUri = "zone://" + user.getName() + "/" + appId; + app_control_get_uri(appControl, &uri); if (uri != NULL) { - snprintf(UriParameter, PATH_MAX, "?uri=%s", uri); + zoneLauncherUri += "?uri="; + zoneLauncherUri += uri; free(uri); } - snprintf(zoneLauncherUri, PATH_MAX, "zone://launch/%s/%s%s", user.getName().c_str(), appId, UriParameter); free(appId); - app_control_set_app_id(appControl, ZONE_LAUNCHER_APP); - app_control_set_uri(appControl, zoneLauncherUri); + app_control_set_app_id(appControl, ZONE_DELEGATOR_APP); + app_control_set_uri(appControl, zoneLauncherUri.c_str()); notification_set_launch_option(newNoti, NOTIFICATION_LAUNCH_OPTION_APP_CONTROL, appControl); } @@ -598,6 +598,9 @@ int ZoneManager::createZone(const std::string& name, const std::string& manifest //unlock the user setZoneState(user.getUid(), 1); + //wait for launchpad in the zone + sleep(1); + auto it = createdZoneList.insert(createdZoneList.begin(), name); int noti = notification_register_detailed_changed_cb_for_uid(notiProxyCallback, &(*it), user.getUid()); notiProxyCallbackMap.insert(std::make_pair(name, noti)); diff --git a/zone/kaskit/CMakeLists.txt b/zone/kaskit/CMakeLists.txt index 093ad87..1759316 100644 --- a/zone/kaskit/CMakeLists.txt +++ b/zone/kaskit/CMakeLists.txt @@ -10,9 +10,10 @@ PKG_CHECK_MODULES(launcher_pkgs REQUIRED bundle efl-extension elementary - capi-appfw-application evas - shortcut + capi-appfw-application + capi-appfw-package-manager + capi-appfw-app-manager ) INCLUDE_DIRECTORIES(${launcher_pkgs_INCLUDE_DIRS} ${ZONE_LIBS}) @@ -29,7 +30,7 @@ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") ADD_EXECUTABLE(${PKG_NAME} ${PKG_SRC}) INSTALL(TARGETS ${PKG_NAME} DESTINATION ${APP_INSTALL_PREFIX}/${PKG_NAME}/bin) -TARGET_LINK_LIBRARIES(${PKG_NAME} ${launcher_pkgs_LIBRARIES} zone) +TARGET_LINK_LIBRARIES(${PKG_NAME} ${launcher_pkgs_LIBRARIES}) #Create edj file ADD_CUSTOM_TARGET(org.tizen.kaskit.edj diff --git a/zone/kaskit/org.tizen.kaskit.xml b/zone/kaskit/org.tizen.kaskit.xml index 1b7dacf..846be83 100644 --- a/zone/kaskit/org.tizen.kaskit.xml +++ b/zone/kaskit/org.tizen.kaskit.xml @@ -2,7 +2,9 @@ - http://tizen.org/privilege/shortcut + http://tizen.org/privilege/appmanager.launch + http://tizen.org/privilege/packagemanager.info + http://tizen.org/privilege/packagemanager.admin diff --git a/zone/kaskit/src/main.c b/zone/kaskit/src/main.c index 86c5d1b..da4a169 100644 --- a/zone/kaskit/src/main.c +++ b/zone/kaskit/src/main.c @@ -16,17 +16,14 @@ * limitations under the License. * */ -#include -#include -#include -#include +#include +#include +#include #include "kaskit.h" #include "widget.h" -static zone_package_proxy_h __zone_pkg; -static zone_app_proxy_h __zone_app; -static zone_manager_h __zone_mgr; +static package_manager_h __pkg_mgr; static const char* __pkg_blacklist[] = { "org.tizen.setting", @@ -57,7 +54,7 @@ static bool __pkg_is_removable(const char* pkg_id) package_info_h pkg_h; - zone_package_proxy_get_package_info(__zone_pkg, pkg_id, &pkg_h); + package_info_create(pkg_id, &pkg_h); package_info_is_removable_package(pkg_h, &removable); package_info_destroy(pkg_h); @@ -114,7 +111,7 @@ static bool __get_app_info_cb(app_info_h app_h, void* user_data) } static void __create_icon_thread(void* data, Ecore_Thread* thread) { - zone_app_proxy_foreach_app_info(__zone_app, __get_app_info_cb, data); + app_manager_foreach_app_info(__get_app_info_cb, data); if (data != NULL) { free(data); } @@ -161,129 +158,61 @@ void _icon_clicked_cb(const char *app_id) app_control_h app_control; app_control_create(&app_control); app_control_set_app_id(app_control, app_id); - zone_app_proxy_send_launch_request(__zone_app, app_control); + app_control_send_launch_request(app_control, NULL, NULL); app_control_destroy(app_control); } void _icon_uninstalled_cb(const char *pkg_id) { - zone_package_proxy_uninstall(__zone_pkg, pkg_id); -} + package_manager_request_h pkg_mgr_req; + int id; -static int __shortcut_result_cb(int ret, void *data) -{ - dlog_print(DLOG_ERROR, LOG_TAG, "__shortcut_result_cb = %d", ret); - return 0; + package_manager_request_create(&pkg_mgr_req); + package_manager_request_uninstall(pkg_mgr_req, pkg_id, &id); + package_manager_request_destroy(pkg_mgr_req); } -static void __add_shortcut(const char *zone_name) +static void __show_launcher() { - char new_uri[PATH_MAX]; - - snprintf(new_uri, sizeof(new_uri), "zone://home/%s", zone_name); - shortcut_add_to_home(zone_name, LAUNCH_BY_URI, new_uri, "", 0, __shortcut_result_cb, NULL); -} + char *zone_name = __get_current_zone_name(); -static void __show_launcher(const char *zone_name) -{ _set_kaskit_window_title(zone_name); - zone_app_proxy_create(__zone_mgr, zone_name, &__zone_app); - zone_package_proxy_create(__zone_mgr, zone_name, &__zone_pkg); - - zone_package_proxy_set_event_status(__zone_pkg, + package_manager_set_event_status(__pkg_mgr, PACKAGE_MANAGER_STATUS_TYPE_INSTALL | PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL); - zone_package_proxy_set_event_cb(__zone_pkg, __pkg_event_cb, NULL); + package_manager_set_event_cb(__pkg_mgr, __pkg_event_cb, NULL); ecore_thread_run(__create_icon_thread, NULL, NULL, NULL); -} -static void __launch_zone_app(const char *zone_name, app_control_h app_control) -{ - zone_app_proxy_create(__zone_mgr, zone_name, &__zone_app); - zone_package_proxy_create(__zone_mgr, zone_name, &__zone_pkg); - zone_app_proxy_send_launch_request(__zone_app, app_control); - ui_app_exit(); + free(zone_name); } static bool __app_create(void *data) { - zone_manager_create(&__zone_mgr); + package_manager_create(&__pkg_mgr); _create_kaskit_window(); + __show_launcher(); return true; } static void __app_control(app_control_h app_control, void *data) { - char* zone_uri, *tmp, *zone_name; - int ret = 0; - - ret = app_control_get_uri(app_control, &zone_uri); - if (ret != APP_CONTROL_ERROR_NONE) { - dlog_print(DLOG_ERROR, LOG_TAG, "No URI"); - ui_app_exit(); - return; - } - - if (strncmp(zone_uri, "zone://", sizeof("zone://") - 1) != 0) { - dlog_print(DLOG_ERROR, LOG_TAG, "Mismatched URI"); - free(zone_uri); - ui_app_exit(); - return; - } - - tmp = zone_uri + sizeof("zone://") - 1; - - if (strncmp(tmp, "setup/", sizeof("setup/") - 1) == 0) { - zone_name = tmp + sizeof("setup/") - 1; - __add_shortcut(zone_name); - __show_launcher(zone_name); - } else if (strncmp(tmp, "home/", sizeof("home/") - 1) == 0) { - zone_name = tmp + sizeof("home/") - 1; - __show_launcher(zone_name); - } else if (strncmp(tmp, "launch/", sizeof("launch/") - 1) == 0) { - char* app_id, *uri; - - app_control_set_uri(app_control, NULL); - zone_name = tmp + sizeof("launch/") - 1; - app_id = strchr(zone_name, '/'); - *(app_id++) = '\0'; - uri = strchr(app_id, '?'); - if (uri != NULL) { - *(uri++) = '\0'; - if (strncmp(uri, "uri=", sizeof("uri=") - 1) == 0) { - tmp += sizeof("uri=") - 1; - app_control_set_uri(app_control, uri); - } - } - - app_control_set_app_id(app_control, app_id); - __launch_zone_app(zone_name, app_control); - } else { - dlog_print(DLOG_ERROR, LOG_TAG, "Invalid URI"); - ui_app_exit(); - } - free(zone_uri); } static void __app_pause(void *data) { - return; } static void __app_resume(void *data) { - return; } static void __app_terminate(void *data) { - zone_package_proxy_destroy(__zone_pkg); - zone_app_proxy_destroy(__zone_app); - zone_manager_destroy(__zone_mgr); + package_manager_destroy(__pkg_mgr); } int main(int argc, char *argv[]) diff --git a/zone/setup-wizard/CMakeLists.txt b/zone/setup-wizard/CMakeLists.txt index fce58a3..356fc0e 100644 --- a/zone/setup-wizard/CMakeLists.txt +++ b/zone/setup-wizard/CMakeLists.txt @@ -13,6 +13,7 @@ PKG_CHECK_MODULES(setup_pkgs REQUIRED capi-appfw-application evas notification + shortcut ) INCLUDE_DIRECTORIES(${setup_pkgs_INCLUDE_DIRS} ${ZONE_LIBS}) diff --git a/zone/setup-wizard/include/zone-setup.h b/zone/setup-wizard/include/zone-setup.h index f28920e..076142e 100644 --- a/zone/setup-wizard/include/zone-setup.h +++ b/zone/setup-wizard/include/zone-setup.h @@ -29,7 +29,9 @@ #include #include #include +#include #include +#include #include "setup-text.h" @@ -42,6 +44,8 @@ #define PACKAGE "org.tizen.zone-setup-wizard" #endif +#define KASKIT_PACKAGE "org.tizen.kaskit" + #define DPM_SYSPOPUP_ICON_PATH "/usr/share/icons/default/small/org.tizen.dpm-syspopup.png" typedef struct { diff --git a/zone/setup-wizard/org.tizen.zone-setup-wizard.xml b/zone/setup-wizard/org.tizen.zone-setup-wizard.xml index 3f83b68..78c0880 100644 --- a/zone/setup-wizard/org.tizen.zone-setup-wizard.xml +++ b/zone/setup-wizard/org.tizen.zone-setup-wizard.xml @@ -3,6 +3,7 @@ http://tizen.org/privilege/notification + http://tizen.org/privilege/shortcut http://tizen.org/privilege/appmanager.launch diff --git a/zone/setup-wizard/src/main.c b/zone/setup-wizard/src/main.c index 6f65189..82ddac6 100644 --- a/zone/setup-wizard/src/main.c +++ b/zone/setup-wizard/src/main.c @@ -19,6 +19,15 @@ #include "zone-setup.h" #include "widget.h" +static void __launch_zone_app(zone_manager_h zone_mgr, const char* zone_name, app_control_h app_control) +{ + zone_app_proxy_h zone_app; + + zone_app_proxy_create(zone_mgr, zone_name, &zone_app); + zone_app_proxy_send_launch_request(zone_app, app_control); + zone_app_proxy_destroy(zone_app); +} + static void __zone_request_done(const char *from, const char *info, void *user_data) { app_control_h app_control; @@ -28,29 +37,37 @@ static void __zone_request_done(const char *from, const char *info, void *user_d ad->request_done = true; if (!strcmp(ad->mode, "create")) { + snprintf(uri, sizeof(uri), "zone://%s/" KASKIT_PACKAGE, ad->zone_name); + shortcut_add_to_home(ad->zone_name, LAUNCH_BY_URI, uri, "", 0, NULL, NULL); + app_control_create(&app_control); - app_control_set_app_id(app_control, "org.tizen.kaskit"); - snprintf(uri, PATH_MAX, "zone://setup/%s", ad->zone_name); - app_control_set_uri(app_control, uri); - app_control_send_launch_request(app_control, NULL, NULL); + app_control_set_app_id(app_control, KASKIT_PACKAGE); + __launch_zone_app(ad->zone_manager, ad->zone_name, app_control); app_control_destroy(app_control); + } } static bool __app_create(void *data) { + appdata_s *ad = (appdata_s *) data; + + if (zone_manager_create(&ad->zone_manager) != ZONE_ERROR_NONE) { + dlog_print(DLOG_ERROR, LOG_TAG, "failed to get zone manager handle"); + ui_app_exit(); + return false; + } + return true; } static void __app_pause(void *data) { - return; } static void __app_resume(void *data) { - return; } static void __free_data(appdata_s *ad) @@ -63,11 +80,8 @@ static void __app_terminate(void *data) { appdata_s *ad = (appdata_s *) data; - if (ad->zone_manager != NULL) { - zone_manager_remove_event_cb(ad->zone_manager, ad->zone_event_cb_id); - zone_manager_destroy(ad->zone_manager); - ad->zone_manager = NULL; - } + zone_manager_remove_event_cb(ad->zone_manager, ad->zone_event_cb_id); + zone_manager_destroy(ad->zone_manager); __free_data(ad); @@ -79,11 +93,6 @@ static void __set_zone_callback(appdata_s *ad) char *cb_event_list[2] = {"created", "removed"}; char *cb_event = NULL; - if (zone_manager_create(&ad->zone_manager) != ZONE_ERROR_NONE) { - dlog_print(DLOG_ERROR, LOG_TAG, "failed to get zone manager handle"); - ui_app_exit(); - } - if (!strcmp(ad->mode, "create")) cb_event = cb_event_list[0]; else @@ -97,26 +106,74 @@ static void __set_zone_callback(appdata_s *ad) return; } +static int __parse_uri(app_control_h app_control, appdata_s *ad) +{ + char* uri, *zone_uri, *app_id, *zone_name; + int ret = 0; + + ret = app_control_get_uri(app_control, &uri); + if (ret != APP_CONTROL_ERROR_NONE || uri == NULL) { + dlog_print(DLOG_DEBUG, LOG_TAG, "No URI"); + return -1; + } + + if (strncmp(uri, "zone://", sizeof("zone://") - 1) != 0) { + dlog_print(DLOG_ERROR, LOG_TAG, "Mismatched URI"); + free(uri); + return -1; + } + + zone_name = uri + sizeof("zone://") - 1; + + app_control_set_uri(app_control, NULL); + app_id = strchr(zone_name, '/'); + *(app_id++) = '\0'; + zone_uri = strchr(app_id, '?'); + if (zone_uri != NULL) { + *(zone_uri++) = '\0'; + if (strncmp(uri, "uri=", sizeof("uri=") - 1) == 0) { + zone_uri += sizeof("uri=") - 1; + app_control_set_uri(app_control, zone_uri); + } + } + + app_control_set_app_id(app_control, app_id); + __launch_zone_app(ad->zone_manager, zone_name, app_control); + + free(uri); + + return 0; +} + static void __app_control(app_control_h app_control, void *data) { appdata_s *ad = (appdata_s *) data; int ret = 0; + ret = __parse_uri(app_control, ad); + if (ret == 0) { + ui_app_exit(); + return; + } + ret = app_control_get_extra_data(app_control, "mode", &ad->mode); if (ret != APP_CONTROL_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "Failed to get mode"); ui_app_exit(); + return; } if (strcmp(ad->mode, "create") && strcmp(ad->mode, "remove")) { dlog_print(DLOG_ERROR, LOG_TAG, "Invalid mode"); ui_app_exit(); + return; } ret = app_control_get_extra_data(app_control, "zone", &ad->zone_name); if (ret != APP_CONTROL_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "failed to get zone name"); ui_app_exit(); + return; } __set_zone_callback(ad); @@ -124,6 +181,7 @@ static void __app_control(app_control_h app_control, void *data) if (app_control_clone(&ad->app_control, app_control) != APP_CONTROL_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone app control handler"); ui_app_exit(); + return; } elm_app_base_scale_set(1.8); -- 2.7.4