From 672e8255c406374a70ea69bdb3838ded4b62bfc3 Mon Sep 17 00:00:00 2001 From: tbenr Date: Fri, 3 Aug 2018 18:43:37 +0200 Subject: [PATCH] Fixes #5347 Signed-off-by: Andrey Shovkoplyas --- .../status/ethereum/module/StatusModule.java | 20 ++++++++++++++++++- .../ios/RCTStatus/RCTStatus.m | 13 ++++++++++++ src/status_im/native_module/core.cljs | 3 +++ src/status_im/native_module/impl/module.cljs | 4 ++++ src/status_im/utils/datetime.cljs | 14 +++++-------- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java index 7805154389..8854440da3 100644 --- a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java +++ b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java @@ -23,6 +23,7 @@ import java.io.FileInputStream; import java.io.OutputStream; import java.io.FileOutputStream; import java.util.HashMap; +import java.util.Map; import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -31,6 +32,8 @@ import org.json.JSONObject; import org.json.JSONException; import com.instabug.library.Instabug; +import javax.annotation.Nullable; + class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventListener, ConnectorHandler { private static final String TAG = "StatusModule"; @@ -43,6 +46,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL private boolean debug; private boolean devCluster; private String logLevel; + private ReactApplicationContext reactContext; StatusModule(ReactApplicationContext reactContext, boolean debug, boolean devCluster, String logLevel) { super(reactContext); @@ -52,6 +56,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL this.debug = debug; this.devCluster = devCluster; this.logLevel = logLevel; + this.reactContext = reactContext; reactContext.addLifecycleEventListener(this); } @@ -703,7 +708,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL Log.d(TAG, "AppStateChange: " + type); Statusgo.AppStateChange(type); } - + private static String uniqueID = null; private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID"; @@ -722,4 +727,17 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL } callback.invoke(uniqueID); } + + private Boolean is24Hour() { + return android.text.format.DateFormat.is24HourFormat(this.reactContext.getApplicationContext()); + } + + @Override + public @Nullable + Map getConstants() { + HashMap constants = new HashMap(); + + constants.put("is24Hour", this.is24Hour()); + return constants; + } } diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.m b/modules/react-native-status/ios/RCTStatus/RCTStatus.m index 2b5a11e521..a1fe831368 100644 --- a/modules/react-native-status/ios/RCTStatus/RCTStatus.m +++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.m @@ -398,4 +398,17 @@ RCT_EXPORT_METHOD(getDeviceUUID:(RCTResponseSenderBlock)callback) { return; } +- (bool) is24Hour +{ + NSString *format = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]]; + return ([format rangeOfString:@"a"].location == NSNotFound); +} + +- (NSDictionary *)constantsToExport +{ + return @{ + @"is24Hour": @(self.is24Hour), + }; +} + @end diff --git a/src/status_im/native_module/core.cljs b/src/status_im/native_module/core.cljs index 3f4f5cc769..220db7e419 100644 --- a/src/status_im/native_module/core.cljs +++ b/src/status_im/native_module/core.cljs @@ -65,3 +65,6 @@ (defn get-device-UUID [callback] (native-module/get-device-UUID callback)) + +(defn is24Hour [] + (native-module/is24Hour)) diff --git a/src/status_im/native_module/impl/module.cljs b/src/status_im/native_module/impl/module.cljs index 68b52f2b27..5ae460b80a 100644 --- a/src/status_im/native_module/impl/module.cljs +++ b/src/status_im/native_module/impl/module.cljs @@ -154,3 +154,7 @@ status (fn [UUID] (callback (string/upper-case UUID)))))) + +(defn is24Hour [] + (when status + (.-is24Hour status))) \ No newline at end of file diff --git a/src/status_im/utils/datetime.cljs b/src/status_im/utils/datetime.cljs index 9420cf6fe2..f233fa7615 100644 --- a/src/status_im/utils/datetime.cljs +++ b/src/status_im/utils/datetime.cljs @@ -5,6 +5,7 @@ formatter unparse]] [status-im.i18n :refer [label label-pluralize]] + [status-im.native-module.core :as status] [goog.string :as gstring] goog.string.format goog.i18n.DateTimeFormat @@ -39,16 +40,11 @@ "a"))) ;; returns is24Hour from device or from given locale symbols -;; when device-info module is not available (ie. desktop) returns from the given locale -; -; TODO integrate with native module. example: -; (defn- is24Hour [locsym] -; (if rn/device-info -; (.is24Hour rn/device-info) -; (is24Hour-locsym locsym))) - +;; whenever we get non-nil value use it, else calculate it from the given locale symbol (defn- is24Hour [locsym] - (is24Hour-locsym locsym)) + (if-some [fromdev (status/is24Hour)] + fromdev + (is24Hour-locsym locsym))) ;; time formats (defn- short-time-format [locsym] (if (is24Hour locsym) "HH:mm" "h:mm a"))