BearND has uploaded a new change for review. https://gerrit.wikimedia.org/r/177752
Change subject: Title search gets descriptions, too ...................................................................... Title search gets descriptions, too Now that we can easily get descriptions from our own API, why not have them for both search types. Using common data type for both full text and title search: PageTitle Also using same layout for both fragments. This will enable us to refactor things even more. The two tasks and the two fragments have a lot of common code. Change-Id: Ied3ca27a36e0ff26f7c8f5404289e8ecee062336 --- M wikipedia-it/src/main/java/org/wikipedia/test/FullSearchTaskTests.java M wikipedia-it/src/main/java/org/wikipedia/test/SuggestionsTaskTests.java M wikipedia-it/src/main/java/org/wikipedia/test/WikidataDescriptionFeederTests.java D wikipedia/res/layout/item_full_search_result.xml M wikipedia/res/layout/item_search_result.xml M wikipedia/src/main/java/org/wikipedia/PageTitle.java M wikipedia/src/main/java/org/wikipedia/Utils.java M wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java M wikipedia/src/main/java/org/wikipedia/search/FullSearchArticlesTask.java M wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java D wikipedia/src/main/java/org/wikipedia/search/FullSearchResult.java M wikipedia/src/main/java/org/wikipedia/search/TitleSearchFragment.java M wikipedia/src/main/java/org/wikipedia/search/TitleSearchTask.java M wikipedia/src/main/java/org/wikipedia/wikidata/GetDescriptionsTask.java M wikipedia/src/main/java/org/wikipedia/wikidata/WikidataDescriptionFeeder.java 15 files changed, 141 insertions(+), 149 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/52/177752/1 diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/FullSearchTaskTests.java b/wikipedia-it/src/main/java/org/wikipedia/test/FullSearchTaskTests.java index ad7b104..8fc2854 100644 --- a/wikipedia-it/src/main/java/org/wikipedia/test/FullSearchTaskTests.java +++ b/wikipedia-it/src/main/java/org/wikipedia/test/FullSearchTaskTests.java @@ -1,9 +1,10 @@ package org.wikipedia.test; +import org.wikipedia.PageTitle; import org.wikipedia.Site; import org.wikipedia.WikipediaApp; import org.wikipedia.search.FullSearchArticlesTask; -import org.wikipedia.search.FullSearchResult; + import android.content.Intent; import android.test.ActivityUnitTestCase; import java.util.concurrent.CountDownLatch; @@ -38,8 +39,8 @@ assertEquals(results.getSuggestion(), ""); assertNotNull(results.getContinueOffset()); - for (FullSearchResult result : results.getResults()) { - if (result.getTitle().getPrefixedText().equals("Test")) { + for (PageTitle result : results.getResults()) { + if (result.getPrefixedText().equals("Test")) { assertEquals(result.getDescription(), "Wikipedia disambiguation page"); } } diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/SuggestionsTaskTests.java b/wikipedia-it/src/main/java/org/wikipedia/test/SuggestionsTaskTests.java index d4ac13b..b143bfd 100644 --- a/wikipedia-it/src/main/java/org/wikipedia/test/SuggestionsTaskTests.java +++ b/wikipedia-it/src/main/java/org/wikipedia/test/SuggestionsTaskTests.java @@ -1,9 +1,10 @@ package org.wikipedia.test; +import org.wikipedia.PageTitle; import org.wikipedia.Site; import org.wikipedia.WikipediaApp; import org.wikipedia.page.SuggestionsTask; -import org.wikipedia.search.FullSearchResult; + import android.content.Intent; import android.test.ActivityUnitTestCase; import java.util.concurrent.CountDownLatch; @@ -39,8 +40,8 @@ assertNotNull(results); assertEquals(results.getResults().size(), BATCH_SIZE); - for (FullSearchResult result : results.getResults()) { - assertFalse(result.getTitle().getPrefixedText().equals("Test")); + for (PageTitle result : results.getResults()) { + assertFalse(result.getPrefixedText().equals("Test")); } completionLatch.countDown(); } diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/WikidataDescriptionFeederTests.java b/wikipedia-it/src/main/java/org/wikipedia/test/WikidataDescriptionFeederTests.java index c557c4a..4acc2b2 100644 --- a/wikipedia-it/src/main/java/org/wikipedia/test/WikidataDescriptionFeederTests.java +++ b/wikipedia-it/src/main/java/org/wikipedia/test/WikidataDescriptionFeederTests.java @@ -3,11 +3,11 @@ import org.wikipedia.PageTitle; import org.wikipedia.Site; import org.wikipedia.WikipediaApp; -import org.wikipedia.search.FullSearchResult; import org.wikipedia.wikidata.WikidataCache; import org.wikipedia.wikidata.WikidataDescriptionFeeder; import android.content.Intent; import android.test.ActivityUnitTestCase; + import java.util.ArrayList; import java.util.Arrays; import java.util.Map; @@ -41,29 +41,29 @@ } public void testZeroID() throws Throwable { - getWikidataDescriptions(new FullSearchResult[] { + getWikidataDescriptions(new PageTitle[] { }); } public void testOneIDTwice() throws Throwable { - getWikidataDescriptions(new FullSearchResult[] { - new FullSearchResult(new PageTitle("Test", SITE), null, null) + getWikidataDescriptions(new PageTitle[] { + new PageTitle("Test", SITE, null, null) }); - getWikidataDescriptions(new FullSearchResult[] { - new FullSearchResult(new PageTitle("Test", SITE), null, null) + getWikidataDescriptions(new PageTitle[] { + new PageTitle("Test", SITE, null, null) }); } public void testThreeIDs() throws Throwable { - getWikidataDescriptions(new FullSearchResult[] { - new FullSearchResult(new PageTitle("SAT", SITE), null, null), - new FullSearchResult(new PageTitle("Miller–Rabin primality test", SITE), null, null), - new FullSearchResult(new PageTitle("Radiocarbon dating", SITE), null, null) + getWikidataDescriptions(new PageTitle[] { + new PageTitle("SAT", SITE, null, null), + new PageTitle("Miller–Rabin primality test", SITE, null, null), + new PageTitle("Radiocarbon dating", SITE, null, null) }); } - public void getWikidataDescriptions(final FullSearchResult[] input) throws Throwable { - final ArrayList<FullSearchResult> inputList = new ArrayList<FullSearchResult>(Arrays.asList(input)); + public void getWikidataDescriptions(final PageTitle[] input) throws Throwable { + final ArrayList<PageTitle> inputList = new ArrayList<PageTitle>(Arrays.asList(input)); final CountDownLatch completionLatch = new CountDownLatch(1); runTestOnUiThread(new Runnable() { @Override @@ -76,10 +76,10 @@ WikidataDescriptionFeeder.retrieveWikidataDescriptions(inputList, app, new WikidataCache.OnWikidataReceiveListener() { @Override - public void onWikidataReceived(Map<PageTitle, String> descriptions) { + public void onWikidataReceived(Map<org.wikipedia.PageTitle, String> descriptions) { assertEquals(input.length, descriptions.size()); - for (FullSearchResult res : input) { - assertFalse(descriptions.get(res.getTitle()).isEmpty()); + for (PageTitle title : input) { + assertFalse(descriptions.get(title).isEmpty()); } completionLatch.countDown(); } diff --git a/wikipedia/res/layout/item_full_search_result.xml b/wikipedia/res/layout/item_full_search_result.xml deleted file mode 100644 index 801bfdc..0000000 --- a/wikipedia/res/layout/item_full_search_result.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="@dimen/defaultListItemSize" - android:background="@drawable/selectable_item_background" - android:orientation="horizontal"> - - <ImageView - android:id="@+id/result_image" - android:layout_width="@dimen/defaultListItemSize" - android:layout_height="match_parent" - android:layout_gravity="top" - android:contentDescription="@null" - android:src="@drawable/ic_pageimage_placeholder" - android:scaleType="centerCrop" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginBottom="6dp" - android:layout_marginLeft="8dp" - android:layout_marginRight="8dp" - android:layout_marginTop="6dp" - android:orientation="vertical"> - - <TextView - android:id="@+id/result_title" - style="?android:textAppearanceMedium" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:ellipsize="middle" - android:maxLines="2" /> - - <TextView - android:id="@+id/result_description" - style="?android:textAppearanceSmall" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:ellipsize="end" - android:maxLines="2" - android:textColor="@color/reference_text" /> - - </LinearLayout> - -</LinearLayout> \ No newline at end of file diff --git a/wikipedia/res/layout/item_search_result.xml b/wikipedia/res/layout/item_search_result.xml index b7b4487..801bfdc 100644 --- a/wikipedia/res/layout/item_search_result.xml +++ b/wikipedia/res/layout/item_search_result.xml @@ -1,23 +1,47 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:orientation="horizontal" - android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_width="match_parent" + android:layout_height="@dimen/defaultListItemSize" + android:background="@drawable/selectable_item_background" + android:orientation="horizontal"> + <ImageView android:id="@+id/result_image" android:layout_width="@dimen/defaultListItemSize" - android:layout_height="@dimen/defaultListItemSize" + android:layout_height="match_parent" + android:layout_gravity="top" android:contentDescription="@null" android:src="@drawable/ic_pageimage_placeholder" - android:scaleType="centerCrop"/> - <TextView android:id="@+id/result_text" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginLeft="8dp" - android:layout_marginRight="8dp" - android:layout_gravity="center" - style="?android:textAppearanceMedium" - /> + android:scaleType="centerCrop" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginBottom="6dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" + android:layout_marginTop="6dp" + android:orientation="vertical"> + + <TextView + android:id="@+id/result_title" + style="?android:textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:ellipsize="middle" + android:maxLines="2" /> + + <TextView + android:id="@+id/result_description" + style="?android:textAppearanceSmall" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:ellipsize="end" + android:maxLines="2" + android:textColor="@color/reference_text" /> + + </LinearLayout> </LinearLayout> \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/PageTitle.java b/wikipedia/src/main/java/org/wikipedia/PageTitle.java index 3ef2493..737575f 100644 --- a/wikipedia/src/main/java/org/wikipedia/PageTitle.java +++ b/wikipedia/src/main/java/org/wikipedia/PageTitle.java @@ -26,6 +26,7 @@ private final String fragment; private String thumbUrl; private final Site site; + private String description = null; public PageTitle(final String namespace, final String text, final String fragment, final String thumbUrl, final Site site) { this.namespace = namespace; @@ -33,6 +34,11 @@ this.fragment = fragment; this.thumbUrl = thumbUrl; this.site = site; + } + + public PageTitle(final String text, final Site site, final String thumbUrl, final String description) { + this(text, site, thumbUrl); + this.description = description; } public PageTitle(final String namespace, final String text, final Site site) { @@ -98,6 +104,10 @@ this.thumbUrl = thumbUrl; } + public String getDescription() { + return description; + } + public String getDisplayText() { return getPrefixedText().replace("_", " "); } @@ -126,6 +136,7 @@ try { JSONObject json = toIdentifierJSON(); json.put("thumbUrl", getThumbUrl()); + json.put("description", getDescription()); return json; } catch (JSONException e) { // This will also never happen @@ -139,6 +150,7 @@ this.fragment = json.optString("fragment", null); this.text = json.optString("text", null); this.thumbUrl = json.optString("thumbUrl", null); + this.description = json.optString("description", null); } private String getUriForDomain(String domain) { @@ -240,6 +252,7 @@ fragment = in.readString(); site = in.readParcelable(Site.class.getClassLoader()); thumbUrl = in.readString(); + description = in.readString(); } @Override @@ -249,6 +262,7 @@ parcel.writeString(fragment); parcel.writeParcelable(site, flags); parcel.writeString(thumbUrl); + parcel.writeString(description); } @Override diff --git a/wikipedia/src/main/java/org/wikipedia/Utils.java b/wikipedia/src/main/java/org/wikipedia/Utils.java index cc3fe54..69d83c9 100644 --- a/wikipedia/src/main/java/org/wikipedia/Utils.java +++ b/wikipedia/src/main/java/org/wikipedia/Utils.java @@ -78,6 +78,16 @@ } /** + * Capitalise the first character of the description, for style + * + * @param orig original string + * @return same string as orig, except the first letter is capitalized + */ + public static String capitalizeFirstChar(String orig) { + return orig.substring(0, 1).toUpperCase() + orig.substring(1); + } + + /** * Creates an MD5 hash of the provided string & returns its base64 representation * @param s String to hash * @return Base64'd MD5 representation of the string passed in diff --git a/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java b/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java index cc41a87..e87481a 100644 --- a/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java +++ b/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java @@ -1,10 +1,11 @@ package org.wikipedia.page; +import org.wikipedia.PageTitle; import org.wikipedia.Site; import org.wikipedia.search.FullSearchArticlesTask; -import org.wikipedia.search.FullSearchResult; import org.mediawiki.api.json.Api; import org.mediawiki.api.json.ApiResult; + import java.util.ArrayList; import java.util.List; @@ -26,11 +27,11 @@ @Override public FullSearchResults processResult(final ApiResult result) throws Throwable { FullSearchResults searchResults = super.processResult(result); - List<FullSearchResult> filteredResults = new ArrayList<FullSearchResult>(); - List<FullSearchResult> results = searchResults.getResults(); + List<PageTitle> filteredResults = new ArrayList<PageTitle>(); + List<PageTitle> results = searchResults.getResults(); for (int i = 0, count = 0; i < MAX_REQUESTED && count < MAX_SIZE; i++) { - final FullSearchResult res = results.get(i); - if (!title.equalsIgnoreCase(res.getTitle().getPrefixedText())) { + final PageTitle res = results.get(i); + if (!title.equalsIgnoreCase(res.getPrefixedText())) { filteredResults.add(res); count++; } diff --git a/wikipedia/src/main/java/org/wikipedia/search/FullSearchArticlesTask.java b/wikipedia/src/main/java/org/wikipedia/search/FullSearchArticlesTask.java index 0f4a07f..fff0ade 100644 --- a/wikipedia/src/main/java/org/wikipedia/search/FullSearchArticlesTask.java +++ b/wikipedia/src/main/java/org/wikipedia/search/FullSearchArticlesTask.java @@ -4,6 +4,7 @@ import org.wikipedia.ApiTask; import org.wikipedia.PageTitle; import org.wikipedia.Site; +import org.wikipedia.Utils; import org.wikipedia.WikipediaApp; import org.mediawiki.api.json.Api; import org.mediawiki.api.json.ApiException; @@ -122,9 +123,8 @@ } }); // and create our list of results from the now-sorted array - ArrayList<FullSearchResult> resultList = new ArrayList<FullSearchResult>(); + ArrayList<PageTitle> pageTitles = new ArrayList<PageTitle>(); for (JSONObject item : pageArray) { - PageTitle pageTitle = new PageTitle(item.getString("title"), site); String thumbUrl = null; if (item.has("thumbnail")) { thumbUrl = item.getJSONObject("thumbnail").optString("source", null); @@ -133,24 +133,24 @@ if (item.has("terms")) { JSONArray arr = item.getJSONObject("terms").optJSONArray("description"); if (arr != null && arr.length() > 0) { - description = arr.getString(0); + description = Utils.capitalizeFirstChar(arr.getString(0)); } } - resultList.add(new FullSearchResult(pageTitle, thumbUrl, description)); + pageTitles.add(new PageTitle(item.getString("title"), site, thumbUrl, description)); } - return new FullSearchResults(resultList, nextContinueOffset, suggestion); + return new FullSearchResults(pageTitles, nextContinueOffset, suggestion); } private FullSearchResults emptyResults() { - return new FullSearchResults(Collections.<FullSearchResult>emptyList(), null, ""); + return new FullSearchResults(Collections.<PageTitle>emptyList(), null, ""); } public class FullSearchResults { private ContinueOffset continueOffset; - private List<FullSearchResult> resultsList; + private List<PageTitle> resultsList; private String suggestion; - public FullSearchResults(List<FullSearchResult> resultList, + public FullSearchResults(List<PageTitle> resultList, ContinueOffset continueOffset, String suggestion) { this.resultsList = resultList; @@ -166,7 +166,7 @@ return continueOffset; } - public List<FullSearchResult> getResults() { + public List<PageTitle> getResults() { return resultsList; } } diff --git a/wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java b/wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java index b8066a1..1a8eaf7 100644 --- a/wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java +++ b/wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java @@ -42,7 +42,7 @@ private Handler searchHandler; private FullSearchArticlesTask.FullSearchResults lastResults; - private List<FullSearchResult> totalResults; + private List<PageTitle> totalResults; public FullSearchFragment() { } @@ -65,10 +65,10 @@ searchResultsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - FullSearchResult item = (FullSearchResult) searchResultsList.getAdapter().getItem(position); + PageTitle item = (PageTitle) searchResultsList.getAdapter().getItem(position); // always add the description of the item to the cache so we don't even try to get it again - app.getWikidataCache().put(item.getTitle().toString(), item.getDescription()); - searchFragment.navigateToTitle(item.getTitle()); + app.getWikidataCache().put(item.toString(), item.getDescription()); + searchFragment.navigateToTitle(item); } }); @@ -99,7 +99,7 @@ } }); - totalResults = new ArrayList<FullSearchResult>(); + totalResults = new ArrayList<PageTitle>(); adapter.setResults(totalResults); searchHandler = new Handler(new SearchHandlerCallback()); @@ -234,14 +234,14 @@ } private final class SearchResultAdapter extends BaseAdapter { - private List<FullSearchResult> results; + private List<PageTitle> results; private final LayoutInflater inflater; private SearchResultAdapter(LayoutInflater inflater) { this.inflater = inflater; } - private void setResults(List<FullSearchResult> results) { + private void setResults(List<PageTitle> results) { this.results = results; } @@ -263,11 +263,11 @@ @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { - convertView = inflater.inflate(R.layout.item_full_search_result, parent, false); + convertView = inflater.inflate(R.layout.item_search_result, parent, false); } TextView pageTitleText = (TextView) convertView.findViewById(R.id.result_title); - FullSearchResult result = (FullSearchResult) getItem(position); - pageTitleText.setText(result.getTitle().getDisplayText()); + PageTitle result = (PageTitle) getItem(position); + pageTitleText.setText(result.getDisplayText()); TextView descriptionText = (TextView) convertView.findViewById(R.id.result_description); descriptionText.setText(result.getDescription()); @@ -286,8 +286,8 @@ .into(imageView); } - //...and lastly, if we've scrolled to the last item in the list, then - //continue searching! + // ...and lastly, if we've scrolled to the last item in the list, then + // continue searching! if (position == results.size() - 1 && lastResults.getContinueOffset() != null) { doSearch(currentSearchTerm, lastResults.getContinueOffset()); } diff --git a/wikipedia/src/main/java/org/wikipedia/search/FullSearchResult.java b/wikipedia/src/main/java/org/wikipedia/search/FullSearchResult.java deleted file mode 100644 index 2de4bcc..0000000 --- a/wikipedia/src/main/java/org/wikipedia/search/FullSearchResult.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.wikipedia.search; - -import org.wikipedia.PageTitle; - -public class FullSearchResult { - private final PageTitle title; - private final String thumbUrl; - private final String description; - - public FullSearchResult(PageTitle title, String thumbUrl, String description) { - this.thumbUrl = thumbUrl; - this.description = description; - this.title = title; - } - - public PageTitle getTitle() { - return title; - } - - public String getThumbUrl() { - return thumbUrl; - } - - public String getDescription() { - return description; - } -} diff --git a/wikipedia/src/main/java/org/wikipedia/search/TitleSearchFragment.java b/wikipedia/src/main/java/org/wikipedia/search/TitleSearchFragment.java index bd54b98..e778b3d 100644 --- a/wikipedia/src/main/java/org/wikipedia/search/TitleSearchFragment.java +++ b/wikipedia/src/main/java/org/wikipedia/search/TitleSearchFragment.java @@ -123,8 +123,10 @@ searchResultsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - PageTitle title = (PageTitle) searchResultsList.getAdapter().getItem(position); - searchFragment.navigateToTitle(title); + PageTitle item = (PageTitle) searchResultsList.getAdapter().getItem(position); + // always add the description of the item to the cache so we don't even try to get it again + app.getWikidataCache().put(item.toString(), item.getDescription()); + searchFragment.navigateToTitle(item); } }); @@ -227,7 +229,7 @@ if (convertView == null) { convertView = inflater.inflate(R.layout.item_search_result, parent, false); } - TextView pageTitleText = (TextView) convertView.findViewById(R.id.result_text); + TextView pageTitleText = (TextView) convertView.findViewById(R.id.result_title); PageTitle title = (PageTitle) getItem(position); // highlight search term within the text @@ -239,6 +241,10 @@ + highlightedString.substring(currentSearchTerm.length(), highlightedString.length()); } pageTitleText.setText(Html.fromHtml(highlightedString)); + + TextView descriptionText = (TextView) convertView.findViewById(R.id.result_description); + descriptionText.setText(title.getDescription()); + ImageView imageView = (ImageView) convertView.findViewById(R.id.result_image); String thumbnail = pageImagesCache.get(title.getPrefixedText()); diff --git a/wikipedia/src/main/java/org/wikipedia/search/TitleSearchTask.java b/wikipedia/src/main/java/org/wikipedia/search/TitleSearchTask.java index b0bb505..c2b9570 100644 --- a/wikipedia/src/main/java/org/wikipedia/search/TitleSearchTask.java +++ b/wikipedia/src/main/java/org/wikipedia/search/TitleSearchTask.java @@ -1,8 +1,10 @@ package org.wikipedia.search; +import org.json.JSONArray; import org.wikipedia.ApiTask; import org.wikipedia.PageTitle; import org.wikipedia.Site; +import org.wikipedia.Utils; import org.wikipedia.WikipediaApp; import org.mediawiki.api.json.Api; import org.mediawiki.api.json.ApiException; @@ -35,7 +37,8 @@ .param("gpssearch", prefix) .param("gpsnamespace", "0") .param("gpslimit", NUM_RESULTS_PER_QUERY) - .param("prop", "pageimages") + .param("prop", "pageterms|pageimages") + .param("wbptterms", "description") // only interested in Wikidata description .param("piprop", "thumbnail") .param("pithumbsize", Integer.toString(WikipediaApp.PREFERRED_THUMB_SIZE)) .param("pilimit", NUM_RESULTS_PER_QUERY) @@ -93,7 +96,14 @@ if (item.has("thumbnail")) { thumbUrl = item.getJSONObject("thumbnail").optString("source", null); } - pageTitles.add(new PageTitle(item.getString("title"), site, thumbUrl)); + String description = null; + if (item.has("terms")) { + JSONArray arr = item.getJSONObject("terms").optJSONArray("description"); + if (arr != null && arr.length() > 0) { + description = Utils.capitalizeFirstChar(arr.getString(0)); + } + } + pageTitles.add(new PageTitle(item.getString("title"), site, thumbUrl, description)); } return pageTitles; } diff --git a/wikipedia/src/main/java/org/wikipedia/wikidata/GetDescriptionsTask.java b/wikipedia/src/main/java/org/wikipedia/wikidata/GetDescriptionsTask.java index 99b489d..863b407 100644 --- a/wikipedia/src/main/java/org/wikipedia/wikidata/GetDescriptionsTask.java +++ b/wikipedia/src/main/java/org/wikipedia/wikidata/GetDescriptionsTask.java @@ -7,6 +7,7 @@ import org.wikipedia.PageQueryTask; import org.wikipedia.PageTitle; import org.wikipedia.Site; +import org.wikipedia.Utils; import java.util.List; @@ -31,9 +32,7 @@ if (terms != null) { final JSONArray array = terms.optJSONArray("description"); if (array != null && array.length() > 0) { - String value = array.getString(0); - //Capitalise the first letter of the description, for style - return value.substring(0, 1).toUpperCase() + value.substring(1); + return Utils.capitalizeFirstChar(array.getString(0)); } } return null; diff --git a/wikipedia/src/main/java/org/wikipedia/wikidata/WikidataDescriptionFeeder.java b/wikipedia/src/main/java/org/wikipedia/wikidata/WikidataDescriptionFeeder.java index 2b12a5a..1b5240d 100644 --- a/wikipedia/src/main/java/org/wikipedia/wikidata/WikidataDescriptionFeeder.java +++ b/wikipedia/src/main/java/org/wikipedia/wikidata/WikidataDescriptionFeeder.java @@ -2,7 +2,7 @@ import org.wikipedia.PageTitle; import org.wikipedia.WikipediaApp; -import org.wikipedia.search.FullSearchResult; + import java.util.ArrayList; import java.util.List; @@ -15,15 +15,15 @@ } /** - * Adds new description entries to our shared WikidataCache. + * Adds new description entries for the titles in titleList to our shared WikidataCache. */ - public static void retrieveWikidataDescriptions(List<FullSearchResult> results, final WikipediaApp app, + public static void retrieveWikidataDescriptions(List<PageTitle> titleList, final WikipediaApp app, final WikidataCache.OnWikidataReceiveListener listener) { - List<PageTitle> pageTitles = new ArrayList<PageTitle>(); + List<org.wikipedia.PageTitle> pageTitles = new ArrayList<org.wikipedia.PageTitle>(); final WikidataCache wikidataCache = app.getWikidataCache(); - for (FullSearchResult r : results) { - if (r.getDescription() == null) { - pageTitles.add(r.getTitle()); + for (PageTitle pageTitle : titleList) { + if (pageTitle.getDescription() == null) { + pageTitles.add(pageTitle); } } wikidataCache.get(pageTitles, listener); -- To view, visit https://gerrit.wikimedia.org/r/177752 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ied3ca27a36e0ff26f7c8f5404289e8ecee062336 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: BearND <bsitzm...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits