Deskana has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/206993

Change subject: Hygiene: create decodeURL method in Utils, and use it 
everywhere.
......................................................................

Hygiene: create decodeURL method in Utils, and use it everywhere.

This patch implements a deocdeURL method in Utils that uses URLDecoder to
decode a URL-encoded string into its UTF-8 equivalent, and then uses that
everywhere instead of directly using URLDecoder. This reduces code redundancy
and increases code cleanliness.

Change-Id: If2ca604eee35ec9158eb5e7317193122b16bb9f0
---
M wikipedia/src/main/java/org/wikipedia/PageTitle.java
M wikipedia/src/main/java/org/wikipedia/Utils.java
M wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
M wikipedia/src/main/java/org/wikipedia/page/LinkHandler.java
M wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
M wikipedia/src/main/java/org/wikipedia/page/PageInfoHandler.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
M wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
8 files changed, 37 insertions(+), 42 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/93/206993/1

diff --git a/wikipedia/src/main/java/org/wikipedia/PageTitle.java 
b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
index 449808f..10df728 100644
--- a/wikipedia/src/main/java/org/wikipedia/PageTitle.java
+++ b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
@@ -58,12 +58,7 @@
         String[] fragParts = text.split("#", -1);
         text = fragParts[0];
         if (fragParts.length > 1) {
-            try {
-                this.fragment = URLDecoder.decode(fragParts[1], "utf-8");
-            } catch (UnsupportedEncodingException e) {
-                // STUPID STUPID JAVA
-                throw new RuntimeException(e);
-            }
+            this.fragment = Utils.decodeURL(fragParts[1]);
         } else {
             this.fragment = null;
         }
diff --git a/wikipedia/src/main/java/org/wikipedia/Utils.java 
b/wikipedia/src/main/java/org/wikipedia/Utils.java
index fe104b5..2fb9b70 100644
--- a/wikipedia/src/main/java/org/wikipedia/Utils.java
+++ b/wikipedia/src/main/java/org/wikipedia/Utils.java
@@ -20,6 +20,7 @@
 import android.text.format.DateUtils;
 import android.util.Base64;
 import android.util.DisplayMetrics;
+import android.util.Log;
 import android.util.TypedValue;
 import android.view.View;
 import android.view.Window;
