jenkins-bot has submitted this change and it was merged.
Change subject: Hygiene: refactor displayLeadSection()
......................................................................
Hygiene: refactor displayLeadSection()
JsonPageLoadStrategy.displayLeadSection() was large and cumbersome. This
patch divides the method into several concerned methods. No functional
changes intended.
Change-Id: I58f8f6ab3922d56d6d0f13ea8b9153a7e898caac
---
M app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
M app/src/main/java/org/wikipedia/page/Page.java
A app/src/main/java/org/wikipedia/util/ResourceUtil.java
M app/src/main/res/values/ids.xml
4 files changed, 147 insertions(+), 49 deletions(-)
Approvals:
Mholloway: Looks good to me, but someone else must approve
Dbrant: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
b/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
index 35d9201..e4f7c6e 100644
--- a/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
+++ b/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
@@ -21,6 +21,7 @@
import org.wikipedia.util.DimenUtil;
import org.wikipedia.util.L10nUtils;
import org.wikipedia.util.PageLoadUtil;
+import org.wikipedia.util.ResourceUtil;
import org.wikipedia.views.ObservableWebView;
import org.wikipedia.views.SwipeRefreshLayoutWithScroll;
@@ -33,9 +34,10 @@
import retrofit.client.Response;
import android.content.Intent;
+import android.content.res.Resources;
import android.os.Build;
+import android.support.annotation.DimenRes;
import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.util.SparseArray;
@@ -513,57 +515,13 @@
}
private void displayLeadSection() {
- final Page page = model.getPage();
- final PageProperties pageProperties = page.getPageProperties();
+ Page page = model.getPage();
- @StringRes int[] stringsToLocalize = {
- R.string.page_similar_titles,
- R.string.button_page_issues,
- R.string.table_infobox,
- R.string.table_other,
- R.string.table_close,
- R.string.expand_refs
- };
- SparseArray<String> localizedStrings =
getStringsForArticleLanguage(page.getTitle(), stringsToLocalize);
+ sendMarginPayload();
- try {
- JSONObject marginPayload = new JSONObject();
- int margin =
DimenUtil.roundedPxToDp(activity.getResources().getDimension(R.dimen.content_margin));
- marginPayload.put("marginLeft", margin);
- marginPayload.put("marginRight", margin);
- bridge.sendMessage("setMargins", marginPayload);
+ sendLeadSectionPayload(page);
- JSONObject leadSectionPayload = new JSONObject();
- leadSectionPayload.put("sequence", currentSequenceNum);
- leadSectionPayload.put("title", page.getDisplayTitle());
- leadSectionPayload.put("section",
page.getSections().get(0).toJSON());
- leadSectionPayload.put("string_page_similar_titles",
localizedStrings.get(R.string.page_similar_titles));
- leadSectionPayload.put("string_page_issues",
localizedStrings.get(R.string.button_page_issues));
- leadSectionPayload.put("string_table_infobox",
localizedStrings.get(R.string.table_infobox));
- leadSectionPayload.put("string_table_other",
localizedStrings.get(R.string.table_other));
- leadSectionPayload.put("string_table_close",
localizedStrings.get(R.string.table_close));
- leadSectionPayload.put("string_expand_refs",
localizedStrings.get(R.string.expand_refs));
- leadSectionPayload.put("isBeta", app.getReleaseType() !=
WikipediaApp.RELEASE_PROD);
- leadSectionPayload.put("siteLanguage",
model.getTitle().getSite().getLanguageCode());
- leadSectionPayload.put("isMainPage", page.isMainPage());
- leadSectionPayload.put("apiLevel", Build.VERSION.SDK_INT);
- bridge.sendMessage("displayLeadSection", leadSectionPayload);
- Log.d(TAG, "Sent message 'displayLeadSection' for page: " +
page.getDisplayTitle());
-
- // Hide edit pencils if anon editing is disabled by remote
killswitch or if this is a file page
- JSONObject miscPayload = new JSONObject();
- boolean isAnonEditingDisabled = app.getRemoteConfig().getConfig()
- .optBoolean("disableAnonEditing", false)
- && !app.getUserInfoStorage().isLoggedIn();
- miscPayload.put("noedit", (isAnonEditingDisabled
- || page.isFilePage()
- || page.isMainPage()));
- miscPayload.put("protect", !pageProperties.canEdit());
- bridge.sendMessage("setPageProtected", miscPayload);
- } catch (JSONException e) {
- // This should never happen
- throw new RuntimeException(e);
- }
+ sendMiscPayload(page);
if (webView.getVisibility() != View.VISIBLE) {
webView.setVisibility(View.VISIBLE);
@@ -571,6 +529,86 @@
refreshView.setRefreshing(false);
activity.updateProgressBar(true, true, 0);
+ }
+
+ private void sendMarginPayload() {
+ JSONObject marginPayload = marginPayload();
+ bridge.sendMessage("setMargins", marginPayload);
+ }
+
+ private JSONObject marginPayload() {
+ int margin =
DimenUtil.roundedPxToDp(getDimension(R.dimen.content_margin));
+ try {
+ return new JSONObject()
+ .put("marginLeft", margin)
+ .put("marginRight", margin);
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void sendLeadSectionPayload(Page page) {
+ JSONObject leadSectionPayload = leadSectionPayload(page);
+ bridge.sendMessage("displayLeadSection", leadSectionPayload);
+ Log.d(TAG, "Sent message 'displayLeadSection' for page: " +
page.getDisplayTitle());
+ }
+
+ private JSONObject leadSectionPayload(Page page) {
+ SparseArray<String> localizedStrings = localizedStrings(page);
+
+ try {
+ return new JSONObject()
+ .put("sequence", currentSequenceNum)
+ .put("title", page.getDisplayTitle())
+ .put("section", page.getSections().get(0).toJSON())
+ .put("string_page_similar_titles",
localizedStrings.get(R.string.page_similar_titles))
+ .put("string_page_issues",
localizedStrings.get(R.string.button_page_issues))
+ .put("string_table_infobox",
localizedStrings.get(R.string.table_infobox))
+ .put("string_table_other",
localizedStrings.get(R.string.table_other))
+ .put("string_table_close",
localizedStrings.get(R.string.table_close))
+ .put("string_expand_refs",
localizedStrings.get(R.string.expand_refs))
+ .put("isBeta", app.getReleaseType() !=
WikipediaApp.RELEASE_PROD)
+ .put("siteLanguage",
model.getTitle().getSite().getLanguageCode())
+ .put("isMainPage", page.isMainPage())
+ .put("apiLevel", Build.VERSION.SDK_INT);
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private SparseArray<String> localizedStrings(Page page) {
+ return getStringsForArticleLanguage(page.getTitle(),
+ ResourceUtil.getIdArray(activity,
R.array.page_localized_string_ids));
+ }
+
+
+ private void sendMiscPayload(Page page) {
+ JSONObject miscPayload = miscPayload(page);
+ bridge.sendMessage("setPageProtected", miscPayload);
+ }
+
+ private JSONObject miscPayload(Page page) {
+ try {
+ return new JSONObject()
+ .put("noedit", !isPageEditable(page)) // Controls whether
edit pencils are visible.
+ .put("protect", page.isProtected());
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private boolean isPageEditable(Page page) {
+ return (app.getUserInfoStorage().isLoggedIn() ||
!isAnonEditingDisabled())
+ && !page.isFilePage()
+ && !page.isMainPage();
+ }
+
+ private boolean isAnonEditingDisabled() {
+ return getRemoteConfig().optBoolean("disableAnonEditing", false);
+ }
+
+ private JSONObject getRemoteConfig() {
+ return app.getRemoteConfig().getConfig();
}
private void displayNonLeadSectionForUnsavedPage(int index) {
@@ -780,4 +818,12 @@
public void setEditHandler(EditHandler editHandler) {
this.editHandler = editHandler;
}
+
+ private float getDimension(@DimenRes int id) {
+ return getResources().getDimension(id);
+ }
+
+ private Resources getResources() {
+ return activity.getResources();
+ }
}
diff --git a/app/src/main/java/org/wikipedia/page/Page.java
b/app/src/main/java/org/wikipedia/page/Page.java
index abe97ae..abf31f3 100755
--- a/app/src/main/java/org/wikipedia/page/Page.java
+++ b/app/src/main/java/org/wikipedia/page/Page.java
@@ -153,4 +153,8 @@
sections.get(i).setContent(remainingSections.get(i -
1).getContent());
}
}
+
+ public boolean isProtected() {
+ return !getPageProperties().canEdit();
+ }
}
diff --git a/app/src/main/java/org/wikipedia/util/ResourceUtil.java
b/app/src/main/java/org/wikipedia/util/ResourceUtil.java
new file mode 100644
index 0000000..99bbe40
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/util/ResourceUtil.java
@@ -0,0 +1,39 @@
+package org.wikipedia.util;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.support.annotation.ArrayRes;
+import android.support.annotation.IdRes;
+
+public final class ResourceUtil {
+ private static final int NO_ID = 0;
+
+ public static int[] getIdArray(Context context, @ArrayRes int id) {
+ return getIdArray(context.getResources(), id);
+ }
+
+ public static int[] getIdArray(Resources resources, @ArrayRes int id) {
+ TypedArray typedArray = resources.obtainTypedArray(id);
+ int[] ids = new int[typedArray.length()];
+ for (int i = 0; i < typedArray.length(); ++i) {
+ @IdRes int itemId = typedArray.getResourceId(i, NO_ID);
+ ids[i] = itemId;
+ checkId(itemId);
+ }
+ typedArray.recycle();
+ return ids;
+ }
+
+ private static void checkId(@IdRes int id) {
+ if (!isIdValid(id)) {
+ throw new RuntimeException("id is invalid");
+ }
+ }
+
+ private static boolean isIdValid(@IdRes int id) {
+ return id != NO_ID;
+ }
+
+ private ResourceUtil() { }
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
index ee83b82..cd22879 100644
--- a/app/src/main/res/values/ids.xml
+++ b/app/src/main/res/values/ids.xml
@@ -1,4 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="view_tool_tip_container" />
+
+ <array name="page_localized_string_ids">
+ <item>@string/page_similar_titles</item>
+ <item>@string/button_page_issues</item>
+ <item>@string/table_infobox</item>
+ <item>@string/table_other</item>
+ <item>@string/table_close</item>
+ <item>@string/expand_refs</item>
+ </array>
</resources>
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/246430
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I58f8f6ab3922d56d6d0f13ea8b9153a7e898caac
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits