Get default icon when specific locale icon not exist 53/224253/6
authorhyunho <hhstark.kang@samsung.com>
Fri, 7 Feb 2020 07:53:50 +0000 (16:53 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Wed, 19 Feb 2020 00:51:28 +0000 (00:51 +0000)
Change-Id: I40c642716a771bcf020cfeaee7a0d75e72d2e6fa
Signed-off-by: hyunho <hhstark.kang@samsung.com>
watchface-complication/db-manager.cc
watchface-complication/db-manager.h
watchface-editor/watchface-editor.cc

index 7511df0..d4def18 100644 (file)
@@ -351,46 +351,31 @@ int DBManager::GetRequiredSupportEvents(
   return support_events;
 }
 
-char* DBManager::GetSystemLocale() {
+std::string DBManager::GetSystemLocale() {
   char* lang;
-  char* locale;
+  std::string locale;
   char* ptr;
   char* tmp;
 
   lang = vconf_get_str(VCONFKEY_LANGSET);
-  if (lang == nullptr) {
-    locale = strdup(DEFAULT_LOCALE);
-    if (locale == nullptr) {
-      LOGE("out of memory");
-      return nullptr;
-    }
-    return locale;
-  }
+  if (lang == nullptr)
+    return std::string(DEFAULT_LOCALE);
 
   tmp = strtok_r(lang, ".", &ptr);
+  free(lang);
   if (tmp == nullptr) {
     LOGE("failed to get language");
-    free(lang);
-    return nullptr;
+    return "";
   }
 
-  locale = strdup(tmp);
-  if (locale == nullptr) {
-    LOGE("out of memory");
-    free(lang);
-    return nullptr;
-  }
-
-  for (int i = 0; i < static_cast<int>(strlen(locale)); i++) {
+  locale = std::string(tmp);
+  for (int i = 0; i < (int)locale.size(); i++) {
     if (locale[i] == '_')
       locale[i] = '-';
 
     if (isupper(locale[i]))
       locale[i] = tolower(locale[i]);
   }
-
-  free(lang);
-
   return locale;
 }
 
@@ -406,16 +391,14 @@ std::string DBManager::GetLabel(const char* provider_id) {
   if (!db.Prepare(query))
     return std::string();
 
-  char* locale = GetSystemLocale();
-  if (locale == nullptr)
-    return std::string();
-
-  std::unique_ptr<char, decltype(std::free)*> locale_ptr(locale, std::free);
+  std::string locale = GetSystemLocale();
+  if (locale.empty())
+    return "";
 
   if (!db.Bind(1, provider_id))
     return std::string();
 
-  if (!db.Bind(2, locale_ptr.get()))
+  if (!db.Bind(2, locale))
     return std::string();
 
   std::string label;
@@ -450,7 +433,7 @@ std::string DBManager::GetLabel(const char* provider_id) {
   return label;
 }
 
-std::string DBManager::GetIcon(const char* provider_id) {
+std::string DBManager::GetIcon(std::string provider_id, std::string locale) {
   static const char query[] =
     "SELECT icon_path FROM provider_icon "
     "WHERE provider_id=? AND locale=?";
@@ -462,16 +445,10 @@ std::string DBManager::GetIcon(const char* provider_id) {
   if (!db.Prepare(query))
     return std::string();
 
-  char* locale = GetSystemLocale();
-  if (locale == nullptr)
-    return std::string();
-
-  std::unique_ptr<char, decltype(std::free)*> locale_ptr(locale, std::free);
-
   if (!db.Bind(1, provider_id))
     return std::string();
 
-  if (!db.Bind(2, locale_ptr.get()))
+  if (!db.Bind(2, locale))
     return std::string();
 
   std::string icon;
index 6f5e9d1..0b6d2e6 100644 (file)
@@ -55,16 +55,16 @@ 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 GetIcon(const char* provider_id);
+  static std::string GetIcon(std::string provider_id, std::string locale);
   static std::string GetSetupAppId(const char* provider_id);
   static bool IsProviderExist(std::string& provider_id, int support_type);
   static std::list<std::string> GetProviderListWithAppId(const char* provider_id);
   static int GetTrustedInfo(std::string& provider_id, bool* trusted);
+  static std::string GetSystemLocale();
 
  private:
   DBManager(); /* LCOV_EXCL_LINE */
   virtual ~DBManager(); /* LCOV_EXCL_LINE */
-  static char* GetSystemLocale();
 };
 
 }  // namespace watchface_complication
index b294525..1d75d09 100644 (file)
@@ -650,7 +650,9 @@ extern "C" EXPORT_API int watchface_editor_get_complication_provider_icon(
   bundle_get_str(const_cast<bundle*>(candidate_data),
       Complication::GetProviderIdKey(), &val);
   if (val != NULL) {
-    std::string ic = DBManager::GetIcon(val);
+    std::string ic = DBManager::GetIcon(val, DBManager::GetSystemLocale());
+    if (ic.empty())
+      ic = DBManager::GetIcon(val, "No Locale");
     if (!ic.empty()) {
       char* shared_path;
       aul_get_app_shared_resource_path_by_appid(