@@ -45,6 +46,7 @@
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.text.ParseException;
@@ -161,6 +163,22 @@
     }
 
     /**
+     * Decodes a URL-encoded string into its UTF-8 equivalent.
+     * @param url The URL-encoded string that you wish to decode.
+     * @return The decoded string, or the input string if the decoding failed.
+     */
+    public static String decodeURL(String url) {
+        try {
+            return URLDecoder.decode(url, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            // Inexplicable decoding problem. This shouldn't happen. Return 
the input.
+            Log.d("Wikipedia","URL decoding failed. String was: " + url);
+            return url;
+        }
+
+    }
+
+    /**
      * Deletes a file or directory, with optional recursion.
      * @param path File or directory to delete.
      * @param recursive Whether to delete all subdirectories and files.
diff --git 
a/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java 
b/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
index d53e014..fef8486 100644
--- a/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
+++ b/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
@@ -12,6 +12,7 @@
 import android.webkit.WebView;
 import org.json.JSONException;
 import org.json.JSONObject;
+import org.wikipedia.Utils;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
@@ -122,13 +123,11 @@
                 // still receiving some final messages from the WebView, so 
we'll just ignore them.
                 // But we should still return true and "confirm" the 
JsPromptResult down below.
                 if (incomingMessageHandler != null) {
-                    JSONObject messagePack = new 
JSONObject(URLDecoder.decode(message, "utf-8"));
+                    JSONObject messagePack = new 
JSONObject(Utils.decodeURL(message));
                     Message msg = Message.obtain(incomingMessageHandler, 
MESSAGE_HANDLE_MESSAGE_FROM_JS, messagePack);
                     incomingMessageHandler.sendMessage(msg);
                 }
             } catch (JSONException e) {
-                throw new RuntimeException(e);
-            } catch (UnsupportedEncodingException e) {
                 throw new RuntimeException(e);
             }
             result.confirm();
diff --git a/wikipedia/src/main/java/org/wikipedia/page/LinkHandler.java 
b/wikipedia/src/main/java/org/wikipedia/page/LinkHandler.java
index 0bb500e..a3f3b99 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/LinkHandler.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/LinkHandler.java
@@ -38,14 +38,11 @@
     @Override
     public void onMessage(String messageType, JSONObject messagePayload) {
         try {
-            String href = URLDecoder.decode(messagePayload.getString("href"), 
"UTF-8");
+            String href = Utils.decodeURL(messagePayload.getString("href"));
             onUrlClick(href);
         } catch (IllegalArgumentException e) {
             // The URL is malformed and URL decoder can't understand it. Just 
do nothing.
             Log.d("Wikipedia", "A malformed URL was tapped.");
-        } catch (UnsupportedEncodingException e) {
-            // will not happen
-            throw new RuntimeException(e);
         } catch (JSONException e) {
             throw new RuntimeException(e);
         }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java 
b/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
index 87e3f10..85d9c94 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
@@ -6,6 +6,9 @@
 import android.text.style.URLSpan;
 import android.view.MotionEvent;
 import android.widget.TextView;
+
+import org.wikipedia.Utils;
+
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 
@@ -30,13 +33,9 @@
             final int off = layout.getOffsetForHorizontal(line, x);
             final URLSpan[] links = buffer.getSpans(off, off, URLSpan.class);
             if (links.length != 0) {
-                try {
-                    String url = URLDecoder.decode(links[0].getURL(), "utf-8");
-                    handler.onUrlClick(url);
-                    return true;
-                } catch (UnsupportedEncodingException e) {
-                    // won't happen
-                }
+                String url = Utils.decodeURL(links[0].getURL());
+                handler.onUrlClick(url);
+                return true;
             }
         }
         return super.onTouchEvent(widget, buffer, event);
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageInfoHandler.java 
b/wikipedia/src/main/java/org/wikipedia/page/PageInfoHandler.java
index bf4ada0..1a020cf 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageInfoHandler.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageInfoHandler.java
@@ -47,13 +47,7 @@
         }
         DisambigResult[] stringArray = new DisambigResult[array.length()];
         for (int i = 0; i < array.length(); i++) {
-            try {
-                // Decode the href that we got into a PageTitle, and create a 
DisambigResult with it
-                stringArray[i] = new 
DisambigResult(getSite().titleForInternalLink(URLDecoder.decode(array.getString(i),
 "UTF-8")));
-            } catch (UnsupportedEncodingException e) {
-                // Inexplicable decoding problem. Display raw string to user. 
Better than nothing.
-                stringArray[i] = new 
DisambigResult(getSite().titleForInternalLink(array.getString(i)));
-            }
+            stringArray[i] = new 
DisambigResult(getSite().titleForInternalLink(Utils.decodeURL(array.getString(i))));
         }
         return stringArray;
     }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java 
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
index f215602..c5a27ee 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
@@ -734,7 +734,7 @@
             @Override
             public void onMessage(String messageType, JSONObject 
messagePayload) {
                 try {
-                    String href = 
URLDecoder.decode(messagePayload.getString("href"), "UTF-8");
+                    String href = 
Utils.decodeURL(messagePayload.getString("href"));
                     if (href.startsWith("/wiki/")) {
                         PageTitle imageTitle = 
title.getSite().titleForInternalLink(href);
                         showImageGallery(imageTitle);
@@ -743,8 +743,6 @@
                     }
                 } catch (JSONException e) {
                     //nope
-                } catch (UnsupportedEncodingException e) {
-                    //nope
                 }
             }
         });
@@ -752,11 +750,9 @@
             @Override
             public void onMessage(String messageType, JSONObject 
messagePayload) {
                 try {
-                    String href = 
URLDecoder.decode(messagePayload.getString("href"), "UTF-8");
+                    String href = 
Utils.decodeURL(messagePayload.getString("href"));
                     showImageGallery(new PageTitle(href, title.getSite()));
                 } catch (JSONException e) {
-                    //nope
-                } catch (UnsupportedEncodingException e) {
                     //nope
                 }
             }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java 
b/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
index e4387cb..5d96ef8 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
@@ -4,6 +4,7 @@
 import org.mediawiki.api.json.RequestBuilder;
 import org.wikipedia.PageTitle;
 import org.wikipedia.R;
+import org.wikipedia.Utils;
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.page.Page;
 import org.wikipedia.page.PageActivity;
@@ -57,15 +58,11 @@
                             || (text.getSpanEnd(span) - 
text.getSpanStart(span) <= 1)) {
                             continue;
                         }
-                        try {
-                            PageTitle title = 
WikipediaApp.getInstance().getPrimarySite()
-                                
.titleForInternalLink(URLDecoder.decode(span.getURL(), "utf-8"));
-                            if (!title.isFilePage() && !title.isSpecial()) {
-                                titleText = title.getDisplayText();
-                                break;
-                            }
-                        } catch (UnsupportedEncodingException e) {
-                            // no.
+                        PageTitle title = 
WikipediaApp.getInstance().getPrimarySite()
+                            
.titleForInternalLink(Utils.decodeURL(span.getURL()));
+                        if (!title.isFilePage() && !title.isSpecial()) {
+                            titleText = title.getDisplayText();
+                            break;
                         }
                     }
                     if (!TextUtils.isEmpty(titleText)) {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If2ca604eee35ec9158eb5e7317193122b16bb9f0
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Deskana <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to