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