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