Support multiple instance launch 06/109906/15
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 13 Jan 2017 09:59:07 +0000 (18:59 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Mon, 16 Jan 2017 05:51:40 +0000 (14:51 +0900)
This patch adds the instance_id, instance_name, icon and uri column to
the rua_history table. The amd stores the information about apps
runs with multiple instance launch.

- Requires:
[aul] https://review.tizen.org/gerrit/#/c/108620/
[amd] https://review.tizen.org/gerrit/#/c/109746/

Change-Id: I510333b15a664ce36244722a4587c54495f8b7cc
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
include/db-schema.h
include/rua.h
src/rua.c
src/rua_internal.c

index d7916e9..b2e322b 100644 (file)
@@ -25,7 +25,11 @@ CREATE TABLE IF NOT EXISTS rua_history ( \
        app_path TEXT, \
        arg TEXT, \
        launch_time INTEGER, \
-       PRIMARY KEY(pkg_name) \
+       instance_id TEXT, \
+       instance_name TEXT, \
+       icon TEXT, \
+       uri TEXT, \
+       PRIMARY KEY(pkg_name, instance_id) \
 );"
 
 #define CREATE_RUA_STAT_TABLE " \
@@ -43,7 +47,11 @@ enum {
        RUA_COL_PKGNAME,
        RUA_COL_APPPATH,
        RUA_COL_ARG,
-       RUA_COL_LAUNCHTIME
+       RUA_COL_LAUNCHTIME,
+       RUA_COL_INSTANCE_ID,
+       RUA_COL_INSTANCE_NAME,
+       RUA_COL_ICON,
+       RUA_COL_URI,
 };
 
 enum {
index d9c7235..3bf79d1 100755 (executable)
@@ -66,11 +66,15 @@ extern "C" {
  * @brief RUA record info structure
  */
 struct rua_rec {
-       int id;                 /**<  primary key */
+       int id;                 /**< primary key */
        char *pkg_name;         /**< package name */
        char *app_path;         /**< application path */
        char *arg;              /**< application launching argument */
        time_t launch_time;     /**< application launching time */
+       char *instance_id;      /**< Instance ID */
+       char *instance_name;    /**< Instance Name */
+       char *icon;             /**< Icon path */
+       char *uri;              /**< URI */
 };
 
 /**
@@ -157,6 +161,15 @@ API int rua_is_latest_app(const char *pkg_name);
 API int rua_is_latest_app_for_uid(const char *pkg_name, uid_t uid);
 
 /**
+ * @brief       Delete rua history with instance id
+ * @param[in]   app_id The application ID
+ * @param[in]   instance_id The instance ID
+ * @return      0 on success, otherwise a negative error value
+ */
+API int rua_delete_history_with_instance_id(const char *app_id,
+               const char *instance_id);
+
+/**
  * @brief      Initialize rua
  * @return     0 on success, otherwise a nagative error value
  * @retval     0 on successful
index a893d24..f8bab6a 100644 (file)
--- a/src/rua.c
+++ b/src/rua.c
@@ -155,8 +155,10 @@ int rua_history_load_db_for_uid(char ***table, int *nrows, int *ncols, uid_t uid
        if (r != SQLITE_OK)
                return -1;
 
-       snprintf(query, QUERY_MAXLEN,
-                "select pkg_name, app_path, arg, launch_time from %s order by launch_time desc;", RUA_HISTORY);
+       snprintf(query, sizeof(query),
+                "SELECT pkg_name, app_path, arg, launch_time, instance_id, "
+                "instance_name, icon, uri FROM %s ORDER BY launch_time DESC;",
+                RUA_HISTORY);
 
        r = sqlite3_get_table(db, query, &db_result, nrows, ncols, &db_err);
 
@@ -212,6 +214,30 @@ int rua_history_get_rec(struct rua_rec *rec, char **table, int nrows, int ncols,
        if (tmp)
                rec->launch_time = atoi(tmp);
 
+       tmp = db_result[RUA_COL_INSTANCE_ID];
+       if (tmp && tmp[0] != '\0')
+               rec->instance_id = tmp;
+       else
+               rec->instance_id = NULL;
+
+       tmp = db_result[RUA_COL_INSTANCE_NAME];
+       if (tmp && tmp[0] != '\0')
+               rec->instance_name = tmp;
+       else
+               rec->instance_name = NULL;
+
+       tmp = db_result[RUA_COL_ICON];
+       if (tmp && tmp[0] != '\0')
+               rec->icon = tmp;
+       else
+               rec->icon = NULL;
+
+       tmp = db_result[RUA_COL_URI];
+       if (tmp && tmp[0] != '\0')
+               rec->uri = tmp;
+       else
+               rec->uri = NULL;
+
        return 0;
 }
 
@@ -277,3 +303,34 @@ int rua_fini(void)
 {
        return 0;
 }
+
+int rua_delete_history_with_instance_id(const char *app_id,
+               const char *instance_id)
+{
+       int ret;
+       bundle *b;
+
+       if (app_id == NULL) {
+               LOGE("Invalid parameter");
+               return -1;
+       }
+
+       b = bundle_create();
+       if (b == NULL) {
+               LOGE("Out of memory");
+               return -1;
+       }
+
+       bundle_add_str(b, AUL_K_RUA_PKGNAME, app_id);
+       if (instance_id)
+               bundle_add_str(b, AUL_K_RUA_INSTANCE_ID, instance_id);
+
+       ret = aul_delete_rua_history_for_uid(b, getuid());
+       bundle_free(b);
+       if (ret < 0) {
+               LOGE("Failed to delete rua history - result(%d)", ret);
+               return -1;
+       }
+
+       return 0;
+}
index 1a0abd7..7995262 100644 (file)
@@ -81,6 +81,7 @@ int rua_usr_db_delete_history(bundle *b, uid_t uid)
        char query[QUERY_MAXLEN];
        char *pkg_name = NULL;
        char *app_path = NULL;
+       char *instance_id = NULL;
        char *errmsg = NULL;
        int result = 0;
 
@@ -93,14 +94,22 @@ int rua_usr_db_delete_history(bundle *b, uid_t uid)
        if (b != NULL) {
                bundle_get_str(b, AUL_K_RUA_PKGNAME, &pkg_name);
                bundle_get_str(b, AUL_K_RUA_APPPATH, &app_path);
+               bundle_get_str(b, AUL_K_RUA_INSTANCE_ID, &instance_id);
        }
 
-       if (pkg_name != NULL)
-               snprintf(query, QUERY_MAXLEN, "delete from rua_history where pkg_name = '%s';", pkg_name);
-       else if (app_path != NULL)
-               snprintf(query, QUERY_MAXLEN, "delete from rua_history where app_path = '%s';", app_path);
-       else
-               snprintf(query, QUERY_MAXLEN, "delete from rua_history;");
+       if (pkg_name) {
+               snprintf(query, sizeof(query),
+                               "DELETE FROM rua_history WHERE pkg_name = '%s' "
+                               "AND instance_id = '%s';",
+                               pkg_name, instance_id ? instance_id : "");
+       } else if (app_path) {
+               snprintf(query, sizeof(query),
+                               "DELETE FROM rua_history WHERE app_path = '%s' "
+                               "AND instance_id = '%s';",
+                               app_path, instance_id ? instance_id : "");
+       } else {
+               snprintf(query, sizeof(query), "DELETE FROM rua_history;");
+       }
 
        LOGI("rua_delete_history_from_db : %s", query);
        r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
@@ -126,7 +135,12 @@ int rua_usr_db_add_history(struct rua_rec *rec, uid_t uid)
 {
        int r;
        char query[QUERY_MAXLEN];
-       sqlite3 *db = NULL;
+       sqlite3 *db;
+
+       if (rec == NULL || rec->pkg_name == NULL || rec->app_path == NULL) {
+               LOGE("Invalid parameter");
+               return -1;
+       }
 
        db = __db_init(uid);
        if (db == NULL) {
@@ -134,20 +148,34 @@ int rua_usr_db_add_history(struct rua_rec *rec, uid_t uid)
                return -1;
        }
 
-       if (rec == NULL) {
-               LOGE("Error rec null");
-               db_util_close(db);
-               return -1;
+       if (rec->instance_id &&
+                       (rec->instance_name == NULL || rec->icon == NULL ||
+                        rec->uri == NULL)) {
+               snprintf(query, sizeof(query),
+                               "UPDATE %s SET launch_time = %d "
+                               "WHERE pkg_name = %s AND instance_id = %s;",
+                               RUA_HISTORY,
+                               (int)rec->launch_time,
+                               rec->pkg_name,
+                               rec->instance_id);
+       } else {
+               snprintf(query, sizeof(query),
+                               "INSERT OR REPLACE INTO %s "
+                               "(pkg_name, app_path, arg, launch_time, "
+                               "instance_id, instance_name, icon, uri) "
+                               "VALUES (\"%s\", \"%s\", \"%s\", %d, "
+                               "\"%s\", \"%s\", \"%s\", \"%s\");",
+                               RUA_HISTORY,
+                               rec->pkg_name,
+                               rec->app_path,
+                               rec->arg ? rec->arg : "",
+                               (int)rec->launch_time,
+                               rec->instance_id ? rec->instance_id : "",
+                               rec->instance_name ? rec->instance_name : "",
+                               rec->icon ? rec->icon : "",
+                               rec->uri ? rec->uri : "");
        }
 
-       snprintf(query, QUERY_MAXLEN,
-               "insert or replace into %s ( pkg_name, app_path, arg, launch_time) "
-               " values ( \"%s\", \"%s\", \"%s\", %d) ",
-               RUA_HISTORY,
-               rec->pkg_name ? rec->pkg_name : "",
-               rec->app_path ? rec->app_path : "",
-               rec->arg ? rec->arg : "", (int)rec->launch_time);
-
        r = __exec(db, query);
        if (r == -1) {
                LOGE("[RUA ADD HISTORY ERROR] %s\n", query);