Brion VIBBER has submitted this change and it was merged.
Change subject: Simplify sections to be not nested
......................................................................
Simplify sections to be not nested
We were unnesting them in multiple places anyway.
This also means that each individual section gets sent to the
webview individually. This increases the number of cross-boundary
calls but reduces the size of each of them. Will need to verify
which one is better later on.
Change-Id: I3e8c11160f4e7c98169be303b513fd005c61bf68
---
M wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
M wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
M wikipedia-it/src/main/java/org/wikipedia/test/SectionTests.java
M wikipedia/assets/main.js
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
M wikipedia/src/main/java/org/wikipedia/page/Section.java
M wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
7 files changed, 19 insertions(+), 94 deletions(-)
Approvals:
Brion VIBBER: Verified; Looks good to me, approved
diff --git
a/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
b/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
index 19a30a1..11db473 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
@@ -14,38 +14,21 @@
public class PageFetchTaskTests extends
ActivityUnitTestCase<TestDummyActivity> {
private static final int TASK_COMPLETION_TIMEOUT = 20000;
- private Api enwikiAPI;
- private Site enwiki;
-
public PageFetchTaskTests() {
super(TestDummyActivity.class);
}
- @Override
- public void setUp() throws Exception {
- super.setUp();
- enwiki = new Site("en.wikipedia.org");
- enwikiAPI = new Api("en.wikipedia.org");
-
- startActivity(new Intent(), null, null);
- }
-
public void testPageFetch() throws Throwable {
final CountDownLatch completionLatch = new CountDownLatch(1);
+ startActivity(new Intent(), null, null);
runTestOnUiThread(new Runnable() {
@Override
public void run() {
- new SectionsFetchTask(enwikiAPI, new PageTitle(null, "India",
enwiki), "all") {
+ new SectionsFetchTask(getInstrumentation().getTargetContext(),
new PageTitle(null, "Test_page_for_app_testing/Section1", new
Site("test.wikipedia.org")), "all") {
@Override
public void onFinish(List<Section> result) {
assertNotNull(result);
- // FIXME: SUPER FLAKY TEST BELOW! 16 is count of first
level sections + 1 in en:India article!
- assertEquals(16, result.size());
- assertEquals(4, result.get(2).getSubSections().size());
- assertEquals(result.get(1),
Section.findSectionForID(result, 1));
- assertEquals(result.get(2).getSubSections().get(0),
Section.findSectionForID(result, 3));
- assertEquals(result.get(result.size() - 1),
Section.findSectionForID(result, 28));
- assertEquals(result.get(10).getSubSections().get(6),
Section.findSectionForID(result, 23));
+ assertEquals(4, result.size());
completionLatch.countDown();
}
}.execute();
diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
b/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
index 7317932..1bb8708 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
@@ -38,9 +38,6 @@
public void testSection() throws Exception {
Section parentSection = new Section(1, 1, null, null, "Hi there!");
- for (int i = 2; i <= 10; i++) {
- parentSection.insertSection(new Section(i, 1, "Something " + i,
"Something_" + i, "Content Something" + i));
- }
parcelAndTestObjects(parentSection);
}
diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/SectionTests.java
b/wikipedia-it/src/main/java/org/wikipedia/test/SectionTests.java
index 1df4a59..9cde10c 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/SectionTests.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/SectionTests.java
@@ -23,9 +23,6 @@
@Test
public void testJSONSerialization() throws Exception {
Section parentSection = new Section(1, 1, null, null, "Hi there!");
- for (int i = 2; i <= 10; i++) {
- parentSection.insertSection(new Section(i, 1, "Something " + i,
"Something_" + i, "Content Something" + i));
- }
assertEquals(parentSection, new Section(parentSection.toJSON()));
}
diff --git a/wikipedia/assets/main.js b/wikipedia/assets/main.js
index f2fa1f4..208c530 100644
--- a/wikipedia/assets/main.js
+++ b/wikipedia/assets/main.js
@@ -23,7 +23,7 @@
});
function elementsForSection( section ) {
- var heading = document.createElement( "h2" );
+ var heading = document.createElement( "h" + ( section.toclevel + 1 ) );
heading.textContent = section.line;
heading.id = "heading_" + section.id;
heading.setAttribute( 'data-id', section.id );
@@ -38,14 +38,6 @@
content.innerHTML = section.text;
content.id = "content_block_" + section.id;
content = transforms.transform( "body", content );
-
- if ( section.subSections ) {
- section.subSections.forEach( function ( subSection ) {
- elementsForSection( subSection).forEach( function( element ) {
- content.appendChild( element );
- } );
- } );
- }
return [ heading, content ];
}
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
index 52e0f00..59e1b28 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
@@ -4,6 +4,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -228,7 +229,7 @@
private class LeadSectionFetchTask extends SectionsFetchTask {
public LeadSectionFetchTask() {
- super(api, title, "0");
+ super(getActivity(), title, "0");
}
@Override
@@ -242,6 +243,7 @@
@Override
public List<Section> processResult(ApiResult result) throws Throwable {
+ Log.d("Wikipedia", result.asObject().toString(4));
pageProperties = new
PageProperties(Utils.parseMWDate(result.asObject().optJSONObject("mobileview").optString("lastmodified")));
return super.processResult(result);
}
@@ -275,7 +277,7 @@
private class RestSectionsFetchTask extends SectionsFetchTask {
public RestSectionsFetchTask() {
- super(api, title, "1-");
+ super(getActivity(), title, "1-");
}
@Override
diff --git a/wikipedia/src/main/java/org/wikipedia/page/Section.java
b/wikipedia/src/main/java/org/wikipedia/page/Section.java
index a18b084..1d5feb9 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/Section.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/Section.java
@@ -17,16 +17,8 @@
private final JSONObject data;
- private ArrayList<Section> subSections = new ArrayList<Section>();
-
public Section(JSONObject json) {
this.data = json;
- if (data.has("subSections")) {
- JSONArray subsectionsJSON = data.optJSONArray("subSections");
- for (int i = 0; i < subsectionsJSON.length(); i++) {
- subSections.add(new Section(subsectionsJSON.optJSONObject(i)));
- }
- }
}
// Use this only for tests and such.
@@ -61,8 +53,7 @@
&& getLevel() == other.getLevel()
&& Utils.compareStrings(getHeading(), other.getHeading())
&& Utils.compareStrings(getAnchor(), other.getAnchor())
- && Utils.compareStrings(getContent(), other.getContent())
- && getSubSections().equals(other.getSubSections());
+ && Utils.compareStrings(getContent(), other.getContent());
}
@@ -90,27 +81,7 @@
return data.optString("text");
}
- public void insertSection(Section subSection) {
- subSections.add(subSection);
- }
-
- public ArrayList<Section> getSubSections() {
- return subSections;
- }
-
public JSONObject toJSON() {
- // Always regenerate the subsections, since that's mutable.
- JSONArray subSectionsJSON = new JSONArray();
- for (Section s : getSubSections()) {
- subSectionsJSON.put(s.toJSON());
- }
-
- try {
- data.put("subSections", subSectionsJSON);
- } catch (JSONException e) {
- // Won't happen
- throw new RuntimeException(e);
- }
return data;
}
@@ -141,21 +112,6 @@
};
public static Section findSectionForID(List<Section> sections, int id) {
- // We could use binary search here, but meh. Fast enough.
- for (int i = 0; i < sections.size(); i++) {
- Section curSection = sections.get(i);
- if (curSection.getId() == id) {
- return curSection;
- }
- if (i + 1 < sections.size()) {
- Section nextSection = sections.get(i + 1);
- if (id < nextSection.getId() && id > curSection.getId()) {
- return findSectionForID(curSection.getSubSections(), id);
- }
- } else {
- return findSectionForID(curSection.getSubSections(), id);
- }
- }
- throw new RuntimeException("We can't find that section with id " + id
+ " AND THIS IS NOT SUPPOSED TO HAPPEN");
+ return sections.get(id);
}
}
diff --git a/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
b/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
index 94f0077..f473f5b 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
@@ -1,5 +1,6 @@
package org.wikipedia.page;
+import android.content.Context;
import org.json.JSONArray;
import org.json.JSONObject;
import org.mediawiki.api.json.Api;
@@ -7,6 +8,7 @@
import org.mediawiki.api.json.RequestBuilder;
import org.wikipedia.ApiTask;
import org.wikipedia.PageTitle;
+import org.wikipedia.WikipediaApp;
import org.wikipedia.concurrency.ExecutorService;
import java.util.ArrayList;
@@ -16,8 +18,11 @@
private final PageTitle title;
private final String sections;
- public SectionsFetchTask(Api api, PageTitle title, String sections) {
-
super(ExecutorService.getSingleton().getExecutor(SectionsFetchTask.class, 1),
api);
+ public SectionsFetchTask(Context context, PageTitle title, String
sections) {
+ super(
+
ExecutorService.getSingleton().getExecutor(SectionsFetchTask.class, 1),
+
((WikipediaApp)context.getApplicationContext()).getAPIForSite(title.getSite())
+ );
this.title = title;
this.sections = sections;
}
@@ -37,17 +42,10 @@
public List<Section> processResult(ApiResult result) throws Throwable {
JSONArray sectionsJSON =
result.asObject().optJSONObject("mobileview").optJSONArray("sections");
ArrayList<Section> sections = new ArrayList<Section>();
- Section curSection = null;
for (int i=0; i < sectionsJSON.length(); i++) {
- JSONObject sectionJSON = sectionsJSON.getJSONObject(i);
- Section newSection = new Section(sectionJSON);
- if (curSection == null || newSection.getLevel() <=
curSection.getLevel()) {
- curSection = newSection;
- sections.add(newSection);
- } else {
- curSection.insertSection(newSection);
- }
+ Section newSection = new Section(sectionsJSON.getJSONObject(i));
+ sections.add(newSection);
}
return sections;
}
--
To view, visit https://gerrit.wikimedia.org/r/107808
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3e8c11160f4e7c98169be303b513fd005c61bf68
Gerrit-PatchSet: 2
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits