From 8c347ac370645b66e98840f018bc63b155403702 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 15:36:21 +1300 Subject: [PATCH 01/39] Testing new XPath expression --- .../category/CategorizationFragment.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 3a6d1d329..edab6444e 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -173,6 +173,9 @@ public class CategorizationFragment extends SherlockFragment{ if(categoriesCache.containsKey(filter)) { return categoriesCache.get(filter); } + + //TODO: Try just replacing the call first to see if XPath is correct + /** MWApi api = CommonsApplication.createMWApi(); ApiResult result; ArrayList categories = new ArrayList(); @@ -187,6 +190,32 @@ public class CategorizationFragment extends SherlockFragment{ } ArrayList categoryNodes = result.getNodes("/api/query/allcategories/c"); + for(ApiResult categoryNode: categoryNodes) { + categories.add(categoryNode.getDocument().getTextContent()); + } + */ + + MWApi api = CommonsApplication.createMWApi(); + ApiResult result; + ArrayList categories = new ArrayList(); + + //URL https://commons.wikimedia.org/w/api.php?action=query&format=xml&list=search&srwhat=text&srenablerewrites=1&srnamespace=14&srlimit=10&srsearch= + try { + result = api.action("query") + .param("format", "xml") + .param("list", "search") + .param("srwhat", "text") + .param("srnamespace", "14") + .param("srlimit", SEARCH_CATS_LIMIT) + .param("srsearch", filter) + .get(); + Log.d(TAG, "URL filter" + result.toString()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + + ArrayList categoryNodes = result.getNodes("/api/query/search/p/@title"); for(ApiResult categoryNode: categoryNodes) { categories.add(categoryNode.getDocument().getTextContent()); } From 1dda897dcc5a8a17f2deb30697b8157ee764945f Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 15:52:36 +1300 Subject: [PATCH 02/39] Remove 'Category:' at start of string --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index edab6444e..4519358c6 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -217,7 +217,9 @@ public class CategorizationFragment extends SherlockFragment{ ArrayList categoryNodes = result.getNodes("/api/query/search/p/@title"); for(ApiResult categoryNode: categoryNodes) { - categories.add(categoryNode.getDocument().getTextContent()); + String cat = categoryNode.getDocument().getTextContent(); + String catString = cat.replace("Category:", ""); + categories.add(catString); } categoriesCache.put(filter, categories); From 213ce0aca5ff473c7b391a0bf02b47217fa26c25 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 17:24:03 +1300 Subject: [PATCH 03/39] Failed parallel methods --- .../category/CategorizationFragment.java | 171 ++++++++++++++---- 1 file changed, 139 insertions(+), 32 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 4519358c6..1b10291b9 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -29,6 +29,7 @@ import java.util.HashSet; import java.util.List; import java.util.concurrent.ScheduledThreadPoolExecutor; + public class CategorizationFragment extends SherlockFragment{ public static interface OnCategoriesSaveHandler { public void onCategoriesSave(ArrayList categories); @@ -42,6 +43,7 @@ public class CategorizationFragment extends SherlockFragment{ CategoriesAdapter categoriesAdapter; CategoriesUpdater lastUpdater = null; + MethodAUpdater methodAUpdater = null; ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); private OnCategoriesSaveHandler onCategoriesSaveHandler; @@ -87,6 +89,127 @@ public class CategorizationFragment extends SherlockFragment{ } } + + private class MethodAUpdater extends AsyncTask> { + + private String filter; + @Override + protected void onPreExecute() { + super.onPreExecute(); + filter = categoriesFilter.getText().toString(); + categoriesSearchInProgress.setVisibility(View.VISIBLE); + categoriesNotFoundView.setVisibility(View.GONE); + + categoriesSkip.setVisibility(View.GONE); + } + + @Override + protected void onPostExecute(ArrayList categories) { + super.onPostExecute(categories); + ArrayList items = new ArrayList(); + HashSet existingKeys = new HashSet(); + for(CategoryItem item : categoriesAdapter.getItems()) { + if(item.selected) { + items.add(item); + existingKeys.add(item.name); + } + } + for(String category : categories) { + if(!existingKeys.contains(category)) { + items.add(new CategoryItem(category, false)); + } + } + + categoriesAdapter.setItems(items); + categoriesAdapter.notifyDataSetInvalidated(); + categoriesSearchInProgress.setVisibility(View.GONE); + if (categories.size() == 0) { + if(TextUtils.isEmpty(filter)) { + // If we found no recent cats, show the skip message! + categoriesSkip.setVisibility(View.VISIBLE); + } else { + categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); + categoriesNotFoundView.setVisibility(View.VISIBLE); + } + } else { + categoriesList.smoothScrollToPosition(existingKeys.size()); + } + } + + @Override + protected ArrayList doInBackground(Void... voids) { + if(TextUtils.isEmpty(filter)) { + ArrayList items = new ArrayList(); + ArrayList mergedItems= new ArrayList(); + + try { + Cursor cursor = client.query( + CategoryContentProvider.BASE_URI, + Category.Table.ALL_FIELDS, + null, + new String[]{}, + Category.Table.COLUMN_LAST_USED + " DESC"); + // fixme add a limit on the original query instead of falling out of the loop? + while (cursor.moveToNext() && cursor.getPosition() < SEARCH_CATS_LIMIT) { + Category cat = Category.fromCursor(cursor); + items.add(cat.getName()); + } + + if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ + //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); + List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); + //Log.d(TAG, "GPS items: " + gpsItems.toString()); + + mergedItems.addAll(gpsItems); + } + + mergedItems.addAll(items); + } + catch (RemoteException e) { + // faaaail + throw new RuntimeException(e); + } + //Log.d(TAG, "Merged items: " + mergedItems.toString()); + return mergedItems; + } + + if(categoriesCache.containsKey(filter)) { + return categoriesCache.get(filter); + } + + MWApi api = CommonsApplication.createMWApi(); + ApiResult result; + ArrayList categories = new ArrayList(); + + //URL https://commons.wikimedia.org/w/api.php?action=query&format=xml&list=search&srwhat=text&srenablerewrites=1&srnamespace=14&srlimit=10&srsearch= + try { + result = api.action("query") + .param("format", "xml") + .param("list", "search") + .param("srwhat", "text") + .param("srnamespace", "14") + .param("srlimit", SEARCH_CATS_LIMIT) + .param("srsearch", filter) + .get(); + Log.d(TAG, "Method A URL filter" + result.toString()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + + ArrayList categoryNodes = result.getNodes("/api/query/search/p/@title"); + for(ApiResult categoryNode: categoryNodes) { + String cat = categoryNode.getDocument().getTextContent(); + String catString = cat.replace("Category:", ""); + categories.add(catString); + } + + categoriesCache.put(filter, categories); + + return categories; + } + } + private class CategoriesUpdater extends AsyncTask> { private String filter; @@ -153,9 +276,9 @@ public class CategorizationFragment extends SherlockFragment{ } if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ - Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); + //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); - Log.d(TAG, "GPS items: " + gpsItems.toString()); + //Log.d(TAG, "GPS items: " + gpsItems.toString()); mergedItems.addAll(gpsItems); } @@ -166,7 +289,7 @@ public class CategorizationFragment extends SherlockFragment{ // faaaail throw new RuntimeException(e); } - Log.d(TAG, "Merged items: " + mergedItems.toString()); + //Log.d(TAG, "Merged items: " + mergedItems.toString()); return mergedItems; } @@ -174,8 +297,7 @@ public class CategorizationFragment extends SherlockFragment{ return categoriesCache.get(filter); } - //TODO: Try just replacing the call first to see if XPath is correct - /** + MWApi api = CommonsApplication.createMWApi(); ApiResult result; ArrayList categories = new ArrayList(); @@ -185,6 +307,7 @@ public class CategorizationFragment extends SherlockFragment{ .param("acprefix", filter) .param("aclimit", SEARCH_CATS_LIMIT) .get(); + Log.d(TAG, "Prefix URL filter" + result.toString()); } catch (IOException e) { throw new RuntimeException(e); } @@ -193,34 +316,7 @@ public class CategorizationFragment extends SherlockFragment{ for(ApiResult categoryNode: categoryNodes) { categories.add(categoryNode.getDocument().getTextContent()); } - */ - MWApi api = CommonsApplication.createMWApi(); - ApiResult result; - ArrayList categories = new ArrayList(); - - //URL https://commons.wikimedia.org/w/api.php?action=query&format=xml&list=search&srwhat=text&srenablerewrites=1&srnamespace=14&srlimit=10&srsearch= - try { - result = api.action("query") - .param("format", "xml") - .param("list", "search") - .param("srwhat", "text") - .param("srnamespace", "14") - .param("srlimit", SEARCH_CATS_LIMIT) - .param("srsearch", filter) - .get(); - Log.d(TAG, "URL filter" + result.toString()); - } catch (IOException e) { - throw new RuntimeException(e); - } - - - ArrayList categoryNodes = result.getNodes("/api/query/search/p/@title"); - for(ApiResult categoryNode: categoryNodes) { - String cat = categoryNode.getDocument().getTextContent(); - String catString = cat.replace("Category:", ""); - categories.add(catString); - } categoriesCache.put(filter, categories); @@ -398,8 +494,19 @@ public class CategorizationFragment extends SherlockFragment{ if (lastUpdater != null) { lastUpdater.cancel(true); } + + if (methodAUpdater != null) { + methodAUpdater.cancel(true); + } + + methodAUpdater = new MethodAUpdater(); lastUpdater = new CategoriesUpdater(); + + //TODO: Only the first one is ever called, why? Utils.executeAsyncTask(lastUpdater, executor); + Utils.executeAsyncTask(methodAUpdater, executor); + + } @Override From 8a733bdbc30e5be0c084444e46f0f8feaa385e8b Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 17:39:46 +1300 Subject: [PATCH 04/39] Fixed issue of only 1 thread executing --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 1b10291b9..2c45ecf62 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -503,8 +503,8 @@ public class CategorizationFragment extends SherlockFragment{ lastUpdater = new CategoriesUpdater(); //TODO: Only the first one is ever called, why? - Utils.executeAsyncTask(lastUpdater, executor); - Utils.executeAsyncTask(methodAUpdater, executor); + Utils.executeAsyncTask(lastUpdater); + Utils.executeAsyncTask(methodAUpdater); } From 38dbf9928a7836fb5855735dcba22fbb8a6c8160 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 17:49:54 +1300 Subject: [PATCH 05/39] Better fix for thread pools --- .../free/nrw/commons/category/CategorizationFragment.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 2c45ecf62..1827ea194 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -44,7 +44,7 @@ public class CategorizationFragment extends SherlockFragment{ CategoriesAdapter categoriesAdapter; CategoriesUpdater lastUpdater = null; MethodAUpdater methodAUpdater = null; - ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); + ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); private OnCategoriesSaveHandler onCategoriesSaveHandler; @@ -503,8 +503,8 @@ public class CategorizationFragment extends SherlockFragment{ lastUpdater = new CategoriesUpdater(); //TODO: Only the first one is ever called, why? - Utils.executeAsyncTask(lastUpdater); - Utils.executeAsyncTask(methodAUpdater); + Utils.executeAsyncTask(lastUpdater, executor); + Utils.executeAsyncTask(methodAUpdater, executor); } From daa02eee2ef66c83aa8483d7acf1ad24722bf447 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 19:34:52 +1300 Subject: [PATCH 06/39] Comments --- .../free/nrw/commons/category/CategorizationFragment.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 1827ea194..d9907a395 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -258,6 +258,7 @@ public class CategorizationFragment extends SherlockFragment{ @Override protected ArrayList doInBackground(Void... voids) { + //If user hasn't typed anything in yet, get GPS and recent items if(TextUtils.isEmpty(filter)) { ArrayList items = new ArrayList(); ArrayList mergedItems= new ArrayList(); @@ -286,18 +287,18 @@ public class CategorizationFragment extends SherlockFragment{ mergedItems.addAll(items); } catch (RemoteException e) { - // faaaail throw new RuntimeException(e); } //Log.d(TAG, "Merged items: " + mergedItems.toString()); return mergedItems; } - + + //if user types in something that is in cache, return cached category if(categoriesCache.containsKey(filter)) { return categoriesCache.get(filter); } - + //otherwise if user has typed something in, search API for matching categories MWApi api = CommonsApplication.createMWApi(); ApiResult result; ArrayList categories = new ArrayList(); From 89ed9eb70a26fb3b9b5307e623b3c06b41584c4f Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 21:19:01 +1300 Subject: [PATCH 07/39] Added comments --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index d9907a395..45eedef71 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -298,7 +298,7 @@ public class CategorizationFragment extends SherlockFragment{ return categoriesCache.get(filter); } - //otherwise if user has typed something in, search API for matching categories + //otherwise if user has typed something in that isn't in cache, search API for matching categories MWApi api = CommonsApplication.createMWApi(); ApiResult result; ArrayList categories = new ArrayList(); From 0c29a875ddb65bc563cda1451073f0a1dfc2f088 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jan 2016 16:08:22 +1300 Subject: [PATCH 08/39] Refactored recent + gps cat block --- .../category/CategorizationFragment.java | 66 ++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 45eedef71..5815c1e9a 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -256,41 +256,45 @@ public class CategorizationFragment extends SherlockFragment{ } } + private ArrayList recentCatQuery() { + ArrayList items = new ArrayList(); + ArrayList mergedItems= new ArrayList(); + + try { + Cursor cursor = client.query( + CategoryContentProvider.BASE_URI, + Category.Table.ALL_FIELDS, + null, + new String[]{}, + Category.Table.COLUMN_LAST_USED + " DESC"); + // fixme add a limit on the original query instead of falling out of the loop? + while (cursor.moveToNext() && cursor.getPosition() < SEARCH_CATS_LIMIT) { + Category cat = Category.fromCursor(cursor); + items.add(cat.getName()); + } + + if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ + //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); + List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); + //Log.d(TAG, "GPS items: " + gpsItems.toString()); + + mergedItems.addAll(gpsItems); + } + + mergedItems.addAll(items); + } + catch (RemoteException e) { + throw new RuntimeException(e); + } + //Log.d(TAG, "Merged items: " + mergedItems.toString()); + return mergedItems; + } + @Override protected ArrayList doInBackground(Void... voids) { //If user hasn't typed anything in yet, get GPS and recent items if(TextUtils.isEmpty(filter)) { - ArrayList items = new ArrayList(); - ArrayList mergedItems= new ArrayList(); - - try { - Cursor cursor = client.query( - CategoryContentProvider.BASE_URI, - Category.Table.ALL_FIELDS, - null, - new String[]{}, - Category.Table.COLUMN_LAST_USED + " DESC"); - // fixme add a limit on the original query instead of falling out of the loop? - while (cursor.moveToNext() && cursor.getPosition() < SEARCH_CATS_LIMIT) { - Category cat = Category.fromCursor(cursor); - items.add(cat.getName()); - } - - if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ - //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); - List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); - //Log.d(TAG, "GPS items: " + gpsItems.toString()); - - mergedItems.addAll(gpsItems); - } - - mergedItems.addAll(items); - } - catch (RemoteException e) { - throw new RuntimeException(e); - } - //Log.d(TAG, "Merged items: " + mergedItems.toString()); - return mergedItems; + return recentCatQuery(); } //if user types in something that is in cache, return cached category From 44e82e411c2af8181152488088873c02797dde63 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jan 2016 16:16:49 +1300 Subject: [PATCH 09/39] Refactored MethodAUpdater and CategoriesUpdater --- .../category/CategorizationFragment.java | 194 ++++++------------ 1 file changed, 68 insertions(+), 126 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 5815c1e9a..1e20c0264 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -89,6 +89,71 @@ public class CategorizationFragment extends SherlockFragment{ } } + private ArrayList recentCatQuery() { + ArrayList items = new ArrayList(); + ArrayList mergedItems= new ArrayList(); + + try { + Cursor cursor = client.query( + CategoryContentProvider.BASE_URI, + Category.Table.ALL_FIELDS, + null, + new String[]{}, + Category.Table.COLUMN_LAST_USED + " DESC"); + // fixme add a limit on the original query instead of falling out of the loop? + while (cursor.moveToNext() && cursor.getPosition() < SEARCH_CATS_LIMIT) { + Category cat = Category.fromCursor(cursor); + items.add(cat.getName()); + } + + if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ + //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); + List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); + //Log.d(TAG, "GPS items: " + gpsItems.toString()); + + mergedItems.addAll(gpsItems); + } + + mergedItems.addAll(items); + } + catch (RemoteException e) { + throw new RuntimeException(e); + } + //Log.d(TAG, "Merged items: " + mergedItems.toString()); + return mergedItems; + } + + private void setCatsAfterAsync(ArrayList categories, String filter) { + + ArrayList items = new ArrayList(); + HashSet existingKeys = new HashSet(); + for(CategoryItem item : categoriesAdapter.getItems()) { + if(item.selected) { + items.add(item); + existingKeys.add(item.name); + } + } + for(String category : categories) { + if(!existingKeys.contains(category)) { + items.add(new CategoryItem(category, false)); + } + } + + categoriesAdapter.setItems(items); + categoriesAdapter.notifyDataSetInvalidated(); + categoriesSearchInProgress.setVisibility(View.GONE); + if (categories.size() == 0) { + if(TextUtils.isEmpty(filter)) { + // If we found no recent cats, show the skip message! + categoriesSkip.setVisibility(View.VISIBLE); + } else { + categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); + categoriesNotFoundView.setVisibility(View.VISIBLE); + } + } else { + categoriesList.smoothScrollToPosition(existingKeys.size()); + } + } private class MethodAUpdater extends AsyncTask> { @@ -106,71 +171,13 @@ public class CategorizationFragment extends SherlockFragment{ @Override protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); - ArrayList items = new ArrayList(); - HashSet existingKeys = new HashSet(); - for(CategoryItem item : categoriesAdapter.getItems()) { - if(item.selected) { - items.add(item); - existingKeys.add(item.name); - } - } - for(String category : categories) { - if(!existingKeys.contains(category)) { - items.add(new CategoryItem(category, false)); - } - } - - categoriesAdapter.setItems(items); - categoriesAdapter.notifyDataSetInvalidated(); - categoriesSearchInProgress.setVisibility(View.GONE); - if (categories.size() == 0) { - if(TextUtils.isEmpty(filter)) { - // If we found no recent cats, show the skip message! - categoriesSkip.setVisibility(View.VISIBLE); - } else { - categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); - categoriesNotFoundView.setVisibility(View.VISIBLE); - } - } else { - categoriesList.smoothScrollToPosition(existingKeys.size()); - } + setCatsAfterAsync(categories, filter); } @Override protected ArrayList doInBackground(Void... voids) { if(TextUtils.isEmpty(filter)) { - ArrayList items = new ArrayList(); - ArrayList mergedItems= new ArrayList(); - - try { - Cursor cursor = client.query( - CategoryContentProvider.BASE_URI, - Category.Table.ALL_FIELDS, - null, - new String[]{}, - Category.Table.COLUMN_LAST_USED + " DESC"); - // fixme add a limit on the original query instead of falling out of the loop? - while (cursor.moveToNext() && cursor.getPosition() < SEARCH_CATS_LIMIT) { - Category cat = Category.fromCursor(cursor); - items.add(cat.getName()); - } - - if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ - //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); - List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); - //Log.d(TAG, "GPS items: " + gpsItems.toString()); - - mergedItems.addAll(gpsItems); - } - - mergedItems.addAll(items); - } - catch (RemoteException e) { - // faaaail - throw new RuntimeException(e); - } - //Log.d(TAG, "Merged items: " + mergedItems.toString()); - return mergedItems; + return recentCatQuery(); } if(categoriesCache.containsKey(filter)) { @@ -196,7 +203,6 @@ public class CategorizationFragment extends SherlockFragment{ throw new RuntimeException(e); } - ArrayList categoryNodes = result.getNodes("/api/query/search/p/@title"); for(ApiResult categoryNode: categoryNodes) { String cat = categoryNode.getDocument().getTextContent(); @@ -205,7 +211,6 @@ public class CategorizationFragment extends SherlockFragment{ } categoriesCache.put(filter, categories); - return categories; } } @@ -226,68 +231,7 @@ public class CategorizationFragment extends SherlockFragment{ @Override protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); - ArrayList items = new ArrayList(); - HashSet existingKeys = new HashSet(); - for(CategoryItem item : categoriesAdapter.getItems()) { - if(item.selected) { - items.add(item); - existingKeys.add(item.name); - } - } - for(String category : categories) { - if(!existingKeys.contains(category)) { - items.add(new CategoryItem(category, false)); - } - } - - categoriesAdapter.setItems(items); - categoriesAdapter.notifyDataSetInvalidated(); - categoriesSearchInProgress.setVisibility(View.GONE); - if (categories.size() == 0) { - if(TextUtils.isEmpty(filter)) { - // If we found no recent cats, show the skip message! - categoriesSkip.setVisibility(View.VISIBLE); - } else { - categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); - categoriesNotFoundView.setVisibility(View.VISIBLE); - } - } else { - categoriesList.smoothScrollToPosition(existingKeys.size()); - } - } - - private ArrayList recentCatQuery() { - ArrayList items = new ArrayList(); - ArrayList mergedItems= new ArrayList(); - - try { - Cursor cursor = client.query( - CategoryContentProvider.BASE_URI, - Category.Table.ALL_FIELDS, - null, - new String[]{}, - Category.Table.COLUMN_LAST_USED + " DESC"); - // fixme add a limit on the original query instead of falling out of the loop? - while (cursor.moveToNext() && cursor.getPosition() < SEARCH_CATS_LIMIT) { - Category cat = Category.fromCursor(cursor); - items.add(cat.getName()); - } - - if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ - //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); - List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); - //Log.d(TAG, "GPS items: " + gpsItems.toString()); - - mergedItems.addAll(gpsItems); - } - - mergedItems.addAll(items); - } - catch (RemoteException e) { - throw new RuntimeException(e); - } - //Log.d(TAG, "Merged items: " + mergedItems.toString()); - return mergedItems; + setCatsAfterAsync(categories, filter); } @Override @@ -322,9 +266,7 @@ public class CategorizationFragment extends SherlockFragment{ categories.add(categoryNode.getDocument().getTextContent()); } - categoriesCache.put(filter, categories); - return categories; } } From 36aa648addf1ecdbccb0380ab6a3efa87df84320 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jan 2016 16:58:58 +1300 Subject: [PATCH 10/39] Minor fix --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 1e20c0264..62cead7a9 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -448,8 +448,7 @@ public class CategorizationFragment extends SherlockFragment{ methodAUpdater = new MethodAUpdater(); lastUpdater = new CategoriesUpdater(); - - //TODO: Only the first one is ever called, why? + Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); From 9d3b76ac5f2e68bffd7ccbdbba624b2bd749f73d Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jan 2016 18:26:08 +1300 Subject: [PATCH 11/39] Formatting changes --- .../category/CategorizationFragment.java | 72 ++++++++++--------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 62cead7a9..befacdf51 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -123,38 +124,6 @@ public class CategorizationFragment extends SherlockFragment{ return mergedItems; } - private void setCatsAfterAsync(ArrayList categories, String filter) { - - ArrayList items = new ArrayList(); - HashSet existingKeys = new HashSet(); - for(CategoryItem item : categoriesAdapter.getItems()) { - if(item.selected) { - items.add(item); - existingKeys.add(item.name); - } - } - for(String category : categories) { - if(!existingKeys.contains(category)) { - items.add(new CategoryItem(category, false)); - } - } - - categoriesAdapter.setItems(items); - categoriesAdapter.notifyDataSetInvalidated(); - categoriesSearchInProgress.setVisibility(View.GONE); - if (categories.size() == 0) { - if(TextUtils.isEmpty(filter)) { - // If we found no recent cats, show the skip message! - categoriesSkip.setVisibility(View.VISIBLE); - } else { - categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); - categoriesNotFoundView.setVisibility(View.VISIBLE); - } - } else { - categoriesList.smoothScrollToPosition(existingKeys.size()); - } - } - private class MethodAUpdater extends AsyncTask> { private String filter; @@ -271,6 +240,42 @@ public class CategorizationFragment extends SherlockFragment{ } } + + + private void setCatsAfterAsync(ArrayList categories, String filter) { + + ArrayList items = new ArrayList(); + HashSet existingKeys = new HashSet(); + for(CategoryItem item : categoriesAdapter.getItems()) { + if(item.selected) { + items.add(item); + existingKeys.add(item.name); + } + } + for(String category : categories) { + if(!existingKeys.contains(category)) { + items.add(new CategoryItem(category, false)); + } + } + + //TODO: This will set items twice in Adapter. Need to be able to 'add' items to adapter instead? Need to convert LinkedHashSet to ArrayList first? + //TODO: Maybe DON'T call this Adapter method. Instead make an add(items) method that will build up the LinkedHashSet. Then call the next block after AsyncTask over? + categoriesAdapter.setItems(items); + categoriesAdapter.notifyDataSetInvalidated(); + categoriesSearchInProgress.setVisibility(View.GONE); + if (categories.size() == 0) { + if(TextUtils.isEmpty(filter)) { + // If we found no recent cats, show the skip message! + categoriesSkip.setVisibility(View.VISIBLE); + } else { + categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); + categoriesNotFoundView.setVisibility(View.VISIBLE); + } + } else { + categoriesList.smoothScrollToPosition(existingKeys.size()); + } + } + private class CategoriesAdapter extends BaseAdapter { private Context context; @@ -278,6 +283,7 @@ public class CategorizationFragment extends SherlockFragment{ private CategoriesAdapter(Context context, ArrayList items) { this.context = context; + this.items = items; } @@ -448,7 +454,7 @@ public class CategorizationFragment extends SherlockFragment{ methodAUpdater = new MethodAUpdater(); lastUpdater = new CategoriesUpdater(); - + Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); From cb3ac0f824d3ff746d4cf511089bff6795495756 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jan 2016 18:54:00 +1300 Subject: [PATCH 12/39] Failed attempt at adding items to Adapter --- .../category/CategorizationFragment.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index befacdf51..90cd8981d 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -50,6 +50,7 @@ public class CategorizationFragment extends SherlockFragment{ private OnCategoriesSaveHandler onCategoriesSaveHandler; private HashMap> categoriesCache; + LinkedHashSet itemSet = new LinkedHashSet(); private ContentProviderClient client; @@ -201,6 +202,8 @@ public class CategorizationFragment extends SherlockFragment{ protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); setCatsAfterAsync(categories, filter); + + } @Override @@ -259,10 +262,11 @@ public class CategorizationFragment extends SherlockFragment{ } //TODO: This will set items twice in Adapter. Need to be able to 'add' items to adapter instead? Need to convert LinkedHashSet to ArrayList first? - //TODO: Maybe DON'T call this Adapter method. Instead make an add(items) method that will build up the LinkedHashSet. Then call the next block after AsyncTask over? - categoriesAdapter.setItems(items); - categoriesAdapter.notifyDataSetInvalidated(); - categoriesSearchInProgress.setVisibility(View.GONE); + //TODO: Maybe DON'T call this Adapter method. Instead make an add(items) method that will build up the LinkedHashSet. Then move this whole thing to bottom + itemSet.addAll(items); + Log.d(TAG, "Item Set" + itemSet.toString()); + + if (categories.size() == 0) { if(TextUtils.isEmpty(filter)) { // If we found no recent cats, show the skip message! @@ -274,6 +278,8 @@ public class CategorizationFragment extends SherlockFragment{ } else { categoriesList.smoothScrollToPosition(existingKeys.size()); } + + } private class CategoriesAdapter extends BaseAdapter { @@ -283,7 +289,6 @@ public class CategorizationFragment extends SherlockFragment{ private CategoriesAdapter(Context context, ArrayList items) { this.context = context; - this.items = items; } @@ -452,12 +457,21 @@ public class CategorizationFragment extends SherlockFragment{ methodAUpdater.cancel(true); } + methodAUpdater = new MethodAUpdater(); lastUpdater = new CategoriesUpdater(); Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); + ArrayList itemList = new ArrayList(itemSet); + + categoriesAdapter.setItems(itemList); + Log.d(TAG, "After AsyncTask over, set items in adapter to " + itemList.toString()); + + categoriesAdapter.notifyDataSetInvalidated(); + categoriesSearchInProgress.setVisibility(View.GONE); + } From 329a8800354496e25420ea8c86af4fb99816f1de Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jan 2016 19:00:28 +1300 Subject: [PATCH 13/39] Minor change --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 90cd8981d..736b3d654 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -458,17 +458,18 @@ public class CategorizationFragment extends SherlockFragment{ } + ArrayList itemList = new ArrayList(itemSet); + methodAUpdater = new MethodAUpdater(); lastUpdater = new CategoriesUpdater(); Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); - ArrayList itemList = new ArrayList(itemSet); categoriesAdapter.setItems(itemList); Log.d(TAG, "After AsyncTask over, set items in adapter to " + itemList.toString()); - + categoriesAdapter.notifyDataSetInvalidated(); categoriesSearchInProgress.setVisibility(View.GONE); From c638a211d5b9aac6fb2688a6bd94b4732fcc6815 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 22 Jan 2016 21:12:59 +1300 Subject: [PATCH 14/39] Separating MethodAUpdater and PrefixUpdater into their own files --- .../nrw/commons/category/AsyncResponse.java | 4 + .../category/CategorizationFragment.java | 133 +----------------- .../nrw/commons/category/MethodAUpdater.java | 78 ++++++++++ .../nrw/commons/category/PrefixUpdater.java | 75 ++++++++++ 4 files changed, 164 insertions(+), 126 deletions(-) create mode 100644 commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java create mode 100644 commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java create mode 100644 commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java diff --git a/commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java b/commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java new file mode 100644 index 000000000..229ba09ab --- /dev/null +++ b/commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java @@ -0,0 +1,4 @@ +package fr.free.nrw.commons.category; + +public interface AsyncResponse { +} diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 736b3d654..7f5fa1b69 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -37,24 +37,24 @@ public class CategorizationFragment extends SherlockFragment{ } ListView categoriesList; - EditText categoriesFilter; + protected EditText categoriesFilter; ProgressBar categoriesSearchInProgress; TextView categoriesNotFoundView; TextView categoriesSkip; CategoriesAdapter categoriesAdapter; - CategoriesUpdater lastUpdater = null; + PrefixUpdater lastUpdater = null; MethodAUpdater methodAUpdater = null; ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); private OnCategoriesSaveHandler onCategoriesSaveHandler; - private HashMap> categoriesCache; + protected HashMap> categoriesCache; LinkedHashSet itemSet = new LinkedHashSet(); private ContentProviderClient client; - private final int SEARCH_CATS_LIMIT = 25; + protected final int SEARCH_CATS_LIMIT = 25; private static final String TAG = CategorizationFragment.class.getName(); public static class CategoryItem implements Parcelable { @@ -91,7 +91,7 @@ public class CategorizationFragment extends SherlockFragment{ } } - private ArrayList recentCatQuery() { + protected ArrayList recentCatQuery() { ArrayList items = new ArrayList(); ArrayList mergedItems= new ArrayList(); @@ -125,127 +125,8 @@ public class CategorizationFragment extends SherlockFragment{ return mergedItems; } - private class MethodAUpdater extends AsyncTask> { - private String filter; - @Override - protected void onPreExecute() { - super.onPreExecute(); - filter = categoriesFilter.getText().toString(); - categoriesSearchInProgress.setVisibility(View.VISIBLE); - categoriesNotFoundView.setVisibility(View.GONE); - - categoriesSkip.setVisibility(View.GONE); - } - - @Override - protected void onPostExecute(ArrayList categories) { - super.onPostExecute(categories); - setCatsAfterAsync(categories, filter); - } - - @Override - protected ArrayList doInBackground(Void... voids) { - if(TextUtils.isEmpty(filter)) { - return recentCatQuery(); - } - - if(categoriesCache.containsKey(filter)) { - return categoriesCache.get(filter); - } - - MWApi api = CommonsApplication.createMWApi(); - ApiResult result; - ArrayList categories = new ArrayList(); - - //URL https://commons.wikimedia.org/w/api.php?action=query&format=xml&list=search&srwhat=text&srenablerewrites=1&srnamespace=14&srlimit=10&srsearch= - try { - result = api.action("query") - .param("format", "xml") - .param("list", "search") - .param("srwhat", "text") - .param("srnamespace", "14") - .param("srlimit", SEARCH_CATS_LIMIT) - .param("srsearch", filter) - .get(); - Log.d(TAG, "Method A URL filter" + result.toString()); - } catch (IOException e) { - throw new RuntimeException(e); - } - - ArrayList categoryNodes = result.getNodes("/api/query/search/p/@title"); - for(ApiResult categoryNode: categoryNodes) { - String cat = categoryNode.getDocument().getTextContent(); - String catString = cat.replace("Category:", ""); - categories.add(catString); - } - - categoriesCache.put(filter, categories); - return categories; - } - } - - private class CategoriesUpdater extends AsyncTask> { - - private String filter; - @Override - protected void onPreExecute() { - super.onPreExecute(); - filter = categoriesFilter.getText().toString(); - categoriesSearchInProgress.setVisibility(View.VISIBLE); - categoriesNotFoundView.setVisibility(View.GONE); - - categoriesSkip.setVisibility(View.GONE); - } - - @Override - protected void onPostExecute(ArrayList categories) { - super.onPostExecute(categories); - setCatsAfterAsync(categories, filter); - - - } - - @Override - protected ArrayList doInBackground(Void... voids) { - //If user hasn't typed anything in yet, get GPS and recent items - if(TextUtils.isEmpty(filter)) { - return recentCatQuery(); - } - - //if user types in something that is in cache, return cached category - if(categoriesCache.containsKey(filter)) { - return categoriesCache.get(filter); - } - - //otherwise if user has typed something in that isn't in cache, search API for matching categories - MWApi api = CommonsApplication.createMWApi(); - ApiResult result; - ArrayList categories = new ArrayList(); - try { - result = api.action("query") - .param("list", "allcategories") - .param("acprefix", filter) - .param("aclimit", SEARCH_CATS_LIMIT) - .get(); - Log.d(TAG, "Prefix URL filter" + result.toString()); - } catch (IOException e) { - throw new RuntimeException(e); - } - - ArrayList categoryNodes = result.getNodes("/api/query/allcategories/c"); - for(ApiResult categoryNode: categoryNodes) { - categories.add(categoryNode.getDocument().getTextContent()); - } - - categoriesCache.put(filter, categories); - return categories; - } - } - - - - private void setCatsAfterAsync(ArrayList categories, String filter) { + protected void setCatsAfterAsync(ArrayList categories, String filter) { ArrayList items = new ArrayList(); HashSet existingKeys = new HashSet(); @@ -461,7 +342,7 @@ public class CategorizationFragment extends SherlockFragment{ ArrayList itemList = new ArrayList(itemSet); methodAUpdater = new MethodAUpdater(); - lastUpdater = new CategoriesUpdater(); + lastUpdater = new PrefixUpdater(); Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); diff --git a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java new file mode 100644 index 000000000..8b25dfcce --- /dev/null +++ b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -0,0 +1,78 @@ +package fr.free.nrw.commons.category; + + +import android.os.AsyncTask; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; + +import org.mediawiki.api.ApiResult; +import org.mediawiki.api.MWApi; + +import java.io.IOException; +import java.util.ArrayList; + +import fr.free.nrw.commons.CommonsApplication; + +public class MethodAUpdater extends AsyncTask> { + + private String filter; + private static final String TAG = MethodAUpdater.class.getName(); + CategorizationFragment catFragment = new CategorizationFragment(); + + @Override + protected void onPreExecute() { + super.onPreExecute(); + filter = catFragment.categoriesFilter.getText().toString(); + catFragment.categoriesSearchInProgress.setVisibility(View.VISIBLE); + catFragment.categoriesNotFoundView.setVisibility(View.GONE); + + catFragment.categoriesSkip.setVisibility(View.GONE); + } + + @Override + protected void onPostExecute(ArrayList categories) { + super.onPostExecute(categories); + catFragment.setCatsAfterAsync(categories, filter); + } + + @Override + protected ArrayList doInBackground(Void... voids) { + if(TextUtils.isEmpty(filter)) { + return catFragment.recentCatQuery(); + } + + if(catFragment.categoriesCache.containsKey(filter)) { + return catFragment.categoriesCache.get(filter); + } + + MWApi api = CommonsApplication.createMWApi(); + ApiResult result; + ArrayList categories = new ArrayList(); + + //URL https://commons.wikimedia.org/w/api.php?action=query&format=xml&list=search&srwhat=text&srenablerewrites=1&srnamespace=14&srlimit=10&srsearch= + try { + result = api.action("query") + .param("format", "xml") + .param("list", "search") + .param("srwhat", "text") + .param("srnamespace", "14") + .param("srlimit", catFragment.SEARCH_CATS_LIMIT) + .param("srsearch", filter) + .get(); + Log.d(TAG, "Method A URL filter" + result.toString()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + ArrayList categoryNodes = result.getNodes("/api/query/search/p/@title"); + for(ApiResult categoryNode: categoryNodes) { + String cat = categoryNode.getDocument().getTextContent(); + String catString = cat.replace("Category:", ""); + categories.add(catString); + } + + catFragment.categoriesCache.put(filter, categories); + return categories; + } +} diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java new file mode 100644 index 000000000..6d6a1e36d --- /dev/null +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -0,0 +1,75 @@ +package fr.free.nrw.commons.category; + +import android.os.AsyncTask; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; + +import org.mediawiki.api.ApiResult; +import org.mediawiki.api.MWApi; + +import java.io.IOException; +import java.util.ArrayList; + +import fr.free.nrw.commons.CommonsApplication; + +public class PrefixUpdater extends AsyncTask> { + //TODO: Return type? + + private String filter; + private static final String TAG = PrefixUpdater.class.getName(); + CategorizationFragment catFragment = new CategorizationFragment(); + @Override + protected void onPreExecute() { + super.onPreExecute(); + filter = catFragment.categoriesFilter.getText().toString(); + catFragment.categoriesSearchInProgress.setVisibility(View.VISIBLE); + catFragment.categoriesNotFoundView.setVisibility(View.GONE); + + catFragment.categoriesSkip.setVisibility(View.GONE); + } + + @Override + protected void onPostExecute(ArrayList categories) { + super.onPostExecute(categories); + catFragment.setCatsAfterAsync(categories, filter); + //TODO: Return its own List + + } + + @Override + protected ArrayList doInBackground(Void... voids) { + //If user hasn't typed anything in yet, get GPS and recent items + if(TextUtils.isEmpty(filter)) { + return catFragment.recentCatQuery(); + } + + //if user types in something that is in cache, return cached category + if(catFragment.categoriesCache.containsKey(filter)) { + return catFragment.categoriesCache.get(filter); + } + + //otherwise if user has typed something in that isn't in cache, search API for matching categories + MWApi api = CommonsApplication.createMWApi(); + ApiResult result; + ArrayList categories = new ArrayList(); + try { + result = api.action("query") + .param("list", "allcategories") + .param("acprefix", filter) + .param("aclimit", catFragment.SEARCH_CATS_LIMIT) + .get(); + Log.d(TAG, "Prefix URL filter" + result.toString()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + ArrayList categoryNodes = result.getNodes("/api/query/allcategories/c"); + for(ApiResult categoryNode: categoryNodes) { + categories.add(categoryNode.getDocument().getTextContent()); + } + + catFragment.categoriesCache.put(filter, categories); + return categories; + } +} From 7d2fa800c4c75850c750c7dc12f8244d00831a14 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 15:20:24 +1300 Subject: [PATCH 15/39] Tidied up comments in prep for 2nd attempt --- .../main/java/fr/free/nrw/commons/category/MethodAUpdater.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index 8b25dfcce..9f23c3818 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -38,14 +38,17 @@ public class MethodAUpdater extends AsyncTask> { @Override protected ArrayList doInBackground(Void... voids) { + //If user hasn't typed anything in yet, get GPS and recent items if(TextUtils.isEmpty(filter)) { return catFragment.recentCatQuery(); } + //if user types in something that is in cache, return cached category if(catFragment.categoriesCache.containsKey(filter)) { return catFragment.categoriesCache.get(filter); } + //otherwise if user has typed something in that isn't in cache, search API for matching categories MWApi api = CommonsApplication.createMWApi(); ApiResult result; ArrayList categories = new ArrayList(); From 4036ad150582c040eab95995ee15b8e3c79bfb1b Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 15:28:04 +1300 Subject: [PATCH 16/39] Reverting setCatsAfterAsync to original state --- .../commons/category/CategorizationFragment.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 7f5fa1b69..6ffa4ec17 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -50,7 +51,7 @@ public class CategorizationFragment extends SherlockFragment{ private OnCategoriesSaveHandler onCategoriesSaveHandler; protected HashMap> categoriesCache; - LinkedHashSet itemSet = new LinkedHashSet(); + private final Set results = new LinkedHashSet(); private ContentProviderClient client; @@ -144,9 +145,14 @@ public class CategorizationFragment extends SherlockFragment{ //TODO: This will set items twice in Adapter. Need to be able to 'add' items to adapter instead? Need to convert LinkedHashSet to ArrayList first? //TODO: Maybe DON'T call this Adapter method. Instead make an add(items) method that will build up the LinkedHashSet. Then move this whole thing to bottom + categoriesAdapter.setItems(items); + categoriesAdapter.notifyDataSetInvalidated(); + categoriesSearchInProgress.setVisibility(View.GONE); + + /* itemSet.addAll(items); Log.d(TAG, "Item Set" + itemSet.toString()); - + */ if (categories.size() == 0) { if(TextUtils.isEmpty(filter)) { @@ -159,8 +165,6 @@ public class CategorizationFragment extends SherlockFragment{ } else { categoriesList.smoothScrollToPosition(existingKeys.size()); } - - } private class CategoriesAdapter extends BaseAdapter { @@ -347,6 +351,7 @@ public class CategorizationFragment extends SherlockFragment{ Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); + //TODO: This needs to be in OnPostExecute() of the subtasks categoriesAdapter.setItems(itemList); Log.d(TAG, "After AsyncTask over, set items in adapter to " + itemList.toString()); From 8fb27ce9adcfd242fe2fe3bc779e9a2166779683 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 15:32:12 +1300 Subject: [PATCH 17/39] Reverting CategorizationFragment to original state --- .../nrw/commons/category/CategorizationFragment.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 6ffa4ec17..773fd765f 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -22,6 +22,7 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.upload.MwVolleyApi; import java.io.IOException; +import java.sql.ResultSet; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -29,6 +30,7 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -333,6 +335,7 @@ public class CategorizationFragment extends SherlockFragment{ return rootView; } + private void startUpdatingCategoryList() { if (lastUpdater != null) { lastUpdater.cancel(true); @@ -351,13 +354,6 @@ public class CategorizationFragment extends SherlockFragment{ Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); - //TODO: This needs to be in OnPostExecute() of the subtasks - - categoriesAdapter.setItems(itemList); - Log.d(TAG, "After AsyncTask over, set items in adapter to " + itemList.toString()); - - categoriesAdapter.notifyDataSetInvalidated(); - categoriesSearchInProgress.setVisibility(View.GONE); } From 73c6cbcc75419cb7790788a60e86d7f01b59844d Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 16:31:54 +1300 Subject: [PATCH 18/39] Added PrefixUpdaterSub and MethodAUpdaterSub --- .../category/CategorizationFragment.java | 52 ++++++++++++++++++- .../nrw/commons/category/MethodAUpdater.java | 6 ++- .../nrw/commons/category/PrefixUpdater.java | 7 ++- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 773fd765f..79e05096b 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -336,6 +336,49 @@ public class CategorizationFragment extends SherlockFragment{ } + final CountDownLatch latch = new CountDownLatch(1); + + private class PrefixUpdaterSub extends PrefixUpdater { + + public PrefixUpdaterSub() { + super(CategorizationFragment.this); + } + + @Override + void doInBackground() { + super.doInBackground(); + latch.await(); + } + + @Override + void onPostExecute(ResultSet result) { + super.onPostExecute(result): + + results.addAll(result); + adapter.notifyDataSetComplete(); + } + } + + + private class MethodAUpdaterSub extends MethodAUpdater { + + public MethodAUpdaterSub() { + super(CategorizationFragment.this); + } + + @Override + void onPostExecute(ResultSet result) { + super.onPostExecute(result): + + results.clear(); + results.addAll(result); + adapter.notifyDataSetComplete(); + + latch.countDown(); + } + } + + private void startUpdatingCategoryList() { if (lastUpdater != null) { lastUpdater.cancel(true); @@ -346,6 +389,12 @@ public class CategorizationFragment extends SherlockFragment{ } + PrefixUpdaterSub prefixUpdaterSub = new PrefixUpdaterSub(); + MethodAUpdaterSub methodAUpdaterSub = new MethodAUpdaterSub(); + + Utils.executeAsyncTask(prefixUpdaterSub); + Utils.executeAsyncTask(methodAUpdaterSub); +/* ArrayList itemList = new ArrayList(itemSet); methodAUpdater = new MethodAUpdater(); @@ -353,8 +402,7 @@ public class CategorizationFragment extends SherlockFragment{ Utils.executeAsyncTask(lastUpdater, executor); Utils.executeAsyncTask(methodAUpdater, executor); - - + */ } diff --git a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index 9f23c3818..70ede4716 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -18,7 +18,11 @@ public class MethodAUpdater extends AsyncTask> { private String filter; private static final String TAG = MethodAUpdater.class.getName(); - CategorizationFragment catFragment = new CategorizationFragment(); + CategorizationFragment catFragment; + + public MethodAUpdater(CategorizationFragment catFragment) { + this.catFragment = catFragment; + } @Override protected void onPreExecute() { diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index 6d6a1e36d..00e17e51f 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -18,7 +18,12 @@ public class PrefixUpdater extends AsyncTask> { private String filter; private static final String TAG = PrefixUpdater.class.getName(); - CategorizationFragment catFragment = new CategorizationFragment(); + CategorizationFragment catFragment; + + public PrefixUpdater(CategorizationFragment catFragment) { + this.catFragment = catFragment; + } + @Override protected void onPreExecute() { super.onPreExecute(); From d44869443e24a47017067089226d843d7cd6f3d1 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 17:10:21 +1300 Subject: [PATCH 19/39] Modified Sub classes & added Latch --- .../category/CategorizationFragment.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 79e05096b..2b786ecc0 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -53,7 +53,7 @@ public class CategorizationFragment extends SherlockFragment{ private OnCategoriesSaveHandler onCategoriesSaveHandler; protected HashMap> categoriesCache; - private final Set results = new LinkedHashSet(); + private final Set results = new LinkedHashSet(); private ContentProviderClient client; @@ -335,7 +335,6 @@ public class CategorizationFragment extends SherlockFragment{ return rootView; } - final CountDownLatch latch = new CountDownLatch(1); private class PrefixUpdaterSub extends PrefixUpdater { @@ -345,17 +344,24 @@ public class CategorizationFragment extends SherlockFragment{ } @Override - void doInBackground() { - super.doInBackground(); - latch.await(); + protected ArrayList doInBackground(Void... voids) { + ArrayList result = new ArrayList(); + try { + result = super.doInBackground(); + latch.await(); + } + catch (InterruptedException e) { + Log.w(TAG, e); + } + return result; } @Override - void onPostExecute(ResultSet result) { - super.onPostExecute(result): + protected void onPostExecute(ArrayList result) { + super.onPostExecute(result); results.addAll(result); - adapter.notifyDataSetComplete(); + categoriesAdapter.notifyDataSetChanged(); } } @@ -367,12 +373,12 @@ public class CategorizationFragment extends SherlockFragment{ } @Override - void onPostExecute(ResultSet result) { - super.onPostExecute(result): + protected void onPostExecute(ArrayList result) { + super.onPostExecute(result); results.clear(); results.addAll(result); - adapter.notifyDataSetComplete(); + categoriesAdapter.notifyDataSetChanged(); latch.countDown(); } @@ -380,6 +386,10 @@ public class CategorizationFragment extends SherlockFragment{ private void startUpdatingCategoryList() { + + + + if (lastUpdater != null) { lastUpdater.cancel(true); } From 0203a9cdec3985017bc2a59d193772b5875c33f9 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 17:14:15 +1300 Subject: [PATCH 20/39] Put sub classes into startUpdatingCategoryList() method --- .../category/CategorizationFragment.java | 104 ++++++++---------- 1 file changed, 47 insertions(+), 57 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 2b786ecc0..5bfd20b4f 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -335,60 +335,59 @@ public class CategorizationFragment extends SherlockFragment{ return rootView; } - final CountDownLatch latch = new CountDownLatch(1); - - private class PrefixUpdaterSub extends PrefixUpdater { - - public PrefixUpdaterSub() { - super(CategorizationFragment.this); - } - - @Override - protected ArrayList doInBackground(Void... voids) { - ArrayList result = new ArrayList(); - try { - result = super.doInBackground(); - latch.await(); - } - catch (InterruptedException e) { - Log.w(TAG, e); - } - return result; - } - - @Override - protected void onPostExecute(ArrayList result) { - super.onPostExecute(result); - - results.addAll(result); - categoriesAdapter.notifyDataSetChanged(); - } - } - - - private class MethodAUpdaterSub extends MethodAUpdater { - - public MethodAUpdaterSub() { - super(CategorizationFragment.this); - } - - @Override - protected void onPostExecute(ArrayList result) { - super.onPostExecute(result); - - results.clear(); - results.addAll(result); - categoriesAdapter.notifyDataSetChanged(); - - latch.countDown(); - } - } private void startUpdatingCategoryList() { + final CountDownLatch latch = new CountDownLatch(1); + class PrefixUpdaterSub extends PrefixUpdater { + + public PrefixUpdaterSub() { + super(CategorizationFragment.this); + } + + @Override + protected ArrayList doInBackground(Void... voids) { + ArrayList result = new ArrayList(); + try { + result = super.doInBackground(); + latch.await(); + } + catch (InterruptedException e) { + Log.w(TAG, e); + } + return result; + } + + @Override + protected void onPostExecute(ArrayList result) { + super.onPostExecute(result); + + results.addAll(result); + categoriesAdapter.notifyDataSetChanged(); + } + } + + + class MethodAUpdaterSub extends MethodAUpdater { + + public MethodAUpdaterSub() { + super(CategorizationFragment.this); + } + + @Override + protected void onPostExecute(ArrayList result) { + super.onPostExecute(result); + + results.clear(); + results.addAll(result); + categoriesAdapter.notifyDataSetChanged(); + + latch.countDown(); + } + } if (lastUpdater != null) { lastUpdater.cancel(true); @@ -404,15 +403,6 @@ public class CategorizationFragment extends SherlockFragment{ Utils.executeAsyncTask(prefixUpdaterSub); Utils.executeAsyncTask(methodAUpdaterSub); -/* - ArrayList itemList = new ArrayList(itemSet); - - methodAUpdater = new MethodAUpdater(); - lastUpdater = new PrefixUpdater(); - - Utils.executeAsyncTask(lastUpdater, executor); - Utils.executeAsyncTask(methodAUpdater, executor); - */ } From a51f4252bb8a3a62e4bdfa55ca16869753151f8d Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 20:35:12 +1300 Subject: [PATCH 21/39] Getting results but only from either method --- .../category/CategorizationFragment.java | 127 +++++++++--------- 1 file changed, 61 insertions(+), 66 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 5bfd20b4f..32924c020 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -46,14 +46,15 @@ public class CategorizationFragment extends SherlockFragment{ TextView categoriesSkip; CategoriesAdapter categoriesAdapter; - PrefixUpdater lastUpdater = null; - MethodAUpdater methodAUpdater = null; ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); private OnCategoriesSaveHandler onCategoriesSaveHandler; protected HashMap> categoriesCache; + private final Set results = new LinkedHashSet(); + PrefixUpdaterSub prefixUpdaterSub = null; + MethodAUpdaterSub methodAUpdaterSub = null; private ContentProviderClient client; @@ -110,6 +111,7 @@ public class CategorizationFragment extends SherlockFragment{ Category cat = Category.fromCursor(cursor); items.add(cat.getName()); } + cursor.close(); if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); @@ -145,17 +147,10 @@ public class CategorizationFragment extends SherlockFragment{ } } - //TODO: This will set items twice in Adapter. Need to be able to 'add' items to adapter instead? Need to convert LinkedHashSet to ArrayList first? - //TODO: Maybe DON'T call this Adapter method. Instead make an add(items) method that will build up the LinkedHashSet. Then move this whole thing to bottom categoriesAdapter.setItems(items); categoriesAdapter.notifyDataSetInvalidated(); categoriesSearchInProgress.setVisibility(View.GONE); - /* - itemSet.addAll(items); - Log.d(TAG, "Item Set" + itemSet.toString()); - */ - if (categories.size() == 0) { if(TextUtils.isEmpty(filter)) { // If we found no recent cats, show the skip message! @@ -335,74 +330,74 @@ public class CategorizationFragment extends SherlockFragment{ return rootView; } + final CountDownLatch latch = new CountDownLatch(1); + class PrefixUpdaterSub extends PrefixUpdater { + + public PrefixUpdaterSub() { + super(CategorizationFragment.this); + } + + @Override + protected ArrayList doInBackground(Void... voids) { + ArrayList result = new ArrayList(); + try { + result = super.doInBackground(); + latch.await(); + } + catch (InterruptedException e) { + Log.w(TAG, e); + Thread.currentThread().interrupt(); + } + return result; + } + + @Override + protected void onPostExecute(ArrayList result) { + super.onPostExecute(result); + + results.addAll(result); + Log.d(TAG, "Prefix result: " + result); + categoriesAdapter.notifyDataSetChanged(); + } + } + + + class MethodAUpdaterSub extends MethodAUpdater { + + public MethodAUpdaterSub() { + super(CategorizationFragment.this); + } + + @Override + protected void onPostExecute(ArrayList result) { + results.clear(); + super.onPostExecute(result); + + results.addAll(result); + Log.d(TAG, "Method A result: " + result); + categoriesAdapter.notifyDataSetChanged(); + + latch.countDown(); + } + } private void startUpdatingCategoryList() { - - final CountDownLatch latch = new CountDownLatch(1); - - class PrefixUpdaterSub extends PrefixUpdater { - - public PrefixUpdaterSub() { - super(CategorizationFragment.this); - } - - @Override - protected ArrayList doInBackground(Void... voids) { - ArrayList result = new ArrayList(); - try { - result = super.doInBackground(); - latch.await(); - } - catch (InterruptedException e) { - Log.w(TAG, e); - } - return result; - } - - @Override - protected void onPostExecute(ArrayList result) { - super.onPostExecute(result); - - results.addAll(result); - categoriesAdapter.notifyDataSetChanged(); - } + if (prefixUpdaterSub != null) { + prefixUpdaterSub.cancel(true); } - - class MethodAUpdaterSub extends MethodAUpdater { - - public MethodAUpdaterSub() { - super(CategorizationFragment.this); - } - - @Override - protected void onPostExecute(ArrayList result) { - super.onPostExecute(result); - - results.clear(); - results.addAll(result); - categoriesAdapter.notifyDataSetChanged(); - - latch.countDown(); - } + if (methodAUpdaterSub != null) { + methodAUpdaterSub.cancel(true); } - if (lastUpdater != null) { - lastUpdater.cancel(true); - } - - if (methodAUpdater != null) { - methodAUpdater.cancel(true); - } - - - PrefixUpdaterSub prefixUpdaterSub = new PrefixUpdaterSub(); - MethodAUpdaterSub methodAUpdaterSub = new MethodAUpdaterSub(); + prefixUpdaterSub = new PrefixUpdaterSub(); + methodAUpdaterSub = new MethodAUpdaterSub(); Utils.executeAsyncTask(prefixUpdaterSub); Utils.executeAsyncTask(methodAUpdaterSub); + Log.d(TAG, "Final results: " + results); } From 55675f442880d00ec1286935aac3988dbc10d051 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 21:22:48 +1300 Subject: [PATCH 22/39] Using instance to override instead of subclass --- .../category/CategorizationFragment.java | 87 +++++++++---------- 1 file changed, 41 insertions(+), 46 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 32924c020..b2a02c7c4 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -53,8 +53,8 @@ public class CategorizationFragment extends SherlockFragment{ protected HashMap> categoriesCache; private final Set results = new LinkedHashSet(); - PrefixUpdaterSub prefixUpdaterSub = null; - MethodAUpdaterSub methodAUpdaterSub = null; + //PrefixUpdaterSub prefixUpdaterSub = null; + //MethodAUpdaterSub methodAUpdaterSub = null; private ContentProviderClient client; @@ -330,61 +330,55 @@ public class CategorizationFragment extends SherlockFragment{ return rootView; } - final CountDownLatch latch = new CountDownLatch(1); + private void requestSearchResults() { - class PrefixUpdaterSub extends PrefixUpdater { + final CountDownLatch latch = new CountDownLatch(1); - public PrefixUpdaterSub() { - super(CategorizationFragment.this); - } - - @Override - protected ArrayList doInBackground(Void... voids) { - ArrayList result = new ArrayList(); - try { - result = super.doInBackground(); - latch.await(); + Utils.executeAsyncTask(new PrefixUpdater(this) { + @Override + protected ArrayList doInBackground(Void... voids) { + ArrayList result = new ArrayList(); + try { + result = super.doInBackground(); + latch.await(); + } + catch (InterruptedException e) { + Log.w(TAG, e); + Thread.currentThread().interrupt(); + } + return result; } - catch (InterruptedException e) { - Log.w(TAG, e); - Thread.currentThread().interrupt(); + + @Override + protected void onPostExecute(ArrayList result) { + super.onPostExecute(result); + + results.addAll(result); + Log.d(TAG, "Prefix result: " + result); + categoriesAdapter.notifyDataSetChanged(); } - return result; - } + }); - @Override - protected void onPostExecute(ArrayList result) { - super.onPostExecute(result); + Utils.executeAsyncTask(new MethodAUpdater(this) { + @Override + protected void onPostExecute(ArrayList result) { + results.clear(); + super.onPostExecute(result); - results.addAll(result); - Log.d(TAG, "Prefix result: " + result); - categoriesAdapter.notifyDataSetChanged(); - } - } + results.addAll(result); + Log.d(TAG, "Method A result: " + result); + categoriesAdapter.notifyDataSetChanged(); - - class MethodAUpdaterSub extends MethodAUpdater { - - public MethodAUpdaterSub() { - super(CategorizationFragment.this); - } - - @Override - protected void onPostExecute(ArrayList result) { - results.clear(); - super.onPostExecute(result); - - results.addAll(result); - Log.d(TAG, "Method A result: " + result); - categoriesAdapter.notifyDataSetChanged(); - - latch.countDown(); - } + latch.countDown(); + } + }); } private void startUpdatingCategoryList() { - if (prefixUpdaterSub != null) { + requestSearchResults(); + /* + if (prefixUpdater != null) { prefixUpdaterSub.cancel(true); } @@ -398,6 +392,7 @@ public class CategorizationFragment extends SherlockFragment{ Utils.executeAsyncTask(prefixUpdaterSub); Utils.executeAsyncTask(methodAUpdaterSub); Log.d(TAG, "Final results: " + results); +*/ } From 78a0d1c009ee31e566c3eaaa43f742e1fda5d16c Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 24 Jan 2016 22:39:33 +1300 Subject: [PATCH 23/39] Minor changes --- .../free/nrw/commons/category/CategorizationFragment.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index b2a02c7c4..4b241cac8 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -344,7 +344,7 @@ public class CategorizationFragment extends SherlockFragment{ } catch (InterruptedException e) { Log.w(TAG, e); - Thread.currentThread().interrupt(); + //Thread.currentThread().interrupt(); } return result; } @@ -372,14 +372,17 @@ public class CategorizationFragment extends SherlockFragment{ latch.countDown(); } }); + + } private void startUpdatingCategoryList() { requestSearchResults(); + /* if (prefixUpdater != null) { - prefixUpdaterSub.cancel(true); + prefixUpdater.cancel(true); } if (methodAUpdaterSub != null) { From 74e999015b07ba1a75cdd1a831420bae4ef8d3cc Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 25 Jan 2016 15:10:27 +1300 Subject: [PATCH 24/39] Set PrefixUpdaterSub etc to anonymous type --- .../category/CategorizationFragment.java | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 4b241cac8..28557a382 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -53,8 +53,8 @@ public class CategorizationFragment extends SherlockFragment{ protected HashMap> categoriesCache; private final Set results = new LinkedHashSet(); - //PrefixUpdaterSub prefixUpdaterSub = null; - //MethodAUpdaterSub methodAUpdaterSub = null; + PrefixUpdater prefixUpdaterSub = null; + MethodAUpdater methodAUpdaterSub = null; private ContentProviderClient client; @@ -334,7 +334,7 @@ public class CategorizationFragment extends SherlockFragment{ final CountDownLatch latch = new CountDownLatch(1); - Utils.executeAsyncTask(new PrefixUpdater(this) { + prefixUpdaterSub = new PrefixUpdater(this) { @Override protected ArrayList doInBackground(Void... voids) { ArrayList result = new ArrayList(); @@ -357,9 +357,9 @@ public class CategorizationFragment extends SherlockFragment{ Log.d(TAG, "Prefix result: " + result); categoriesAdapter.notifyDataSetChanged(); } - }); + }; - Utils.executeAsyncTask(new MethodAUpdater(this) { + methodAUpdaterSub = new MethodAUpdater(this) { @Override protected void onPostExecute(ArrayList result) { results.clear(); @@ -371,32 +371,26 @@ public class CategorizationFragment extends SherlockFragment{ latch.countDown(); } - }); + }; + Utils.executeAsyncTask(prefixUpdaterSub); + Utils.executeAsyncTask(methodAUpdaterSub); } private void startUpdatingCategoryList() { - requestSearchResults(); - - /* - if (prefixUpdater != null) { - prefixUpdater.cancel(true); + if (prefixUpdaterSub != null) { + prefixUpdaterSub.cancel(true); } if (methodAUpdaterSub != null) { methodAUpdaterSub.cancel(true); } - prefixUpdaterSub = new PrefixUpdaterSub(); - methodAUpdaterSub = new MethodAUpdaterSub(); - - Utils.executeAsyncTask(prefixUpdaterSub); - Utils.executeAsyncTask(methodAUpdaterSub); - Log.d(TAG, "Final results: " + results); -*/ + requestSearchResults(); + //Log.d(TAG, "Final results: " + results); } @Override From 8e80a71743799ec7792efa1b100b41fb30c35446 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 25 Jan 2016 15:51:53 +1300 Subject: [PATCH 25/39] Try to remove race condition (failed) --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 5 +++++ .../java/fr/free/nrw/commons/category/MethodAUpdater.java | 2 +- .../java/fr/free/nrw/commons/category/PrefixUpdater.java | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 28557a382..e7189e7a1 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -354,6 +354,11 @@ public class CategorizationFragment extends SherlockFragment{ super.onPostExecute(result); results.addAll(result); + + String filter = categoriesFilter.getText().toString(); + ArrayList resultsList = new ArrayList(results); + categoriesCache.put(filter, resultsList); + Log.d(TAG, "Prefix result: " + result); categoriesAdapter.notifyDataSetChanged(); } diff --git a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index 70ede4716..afd5b3bbb 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -79,7 +79,7 @@ public class MethodAUpdater extends AsyncTask> { categories.add(catString); } - catFragment.categoriesCache.put(filter, categories); + //catFragment.categoriesCache.put(filter, categories); return categories; } } diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index 00e17e51f..d9ceca6e8 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -74,7 +74,7 @@ public class PrefixUpdater extends AsyncTask> { categories.add(categoryNode.getDocument().getTextContent()); } - catFragment.categoriesCache.put(filter, categories); + //catFragment.categoriesCache.put(filter, categories); return categories; } } From d9c2b503a0af45c40f65d20eb69828eb1b25dd57 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 25 Jan 2016 16:17:37 +1300 Subject: [PATCH 26/39] Tidied up comments --- .../main/java/fr/free/nrw/commons/category/PrefixUpdater.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index d9ceca6e8..caf625273 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import fr.free.nrw.commons.CommonsApplication; public class PrefixUpdater extends AsyncTask> { - //TODO: Return type? private String filter; private static final String TAG = PrefixUpdater.class.getName(); @@ -38,7 +37,6 @@ public class PrefixUpdater extends AsyncTask> { protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); catFragment.setCatsAfterAsync(categories, filter); - //TODO: Return its own List } From fd6128218d979f93d79973252dfdb20cb6214ea0 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 25 Jan 2016 17:25:40 +1300 Subject: [PATCH 27/39] Changed location of call to setCatsAfterAsync --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 5 +++-- .../java/fr/free/nrw/commons/category/MethodAUpdater.java | 2 +- .../java/fr/free/nrw/commons/category/PrefixUpdater.java | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index e7189e7a1..7ca8d409b 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -354,13 +354,14 @@ public class CategorizationFragment extends SherlockFragment{ super.onPostExecute(result); results.addAll(result); + Log.d(TAG, "Prefix result: " + result); String filter = categoriesFilter.getText().toString(); ArrayList resultsList = new ArrayList(results); categoriesCache.put(filter, resultsList); - - Log.d(TAG, "Prefix result: " + result); + categoriesAdapter.notifyDataSetChanged(); + setCatsAfterAsync(resultsList, filter); } }; diff --git a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index afd5b3bbb..349d3a7fb 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -37,7 +37,7 @@ public class MethodAUpdater extends AsyncTask> { @Override protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); - catFragment.setCatsAfterAsync(categories, filter); + //catFragment.setCatsAfterAsync(categories, filter); } @Override diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index caf625273..6910f8d10 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -36,7 +36,7 @@ public class PrefixUpdater extends AsyncTask> { @Override protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); - catFragment.setCatsAfterAsync(categories, filter); + //catFragment.setCatsAfterAsync(categories, filter); } From 61d057022a348b235d31d18451431dbbbbd3259b Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 25 Jan 2016 17:33:23 +1300 Subject: [PATCH 28/39] Minor changes --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 7ca8d409b..f4dcb8a50 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -359,7 +359,8 @@ public class CategorizationFragment extends SherlockFragment{ String filter = categoriesFilter.getText().toString(); ArrayList resultsList = new ArrayList(results); categoriesCache.put(filter, resultsList); - + Log.d(TAG, "Final results List: " + resultsList); + categoriesAdapter.notifyDataSetChanged(); setCatsAfterAsync(resultsList, filter); } From 3772f4aa013470b0c7aff3d3fd077a84e685d3d2 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 25 Jan 2016 17:42:40 +1300 Subject: [PATCH 29/39] Minor formatting changes --- .../free/nrw/commons/category/CategorizationFragment.java | 6 +----- .../java/fr/free/nrw/commons/category/PrefixUpdater.java | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index f4dcb8a50..fddc1135e 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -379,10 +379,8 @@ public class CategorizationFragment extends SherlockFragment{ latch.countDown(); } }; - Utils.executeAsyncTask(prefixUpdaterSub); Utils.executeAsyncTask(methodAUpdaterSub); - } private void startUpdatingCategoryList() { @@ -394,10 +392,8 @@ public class CategorizationFragment extends SherlockFragment{ if (methodAUpdaterSub != null) { methodAUpdaterSub.cancel(true); } - + requestSearchResults(); - - //Log.d(TAG, "Final results: " + results); } @Override diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index 6910f8d10..ddef77b5a 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -37,7 +37,6 @@ public class PrefixUpdater extends AsyncTask> { protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); //catFragment.setCatsAfterAsync(categories, filter); - } @Override From f31fb5c950b127729edb2685c0843b22a679efc7 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 15:30:29 +1300 Subject: [PATCH 30/39] Fuzzy search works --- .../java/fr/free/nrw/commons/category/MethodAUpdater.java | 4 +--- .../main/java/fr/free/nrw/commons/category/PrefixUpdater.java | 2 -- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index 349d3a7fb..edfdd4e93 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -37,7 +37,6 @@ public class MethodAUpdater extends AsyncTask> { @Override protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); - //catFragment.setCatsAfterAsync(categories, filter); } @Override @@ -78,8 +77,7 @@ public class MethodAUpdater extends AsyncTask> { String catString = cat.replace("Category:", ""); categories.add(catString); } - - //catFragment.categoriesCache.put(filter, categories); + return categories; } } diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index ddef77b5a..f8ad2e38d 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -36,7 +36,6 @@ public class PrefixUpdater extends AsyncTask> { @Override protected void onPostExecute(ArrayList categories) { super.onPostExecute(categories); - //catFragment.setCatsAfterAsync(categories, filter); } @Override @@ -71,7 +70,6 @@ public class PrefixUpdater extends AsyncTask> { categories.add(categoryNode.getDocument().getTextContent()); } - //catFragment.categoriesCache.put(filter, categories); return categories; } } From 2b2c7eed69e35db55666eca0e6b2205760f24a76 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 15:36:21 +1300 Subject: [PATCH 31/39] Removed unnecessary override --- .../java/fr/free/nrw/commons/category/MethodAUpdater.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index edfdd4e93..5c7ef5735 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -34,11 +34,6 @@ public class MethodAUpdater extends AsyncTask> { catFragment.categoriesSkip.setVisibility(View.GONE); } - @Override - protected void onPostExecute(ArrayList categories) { - super.onPostExecute(categories); - } - @Override protected ArrayList doInBackground(Void... voids) { //If user hasn't typed anything in yet, get GPS and recent items @@ -77,7 +72,7 @@ public class MethodAUpdater extends AsyncTask> { String catString = cat.replace("Category:", ""); categories.add(catString); } - + return categories; } } From f54b9150465ee439c738f4ac441b8531a8425856 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 15:36:38 +1300 Subject: [PATCH 32/39] Removed unnecessary override 2 --- .../java/fr/free/nrw/commons/category/PrefixUpdater.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index f8ad2e38d..ff469d262 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -33,11 +33,6 @@ public class PrefixUpdater extends AsyncTask> { catFragment.categoriesSkip.setVisibility(View.GONE); } - @Override - protected void onPostExecute(ArrayList categories) { - super.onPostExecute(categories); - } - @Override protected ArrayList doInBackground(Void... voids) { //If user hasn't typed anything in yet, get GPS and recent items From f38b32347b65ddee1321a7aeafe8348ff0ac1175 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 15:39:30 +1300 Subject: [PATCH 33/39] Made catFragment private --- .../main/java/fr/free/nrw/commons/category/PrefixUpdater.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index ff469d262..589075837 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -17,7 +17,7 @@ public class PrefixUpdater extends AsyncTask> { private String filter; private static final String TAG = PrefixUpdater.class.getName(); - CategorizationFragment catFragment; + private CategorizationFragment catFragment; public PrefixUpdater(CategorizationFragment catFragment) { this.catFragment = catFragment; From 5e500fa65362614614e2bcb4b862be60667dc37b Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 16:46:02 +1300 Subject: [PATCH 34/39] if categories.isEmpty() --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index fddc1135e..8f83a49eb 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -151,7 +151,7 @@ public class CategorizationFragment extends SherlockFragment{ categoriesAdapter.notifyDataSetInvalidated(); categoriesSearchInProgress.setVisibility(View.GONE); - if (categories.size() == 0) { + if (categories.isEmpty()) { if(TextUtils.isEmpty(filter)) { // If we found no recent cats, show the skip message! categoriesSkip.setVisibility(View.VISIBLE); From 4f654f3b728f932cb4076b1c94f969e473459a44 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 16:53:31 +1300 Subject: [PATCH 35/39] Added check that Fragment is not null --- .../category/CategorizationFragment.java | 49 ++++++++++--------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 8f83a49eb..f643595a0 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -133,34 +133,39 @@ public class CategorizationFragment extends SherlockFragment{ protected void setCatsAfterAsync(ArrayList categories, String filter) { - ArrayList items = new ArrayList(); - HashSet existingKeys = new HashSet(); - for(CategoryItem item : categoriesAdapter.getItems()) { - if(item.selected) { - items.add(item); - existingKeys.add(item.name); + if (getActivity() != null) { + ArrayList items = new ArrayList(); + HashSet existingKeys = new HashSet(); + for (CategoryItem item : categoriesAdapter.getItems()) { + if (item.selected) { + items.add(item); + existingKeys.add(item.name); + } } - } - for(String category : categories) { - if(!existingKeys.contains(category)) { - items.add(new CategoryItem(category, false)); + for (String category : categories) { + if (!existingKeys.contains(category)) { + items.add(new CategoryItem(category, false)); + } } - } - categoriesAdapter.setItems(items); - categoriesAdapter.notifyDataSetInvalidated(); - categoriesSearchInProgress.setVisibility(View.GONE); + categoriesAdapter.setItems(items); + categoriesAdapter.notifyDataSetInvalidated(); + categoriesSearchInProgress.setVisibility(View.GONE); - if (categories.isEmpty()) { - if(TextUtils.isEmpty(filter)) { - // If we found no recent cats, show the skip message! - categoriesSkip.setVisibility(View.VISIBLE); + if (categories.isEmpty()) { + if (TextUtils.isEmpty(filter)) { + // If we found no recent cats, show the skip message! + categoriesSkip.setVisibility(View.VISIBLE); + } else { + categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); + categoriesNotFoundView.setVisibility(View.VISIBLE); + } } else { - categoriesNotFoundView.setText(getString(R.string.categories_not_found, filter)); - categoriesNotFoundView.setVisibility(View.VISIBLE); + categoriesList.smoothScrollToPosition(existingKeys.size()); } - } else { - categoriesList.smoothScrollToPosition(existingKeys.size()); + } + else { + Log.e(TAG, "Error: Fragment is null"); } } From a21cd1dd860d222b6d2bd052fa71ad7e2bf318e7 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 17:15:15 +1300 Subject: [PATCH 36/39] Minor fixes --- .../free/nrw/commons/category/CategorizationFragment.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index f643595a0..cef50b009 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -52,13 +52,14 @@ public class CategorizationFragment extends SherlockFragment{ protected HashMap> categoriesCache; + // LHS guarantees ordered insertions, allowing for prioritized method A results private final Set results = new LinkedHashSet(); - PrefixUpdater prefixUpdaterSub = null; - MethodAUpdater methodAUpdaterSub = null; + PrefixUpdater prefixUpdaterSub; + MethodAUpdater methodAUpdaterSub; private ContentProviderClient client; - protected final int SEARCH_CATS_LIMIT = 25; + protected final static int SEARCH_CATS_LIMIT = 25; private static final String TAG = CategorizationFragment.class.getName(); public static class CategoryItem implements Parcelable { From e7888c807a0391a0a5c09c08a74b3e0a10551032 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 26 Jan 2016 17:19:59 +1300 Subject: [PATCH 37/39] Minor fix --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index cef50b009..a11dc369a 100644 --- a/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/commons/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -114,7 +114,7 @@ public class CategorizationFragment extends SherlockFragment{ } cursor.close(); - if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true){ + if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true) { //Log.d(TAG, "GPS cats found in CategorizationFragment.java" + MwVolleyApi.getGpsCat().toString()); List gpsItems = new ArrayList(MwVolleyApi.getGpsCat()); //Log.d(TAG, "GPS items: " + gpsItems.toString()); From bc1eb74ca445ba7a5530bf37d6d82599673b0dab Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 27 Jan 2016 12:09:13 +1300 Subject: [PATCH 38/39] Deleted AsyncResponse --- .../main/java/fr/free/nrw/commons/category/AsyncResponse.java | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java diff --git a/commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java b/commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java deleted file mode 100644 index 229ba09ab..000000000 --- a/commons/src/main/java/fr/free/nrw/commons/category/AsyncResponse.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.free.nrw.commons.category; - -public interface AsyncResponse { -} From 324a851b95d5f1add40dd458b24b84e97ec0dd28 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 27 Jan 2016 16:43:23 +1300 Subject: [PATCH 39/39] Version and changelog --- CHANGELOG.md | 3 +++ commons/AndroidManifest.xml | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e10f566d..cf52eba46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Wikimedia Commons for Android +## v1.8 +- New feature: Improved category search function (not limited to prefix search now) + ## v1.7 - Fixed bug with uploading images in Marshmallow - Fixed links in About page diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml index 7fe5027bc..b33dfca95 100644 --- a/commons/AndroidManifest.xml +++ b/commons/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="24" + android:versionName="1.8" >