support_events INTEGER DEFAULT 1,
FOREIGN KEY (provider_id) REFERENCES complication_provider(provider_id) ON DELETE CASCADE
);
+CREATE TABLE IF NOT EXISTS provider_icon (
+ provider_id TEXT NOT NULL,
+ locale TEXT NOT NULL DEFAULT 'No Locale',
+ icon_path TEXT,
+ UNIQUE (provider_id, locale),
+ FOREIGN KEY (provider_id) REFERENCES complication_provider(provider_id) ON DELETE CASCADE
+);
INSERT INTO complication_provider (
pkgid, appid, provider_id, trusted, period) VALUES (
1
);
+INSERT INTO provider_icon (
+ provider_id, locale, icon_path) VALUES (
+ 'org.tizen.gmock_comp_provider/test',
+ 'No Locale',
+ 'icon_path'
+);
+
+INSERT INTO provider_localized_info (
+ provider_id, locale, provider_label) VALUES (
+ 'org.tizen.gmock_comp_provider/test',
+ 'No Locale',
+ 'provider_label'
+);
+
INSERT INTO provider_support_types (
provider_id, support_type, default_data) VALUES (
'org.tizen.gmock_comp_provider/test',
#include <gtest/gtest.h>
#include <gmock/gmock.h>
-#include "watchface-complication/db-manager.hh"
+#include "watchface-common/db-manager.hh"
using namespace std;
using namespace watchface_complication;
#include "watchface-complication/design-element.hh"
#include "watchface-complication/editables-container.hh"
#include "watchface-complication/received-editable.hh"
+#include "watchface-common/db-manager.hh"
#include "mock/system_info_mock.h"
#include "mock/tzplatform_config_mock.h"
return 0;
}
+void __all_provider_foreach_cb(const provider_info_h info, void *user_data) {
+ int* count = static_cast<int*>(user_data);
+ (*count)++;
+}
+
+void __provider_foreach_cb(const provider_info_h info, void *user_data) {
+ char* str_value;
+ int types;
+
+ watchface_complication_provider_info_get_id(info, &str_value);
+ EXPECT_STREQ(str_value, "org.tizen.gmock_comp_provider/test");
+ free(str_value);
+
+ watchface_complication_provider_info_get_app_id(info, &str_value);
+ EXPECT_STREQ(str_value, "org.tizen.gmock_comp_provider");
+ free(str_value);
+
+ watchface_complication_provider_info_get_label(info, &str_value);
+ EXPECT_STREQ(str_value, "provider_label");
+ free(str_value);
+
+ watchface_complication_provider_info_get_icon(info, &str_value);
+ EXPECT_STREQ(str_value, "icon_path");
+ free(str_value);
+
+ watchface_complication_provider_info_get_types(info, &types);
+ EXPECT_EQ(WATCHFACE_COMPLICATION_TYPE_SHORT_TEXT |
+ WATCHFACE_COMPLICATION_TYPE_LONG_TEXT |
+ WATCHFACE_COMPLICATION_TYPE_RANGED_VALUE |
+ WATCHFACE_COMPLICATION_TYPE_TIME |
+ WATCHFACE_COMPLICATION_TYPE_ICON |
+ WATCHFACE_COMPLICATION_TYPE_IMAGE |
+ WATCHFACE_COMPLICATION_TYPE_SMALL_IMAGE,
+ types);
+
+}
+
class CWCP : public ::testing::Test {
public:
void RunLoop() {
EXPECT_EQ(WATCHFACE_COMPLICATION_ERROR_NONE, ret);
}
-}
\ No newline at end of file
+TEST_F(CWCP, watchface_complication_provider_foreach_info)
+{
+ int ret, count = 0;
+
+ ret = watchface_complication_provider_foreach_info(
+ nullptr, __all_provider_foreach_cb, &count);
+ EXPECT_EQ(5, count);
+ EXPECT_EQ(WATCHFACE_COMPLICATION_ERROR_NONE, ret);
+
+ ret = watchface_complication_provider_foreach_info(
+ "org.tizen.gmock_comp_provider", __provider_foreach_cb, nullptr);
+ EXPECT_EQ(WATCHFACE_COMPLICATION_ERROR_NONE, ret);
+
+}
+}
#include <vconf.h>
#include "watchface-complication/complication-internal.hh"
-#include "watchface-complication/db-manager.hh"
+#include "watchface-common/db-manager.hh"
#include "watchface-common/watchface-util.hh"
#ifdef LOG_TAG
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
+std::list<std::shared_ptr<DBManager::ProviderInfo>>
+DBManager::GetProviderList(std::string& app_id) {
+ std::string query =
+ "SELECT A.provider_id, appid, SUM(support_type) FROM complication_provider as A "
+ "LEFT JOIN provider_support_types as B ON A.provider_id = B.provider_id";
+
+ if (app_id.empty() == false)
+ query += " WHERE A.appid = ? GROUP BY A.provider_id";
+ else
+ query += " GROUP BY A.provider_id";
+
+ util::DBHelper db;
+
+ if (!db.Open())
+ return {};
+
+ if (!db.Prepare(query))
+ return {};
+
+ if (app_id.empty() == false) {
+ if (!db.Bind(1, app_id))
+ return {};
+ }
+
+ std::string locale = DBManager::GetSystemLocale();
+
+ std::list<std::shared_ptr<DBManager::ProviderInfo>> provider_list;
+ while (db.Step() == SQLITE_ROW) {
+ std::string provider_id = db.GetText(0);
+ std::string app_id = db.GetText(1);
+ int support_types = db.GetInt(2);
+ std::string icon = GetIcon(provider_id, locale);
+ std::string label = GetLabel(provider_id.c_str());
+
+ provider_list.emplace_back(
+ std::shared_ptr<ProviderInfo>(
+ new ProviderInfo(provider_id, support_types, app_id, label, icon)));
+ }
+
+ return provider_list;
+
+}
+
} // namespace watchface_complication
class ProviderInfo {
std::string provider_id_;
int type_;
+ std::string app_id_;
+ std::string label_;
+ std::string icon_;
+
public:
- ProviderInfo(std::string provider_id, int type)
- : provider_id_(provider_id), type_(type) {
+ ProviderInfo(std::string provider_id, int type,
+ std::string app_id = "", std::string label = "", std::string icon = "")
+ : provider_id_(provider_id), type_(type),
+ app_id_(app_id), label_(label), icon_(icon) {
}
std::string& GetProviderId() {
return provider_id_;
}
+ std::string& GetAppId() {
+ return app_id_;
+ }
+ std::string& GetLabel() {
+ return label_;
+ }
+ std::string& GetIcon() {
+ return icon_;
+ }
int GetType() {
return type_;
}
static std::list<std::string> GetProviderListWithAppId(const char* provider_id);
static int GetTrustedInfo(std::string& provider_id, bool* trusted);
static std::string GetSystemLocale();
+ static std::list<std::shared_ptr<ProviderInfo>> GetProviderList(std::string& app_id);
private:
DBManager(); /* LCOV_EXCL_LINE */
void watchface_complication_provider_set_consumer_status_cb(
watchface_complication_consumer_status_cb callback, void *user_data);
+typedef void *provider_info_h;
+
+typedef void (*complication_provider_foreach_cb)
+ (const provider_info_h info, void *user_data);
+
+int watchface_complication_provider_foreach_info(
+ const char *appid, complication_provider_foreach_cb callback,
+ void *user_data);
+int watchface_complication_provider_info_get_id(const provider_info_h info, char** id);
+int watchface_complication_provider_info_get_app_id(const provider_info_h info, char** app_id);
+int watchface_complication_provider_info_get_label(const provider_info_h info, char** label);
+int watchface_complication_provider_info_get_icon(const provider_info_h info, char** icon);
+int watchface_complication_provider_info_get_types(const provider_info_h info, int* types);
+
#ifdef __cplusplus
}
#endif
#include "watchface-complication-provider/complication-provider.hh"
#include "watchface-complication-provider/include/watchface-complication-provider.h"
#include "watchface-complication-provider/include/watchface-complication-provider-internal.h"
-#include "watchface-complication/db-manager.hh"
+#include "watchface-common/db-manager.hh"
#include "watchface-complication/complication-internal.hh"
#ifdef LOG_TAG
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
+
+extern "C" EXPORT_API
+int watchface_complication_provider_foreach_info(
+ const char *appid, complication_provider_foreach_cb callback,
+ void *user_data) {
+ if (callback == nullptr) {
+ LOGE("Invalid param");
+ return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+ }
+
+ std::string tmp_appid;
+ if (appid != nullptr && strlen(appid) > 0)
+ tmp_appid = appid;
+
+ std::list<std::shared_ptr<DBManager::ProviderInfo>> provider_list =
+ DBManager::GetProviderList(tmp_appid);
+
+ for (auto& i : provider_list)
+ callback(static_cast<provider_info_h>(i.get()), user_data);
+
+ return WATCHFACE_COMPLICATION_ERROR_NONE;
+}
+
+extern "C" EXPORT_API
+int watchface_complication_provider_info_get_id(
+ const provider_info_h info, char** id) {
+ if (info == nullptr || id == nullptr) {
+ LOGE("Invalid param");
+ return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+ }
+
+ DBManager::ProviderInfo* p_info = static_cast<DBManager::ProviderInfo*>(info);
+ string provider_id_ = p_info->GetProviderId();
+ if (provider_id_.empty())
+ return WATCHFACE_COMPLICATION_ERROR_NO_DATA;
+
+ char* tmp_id = strdup(provider_id_.c_str());
+ if (tmp_id == nullptr) {
+ LOGE("Out of memory");
+ return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
+ }
+
+ *id = tmp_id;
+ return WATCHFACE_COMPLICATION_ERROR_NONE;
+}
+
+extern "C" EXPORT_API
+int watchface_complication_provider_info_get_app_id(
+ const provider_info_h info, char** app_id) {
+ if (info == nullptr || app_id == nullptr) {
+ LOGE("Invalid param");
+ return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+ }
+
+ DBManager::ProviderInfo* p_info = static_cast<DBManager::ProviderInfo*>(info);
+ string app_id_ = p_info->GetAppId();
+ if (app_id_.empty())
+ return WATCHFACE_COMPLICATION_ERROR_NO_DATA;
+
+ char* tmp_app_id = strdup(app_id_.c_str());
+ if (tmp_app_id == nullptr) {
+ LOGE("Out of memory");
+ return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
+ }
+
+ *app_id = tmp_app_id;
+ return WATCHFACE_COMPLICATION_ERROR_NONE;
+}
+
+extern "C" EXPORT_API
+int watchface_complication_provider_info_get_label(
+ const provider_info_h info, char** label) {
+ if (info == nullptr || label == nullptr) {
+ LOGE("Invalid param");
+ return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+ }
+
+ DBManager::ProviderInfo* p_info = static_cast<DBManager::ProviderInfo*>(info);
+ string label_ = p_info->GetLabel();
+ if (label_.empty())
+ return WATCHFACE_COMPLICATION_ERROR_NO_DATA;
+
+ char* tmp_label = strdup(label_.c_str());
+ if (tmp_label == nullptr) {
+ LOGE("Out of memory");
+ return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
+ }
+
+ *label = tmp_label;
+ return WATCHFACE_COMPLICATION_ERROR_NONE;
+}
+
+extern "C" EXPORT_API
+int watchface_complication_provider_info_get_icon(
+ const provider_info_h info, char** icon) {
+ if (info == nullptr || icon == nullptr) {
+ LOGE("Invalid param");
+ return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+ }
+
+ DBManager::ProviderInfo* p_info = static_cast<DBManager::ProviderInfo*>(info);
+ string icon_ = p_info->GetIcon();
+ if (icon_.empty())
+ return WATCHFACE_COMPLICATION_ERROR_NO_DATA;
+
+ char* tmp_icon = strdup(icon_.c_str());
+ if (tmp_icon == nullptr) {
+ LOGE("Out of memory");
+ return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
+ }
+
+ *icon = tmp_icon;
+ return WATCHFACE_COMPLICATION_ERROR_NONE;
+}
+
+extern "C" EXPORT_API
+int watchface_complication_provider_info_get_types(
+ const provider_info_h info, int* types) {
+ if (info == nullptr || types == nullptr) {
+ LOGE("Invalid param");
+ return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+ }
+
+ DBManager::ProviderInfo* p_info = static_cast<DBManager::ProviderInfo*>(info);
+ *types = p_info->GetType();
+
+ return WATCHFACE_COMPLICATION_ERROR_NONE;
+}
#include "watchface-complication/gdbus-interface.hh"
#include "watchface-complication/complication-connector.hh"
#include "watchface-complication/editables-manager.hh"
-#include "watchface-complication/db-manager.hh"
+#include "watchface-common/db-manager.hh"
#include "watchface-common/watchface-exception.hh"
#include "watchface-complication-provider/include/watchface-complication-provider-internal.h"