From 109b740530f6e718c66a3fc19f2d46b633baa0fc Mon Sep 17 00:00:00 2001 From: Petros Douvantzis Date: Tue, 9 Jan 2024 18:57:23 +0200 Subject: [PATCH 1/6] Minor improvement in context wrapping Since ViewPumpAppCompatDeledate allows to pass a context wrapping method, we use this functionality to avoid double wrapping the delegate. TxContextWrappingDelegate2 and TxContextWrappingDelegateJava2 are no longer needed. TxNative#wrap() has a check to avoid double wrapping. Documentation corrections. --- .../src/main/java/com/transifex/txnative/TxNative.java | 9 ++++++--- .../main/java/com/transifex/txnative/TxResources.java | 2 +- .../txnative/activity/TxBaseAppCompatActivity.java | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxNative.java b/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxNative.java index a409843..8b657aa 100644 --- a/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxNative.java +++ b/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxNative.java @@ -170,6 +170,11 @@ public static Context wrap(@NonNull Context context) { return context; } + if (context.getResources() instanceof TxResources) { + Log.w(TAG, "Provided context is already wrapped."); + return context; + } + return new TxContextWrapper(context, sNativeCore); } @@ -203,8 +208,6 @@ public static Context generalWrap(@NonNull Context context) { * @return The wrapped AppCompatDelegate. */ public static @NonNull AppCompatDelegate wrapAppCompatDelegate(@NonNull AppCompatDelegate delegate, @NonNull Context baseContext) { - // TxContextWrappingDelegateJava has to be the last wrapper so the base resources that are - // used by ViewPumpAppCompatDelegate in WebViews are not TxResources, but the original ones. - return new TxContextWrappingDelegateJava2( new ViewPumpAppCompatDelegate(delegate, baseContext)); + return new ViewPumpAppCompatDelegate(delegate, baseContext, TxNative::wrap); } } diff --git a/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxResources.java b/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxResources.java index 993d400..687e9b6 100644 --- a/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxResources.java +++ b/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/TxResources.java @@ -96,7 +96,7 @@ public String[] getStringArray(@StringRes int id) throws NotFoundException { * * @param id The string resource ID to check. * - * @return true if it belong's to Android's resource package, false otherwise. + * @return true if it belongs to Android's resource package, false otherwise. * * @throws NotFoundException Throws NotFoundException if the given ID does not exist. */ diff --git a/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/activity/TxBaseAppCompatActivity.java b/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/activity/TxBaseAppCompatActivity.java index 3350037..0ab17d5 100644 --- a/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/activity/TxBaseAppCompatActivity.java +++ b/TransifexNativeSDK/txsdk/src/main/java/com/transifex/txnative/activity/TxBaseAppCompatActivity.java @@ -31,7 +31,7 @@ public AppCompatDelegate getDelegate() { // following lines. Otherwise, TxNative functionality will be impaired when running on older // platforms (< API 21). // - // Starting from AppCompat 1.5.0, "setCompatVectorFromResourcesEnabled()" does not need this + // Starting from AppCompat 1.4.0, "setCompatVectorFromResourcesEnabled()" does not need this // workaround. // private Resources mResources; // final resources (VectorEnabledTintResourcesWrapper or TxResources) From 9fb18c79f6626ffa4a0f812bc5f315bb09d0a746 Mon Sep 17 00:00:00 2001 From: Petros Douvantzis Date: Thu, 18 Apr 2024 15:28:03 +0300 Subject: [PATCH 2/6] New lines between double quotes are now allowed by Android XML converter According to Android's documentation https://developer.android.com/guide/topics/resources/string-resource#escaping_quotes new lines are preserved within the quoted region. This behavior is now added. Unit tests are also improved. --- .../transifex/clitool/StringXMLConverter.java | 17 ++++++----- .../clitool/StringXMLConverterTest.java | 28 +++++++++++++++++-- .../strings-test-insidedoublequotes.xml | 5 ++++ .../strings-test-new-line-space-tab.xml | 6 ++++ .../testFiles/strings-test-new-line.xml | 4 +++ TransifexNativeSDK/txsdk/build.gradle | 6 ++++ 6 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 TransifexNativeSDK/clitool/testFiles/strings-test-new-line-space-tab.xml diff --git a/TransifexNativeSDK/clitool/src/main/java/com/transifex/clitool/StringXMLConverter.java b/TransifexNativeSDK/clitool/src/main/java/com/transifex/clitool/StringXMLConverter.java index ee9787e..0fc1c19 100644 --- a/TransifexNativeSDK/clitool/src/main/java/com/transifex/clitool/StringXMLConverter.java +++ b/TransifexNativeSDK/clitool/src/main/java/com/transifex/clitool/StringXMLConverter.java @@ -167,10 +167,8 @@ private String getXMLText(@NonNull Element element) { // We follow Android XML Parser's special character handling. - // Replace new lines with spaces. - String unescapedString = originalString.replace('\n', ' '); // Replace tabs with spaces. - unescapedString = unescapedString.replace('\t', ' '); + String unescapedString = originalString.replace('\t', ' '); // Unescape special chars. For example convert a typed "\n" ("\\n" in Java) to a new line // ("\n" in Java) and do some extra processing similar to the Android XML parser. unescapedString= unescapeJavaString(unescapedString); @@ -194,6 +192,8 @@ private String getXMLText(@NonNull Element element) { *