Brion VIBBER has submitted this change and it was merged.
Change subject: Refactor SearchArticlesTask to produce a base ApiTask
......................................................................
Refactor SearchArticlesTask to produce a base ApiTask
Also work around broken ApiResult.cancel()
Change-Id: If62d5e790702ce1707e62c50ce39752ac7d979b3
---
A wikipedia/src/main/java/org/wikimedia/wikipedia/ApiTask.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesTask.java
2 files changed, 56 insertions(+), 22 deletions(-)
Approvals:
Brion VIBBER: Verified; Looks good to me, approved
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/ApiTask.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/ApiTask.java
new file mode 100644
index 0000000..183a833
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/ApiTask.java
@@ -0,0 +1,47 @@
+package org.wikimedia.wikipedia;
+
+import android.content.Context;
+import org.mediawiki.api.json.Api;
+import org.mediawiki.api.json.ApiResult;
+import org.wikimedia.wikipedia.concurrency.ExecutorService;
+import org.wikimedia.wikipedia.concurrency.SaneAsyncTask;
+
+abstract public class ApiTask<T> extends SaneAsyncTask<T> {
+ private Site site;
+ private WikipediaApp app;
+
+ private ApiResult result;
+
+ public ApiTask(Context context, Site site) {
+ super(ExecutorService.getSingleton().getExecutor(PageFetchTask.class,
2));
+ this.site = site;
+ this.app = (WikipediaApp)context.getApplicationContext();
+ }
+
+ @Override
+ public T performTask() throws Throwable {
+ Api api = app.getAPIForSite(site);
+ result = buildRequest(api);
+ return processResult(result);
+ }
+
+ // @fixme ApiResult.cancel doesn't actually cancel, instead causes app to
crash if run on main thread
+ // uncomment this once fixed in java-mwapi
+ /*
+ @Override
+ public void cancel() {
+ super.cancel();
+ if (result != null) {
+ result.cancel();
+ }
+ }
+ */
+
+ public Site getSite() {
+ return site;
+ }
+
+ abstract public ApiResult buildRequest(Api api);
+ abstract public T processResult(ApiResult result) throws Throwable;
+
+}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesTask.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesTask.java
index 08256e1..77b8dd4 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesTask.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesTask.java
@@ -4,45 +4,32 @@
import org.json.JSONArray;
import org.mediawiki.api.json.Api;
import org.mediawiki.api.json.ApiResult;
-import org.wikimedia.wikipedia.concurrency.ExecutorService;
-import org.wikimedia.wikipedia.concurrency.SaneAsyncTask;
import java.util.ArrayList;
import java.util.List;
-public class SearchArticlesTask extends SaneAsyncTask<List<PageTitle>>{
- private Site site;
+public class SearchArticlesTask extends ApiTask<List<PageTitle>>{
private String prefix;
- private WikipediaApp app;
-
- private ApiResult result;
public SearchArticlesTask(Context context, Site site, String prefix) {
- super(ExecutorService.getSingleton().getExecutor(PageFetchTask.class,
2));
- this.app = (WikipediaApp)context.getApplicationContext();
- this.site = site;
+ super(context, site);
this.prefix = prefix;
}
@Override
- public List<PageTitle> performTask() throws Throwable {
- Api api = app.getAPIForSite(site);
- result = api.action("opensearch").param("search",
prefix).param("limit", "5").get();
+ public ApiResult buildRequest(Api api) {
+ return api.action("opensearch").param("search", prefix).param("limit",
"5").get();
+ }
+
+ @Override
+ public List<PageTitle> processResult(ApiResult result) throws Throwable {
JSONArray searchResults = result.asArray().optJSONArray(1);
ArrayList<PageTitle> pageTitles = new ArrayList<PageTitle>();
for (int i = 0; i < searchResults.length(); i++) {
- pageTitles.add(new PageTitle(null, searchResults.optString(i),
site));
+ pageTitles.add(new PageTitle(null, searchResults.optString(i),
getSite()));
}
return pageTitles;
- }
-
- @Override
- public void cancel() {
- super.cancel();
- if (result != null) {
- result.cancel();
- }
}
}
--
To view, visit https://gerrit.wikimedia.org/r/95700
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If62d5e790702ce1707e62c50ce39752ac7d979b3
Gerrit-PatchSet: 4
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits