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

Reply via email to