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 <sniedziel...@wikimedia.org>
Gerrit-Reviewer: BearND <bsitzm...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org>
Gerrit-Reviewer: Mholloway <mhollo...@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