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