Add internal api to get setup-appid from complication DB 23/177223/4
authorSukHyung, Kang <shine.kang@samsung.com>
Thu, 26 Apr 2018 07:55:07 +0000 (16:55 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Thu, 3 May 2018 01:41:47 +0000 (01:41 +0000)
Change-Id: I81a4cc1406d7d354b71b47b95a6c41f8ad7f46cb
Signed-off-by: SukHyung, Kang <shine.kang@samsung.com>
parser/complication_parser_plugin.c
parser/complication_parser_plugin_internal.c
watchface-complication/complication.cc
watchface-complication/db-manager.cc
watchface-complication/db-manager.h

index c77953f..5f7e2a1 100644 (file)
@@ -313,8 +313,42 @@ out:
        return ret;
 }
 
+static int _parse_setup_appid(sqlite3 *db, const char *providerid,
+                       const char *setup_appid)
+{
+       int ret;
+       sqlite3_stmt *stmt = NULL;
+
+       static const char query[] =
+               "INSERT INTO provider_setup_appid "
+               "(provider_id, setup_appid) "
+               "VALUES (?, ?)";
+
+       ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               LOGE("prepare error: %s", sqlite3_errmsg(db));
+               goto out;
+       }
+
+       sqlite3_bind_text(stmt, 1, providerid, -1, SQLITE_TRANSIENT);
+       sqlite3_bind_text(stmt, 2, setup_appid, -1, SQLITE_TRANSIENT);
+
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_DONE) {
+               LOGE("step error: %s", sqlite3_errmsg(db));
+               goto out;
+       }
+
+       ret = 0;
+out:
+       if (stmt)
+               sqlite3_finalize(stmt);
+
+       return ret;
+}
+
 static int _parse_complication(xmlNode *node, sqlite3 *db, const char *pkgid,
-                       const char *appid, const char *providerid)
+                       const char *appid, const char *providerid, const char *setup_appid)
 {
        int period = -1;
 
@@ -356,6 +390,13 @@ static int _parse_complication(xmlNode *node, sqlite3 *db, const char *pkgid,
                return -1;
        }
 
+       if (setup_appid) {
+               if (_parse_setup_appid(db, providerid, setup_appid)) {
+                       LOGE("parse setup appid fail");
+                       return -1;
+               }
+       }
+
        if (_parse_support_type(support_type_node, db, pkgid,
                        appid, providerid, period)) {
                LOGE("parse support type fail");
@@ -370,6 +411,7 @@ static int _parse_service_application(xmlNode *node, const char *pkgid)
        int result = -1;
        char *appid;
        char *providerid;
+       char *setup_appid;
        xmlNode *tmp;
        sqlite3 *db;
 
@@ -398,20 +440,26 @@ static int _parse_service_application(xmlNode *node, const char *pkgid)
                                goto out;
                        }
 
+                       setup_appid = _get_attribute(tmp, "setup-appid");
+
                        if (_parse_complication(tmp, db, pkgid, appid,
-                                       providerid)) {
+                                       providerid, setup_appid)) {
                                LOGE("parse complication error");
 
                                sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
 
-                               if (providerid)
-                                       free(providerid);
+                               free(providerid);
+
+                               if (setup_appid)
+                                       free(setup_appid);
 
                                goto out;
                        }
 
-                       if (providerid)
-                               free(providerid);
+                       free(providerid);
+
+                       if (setup_appid)
+                               free(setup_appid);
                }
        }
 
@@ -473,6 +521,9 @@ static int _remove_complication(sqlite3 *db, const char *pkgid)
                "DELETE FROM provider_localized_info WHERE provider_id IN "
                "(SELECT DISTINCT provider_id FROM complication_provider "
                "WHERE pkgid=?)",
+               "DELETE FROM provider_setup_appid WHERE provider_id IN "
+               "(SELECT DISTINCT provider_id FROM complication_provider "
+               "WHERE pkgid=?)",
                "DELETE FROM complication_provider WHERE pkgid=?"
        };
 
