Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/107808


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(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/08/107808/1

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: newchange
Gerrit-Change-Id: I3e8c11160f4e7c98169be303b513fd005c61bf68
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to