[SystemInfo][LOCALE] Using capi-runtime-info for Tizen mobile
authorfyraimar <fyraimar@gmail.com>
Wed, 14 Aug 2013 08:51:31 +0000 (16:51 +0800)
committerHalton Huo <halton.huo@intel.com>
Fri, 16 Aug 2013 03:26:46 +0000 (11:26 +0800)
packaging/tizen-extensions-crosswalk.spec
system_info/system_info.gyp
system_info/system_info_locale_desktop.cc [moved from system_info/system_info_locale.cc with 100% similarity]
system_info/system_info_locale_mobile.cc [new file with mode: 0644]

index 02c4ff8..5a39c2e 100644 (file)
@@ -16,6 +16,7 @@ BuildRequires: pkgconfig(capi-network-connection)
 BuildRequires: pkgconfig(capi-system-device)
 BuildRequires: pkgconfig(capi-system-info)
 BuildRequires: pkgconfig(capi-system-power)
+BuildRequires: pkgconfig(capi-system-runtime-info)
 BuildRequires: pkgconfig(capi-system-system-settings)
 BuildRequires: pkgconfig(capi-telephony-sim)
 BuildRequires: pkgconfig(capi-web-url-download)
index 150d7a5..55d9c68 100644 (file)
@@ -20,6 +20,7 @@
             'packages': [
               'capi-network-connection',
               'capi-system-info',
+              'capi-system-runtime-info',
               'capi-telephony-sim',
               'vconf',
             ]
@@ -58,8 +59,9 @@
         'system_info_device_orientation_mobile.cc',
         'system_info_display.h',
         'system_info_display_x11.cc',
-        'system_info_locale.cc',
         'system_info_locale.h',
+        'system_info_locale_desktop.cc',
+        'system_info_locale_mobile.cc',
         'system_info_network.cc',
         'system_info_network.h',
         'system_info_network_desktop.cc',
diff --git a/system_info/system_info_locale_mobile.cc b/system_info/system_info_locale_mobile.cc
new file mode 100644 (file)
index 0000000..e223709
--- /dev/null
@@ -0,0 +1,112 @@
+// Copyright (c) 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "system_info/system_info_locale.h"
+
+#if defined(TIZEN_MOBILE)
+#include <runtime_info.h>
+#endif
+#include <string>
+
+#include "common/picojson.h"
+#include "system_info/system_info_utils.h"
+
+SysInfoLocale::SysInfoLocale(ContextAPI* api)
+    : stopping_(false) {
+  api_ = api;
+}
+
+SysInfoLocale::~SysInfoLocale() {
+}
+
+void SysInfoLocale::Get(picojson::value& error,
+                       picojson::value& data) {
+  // language
+  if (!UpdateLanguage()) {
+    system_info::SetPicoJsonObjectValue(error, "message",
+        picojson::value("Get language failed."));
+    return;
+  }
+  system_info::SetPicoJsonObjectValue(data, "language",
+      picojson::value(language_));
+
+  // timezone
+  if (!UpdateCountry()) {
+    system_info::SetPicoJsonObjectValue(error, "message",
+        picojson::value("Get timezone failed."));
+    return;
+  }
+  system_info::SetPicoJsonObjectValue(data, "country",
+      picojson::value(country_));
+
+  system_info::SetPicoJsonObjectValue(error, "message",
+      picojson::value(""));
+}
+
+bool SysInfoLocale::UpdateLanguage() {
+  char* cptr = NULL;
+  std::string language_info;
+
+  runtime_info_key_e key = RUNTIME_INFO_KEY_LANGUAGE;
+  runtime_info_get_value_string(key, &cptr);
+
+  language_info = cptr;
+  if (language_info.empty()) {
+    return false;
+  } else {
+    language_.assign(language_info);
+    return true;
+  }
+}
+
+bool SysInfoLocale::UpdateCountry() {
+  char* cptr = NULL;
+  std::string country_info;
+
+  runtime_info_key_e key = RUNTIME_INFO_KEY_REGION;
+  runtime_info_get_value_string(key, &cptr);
+
+  country_info = cptr;
+  if (country_info.empty()) {
+    return false;
+  } else {
+    country_.assign(country_info);
+    return true;
+  }
+}
+
+gboolean SysInfoLocale::OnUpdateTimeout(gpointer user_data) {
+  SysInfoLocale* instance = static_cast<SysInfoLocale*>(user_data);
+
+  if (instance->stopping_) {
+    instance->stopping_ = false;
+    return FALSE;
+  }
+
+  std::string oldlanguage_ = instance->language_;
+  std::string oldcountry_ = instance->country_;
+  instance->UpdateLanguage();
+  instance->UpdateCountry();
+
+  if (oldlanguage_ != instance->language_ ||
+      oldcountry_ != instance->country_) {
+    picojson::value output = picojson::value(picojson::object());
+    picojson::value data = picojson::value(picojson::object());
+
+    system_info::SetPicoJsonObjectValue(data, "language",
+        picojson::value(instance->language_));
+    system_info::SetPicoJsonObjectValue(data, "country",
+        picojson::value(instance->country_));
+    system_info::SetPicoJsonObjectValue(output, "cmd",
+        picojson::value("SystemInfoPropertyValueChanged"));
+    system_info::SetPicoJsonObjectValue(output, "prop",
+        picojson::value("LOCALE"));
+    system_info::SetPicoJsonObjectValue(output, "data", data);
+
+    std::string result = output.serialize();
+    instance->api_->PostMessage(result.c_str());
+  }
+
+  return TRUE;
+}