From 5f2a5358c26f5585d514871ed9260d665b7f11eb Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jan 2016 16:25:52 +1300 Subject: [PATCH 01/69] Release v1.7 --- CHANGELOG.md | 4 ++++ commons/AndroidManifest.xml | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ebe616ac..8e10f566d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Wikimedia Commons for Android +## v1.7 +- Fixed bug with uploading images in Marshmallow +- Fixed links in About page + ## v1.6 - Bugfix for invalid images diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml index 9ee639ad6..7fe5027bc 100644 --- a/commons/AndroidManifest.xml +++ b/commons/AndroidManifest.xml @@ -1,11 +1,11 @@ + android:versionCode="23" + android:versionName="1.7" > + android:targetSdkVersion="22" /> From 8c347ac370645b66e98840f018bc63b155403702 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jan 2016 15:36:21 +1300 Subject: [PATCH 02/69] 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 03/69] 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 04/69] 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 05/69] 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 06/69] 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 07/69] 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 08/69] 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 09/69] 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 10/69] 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 11/69] 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 12/69] 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 13/69] 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 14/69] 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 15/69] 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 16/69] 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 17/69] 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 18/69] 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 19/69] 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 20/69] 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 21/69] 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 22/69] 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 23/69] 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 24/69] 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 25/69] 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 26/69] 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 27/69] 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 28/69] 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 29/69] 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 30/69] 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 31/69] 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 32/69] 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 33/69] 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 34/69] 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 35/69] 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 36/69] 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 37/69] 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 38/69] 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 39/69] 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 40/69] 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" > Date: Thu, 28 Jan 2016 13:22:09 +1300 Subject: [PATCH 41/69] Updated credits --- CREDITS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CREDITS b/CREDITS index f769cfb49..452c1e444 100644 --- a/CREDITS +++ b/CREDITS @@ -9,3 +9,6 @@ their contribution to the product. * Siebrand Mazeland * Translatewiki.net Translators https://translatewiki.net/wiki/Special:ListUsers/translator * Yuvi Panda +* Nicolas Raoul +* Stephen Niedzielski +* Josephine Lim From 8d8002fcf703766f7c9c45ddab64a9e817c2faab Mon Sep 17 00:00:00 2001 From: misaochan Date: Sat, 30 Jan 2016 16:59:55 +1300 Subject: [PATCH 42/69] Fix repeat categories bug --- .../free/nrw/commons/category/CategorizationFragment.java | 8 +++++--- 1 file changed, 5 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 a11dc369a..fa856f7a9 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 @@ -98,7 +98,7 @@ public class CategorizationFragment extends SherlockFragment{ protected ArrayList recentCatQuery() { ArrayList items = new ArrayList(); - ArrayList mergedItems= new ArrayList(); + LinkedHashSet mergedItems = new LinkedHashSet(); try { Cursor cursor = client.query( @@ -127,8 +127,10 @@ public class CategorizationFragment extends SherlockFragment{ catch (RemoteException e) { throw new RuntimeException(e); } - //Log.d(TAG, "Merged items: " + mergedItems.toString()); - return mergedItems; + + //Needs to be an ArrayList and not a List unless we want to modify a big portion of preexisting code + ArrayList mergedItemsList = new ArrayList(mergedItems); + return mergedItemsList; } From 66aca81b593d06182377aa322c84c0b2cb84f9a7 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sat, 30 Jan 2016 18:24:15 +1300 Subject: [PATCH 43/69] Changed LHS to Set --- .../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 fa856f7a9..3b412b46b 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 @@ -98,7 +98,7 @@ public class CategorizationFragment extends SherlockFragment{ protected ArrayList recentCatQuery() { ArrayList items = new ArrayList(); - LinkedHashSet mergedItems = new LinkedHashSet(); + Set mergedItems = new LinkedHashSet(); try { Cursor cursor = client.query( From f8b6575ef4e12f7a2f4176333369d14df0b5a9fc Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 3 Feb 2016 15:49:34 +1300 Subject: [PATCH 44/69] Gets current coords of image --- commons/AndroidManifest.xml | 1 + .../free/nrw/commons/upload/GPSExtractor.java | 20 ++++++++++++++++--- .../nrw/commons/upload/ShareActivity.java | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml index b33dfca95..3806d502e 100644 --- a/commons/AndroidManifest.xml +++ b/commons/AndroidManifest.xml @@ -17,6 +17,7 @@ + Date: Wed, 3 Feb 2016 15:54:30 +1300 Subject: [PATCH 45/69] Check if img coords existsd --- .../src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 992a6e78c..df42f46ee 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -15,6 +15,7 @@ public class GPSExtractor { private double decLatitude, decLongitude; Context context; private static final String TAG = GPSExtractor.class.getName(); + public boolean imageCoordsExists; public GPSExtractor(String filePath, Context context){ this.filePath = filePath; @@ -39,6 +40,7 @@ public class GPSExtractor { } if (exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE) == null) { + imageCoordsExists = false; Log.d(TAG, "Picture has no GPS info"); LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); @@ -51,6 +53,7 @@ public class GPSExtractor { return currentCoords; } else { + imageCoordsExists = true; latitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); latitude_ref = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); longitude = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); From e05f78ce8561aa8dd5b8002451a813cdbab799f6 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 3 Feb 2016 16:01:10 +1300 Subject: [PATCH 46/69] Handle caching --- .../fr/free/nrw/commons/upload/ShareActivity.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index d82c1a109..7bae66c1f 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -205,11 +205,14 @@ public class ShareActivity if (decimalCoords != null) { - double decLongitude = imageObj.getDecLongitude(); - double decLatitude = imageObj.getDecLatitude(); - Log.d(TAG, "Decimal coords of image: " + decimalCoords); - app.cacheData.setQtPoint(decLongitude, decLatitude); + + //Only set cache for this point if image has coords + if (imageObj.imageCoordsExists) { + double decLongitude = imageObj.getDecLongitude(); + double decLatitude = imageObj.getDecLatitude(); + app.cacheData.setQtPoint(decLongitude, decLatitude); + } MwVolleyApi apiCall = new MwVolleyApi(this); From f0b9d35bfd9c346f64f253551264193749e9b9eb Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 3 Feb 2016 16:05:12 +1300 Subject: [PATCH 47/69] Minor formatting/comments --- .../fr/free/nrw/commons/upload/GPSExtractor.java | 12 ++++-------- .../fr/free/nrw/commons/upload/ShareActivity.java | 3 ++- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index df42f46ee..f841d1d06 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -13,7 +13,7 @@ public class GPSExtractor { private String filePath; private double decLatitude, decLongitude; - Context context; + private Context context; private static final String TAG = GPSExtractor.class.getName(); public boolean imageCoordsExists; @@ -54,17 +54,17 @@ public class GPSExtractor { } else { imageCoordsExists = true; + Log.d(TAG, "Picture has GPS info"); + latitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); latitude_ref = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); longitude = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); longitude_ref = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); - - Log.d("Image", "Latitude: " + latitude + " " + latitude_ref); Log.d("Image", "Longitude: " + longitude + " " + longitude_ref); + decimalCoords = getDecimalCoords(latitude, latitude_ref, longitude, longitude_ref); return decimalCoords; - } } @@ -79,8 +79,6 @@ public class GPSExtractor { //Converts format of coords into decimal coords as required by MediaWiki API private String getDecimalCoords(String latitude, String latitude_ref, String longitude, String longitude_ref) { - - if(latitude_ref.equals("N")){ decLatitude = convertToDegree(latitude); } @@ -100,7 +98,6 @@ public class GPSExtractor { return decimalCoords; } - private double convertToDegree(String stringDMS){ double result; String[] DMS = stringDMS.split(",", 3); @@ -123,5 +120,4 @@ public class GPSExtractor { result = degrees + (minutes/60) + (seconds/3600); return result; } - } diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 7bae66c1f..f07dce191 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -201,8 +201,9 @@ public class ShareActivity //extract the coordinates of image in decimal degrees Log.d(TAG, "Calling GPSExtractor"); GPSExtractor imageObj = new GPSExtractor(filePath, this); - String decimalCoords = imageObj.getCoords(); + //Gets image coords if exist, otherwise gets last known coords + String decimalCoords = imageObj.getCoords(); if (decimalCoords != null) { Log.d(TAG, "Decimal coords of image: " + decimalCoords); From 0c7c2d745e70bf6b100b6438c9303ce2b6f2215f Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 4 Feb 2016 17:52:26 +1300 Subject: [PATCH 48/69] Added LocationListener --- .../free/nrw/commons/upload/GPSExtractor.java | 57 ++++++++++++++++--- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index f841d1d06..ba04b2222 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -1,10 +1,16 @@ package fr.free.nrw.commons.upload; import android.content.Context; +import android.content.Intent; +import android.location.Criteria; import android.location.Location; +import android.location.LocationListener; import android.location.LocationManager; import android.media.ExifInterface; +import android.os.Bundle; +import android.provider.Settings; import android.util.Log; +import android.widget.Toast; import java.io.IOException; @@ -13,9 +19,11 @@ public class GPSExtractor { private String filePath; private double decLatitude, decLongitude; + private double currentLatitude, currentLongitude; private Context context; private static final String TAG = GPSExtractor.class.getName(); public boolean imageCoordsExists; + private MyLocationListener myLocationListener; public GPSExtractor(String filePath, Context context){ this.filePath = filePath; @@ -43,16 +51,26 @@ public class GPSExtractor { imageCoordsExists = false; Log.d(TAG, "Picture has no GPS info"); - LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); - Location getLastLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); - double currentLongitude = getLastLocation.getLongitude(); - double currentLatitude = getLastLocation.getLatitude(); - Log.d(TAG, "Current location values: Lat = " + currentLatitude + " Long = " + currentLongitude); + LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + Criteria criteria = new Criteria(); + String provider = locationManager.getBestProvider(criteria, true); + myLocationListener = new MyLocationListener(); + + locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); + Location location = locationManager.getLastKnownLocation(provider); + if (location != null) { + myLocationListener.onLocationChanged(location); + } + else { + //calling method is equipped to deal with null return value + return null; + } + Log.d(TAG, "Current location values: Lat = " + currentLatitude + " Long = " + currentLongitude); String currentCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); return currentCoords; - } - else { + + } else { imageCoordsExists = true; Log.d(TAG, "Picture has GPS info"); @@ -68,6 +86,31 @@ public class GPSExtractor { } } + + private class MyLocationListener implements LocationListener { + + @Override + public void onLocationChanged(Location location) { + currentLatitude = location.getLatitude(); + currentLongitude = location.getLongitude(); + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + Log.d(TAG, provider + "'s status changed to " + status); + } + + @Override + public void onProviderEnabled(String provider) { + Log.d(TAG, "Provider " + provider + " enabled"); + } + + @Override + public void onProviderDisabled(String provider) { + Log.d(TAG, "Provider " + provider + " disabled"); + } + } + public double getDecLatitude() { return decLatitude; } From 783f218706c1c6236746985a32830b9174dfdc1a Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 5 Feb 2016 15:50:59 +1300 Subject: [PATCH 49/69] Added CheckBoxPreference in xml --- commons/res/xml/preferences.xml | 5 +++++ .../main/java/fr/free/nrw/commons/upload/GPSExtractor.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/commons/res/xml/preferences.xml b/commons/res/xml/preferences.xml index 802e60b6d..88c2e5b9b 100644 --- a/commons/res/xml/preferences.xml +++ b/commons/res/xml/preferences.xml @@ -7,6 +7,11 @@ android:title="@string/preference_license" android:defaultValue="CC BY-SA" /> + diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index ba04b2222..91c023f82 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -54,8 +54,8 @@ public class GPSExtractor { LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); String provider = locationManager.getBestProvider(criteria, true); + myLocationListener = new MyLocationListener(); - locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); Location location = locationManager.getLastKnownLocation(provider); From f7c5796d70bfc9fda57fedae19c545056fa48543 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 5 Feb 2016 16:34:00 +1300 Subject: [PATCH 50/69] Minor changes --- commons/res/xml/preferences.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons/res/xml/preferences.xml b/commons/res/xml/preferences.xml index 88c2e5b9b..23fc30f5d 100644 --- a/commons/res/xml/preferences.xml +++ b/commons/res/xml/preferences.xml @@ -10,7 +10,7 @@ From 5492aa7551f473363720442d77b6376fc91794c4 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 5 Feb 2016 18:00:10 +1300 Subject: [PATCH 51/69] Implement check for gpsPref --- .../fr/free/nrw/commons/upload/GPSExtractor.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 91c023f82..6528cadb7 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -2,18 +2,22 @@ package fr.free.nrw.commons.upload; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.media.ExifInterface; import android.os.Bundle; +import android.preference.PreferenceManager; import android.provider.Settings; import android.util.Log; import android.widget.Toast; import java.io.IOException; +import fr.free.nrw.commons.SettingsActivity; + public class GPSExtractor { @@ -30,6 +34,13 @@ public class GPSExtractor { this.context = context; } + private boolean gpsPreferenceEnabled() { + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); + boolean gpsPref = sharedPref.getBoolean("allowGps", false); + Log.d(TAG, "Gps pref set to: " + gpsPref); + return gpsPref; + } + //Extract GPS coords of image public String getCoords() { @@ -51,6 +62,9 @@ public class GPSExtractor { imageCoordsExists = false; Log.d(TAG, "Picture has no GPS info"); + //Check what user's preference is for automatic location detection + boolean gpsPrefEnabled = gpsPreferenceEnabled(); + LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); String provider = locationManager.getBestProvider(criteria, true); From 11e291cb41fcc228e6014e55daa210533ca26d72 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 5 Feb 2016 18:31:46 +1300 Subject: [PATCH 52/69] If else block for gps prefs --- .../free/nrw/commons/upload/GPSExtractor.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 6528cadb7..16da36b6f 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -65,24 +65,29 @@ public class GPSExtractor { //Check what user's preference is for automatic location detection boolean gpsPrefEnabled = gpsPreferenceEnabled(); - LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - Criteria criteria = new Criteria(); - String provider = locationManager.getBestProvider(criteria, true); + if (gpsPrefEnabled) { + //If pref enabled, set up LocationListener to get current location + LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + Criteria criteria = new Criteria(); + String provider = locationManager.getBestProvider(criteria, true); - myLocationListener = new MyLocationListener(); - locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); - Location location = locationManager.getLastKnownLocation(provider); + myLocationListener = new MyLocationListener(); + locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); + Location location = locationManager.getLastKnownLocation(provider); - if (location != null) { - myLocationListener.onLocationChanged(location); - } - else { - //calling method is equipped to deal with null return value + if (location != null) { + myLocationListener.onLocationChanged(location); + } else { + //calling method is equipped to deal with null return value + return null; + } + Log.d(TAG, "Current location values: Lat = " + currentLatitude + " Long = " + currentLongitude); + String currentCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); + return currentCoords; + } else { + //Otherwise treat as if no coords found return null; } - Log.d(TAG, "Current location values: Lat = " + currentLatitude + " Long = " + currentLongitude); - String currentCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); - return currentCoords; } else { imageCoordsExists = true; From 816acbe04a5efe2f90359804d7841a83630b36ec Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 5 Feb 2016 18:33:37 +1300 Subject: [PATCH 53/69] Minor formatting changes --- .../java/fr/free/nrw/commons/upload/GPSExtractor.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 16da36b6f..2dcc076df 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons.upload; import android.content.Context; -import android.content.Intent; import android.content.SharedPreferences; import android.location.Criteria; import android.location.Location; @@ -10,15 +9,9 @@ import android.location.LocationManager; import android.media.ExifInterface; import android.os.Bundle; import android.preference.PreferenceManager; -import android.provider.Settings; import android.util.Log; -import android.widget.Toast; - import java.io.IOException; -import fr.free.nrw.commons.SettingsActivity; - - public class GPSExtractor { private String filePath; @@ -88,7 +81,6 @@ public class GPSExtractor { //Otherwise treat as if no coords found return null; } - } else { imageCoordsExists = true; Log.d(TAG, "Picture has GPS info"); @@ -105,7 +97,6 @@ public class GPSExtractor { } } - private class MyLocationListener implements LocationListener { @Override From 6e0e58009a835f64c55145a876a1bae0ffe97a98 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 5 Feb 2016 18:34:29 +1300 Subject: [PATCH 54/69] Minor formatting changes 2 --- .../src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java | 1 + 1 file changed, 1 insertion(+) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 2dcc076df..866ce7f74 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -81,6 +81,7 @@ public class GPSExtractor { //Otherwise treat as if no coords found return null; } + } else { imageCoordsExists = true; Log.d(TAG, "Picture has GPS info"); From e0a3bf07074cdd8f88e60a59e6014bd6de704374 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 5 Feb 2016 18:48:40 +1300 Subject: [PATCH 55/69] Minor formatting changes 3 --- .../java/fr/free/nrw/commons/upload/GPSExtractor.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 866ce7f74..249cf5dca 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -133,17 +133,15 @@ public class GPSExtractor { //Converts format of coords into decimal coords as required by MediaWiki API private String getDecimalCoords(String latitude, String latitude_ref, String longitude, String longitude_ref) { - if(latitude_ref.equals("N")){ + if (latitude_ref.equals("N")) { decLatitude = convertToDegree(latitude); - } - else{ + } else { decLatitude = 0 - convertToDegree(latitude); } - if(longitude_ref.equals("E")){ + if (longitude_ref.equals("E")) { decLongitude = convertToDegree(longitude); - } - else{ + } else { decLongitude = 0 - convertToDegree(longitude); } From 5aa891365bc25825574f6980e3519c7dcac12210 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 7 Feb 2016 15:14:45 +1300 Subject: [PATCH 56/69] Change to string resources --- commons/res/values/strings.xml | 3 +++ commons/res/xml/preferences.xml | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/commons/res/values/strings.xml b/commons/res/values/strings.xml index 37f814923..f076f3604 100644 --- a/commons/res/values/strings.xml +++ b/commons/res/values/strings.xml @@ -93,6 +93,9 @@ Download License + Automatically get current location + Retrieve current location to offer category suggestions if image is not geotagged + CC\u00A0Attribution-ShareAlike\u00A03.0 CC\u00A0Attribution\u00A03.0 diff --git a/commons/res/xml/preferences.xml b/commons/res/xml/preferences.xml index 23fc30f5d..e7e495cf9 100644 --- a/commons/res/xml/preferences.xml +++ b/commons/res/xml/preferences.xml @@ -8,9 +8,9 @@ android:defaultValue="CC BY-SA" /> From 565e60f666f9f0edf0cd8bd181087b3188ec7261 Mon Sep 17 00:00:00 2001 From: misaochan Date: Sun, 7 Feb 2016 15:16:12 +1300 Subject: [PATCH 57/69] Minor formatting - constant at top of class --- .../src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 249cf5dca..7c3bf1da4 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -14,11 +14,12 @@ import java.io.IOException; public class GPSExtractor { + private static final String TAG = GPSExtractor.class.getName(); + private String filePath; private double decLatitude, decLongitude; private double currentLatitude, currentLongitude; private Context context; - private static final String TAG = GPSExtractor.class.getName(); public boolean imageCoordsExists; private MyLocationListener myLocationListener; From e5b746e411e80ffe147a54752675bfe98265603b Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 8 Feb 2016 15:32:06 +1300 Subject: [PATCH 58/69] New registerLocationUpdates() function --- .../free/nrw/commons/upload/GPSExtractor.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 7c3bf1da4..3db6460ec 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -22,6 +22,9 @@ public class GPSExtractor { private Context context; public boolean imageCoordsExists; private MyLocationListener myLocationListener; + private LocationManager locationManager; + private String provider; + private Criteria criteria; public GPSExtractor(String filePath, Context context){ this.filePath = filePath; @@ -35,6 +38,15 @@ public class GPSExtractor { return gpsPref; } + private void registerLocationManager() { + locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + criteria = new Criteria(); + provider = locationManager.getBestProvider(criteria, true); + myLocationListener = new MyLocationListener(); + + locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); + } + //Extract GPS coords of image public String getCoords() { @@ -60,13 +72,7 @@ public class GPSExtractor { boolean gpsPrefEnabled = gpsPreferenceEnabled(); if (gpsPrefEnabled) { - //If pref enabled, set up LocationListener to get current location - LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - Criteria criteria = new Criteria(); - String provider = locationManager.getBestProvider(criteria, true); - - myLocationListener = new MyLocationListener(); - locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); + //If pref enabled, get current location Location location = locationManager.getLastKnownLocation(provider); if (location != null) { From 0d188d630c256c670636f2bfe465655f9ac1df4b Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 8 Feb 2016 15:39:42 +1300 Subject: [PATCH 59/69] onResume() method for calling registerLocationManager --- .../free/nrw/commons/upload/GPSExtractor.java | 4 ++-- .../nrw/commons/upload/ShareActivity.java | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 3db6460ec..ef97963eb 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -38,12 +38,12 @@ public class GPSExtractor { return gpsPref; } - private void registerLocationManager() { + protected void registerLocationManager() { locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); criteria = new Criteria(); provider = locationManager.getBestProvider(criteria, true); myLocationListener = new MyLocationListener(); - + locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); } diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index f07dce191..27f4ec091 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -34,6 +34,8 @@ public class ShareActivity implements SingleUploadFragment.OnUploadActionInitiated, CategorizationFragment.OnCategoriesSaveHandler { + private static final String TAG = ShareActivity.class.getName(); + private SingleUploadFragment shareView; private CategorizationFragment categorizationFragment; @@ -44,17 +46,14 @@ public class ShareActivity private String mediaUriString; private Uri mediaUri; - private Contribution contribution; - private ImageView backgroundImageView; - private UploadController uploadController; private CommonsApplication cacheObj; private boolean cacheFound; - private static final String TAG = ShareActivity.class.getName(); + private GPSExtractor imageObj; public ShareActivity() { super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); @@ -197,11 +196,10 @@ public class ShareActivity String filePath = FileUtils.getPath(this, mediaUri); Log.d(TAG, "Filepath: " + filePath); - if (filePath != null && !filePath.equals("")) { - //extract the coordinates of image in decimal degrees - Log.d(TAG, "Calling GPSExtractor"); - GPSExtractor imageObj = new GPSExtractor(filePath, this); + Log.d(TAG, "Calling GPSExtractor"); + imageObj = new GPSExtractor(filePath, this); + if (filePath != null && !filePath.equals("")) { //Gets image coords if exist, otherwise gets last known coords String decimalCoords = imageObj.getCoords(); @@ -240,6 +238,11 @@ public class ShareActivity requestAuthToken(); } + @Override + public void onResume() { + super.onResume(); + imageObj.registerLocationManager(); + } @Override protected void onDestroy() { From 2742184489fc6bce1f7b320dc389853e49ed03c6 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 8 Feb 2016 15:58:58 +1300 Subject: [PATCH 60/69] Added unregister in onPause --- .../main/java/fr/free/nrw/commons/upload/GPSExtractor.java | 7 +++++-- .../java/fr/free/nrw/commons/upload/ShareActivity.java | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index ef97963eb..21419a020 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -39,14 +39,17 @@ public class GPSExtractor { } protected void registerLocationManager() { - locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); criteria = new Criteria(); provider = locationManager.getBestProvider(criteria, true); myLocationListener = new MyLocationListener(); - + locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); } + protected void unregisterLocationManager() { + locationManager.removeUpdates(myLocationListener); + } + //Extract GPS coords of image public String getCoords() { diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 27f4ec091..82c5889eb 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -244,6 +244,12 @@ public class ShareActivity imageObj.registerLocationManager(); } + @Override + public void onPause() { + super.onPause(); + imageObj.unregisterLocationManager(); + } + @Override protected void onDestroy() { super.onDestroy(); From 1ecaafa3dea7112928de367cbcecc2cf3687772a Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 8 Feb 2016 16:08:42 +1300 Subject: [PATCH 61/69] Minor change --- .../src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 21419a020..44813e82a 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -39,10 +39,11 @@ public class GPSExtractor { } protected void registerLocationManager() { + locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); criteria = new Criteria(); provider = locationManager.getBestProvider(criteria, true); myLocationListener = new MyLocationListener(); - locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); } From 29269f10a4d7ab47ae9de6b19d9cb33a9fbacdeb Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 8 Feb 2016 16:10:00 +1300 Subject: [PATCH 62/69] Moved bulk of code to onResume() Otherwise getCoords method is called in onCreate before locationlistener can be registered in onResume --- .../nrw/commons/upload/ShareActivity.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 82c5889eb..8c5e205db 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -189,6 +189,17 @@ public class ShareActivity mediaUriString = mediaUri.toString(); ImageLoader.getInstance().displayImage(mediaUriString, backgroundImageView); + + if(savedInstanceState != null) { + contribution = savedInstanceState.getParcelable("contribution"); + } + requestAuthToken(); + } + + @Override + public void onResume() { + super.onResume(); + Log.d(TAG, "Uri: " + mediaUriString); Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); @@ -198,6 +209,7 @@ public class ShareActivity Log.d(TAG, "Calling GPSExtractor"); imageObj = new GPSExtractor(filePath, this); + imageObj.registerLocationManager(); if (filePath != null && !filePath.equals("")) { //Gets image coords if exist, otherwise gets last known coords @@ -232,16 +244,6 @@ public class ShareActivity } } - if(savedInstanceState != null) { - contribution = savedInstanceState.getParcelable("contribution"); - } - requestAuthToken(); - } - - @Override - public void onResume() { - super.onResume(); - imageObj.registerLocationManager(); } @Override From 47a9b3a9654ba91b27eb3900da7c8976de773f70 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 8 Feb 2016 16:17:03 +1300 Subject: [PATCH 63/69] Minor formatting --- .../src/main/java/fr/free/nrw/commons/upload/ShareActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 8c5e205db..a9e710c14 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -189,7 +189,6 @@ public class ShareActivity mediaUriString = mediaUri.toString(); ImageLoader.getInstance().displayImage(mediaUriString, backgroundImageView); - if(savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); } @@ -243,7 +242,6 @@ public class ShareActivity } } } - } @Override From fa490931ac043ed7d647781648befe4c24afca97 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 9 Feb 2016 17:28:17 +1300 Subject: [PATCH 64/69] Implement null check for pages array --- .../fr/free/nrw/commons/upload/MwVolleyApi.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java b/commons/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java index fe55f3f7f..895fb9837 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java @@ -196,13 +196,16 @@ public class MwVolleyApi { @Override public String toString() { StringBuilder builder = new StringBuilder("pages=" + "\n"); - for (Page page : pages) { - builder.append(page.toString()); - builder.append("\n"); + if (pages != null) { + for (Page page : pages) { + builder.append(page.toString()); + builder.append("\n"); + } + builder.replace(builder.length() - 1, builder.length(), ""); + return builder.toString(); + } else { + return "No pages found"; } - builder.replace(builder.length() - 1, builder.length(), ""); - - return builder.toString(); } } From 3aad03b9ec3a00d4515b723e19f037765ae3b156 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 12 Feb 2016 16:23:18 +1300 Subject: [PATCH 65/69] Moved getLastKnownLocation and onLocationChanged --- .../java/fr/free/nrw/commons/upload/GPSExtractor.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 44813e82a..1b88f3ea1 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -45,6 +45,8 @@ public class GPSExtractor { myLocationListener = new MyLocationListener(); locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); + Location location = locationManager.getLastKnownLocation(provider); + myLocationListener.onLocationChanged(location); } protected void unregisterLocationManager() { @@ -76,15 +78,6 @@ public class GPSExtractor { boolean gpsPrefEnabled = gpsPreferenceEnabled(); if (gpsPrefEnabled) { - //If pref enabled, get current location - Location location = locationManager.getLastKnownLocation(provider); - - if (location != null) { - myLocationListener.onLocationChanged(location); - } else { - //calling method is equipped to deal with null return value - return null; - } Log.d(TAG, "Current location values: Lat = " + currentLatitude + " Long = " + currentLongitude); String currentCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); return currentCoords; From 8a80ea080fa6342980a4278d3f8f4c9d8aca2560 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 12 Feb 2016 16:39:01 +1300 Subject: [PATCH 66/69] Changelog, versioning and tagging --- CHANGELOG.md | 4 ++++ commons/AndroidManifest.xml | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf52eba46..818f8be72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Wikimedia Commons for Android +## v1.9 +- Bugfix for null pages array crash +- New feature: Added option to use GPS to find nearby categories if picture is not geotagged + ## v1.8 - New feature: Improved category search function (not limited to prefix search now) diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml index 3806d502e..030d13548 100644 --- a/commons/AndroidManifest.xml +++ b/commons/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="25" + android:versionName="1.9" > Date: Mon, 15 Feb 2016 14:48:21 +0900 Subject: [PATCH 67/69] History of the app --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb84ca0bf..b107e3824 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Upload to Commons # -Upload pictures from your Android phone/tablet to Wikimedia Commons! +Upload pictures from your Android phone/tablet to Wikimedia Commons. -Community-maintained app, independant from the Wikimedia Foundation. Volunteers welcome! +Initially started by the Wikimedia Foundation, this app is now maintained by volunteers. Anyone is welcome to improve it, just choose among the [open issues](https://github.com/nicolas-raoul/apps-android-commons/issues) and send us a pull request :-) ## Build Requirements ## From 04d441516d899a77ff79dc409e57a55a54025836 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 16 Feb 2016 15:18:33 +1300 Subject: [PATCH 68/69] Added null check for onLocationChanged() --- .../main/java/fr/free/nrw/commons/upload/GPSExtractor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 1b88f3ea1..1610877ac 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -46,7 +46,9 @@ public class GPSExtractor { locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); Location location = locationManager.getLastKnownLocation(provider); - myLocationListener.onLocationChanged(location); + if (location != null) { + myLocationListener.onLocationChanged(location); + } } protected void unregisterLocationManager() { From 33d719562a233cea9acdfac7f5b98f543c2958ea Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 16 Feb 2016 15:41:53 +1300 Subject: [PATCH 69/69] Changelog, versioning --- CHANGELOG.md | 3 +++ commons/AndroidManifest.xml | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 818f8be72..4115d5b84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Wikimedia Commons for Android +## v1.10 +- Bugfix for null location crash + ## v1.9 - Bugfix for null pages array crash - New feature: Added option to use GPS to find nearby categories if picture is not geotagged diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml index 030d13548..273f41c81 100644 --- a/commons/AndroidManifest.xml +++ b/commons/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="26" + android:versionName="1.10" >