From 5985b527eec469e4e24b3d67ff35ca1b23c2edd7 Mon Sep 17 00:00:00 2001 From: Adam Szczerbiak Date: Tue, 12 Jan 2016 11:50:14 +0100 Subject: [PATCH] Fixed deprecated API using (JIRA task #917) Change-Id: I9fa8b488b72e685264304fe213974da7bfcca737 Signed-off-by: Adam Szczerbiak --- .../cordova_globalization_api.js | 12 +++---- .../cordova_globalization_instance.cc | 10 ++++-- .../cordova_globalization_tools.cc | 34 +++++++++++++++++++ .../cordova_globalization_tools.h | 5 +-- 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/globalization/cordova_globalization_api.js b/src/globalization/cordova_globalization_api.js index 4ddfe3a..42b6a84 100755 --- a/src/globalization/cordova_globalization_api.js +++ b/src/globalization/cordova_globalization_api.js @@ -103,7 +103,7 @@ function Globalization_getDatePattern(successCb, errorCb, options) { var selector = (options && options.selector) || selectorDateAndTimeStr; var callback = function(result) { - // Checking succes of gathering pattern + // Checking success of gathering pattern var fullResult = {}; if (native_.isFailure(result)) { var error = new GlobalizationError( @@ -118,19 +118,13 @@ function Globalization_getDatePattern(successCb, errorCb, options) { // looking for missing pieces of fullResult object var currentDateTime = tizen.time.getCurrentDateTime(); if (currentDateTime) { - // TODO currently value as "GMT+09:00" will be returned, - // to get value "Asia/Seoul" use .getTimezone() instead - var timezoneAbbreviation = currentDateTime.getTimezoneAbbreviation(); - // TODO method secondsFromUTC returns inverted offset: if time zone is GMT+8, it will return -32,400. // TODO currently utcOffset will include DST additional hour if it is present, value will be // timezoneOffset = timezoneOffsetWithoutDST + DSTAdditionalOffset - // if other behaviour is correct, just need to substract dstOffset from utcOffset + // if other behavior is correct, just need to subtract dstOffset from utcOffset var utcOffset = currentDateTime.secondsFromUTC() * (-1); var dstOffset = currentDateTime.isDST() ? oneHourSeconds : 0; - //adding missing parts of result - fullResult["timezone"] = timezoneAbbreviation; fullResult["utc_offset"] = utcOffset; fullResult["dst_offset"] = dstOffset; successCb(fullResult); @@ -147,6 +141,7 @@ function Globalization_getDatePattern(successCb, errorCb, options) { native_.call('CordovaGlobalization_getDatePattern', callArgs, callback); } + function Globalization_getDateNames(successCb, errorCb, options) { var type = (options && options.type) || typeWide; var item = (options && options.item) || itemMonths; @@ -167,6 +162,7 @@ function Globalization_getDateNames(successCb, errorCb, options) { native_.call('CordovaGlobalization_getDateNames', callArgs, callback); } + function Globalization_isDayLightSavingsTime(timestamp, successCb, errorCb) { var tzdate = new tizen.TZDate(new Date(timestamp)); //creates tzdate with local default timezone if (tzdate) { diff --git a/src/globalization/cordova_globalization_instance.cc b/src/globalization/cordova_globalization_instance.cc index 94c6a36..cae29c9 100644 --- a/src/globalization/cordova_globalization_instance.cc +++ b/src/globalization/cordova_globalization_instance.cc @@ -185,10 +185,16 @@ void CordovaGlobalizationInstance::GetDatePattern(const picojson::value& args, picojson::value result = picojson::value(picojson::object()); picojson::object& result_obj = result.get(); - // returning only pattern of date, rest of result should be added in JS using web device API result_obj.insert(std::make_pair("pattern", picojson::value(result_str))); - ReportSuccess(result, response->get()); + std::string result_str; + ret = CordovaGlobalizationTools::GetTimezoneAbbreviation(&result_str); + if (ret.IsSuccess()) { + result_obj.insert(std::make_pair("timezone", picojson::value(result_str))); + ReportSuccess(result, response->get()); + } else { + ReportError(ret, &(response->get())); + } } else { ReportError(ret, &(response->get())); } diff --git a/src/globalization/cordova_globalization_tools.cc b/src/globalization/cordova_globalization_tools.cc index c084ff3..d4af43a 100644 --- a/src/globalization/cordova_globalization_tools.cc +++ b/src/globalization/cordova_globalization_tools.cc @@ -65,6 +65,7 @@ Locale CordovaGlobalizationTools::GetDefaultLocale() { return result; } } + return Locale::createFromName("en_US"); } @@ -171,6 +172,39 @@ PlatformResult CordovaGlobalizationTools::GetDatePattern(DateFormat::EStyle form return PlatformResult(ErrorCode::UNKNOWN_ERR, "Could not get date pattern"); } + +PlatformResult CordovaGlobalizationTools::GetTimezoneAbbreviation(std::string *result_string) { + LoggerD("Entered"); + UErrorCode uec = U_ZERO_ERROR; + UnicodeString str; + PlatformResult pr(ErrorCode::NO_ERROR); + std::unique_ptr fmt( + new SimpleDateFormat(UnicodeString("z"), Locale::getEnglish(), uec)); + if (U_SUCCESS(uec)) { + std::unique_ptr tz(TimeZone::createDefault()); + fmt->setTimeZone(*tz); + fmt->format(0L, str); + if ((str.length() > 3) && (str.compare(0, 3, "GMT") == 0)) { + LoggerD("Returned time zone is a GMT offset."); + str.remove(); + std::unique_ptr gmt( + new SimpleDateFormat(UnicodeString("OOOO"), Locale::getEnglish(), uec)); + gmt->setTimeZone(*tz); + gmt->format(0L, str); + } else { + LoggerD("Returned time zone is not a GMT offset."); + } + + *result_string = ToUTF8String(str); + } else { + LoggerE("Error: could not obtain the time zone."); + *result_string = ""; + pr = PlatformResult(ErrorCode::UNKNOWN_ERR, "Could not obtain the time zone."); + } + + return pr; +} + PlatformResult CordovaGlobalizationTools::GetNames(const std::string& item, const std::string& type, std::vector* result) { diff --git a/src/globalization/cordova_globalization_tools.h b/src/globalization/cordova_globalization_tools.h index 9703d55..c60fb07 100644 --- a/src/globalization/cordova_globalization_tools.h +++ b/src/globalization/cordova_globalization_tools.h @@ -56,7 +56,7 @@ class CordovaGlobalizationTools{ const std::string& selector); static DateFormat::EStyle GetDateFormat(const std::string& length); static std::string GetDateString(UDate date, DateFormat::EStyle format, - const std::string& selector); + const std::string& selector); static common::PlatformResult GetUDateFromString(const std::string& date, DateFormat::EStyle format, const std::string& selector, @@ -64,8 +64,9 @@ class CordovaGlobalizationTools{ static common::PlatformResult GetDatePattern(DateFormat::EStyle format, const std::string& selector, std::string* result); + static common::PlatformResult GetTimezoneAbbreviation(std::string *result_tring); static common::PlatformResult GetNames(const std::string& item, const std::string& type, - std::vector* result); + std::vector* result); static common::PlatformResult GetFirstDayOfWeek(double* result); static common::PlatformResult FormatNumber(double number, const std::string& type, std::string* result); -- 2.34.1