BearND has uploaded a new change for review.
https://gerrit.wikimedia.org/r/226672
Change subject: Hygiene: Change SectionsFetchTask parameters
......................................................................
Hygiene: Change SectionsFetchTask parameters
The first step of multiple refactors to get to swappable SectionsFetchTasks.
Pass in the app instead of a context.
Renamed pageSequenceNum to currentSequenceNum.
Renamed sequenceNum to startSequenceNum.
Extract method loadPageFromCache().
Change-Id: I227e6c28bcdc5572908022507e8f0a8782b331e6
---
M wikipedia/src/androidTest/java/org/wikipedia/test/PageFetchTaskTests.java
M wikipedia/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
M wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
M wikipedia/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
M wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
M wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
M wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
8 files changed, 103 insertions(+), 97 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/72/226672/1
diff --git
a/wikipedia/src/androidTest/java/org/wikipedia/test/PageFetchTaskTests.java
b/wikipedia/src/androidTest/java/org/wikipedia/test/PageFetchTaskTests.java
index cc03df0..35b0543 100644
--- a/wikipedia/src/androidTest/java/org/wikipedia/test/PageFetchTaskTests.java
+++ b/wikipedia/src/androidTest/java/org/wikipedia/test/PageFetchTaskTests.java
@@ -1,8 +1,9 @@
package org.wikipedia.test;
-import android.content.Context;
import android.content.Intent;
import android.test.ActivityUnitTestCase;
+
+import org.wikipedia.WikipediaApp;
import org.wikipedia.page.PageTitle;
import org.wikipedia.Site;
import org.wikipedia.page.Section;
@@ -38,8 +39,9 @@
runTestOnUiThread(new Runnable() {
@Override
public void run() {
- final Context ctx = getInstrumentation().getTargetContext();
- new SectionsFetchTask(ctx, new PageTitle(null, title, new
Site("test.wikipedia.org")), "all") {
+ final WikipediaApp app = (WikipediaApp)
+
getInstrumentation().getTargetContext().getApplicationContext();
+ new SectionsFetchTask(app, new PageTitle(null, title, new
Site("test.wikipedia.org")), "all") {
@Override
public void onFinish(List<Section> result) {
assertNotNull(result);
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
b/wikipedia/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
index 036b206..689eced 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
@@ -74,7 +74,7 @@
* Sequence number to maintain synchronization when loading page content
asynchronously
* between the Java and Javascript layers, as well as between async tasks
and the UI thread.
*/
- private int pageSequenceNum;
+ private int currentSequenceNum;
/**
* The y-offset position to which the page will be scrolled once it's
fully loaded
@@ -132,7 +132,7 @@
public void onActivityCreated(Bundle savedInstanceState) {
setupSpecificMessageHandlers();
- pageSequenceNum = 0;
+ currentSequenceNum = 0;
if (savedInstanceState != null) {
ArrayList<PageBackStackItem> tmpBackStack
@@ -156,7 +156,7 @@
return;
}
try {
- if (messagePayload.getInt("sequence") != pageSequenceNum) {
+ if (messagePayload.getInt("sequence") !=
currentSequenceNum) {
return;
}
stagedScrollY = messagePayload.getInt("stagedScrollY");
@@ -173,7 +173,7 @@
return;
}
try {
- if (messagePayload.getInt("sequence") != pageSequenceNum) {
+ if (messagePayload.getInt("sequence") !=
currentSequenceNum) {
return;
}
displayNonLeadSection(messagePayload.getInt("index"));
@@ -189,7 +189,7 @@
return;
}
try {
- if (messagePayload.getInt("sequence") != pageSequenceNum) {
+ if (messagePayload.getInt("sequence") !=
currentSequenceNum) {
return;
}
} catch (JSONException e) {
@@ -242,7 +242,7 @@
// increment our sequence number, so that any async tasks that depend
on the sequence
// will invalidate themselves upon completion.
- pageSequenceNum++;
+ currentSequenceNum++;
// kick off an event to the WebView that will cause it to clear its
contents,
// and then report back to us when the clearing is complete, so that
we can synchronize
@@ -252,7 +252,7 @@
try {
JSONObject wrapper = new JSONObject();
// whatever we pass to this event will be passed back to us by the
WebView!
- wrapper.put("sequence", pageSequenceNum);
+ wrapper.put("sequence", currentSequenceNum);
wrapper.put("tryFromCache", tryFromCache);
wrapper.put("stagedScrollY", stagedScrollY);
bridge.sendMessage("beginNewPage", wrapper);
@@ -272,10 +272,10 @@
leadImagesHandler.hide();
bottomContentHandler.hide();
activity.getSearchBarHideHandler().setFadeEnabled(false);
- new LeadSectionFetchTask(pageSequenceNum).execute();
+ new LeadSectionFetchTask(currentSequenceNum).execute();
break;
case STATE_INITIAL_FETCH:
- new RestSectionsFetchTask(pageSequenceNum).execute();
+ new RestSectionsFetchTask(currentSequenceNum).execute();
break;
case STATE_COMPLETE_FETCH:
editHandler.setPage(model.getPage());
@@ -366,45 +366,49 @@
loadSavedPage();
} else if (tryFromCache) {
//is this page in cache??
- app.getPageCache()
- .get(model.getTitleOriginal(), pageSequenceNum, new
PageCache.CacheGetListener() {
- @Override
- public void onGetComplete(Page page, int sequence) {
- if (sequence != pageSequenceNum) {
- return;
- }
- if (page != null) {
- Log.d(TAG, "Using page from cache: " +
model.getTitleOriginal().getDisplayText());
- model.setPage(page);
- model.setTitle(page.getTitle());
- // load the current title's thumbnail from
sqlite
-
updateThumbnail(PageImage.PERSISTENCE_HELPER.getImageUrlForTitle(app,
model.getTitle()));
- // Save history entry...
- new SaveHistoryTask(model.getCurEntry(),
app).execute();
- // don't re-cache the page after loading.
- cacheOnComplete = false;
- state = STATE_COMPLETE_FETCH;
- setState(state);
- performActionForState(state);
- } else {
- // page isn't in cache, so fetch it from the
network...
- loadPageFromNetwork();
- }
- }
-
- @Override
- public void onGetError(Throwable e, int sequence) {
- Log.e(TAG, "Failed to get page from cache.", e);
- if (sequence != pageSequenceNum) {
- return;
- }
- // something failed when loading it from cache, so
fetch it from network...
- loadPageFromNetwork();
- }
- });
+ loadPageFromCache();
} else {
loadPageFromNetwork();
}
+ }
+
+ private void loadPageFromCache() {
+ app.getPageCache()
+ .get(model.getTitleOriginal(), currentSequenceNum, new
PageCache.CacheGetListener() {
+ @Override
+ public void onGetComplete(Page page, int sequence) {
+ if (sequence != currentSequenceNum) {
+ return;
+ }
+ if (page != null) {
+ Log.d(TAG, "Using page from cache: " +
model.getTitleOriginal().getDisplayText());
+ model.setPage(page);
+ model.setTitle(page.getTitle());
+ // load the current title's thumbnail from sqlite
+
updateThumbnail(PageImage.PERSISTENCE_HELPER.getImageUrlForTitle(app,
model.getTitle()));
+ // Save history entry...
+ new SaveHistoryTask(model.getCurEntry(),
app).execute();
+ // don't re-cache the page after loading.
+ cacheOnComplete = false;
+ state = STATE_COMPLETE_FETCH;
+ setState(state);
+ performActionForState(state);
+ } else {
+ // page isn't in cache, so fetch it from the
network...
+ loadPageFromNetwork();
+ }
+ }
+
+ @Override
+ public void onGetError(Throwable e, int sequence) {
+ Log.e(TAG, "Failed to get page from cache.", e);
+ if (sequence != currentSequenceNum) {
+ return;
+ }
+ // something failed when loading it from cache, so
fetch it from network...
+ loadPageFromNetwork();
+ }
+ });
}
private void loadPageFromNetwork() {
@@ -536,7 +540,7 @@
bridge.sendMessage("setMargins", marginPayload);
JSONObject leadSectionPayload = new JSONObject();
- leadSectionPayload.put("sequence", pageSequenceNum);
+ leadSectionPayload.put("sequence", currentSequenceNum);
leadSectionPayload.put("title", page.getDisplayTitle());
leadSectionPayload.put("section",
page.getSections().get(0).toJSON());
leadSectionPayload.put("string_page_similar_titles",
activity.getString(R.string.page_similar_titles));
@@ -583,7 +587,7 @@
try {
final Page page = model.getPage();
JSONObject wrapper = new JSONObject();
- wrapper.put("sequence", pageSequenceNum);
+ wrapper.put("sequence", currentSequenceNum);
if (index < page.getSections().size()) {
JSONObject section = page.getSections().get(index).toJSON();
wrapper.put("section", section);
@@ -611,9 +615,12 @@
private class LeadSectionFetchTask extends SectionsFetchTask {
- public LeadSectionFetchTask(int sequenceNum) {
- super(activity, model.getTitle(), "0");
- this.sequenceNum = sequenceNum;
+ private final int startSequenceNum;
+ private PageProperties pageProperties;
+
+ public LeadSectionFetchTask(int startSequenceNum) {
+ super(app, model.getTitle(), "0");
+ this.startSequenceNum = startSequenceNum;
}
@Override
@@ -622,19 +629,16 @@
builder.param("prop", builder.getParams().get("prop")
+ "|thumb|image|id|revision|description|"
+ Page.API_REQUEST_PROPS);
- Resources res = activity.getResources();
+ Resources res = app.getResources();
builder.param("thumbsize",
Integer.toString((int)
(res.getDimension(R.dimen.leadImageWidth)
/ res.getDisplayMetrics().density)));
return builder;
}
- private final int sequenceNum;
- private PageProperties pageProperties;
-
@Override
public List<Section> processResult(ApiResult result) throws Throwable {
- if (sequenceNum != pageSequenceNum) {
+ if (startSequenceNum != currentSequenceNum) {
return super.processResult(result);
}
JSONObject mobileView =
result.asObject().optJSONObject("mobileview");
@@ -647,7 +651,7 @@
@Override
public void onFinish(List<Section> result) {
- if (!fragment.isAdded() || sequenceNum != pageSequenceNum) {
+ if (!fragment.isAdded() || startSequenceNum != currentSequenceNum)
{
return;
}
@@ -698,21 +702,21 @@
@Override
public void onCatch(Throwable caught) {
- commonSectionFetchOnCatch(caught, sequenceNum);
+ commonSectionFetchOnCatch(caught, startSequenceNum);
}
}
private class RestSectionsFetchTask extends SectionsFetchTask {
- private final int sequenceNum;
+ private final int startSequenceNum;
- public RestSectionsFetchTask(int sequenceNum) {
- super(activity, model.getTitle(), "1-");
- this.sequenceNum = sequenceNum;
+ public RestSectionsFetchTask(int startSequenceNum) {
+ super(app, model.getTitle(), "1-");
+ this.startSequenceNum = startSequenceNum;
}
@Override
public void onFinish(List<Section> result) {
- if (!fragment.isAdded() || sequenceNum != pageSequenceNum) {
+ if (!fragment.isAdded() || startSequenceNum != currentSequenceNum)
{
return;
}
@@ -727,12 +731,12 @@
@Override
public void onCatch(Throwable caught) {
- commonSectionFetchOnCatch(caught, sequenceNum);
+ commonSectionFetchOnCatch(caught, startSequenceNum);
}
}
- private void commonSectionFetchOnCatch(Throwable caught, int sequenceNum) {
- if (sequenceNum != pageSequenceNum) {
+ private void commonSectionFetchOnCatch(Throwable caught, int
startSequenceNum) {
+ if (startSequenceNum != currentSequenceNum) {
return;
}
fragment.commonSectionFetchOnCatch(caught);
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
index 2fffa76..1432ee5 100755
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
@@ -883,7 +883,7 @@
}
FeedbackUtil.showMessage(getActivity(), R.string.toast_saving_page);
- new SavePageTask(getActivity(), model.getTitle(), model.getPage()) {
+ new SavePageTask(app, model.getTitle(), model.getPage()) {
@Override
public void onFinish(Boolean success) {
if (!isAdded()) {
diff --git a/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
b/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
index fcab611..96de58b 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/SectionsFetchTask.java
@@ -1,6 +1,5 @@
package org.wikipedia.page;
-import android.content.Context;
import org.json.JSONArray;
import org.json.JSONException;
import org.mediawiki.api.json.Api;
@@ -14,18 +13,18 @@
import java.util.List;
public class SectionsFetchTask extends ApiTask<List<Section>> {
+ private final WikipediaApp app;
private final PageTitle title;
private final String sectionsRequested;
- private final WikipediaApp app;
- public SectionsFetchTask(Context context, PageTitle title, String
sectionsRequested) {
+ public SectionsFetchTask(WikipediaApp app, PageTitle title, String
sectionsRequested) {
super(
SINGLE_THREAD,
-
((WikipediaApp)context.getApplicationContext()).getAPIForSite(title.getSite())
+ app.getAPIForSite(title.getSite())
);
+ this.app = app;
this.title = title;
this.sectionsRequested = sectionsRequested;
- this.app = (WikipediaApp)context.getApplicationContext();
}
@Override
diff --git
a/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
b/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
index b42f403..57d4145 100644
--- a/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
+++ b/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
@@ -6,6 +6,7 @@
import android.support.v7.app.AlertDialog;
import android.util.Log;
import org.wikipedia.R;
+import org.wikipedia.WikipediaApp;
import org.wikipedia.page.Section;
import java.util.List;
@@ -63,7 +64,7 @@
progressDialog.show();
for (int i = 0; i < savedPages.size(); i++) {
final SavedPage savedPage = savedPages.get(i);
- new RefreshSavedPageTask(context, savedPage) {
+ new RefreshSavedPageTask((WikipediaApp)
context.getApplicationContext(), savedPage) {
@Override
public void onBeforeExecute() {
if (isRefreshCancelled) {
diff --git
a/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
b/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
index 5aadaff..30fad46 100644
--- a/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
@@ -1,6 +1,5 @@
package org.wikipedia.savedpages;
-import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import org.json.JSONObject;
@@ -21,10 +20,10 @@
private final SavedPage savedPage;
private final WikipediaApp app;
- public RefreshSavedPageTask(Context context, SavedPage savedPage) {
- super(context, savedPage.getTitle(), "all");
+ public RefreshSavedPageTask(WikipediaApp app, SavedPage savedPage) {
+ super(app, savedPage.getTitle(), "all");
this.savedPage = savedPage;
- this.app = WikipediaApp.getInstance();
+ this.app = app;
}
@Override
diff --git a/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
b/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
index 6abcac1..79376cb 100644
--- a/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
@@ -20,9 +20,9 @@
private CountDownLatch imagesDownloadedLatch;
- public SavePageTask(Context context, PageTitle title, Page page) {
+ public SavePageTask(WikipediaApp app, PageTitle title, Page page) {
super(SINGLE_THREAD);
- app = (WikipediaApp) context.getApplicationContext();
+ this.app = app;
this.title = title;
this.page = page;
}
diff --git
a/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
b/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
index 5c8eddd..1ac1363 100644
---
a/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
+++
b/wikipedia/src/main/java/org/wikipedia/widgets/WidgetProviderFeaturedPage.java
@@ -1,17 +1,5 @@
package org.wikipedia.widgets;
-import org.mediawiki.api.json.Api;
-import org.mediawiki.api.json.RequestBuilder;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.R;
-import org.wikipedia.Utils;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.page.Page;
-import org.wikipedia.page.PageActivity;
-import org.wikipedia.page.Section;
-import org.wikipedia.page.SectionsFetchTask;
-import org.wikipedia.staticdata.MainPageNameData;
-
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
@@ -24,6 +12,18 @@
import android.text.style.URLSpan;
import android.util.Log;
import android.widget.RemoteViews;
+
+import org.mediawiki.api.json.Api;
+import org.mediawiki.api.json.RequestBuilder;
+import org.wikipedia.R;
+import org.wikipedia.Utils;
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.page.Page;
+import org.wikipedia.page.PageActivity;
+import org.wikipedia.page.PageTitle;
+import org.wikipedia.page.Section;
+import org.wikipedia.page.SectionsFetchTask;
+import org.wikipedia.staticdata.MainPageNameData;
import java.util.List;
@@ -38,7 +38,7 @@
Log.d(TAG, "updating widget...");
final RemoteViews remoteViews = new
RemoteViews(context.getPackageName(), R.layout.widget_featured_page);
- (new FetchMainPageTask(context) {
+ (new FetchMainPageTask((WikipediaApp)
context.getApplicationContext()) {
@Override
public void onFinish(List<Section> result) {
if (result.size() == 0) {
@@ -93,9 +93,10 @@
}
private class FetchMainPageTask extends SectionsFetchTask {
- public FetchMainPageTask(Context context) {
- super(context, new
PageTitle(MainPageNameData.valueFor(WikipediaApp.getInstance().getAppOrSystemLanguageCode()),
- WikipediaApp.getInstance().getPrimarySite()), "all");
+ public FetchMainPageTask(WikipediaApp app) {
+ super(app,
+ new
PageTitle(MainPageNameData.valueFor(app.getAppOrSystemLanguageCode()),
+ app.getPrimarySite()), "all");
}
@Override
--
To view, visit https://gerrit.wikimedia.org/r/226672
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I227e6c28bcdc5572908022507e8f0a8782b331e6
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: BearND <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits