jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/404800 )

Change subject: Enforce Unicode NFC when exchanging strings with Reading List 
service.
......................................................................


Enforce Unicode NFC when exchanging strings with Reading List service.

Since we'll be sharing the Reading List service with different platforms,
we need to be consistent about the precise encoding and composition of the
Unicode strings that represent the list names and article titles stored in
them.

This patch enforces Unicode Normalization Form C on the names and
descriptions of reading list names and article titles when they're
communicated back and forth with the Reading List service.

Change-Id: Ie4a89cb8a6cc7de1eebe35080c7556615564f8fa
---
M app/src/main/java/org/wikipedia/page/PageTitle.java
M app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSyncAdapter.java
M app/src/main/java/org/wikipedia/readinglist/sync/SyncedReadingLists.java
M app/src/main/java/org/wikipedia/util/StringUtil.java
4 files changed, 27 insertions(+), 12 deletions(-)

Approvals:
  jenkins-bot: Verified
  Cooltey: Looks good to me, approved



diff --git a/app/src/main/java/org/wikipedia/page/PageTitle.java 
b/app/src/main/java/org/wikipedia/page/PageTitle.java
index d23dc71..efbc433 100644
--- a/app/src/main/java/org/wikipedia/page/PageTitle.java
+++ b/app/src/main/java/org/wikipedia/page/PageTitle.java
@@ -320,7 +320,7 @@
 
         PageTitle other = (PageTitle)o;
         // Not using namespace directly since that can be null
-        return other.getPrefixedText().equals(getPrefixedText()) && 
other.wiki.equals(wiki);
+        return StringUtil.normalizedEquals(other.getPrefixedText(), 
getPrefixedText()) && other.wiki.equals(wiki);
     }
 
     @Override public int hashCode() {
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSyncAdapter.java 
b/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSyncAdapter.java
index eaccd29..090fcab 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSyncAdapter.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSyncAdapter.java
@@ -23,6 +23,7 @@
 import org.wikipedia.settings.Prefs;
 import org.wikipedia.util.DateUtil;
 import org.wikipedia.util.ReleaseUtil;
+import org.wikipedia.util.StringUtil;
 import org.wikipedia.util.log.L;
 
 import java.text.ParseException;
@@ -239,7 +240,7 @@
                     if (list.remoteId() == remoteList.id()) {
                         localList = list;
                         break;
-                    } else if (list.title().equals(remoteList.name())) {
+                    } else if (StringUtil.normalizedEquals(list.title(), 
remoteList.name())) {
                         list.remoteId(remoteList.id());
                         upsertNeeded = true;
                         localList = list;
@@ -265,11 +266,11 @@
                     allLocalLists.add(localList);
                     upsertNeeded = true;
                 } else {
-                    if (!localList.isDefault() && 
!localList.title().equals(remoteList.name())) {
+                    if (!localList.isDefault() && 
!StringUtil.normalizedEquals(localList.title(), remoteList.name())) {
                         localList.title(remoteList.name());
                         upsertNeeded = true;
                     }
-                    if (!localList.isDefault() && 
!TextUtils.equals(localList.description(), remoteList.description())) {
+                    if (!localList.isDefault() && 
!StringUtil.normalizedEquals(localList.description(), 
remoteList.description())) {
                         localList.description(remoteList.description());
                         upsertNeeded = true;
                     }
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/sync/SyncedReadingLists.java 
b/app/src/main/java/org/wikipedia/readinglist/sync/SyncedReadingLists.java
index a4c51c5..c0e3176 100644
--- a/app/src/main/java/org/wikipedia/readinglist/sync/SyncedReadingLists.java
+++ b/app/src/main/java/org/wikipedia/readinglist/sync/SyncedReadingLists.java
@@ -9,6 +9,7 @@
 import org.wikipedia.dataclient.restbase.page.RbPageSummary;
 import org.wikipedia.json.annotations.Required;
 
+import java.text.Normalizer;
 import java.util.List;
 
 public class SyncedReadingLists {
@@ -48,8 +49,8 @@
         public RemoteReadingList() { }
 
         public RemoteReadingList(@NonNull String name, @Nullable String 
description) {
-            this.name = name;
-            this.description = description;
+            this.name = Normalizer.normalize(name, Normalizer.Form.NFC);
+            this.description = Normalizer.normalize(description, 
Normalizer.Form.NFC);
         }
 
         public long id() {
@@ -57,11 +58,11 @@
         }
 
         @NonNull public String name() {
-            return name;
+            return Normalizer.normalize(name, Normalizer.Form.NFC);
         }
 
         @NonNull public String description() {
-            return StringUtils.defaultString(description);
+            return 
Normalizer.normalize(StringUtils.defaultString(description), 
Normalizer.Form.NFC);
         }
 
         public boolean isDefault() {
@@ -90,8 +91,8 @@
         public RemoteReadingListEntry() { }
 
         public RemoteReadingListEntry(@NonNull String project, @NonNull String 
title) {
-            this.project = project;
-            this.title = title;
+            this.project = Normalizer.normalize(project, Normalizer.Form.NFC);
+            this.title = Normalizer.normalize(title, Normalizer.Form.NFC);
         }
 
         public long id() {
@@ -103,11 +104,11 @@
         }
 
         @NonNull public String project() {
-            return project;
+            return Normalizer.normalize(title, Normalizer.Form.NFC);
         }
 
         @NonNull public String title() {
-            return title;
+            return Normalizer.normalize(title, Normalizer.Form.NFC);
         }
 
         @NonNull public String updatedDate() {
diff --git a/app/src/main/java/org/wikipedia/util/StringUtil.java 
b/app/src/main/java/org/wikipedia/util/StringUtil.java
index 4c8f35a..93d070d 100644
--- a/app/src/main/java/org/wikipedia/util/StringUtil.java
+++ b/app/src/main/java/org/wikipedia/util/StringUtil.java
@@ -15,6 +15,7 @@
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.text.Normalizer;
 import java.util.Arrays;
 import java.util.List;
 
@@ -117,6 +118,18 @@
                 .trim();
     }
 
+    // Compare two strings based on their normalized form, using the Unicode 
Normalization Form C.
+    // This should be used when comparing or verifying strings that will be 
exchanged between
+    // different platforms (iOS, desktop, etc) that may encode strings using 
inconsistent
+    // composition, especially for accents, diacritics, etc.
+    public static boolean normalizedEquals(@Nullable String str1, @Nullable 
String str2) {
+        if (str1 == null || str2 == null) {
+            return (str1 == null && str2 == null);
+        }
+        return Normalizer.normalize(str1, Normalizer.Form.NFC)
+                .equals(Normalizer.normalize(str2, Normalizer.Form.NFC));
+    }
+
     /**
      * @param source String that may contain HTML tags.
      * @return returned Spanned string that may contain spans parsed from the 
HTML source.

-- 
To view, visit https://gerrit.wikimedia.org/r/404800
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie4a89cb8a6cc7de1eebe35080c7556615564f8fa
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <dbr...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Cooltey <cf...@wikimedia.org>
Gerrit-Reviewer: Sharvaniharan <sha...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to