index 1e32991..9110abb 100644 (file)
@@ -45,9 +45,9 @@ CREATE TABLE IF NOT EXISTS complication_provider ( \
        PRIMARY KEY (provider_id, support_type) \
 ); \
 CREATE TABLE IF NOT EXISTS provider_localized_info ( \
-       provider_id  TEXT NOT NULL, \
-       locale   TEXT NOT NULL DEFAULT 'No Locale', \
-       provider_label    TEXT, \
+       provider_id    TEXT NOT NULL, \
+       locale         TEXT NOT NULL DEFAULT 'No Locale', \
+       provider_label TEXT, \
        PRIMARY KEY (provider_id, locale) \
 ); \
 CREATE TABLE IF NOT EXISTS provider_privilege ( \
@@ -55,6 +55,11 @@ CREATE TABLE IF NOT EXISTS provider_privilege ( \
        privilege    TEXT NOT NULL, \
        PRIMARY KEY (provider_id, privilege) \
 ); \
+CREATE TABLE IF NOT EXISTS provider_setup_appid ( \
+       provider_id  TEXT NOT NULL, \
+       setup_appid  TEXT, \
+       PRIMARY KEY (provider_id) \
+); \
 COMMIT TRANSACTION; "
 
 #define COMPLICATION_TBL_COUNT 3
index 13d44ac..f67d2d9 100644 (file)
@@ -494,8 +494,7 @@ IEditable::EditableState Complication::GetState() {
 }
 
 const std::string Complication::GetSetupAppId() {
-  // TODO(?): from db
-  return "org.tizen.comp_setting";
+  return DBManager::GetSetupAppId(impl_->cur_provider_id_.c_str());
 }
 
 int Complication::SetContext(std::unique_ptr<Bundle> context) {
index 3fc6bb6..c8caf2e 100644 (file)
@@ -169,9 +169,8 @@ std::string DBManager::GetProviderAppId(const char* provider_id) {
 
   sqlite3_bind_text(stmt, 1, provider_id, -1, SQLITE_TRANSIENT);
 
-  if (sqlite3_step(stmt) == SQLITE_ROW) {
+  if (sqlite3_step(stmt) == SQLITE_ROW)
     appid = std::string((char *)sqlite3_column_text(stmt, 0));
-  }
 
   sqlite3_finalize(stmt);
   CloseDB(db);
@@ -437,6 +436,42 @@ std::string DBManager::GetLabel(const char* provider_id) {
   return label;
 }
 
+std::string DBManager::GetSetupAppId(const char* provider_id) {
+  int ret;
+  std::string setup_appid;
+  sqlite3_stmt *stmt;
+  sqlite3* db;
+
+  static const char query[] =
+    "SELECT DISTINCT setup_appid FROM provider_setup_appid "
+    "WHERE provider_id=?";
+
+  db = OpenDB();
+  if (db == NULL) {
+    LOGE("parser db not exist");
+    return std::string();
+  }
+
+  ret = sqlite3_prepare_v2(db, query, strlen(query),
+                        &stmt, NULL);
+  if (ret != SQLITE_OK) {
+    LOGE("prepare error: %s", sqlite3_errmsg(db));
+    CloseDB(db);
+    return std::string();
+  }
+
+  sqlite3_bind_text(stmt, 1, provider_id, -1, SQLITE_TRANSIENT);
+
+  if (sqlite3_step(stmt) == SQLITE_ROW)
+    setup_appid = std::string(reinterpret_cast<const char*>(
+          sqlite3_column_text(stmt, 0)));
+
+  sqlite3_finalize(stmt);
+  CloseDB(db);
+
+  return setup_appid;
+}
+
 const char* DBManager::GetParserDataPath() {
   uid_t target_uid;
   const char *path;
index fe97e81..6443dfa 100644 (file)
@@ -54,6 +54,7 @@ class EXPORT_API DBManager {
   static int GetSupportTypes(std::string& provider_id, int* types);
   static int GetProviderPeriod(std::string& provider_id, int* period);
   static std::string GetLabel(const char* provider_id);
+  static std::string GetSetupAppId(const char* provider_id);
 
  private:
   DBManager();