Yuvipanda has uploaded a new change for review.

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


Change subject: Only add history entry after page has actually loaded
......................................................................

Only add history entry after page has actually loaded

This prevents:
- History entry for pages that error out
- History view 'flickering' when you go from history to elsewhere

Change-Id: If55afc48a8179d4123f62734f0251228f1b74921
---
M wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
3 files changed, 31 insertions(+), 13 deletions(-)


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

diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
index 0bf22bd..f968f1c 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
@@ -49,8 +49,8 @@
         searchAriclesFragment.setDrawerLayout(drawerLayout);
     }
 
-    private void displayNewPage(PageTitle title) {
-        PageViewFragment pageFragment = new PageViewFragment(title);
+    private void displayNewPage(PageTitle title, HistoryEntry entry) {
+        PageViewFragment pageFragment = new PageViewFragment(title, entry);
         getSupportFragmentManager().beginTransaction()
                 .setCustomAnimations(R.anim.slide_in_right, 
R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
                 .replace(R.id.content_frame, pageFragment)
@@ -58,14 +58,9 @@
                 .commit();
     }
 
-    private HistoryEntryPersister historyEntryPersister;
     @Subscribe
     public void onNewWikiPageNavigationEvent(NewWikiPageNavigationEvent event) 
{
-        displayNewPage(event.getTitle());
-        if (historyEntryPersister == null) {
-            historyEntryPersister = new HistoryEntryPersister(this);
-        }
-        historyEntryPersister.persist(event.getHistoryEntry());
+        displayNewPage(event.getTitle(), event.getHistoryEntry());
     }
 
     @Override
@@ -94,9 +89,5 @@
         super.onStop();
         bus.unregister(this);
         bus = null;
-        if (historyEntryPersister != null) {
-            historyEntryPersister.cleanup();
-            historyEntryPersister = null;
-        }
     }
 }
diff --git 
a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
index 2fac8c0..8d48a08 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
@@ -15,6 +15,7 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.mediawiki.api.json.Api;
+import org.wikimedia.wikipedia.history.HistoryEntry;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -24,6 +25,7 @@
     private static final String KEY_PAGE = "page";
     private static final String KEY_STATE = "state";
     private static final String KEY_SCROLL_Y = "scrollY";
+    private static final String KEY_CURRENT_HISTORY_ENTRY = 
"currentHistoryEntry";
 
     private static final int STATE_NO_FETCH = 1;
     private static final int STATE_INITIAL_FETCH = 2;
@@ -36,16 +38,19 @@
     private ProgressBar loadProgress;
 
     private Page page;
+    private HistoryEntry curEntry;
 
     private CommunicationBridge bridge;
     private LinkHandler linkHandler;
 
+    private WikipediaApp app;
     private Api api;
 
     private int scrollY;
 
-    public PageViewFragment(PageTitle title) {
+    public PageViewFragment(PageTitle title, HistoryEntry historyEntry) {
         this.title = title;
+        this.curEntry = historyEntry;
     }
 
     public PageViewFragment() {
@@ -106,6 +111,7 @@
         outState.putParcelable(KEY_PAGE, page);
         outState.putInt(KEY_STATE, state);
         outState.putInt(KEY_SCROLL_Y, webView.getScrollY());
+        outState.putParcelable(KEY_CURRENT_HISTORY_ENTRY, curEntry);
     }
 
     @Override
@@ -122,6 +128,7 @@
             }
             state = savedInstanceState.getInt(KEY_STATE);
             scrollY = savedInstanceState.getInt(KEY_SCROLL_Y);
+            curEntry = 
savedInstanceState.getParcelable(KEY_CURRENT_HISTORY_ENTRY);
         }
         if (title == null) {
             throw new RuntimeException("No PageTitle passed in to constructor 
or in instanceState");
@@ -133,6 +140,7 @@
 
         bridge = new CommunicationBridge(webView, 
"file:///android_asset/index.html");
         linkHandler = new LinkHandler(getActivity(), bridge, title.getSite());
+        app = (WikipediaApp)getActivity().getApplicationContext();
         api = 
((WikipediaApp)getActivity().getApplicationContext()).getAPIForSite(title.getSite());
 
         switch (state) {
@@ -169,6 +177,9 @@
             displayLeadSection(page);
             state = STATE_INITIAL_FETCH;
             new RestSectionsFetchTask().execute();
+
+            // Add history entry now
+            app.getPersister(HistoryEntry.class).persist(curEntry);
         }
     }
 
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
index e080012..bb2ac91 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
@@ -6,7 +6,10 @@
 import org.acra.ReportingInteractionMode;
 import org.acra.annotation.ReportsCrashes;
 import org.mediawiki.api.json.Api;
+import org.wikimedia.wikipedia.data.ContentPersister;
 import org.wikimedia.wikipedia.data.DBOpenHelper;
+import org.wikimedia.wikipedia.history.HistoryEntry;
+import org.wikimedia.wikipedia.history.HistoryEntryPersister;
 
 import java.util.HashMap;
 
@@ -71,4 +74,17 @@
         return dbOpenHelper;
     }
 
+    private HashMap<String, ContentPersister> persisters = new HashMap<String, 
ContentPersister>();
+    public ContentPersister getPersister(Class cls) {
+        if (!persisters.containsKey(cls.getCanonicalName())) {
+            ContentPersister persister;
+            if (cls.equals(HistoryEntry.class)) {
+                persister = new HistoryEntryPersister(this);
+            } else {
+                throw new RuntimeException("No persister found for class " + 
cls.getCanonicalName());
+            }
+            persisters.put(cls.getCanonicalName(), persister);
+        }
+        return persisters.get(cls.getCanonicalName());
+    }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/99558
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If55afc48a8179d4123f62734f0251228f1b74921
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