From a422937d029874a72aae08bd46f0d573c5e5e537 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 8 Jan 2016 22:44:05 +1300 Subject: [PATCH 01/18] Added extra logs --- .../src/main/java/fr/free/nrw/commons/upload/ShareActivity.java | 2 ++ 1 file changed, 2 insertions(+) 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 bb40f4fe1..3c96499df 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,8 +189,10 @@ public class ShareActivity mediaUriString = mediaUri.toString(); Log.d(TAG, "Uri: " + mediaUriString); //convert image Uri to file path + Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); FilePathConverter uriObj = new FilePathConverter(this, mediaUri); String filePath = uriObj.getFilePath(); + Log.d(TAG, "Filepath: " + filePath); //Using global singleton to get CacheController to last longer than the activity lifecycle cacheObj = ((CommonsApplication)this.getApplication()); From e95bcf41b6d486318dfd524a90fedaf91910e803 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 8 Jan 2016 23:52:35 +1300 Subject: [PATCH 02/18] Seems to provide correct URL --- .../nrw/commons/upload/ShareActivity.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 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 3c96499df..2d5919072 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 @@ -1,9 +1,11 @@ package fr.free.nrw.commons.upload; import android.content.*; +import android.database.Cursor; import android.os.*; import com.nostra13.universalimageloader.core.ImageLoader; import android.net.*; +import android.provider.MediaStore; import android.support.v4.app.NavUtils; import com.actionbarsherlock.view.MenuItem; @@ -165,6 +167,20 @@ public class ShareActivity finish(); } + private String getRealPathFromURI(Uri contentURI) { + String result; + Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); + if (cursor == null) { // Source is Dropbox or other similar local file path + result = contentURI.getPath(); + } else { + cursor.moveToFirst(); + int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); + result = cursor.getString(idx); + cursor.close(); + } + return result; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -188,10 +204,13 @@ public class ShareActivity mediaUriString = mediaUri.toString(); Log.d(TAG, "Uri: " + mediaUriString); + //convert image Uri to file path Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); - FilePathConverter uriObj = new FilePathConverter(this, mediaUri); - String filePath = uriObj.getFilePath(); + //FilePathConverter uriObj = new FilePathConverter(this, mediaUri); + //String filePath = uriObj.getFilePath(); + String filePath = getRealPathFromURI(mediaUri); + Log.d(TAG, "Filepath: " + filePath); //Using global singleton to get CacheController to last longer than the activity lifecycle From c0d812e8580bb39c5aa25ace9fbd791fb5709da9 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 8 Jan 2016 23:58:07 +1300 Subject: [PATCH 03/18] Minor reformat --- .../java/fr/free/nrw/commons/upload/ShareActivity.java | 7 ++----- 1 file changed, 2 insertions(+), 5 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 2d5919072..622d304a1 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 @@ -170,7 +170,7 @@ public class ShareActivity private String getRealPathFromURI(Uri contentURI) { String result; Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); - if (cursor == null) { // Source is Dropbox or other similar local file path + if (cursor == null) { // Source is local file path result = contentURI.getPath(); } else { cursor.moveToFirst(); @@ -204,13 +204,10 @@ public class ShareActivity mediaUriString = mediaUri.toString(); Log.d(TAG, "Uri: " + mediaUriString); + Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); //convert image Uri to file path - Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); - //FilePathConverter uriObj = new FilePathConverter(this, mediaUri); - //String filePath = uriObj.getFilePath(); String filePath = getRealPathFromURI(mediaUri); - Log.d(TAG, "Filepath: " + filePath); //Using global singleton to get CacheController to last longer than the activity lifecycle From 2bdfdcb79e4038e456f16ba0e8e4ad63eaa4995a Mon Sep 17 00:00:00 2001 From: misaochan Date: Sat, 9 Jan 2016 01:04:42 +1300 Subject: [PATCH 04/18] Minor change --- .../main/java/fr/free/nrw/commons/upload/ShareActivity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 622d304a1..14d57e069 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 @@ -203,6 +203,8 @@ public class ShareActivity } mediaUriString = mediaUri.toString(); + ImageLoader.getInstance().displayImage(mediaUriString, backgroundImageView); + Log.d(TAG, "Uri: " + mediaUriString); Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); @@ -244,7 +246,7 @@ public class ShareActivity } } - ImageLoader.getInstance().displayImage(mediaUriString, backgroundImageView); + if(savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); From 116288f2fa6a59e1c4df6b9330b82c44cf3b6c70 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 11 Jan 2016 19:11:38 +1300 Subject: [PATCH 05/18] Fixes cursor bug --- .../fr/free/nrw/commons/upload/ShareActivity.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 14d57e069..7954ff5cf 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 @@ -166,7 +166,7 @@ public class ShareActivity failureToast.show(); finish(); } - +/** private String getRealPathFromURI(Uri contentURI) { String result; Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); @@ -180,6 +180,15 @@ public class ShareActivity } return result; } + */ + + private String getRealPathFromURI(Uri contentUri) { + String[] proj = { MediaStore.Images.Media.DATA }; + Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + return cursor.getString(column_index); + } @Override public void onCreate(Bundle savedInstanceState) { From 9f0ad0f32a52de8fe189b4c957fc5a85fcf0c2ed Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 11 Jan 2016 19:13:48 +1300 Subject: [PATCH 06/18] Tidies code --- .../free/nrw/commons/upload/ShareActivity.java | 16 ---------------- 1 file changed, 16 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 4e5498e2d..ac1ef06e9 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 @@ -155,7 +155,6 @@ public class ShareActivity .add(R.id.single_upload_fragment_container, shareView, "shareView") .commit(); } - uploadController.prepareService(); } @@ -166,21 +165,6 @@ public class ShareActivity failureToast.show(); finish(); } -/** - private String getRealPathFromURI(Uri contentURI) { - String result; - Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); - if (cursor == null) { // Source is local file path - result = contentURI.getPath(); - } else { - cursor.moveToFirst(); - int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); - result = cursor.getString(idx); - cursor.close(); - } - return result; - } - */ private String getRealPathFromURI(Uri contentUri) { String[] proj = { MediaStore.Images.Media.DATA }; From 6eea283dc4edca1bd222379d24790491175a6b15 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 11 Jan 2016 19:24:05 +1300 Subject: [PATCH 07/18] Close cursor after use --- .../main/java/fr/free/nrw/commons/upload/ShareActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 ac1ef06e9..88c119939 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 @@ -171,7 +171,10 @@ public class ShareActivity Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); - return cursor.getString(column_index); + + String cursorString = cursor.getString(column_index); + cursor.close(); + return cursorString; } @Override From f8e5e9c50e93426804c96bc0d6668dfafd4b0794 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 15:37:55 +1300 Subject: [PATCH 08/18] Added try catch for getRealPath --- .../nrw/commons/upload/ShareActivity.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 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 88c119939..d6e821c6b 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 @@ -167,14 +167,21 @@ public class ShareActivity } private String getRealPathFromURI(Uri contentUri) { - String[] proj = { MediaStore.Images.Media.DATA }; - Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); - int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - - String cursorString = cursor.getString(column_index); - cursor.close(); - return cursorString; + Cursor cursor = null; + try { + String[] proj = {MediaStore.Images.Media.DATA}; + cursor = getContentResolver().query(contentUri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + return cursor.getString(column_index); + } catch (Exception e) { + Log.w(TAG, e); + return ""; + } finally { + if (cursor != null) { + cursor.close(); + } + } } @Override @@ -208,14 +215,12 @@ public class ShareActivity String filePath = getRealPathFromURI(mediaUri); Log.d(TAG, "Filepath: " + filePath); - - if (filePath != null) { + if (filePath != null && !filePath.equals("")) { //extract the coordinates of image in decimal degrees Log.d(TAG, "Calling GPSExtractor"); GPSExtractor imageObj = new GPSExtractor(filePath); String decimalCoords = imageObj.getCoords(); - if (decimalCoords != null) { double decLongitude = imageObj.getDecLongitude(); double decLatitude = imageObj.getDecLatitude(); @@ -239,16 +244,12 @@ public class ShareActivity Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString()); MwVolleyApi.setGpsCat(displayCatList); } - } } - - if(savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); } - requestAuthToken(); } From 380fbc8920e8e60af668730d770f9ee44356a54d Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 15:48:53 +1300 Subject: [PATCH 09/18] Revert "Added try catch for getRealPath" This reverts commit f8e5e9c50e93426804c96bc0d6668dfafd4b0794. --- .../nrw/commons/upload/ShareActivity.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 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 d6e821c6b..88c119939 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 @@ -167,21 +167,14 @@ public class ShareActivity } private String getRealPathFromURI(Uri contentUri) { - Cursor cursor = null; - try { - String[] proj = {MediaStore.Images.Media.DATA}; - cursor = getContentResolver().query(contentUri, proj, null, null, null); - int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - return cursor.getString(column_index); - } catch (Exception e) { - Log.w(TAG, e); - return ""; - } finally { - if (cursor != null) { - cursor.close(); - } - } + String[] proj = { MediaStore.Images.Media.DATA }; + Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + + String cursorString = cursor.getString(column_index); + cursor.close(); + return cursorString; } @Override @@ -215,12 +208,14 @@ public class ShareActivity String filePath = getRealPathFromURI(mediaUri); Log.d(TAG, "Filepath: " + filePath); - if (filePath != null && !filePath.equals("")) { + + if (filePath != null) { //extract the coordinates of image in decimal degrees Log.d(TAG, "Calling GPSExtractor"); GPSExtractor imageObj = new GPSExtractor(filePath); String decimalCoords = imageObj.getCoords(); + if (decimalCoords != null) { double decLongitude = imageObj.getDecLongitude(); double decLatitude = imageObj.getDecLatitude(); @@ -244,12 +239,16 @@ public class ShareActivity Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString()); MwVolleyApi.setGpsCat(displayCatList); } + } } + + if(savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); } + requestAuthToken(); } From f09cab8356cdb3ea317287c16c5313d5ae07ce51 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 15:49:06 +1300 Subject: [PATCH 10/18] Revert "Revert "Added try catch for getRealPath"" This reverts commit 380fbc8920e8e60af668730d770f9ee44356a54d. --- .../nrw/commons/upload/ShareActivity.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 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 88c119939..d6e821c6b 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 @@ -167,14 +167,21 @@ public class ShareActivity } private String getRealPathFromURI(Uri contentUri) { - String[] proj = { MediaStore.Images.Media.DATA }; - Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); - int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - - String cursorString = cursor.getString(column_index); - cursor.close(); - return cursorString; + Cursor cursor = null; + try { + String[] proj = {MediaStore.Images.Media.DATA}; + cursor = getContentResolver().query(contentUri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + return cursor.getString(column_index); + } catch (Exception e) { + Log.w(TAG, e); + return ""; + } finally { + if (cursor != null) { + cursor.close(); + } + } } @Override @@ -208,14 +215,12 @@ public class ShareActivity String filePath = getRealPathFromURI(mediaUri); Log.d(TAG, "Filepath: " + filePath); - - if (filePath != null) { + if (filePath != null && !filePath.equals("")) { //extract the coordinates of image in decimal degrees Log.d(TAG, "Calling GPSExtractor"); GPSExtractor imageObj = new GPSExtractor(filePath); String decimalCoords = imageObj.getCoords(); - if (decimalCoords != null) { double decLongitude = imageObj.getDecLongitude(); double decLatitude = imageObj.getDecLatitude(); @@ -239,16 +244,12 @@ public class ShareActivity Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString()); MwVolleyApi.setGpsCat(displayCatList); } - } } - - if(savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); } - requestAuthToken(); } From 3caed68c281bc75ef286bf1843c1b1ddd0059824 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 15:49:10 +1300 Subject: [PATCH 11/18] Revert "Revert "Revert "Added try catch for getRealPath""" This reverts commit f09cab8356cdb3ea317287c16c5313d5ae07ce51. --- .../nrw/commons/upload/ShareActivity.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 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 d6e821c6b..88c119939 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 @@ -167,21 +167,14 @@ public class ShareActivity } private String getRealPathFromURI(Uri contentUri) { - Cursor cursor = null; - try { - String[] proj = {MediaStore.Images.Media.DATA}; - cursor = getContentResolver().query(contentUri, proj, null, null, null); - int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - return cursor.getString(column_index); - } catch (Exception e) { - Log.w(TAG, e); - return ""; - } finally { - if (cursor != null) { - cursor.close(); - } - } + String[] proj = { MediaStore.Images.Media.DATA }; + Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + + String cursorString = cursor.getString(column_index); + cursor.close(); + return cursorString; } @Override @@ -215,12 +208,14 @@ public class ShareActivity String filePath = getRealPathFromURI(mediaUri); Log.d(TAG, "Filepath: " + filePath); - if (filePath != null && !filePath.equals("")) { + + if (filePath != null) { //extract the coordinates of image in decimal degrees Log.d(TAG, "Calling GPSExtractor"); GPSExtractor imageObj = new GPSExtractor(filePath); String decimalCoords = imageObj.getCoords(); + if (decimalCoords != null) { double decLongitude = imageObj.getDecLongitude(); double decLatitude = imageObj.getDecLatitude(); @@ -244,12 +239,16 @@ public class ShareActivity Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString()); MwVolleyApi.setGpsCat(displayCatList); } + } } + + if(savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); } + requestAuthToken(); } From 6d914148e61a1b7db51b489886756a47878e1f08 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 15:57:40 +1300 Subject: [PATCH 12/18] Tried commenting close cursor out --- .../main/java/fr/free/nrw/commons/upload/ShareActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 88c119939..a0e62024b 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 @@ -166,6 +166,7 @@ public class ShareActivity finish(); } + private String getRealPathFromURI(Uri contentUri) { String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); @@ -173,7 +174,7 @@ public class ShareActivity cursor.moveToFirst(); String cursorString = cursor.getString(column_index); - cursor.close(); + //cursor.close(); return cursorString; } From 81156db89fb20d7c7c9629508e9d418b278b4de8 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 16:35:26 +1300 Subject: [PATCH 13/18] try catch block, works on real device --- .../nrw/commons/upload/ShareActivity.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 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 a0e62024b..5a494bb25 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 @@ -168,14 +168,21 @@ public class ShareActivity private String getRealPathFromURI(Uri contentUri) { - String[] proj = { MediaStore.Images.Media.DATA }; - Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null); - int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - - String cursorString = cursor.getString(column_index); - //cursor.close(); - return cursorString; + Cursor cursor = null; + try { + String[] proj = {MediaStore.Images.Media.DATA}; + cursor = getContentResolver().query(contentUri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + return cursor.getString(column_index); + } catch (Exception e) { + Log.w(TAG, e); + return ""; + } finally { + if (cursor != null) { + cursor.close(); + } + } } @Override @@ -210,7 +217,7 @@ public class ShareActivity Log.d(TAG, "Filepath: " + filePath); - if (filePath != null) { + if (filePath != null && !filePath.equals("")) { //extract the coordinates of image in decimal degrees Log.d(TAG, "Calling GPSExtractor"); GPSExtractor imageObj = new GPSExtractor(filePath); From 8c2959f5b07524b3105744ed077922766bd39ed4 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 16:41:19 +1300 Subject: [PATCH 14/18] Added FileUtils class and license --- .../src/main/java/fr/free/nrw/commons/upload/FileUtils.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java b/commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java new file mode 100644 index 000000000..cdcc268a2 --- /dev/null +++ b/commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java @@ -0,0 +1,5 @@ +package fr.free.nrw.commons.upload; + +//Taken from https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java#L257 (Apache License 2.0) +public class FileUtils { +} From 7fea2990470e32be551299caadd137aeefda8e7e Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 19:26:50 +1300 Subject: [PATCH 15/18] Removing unnecessary old class --- .../nrw/commons/upload/FilePathConverter.java | 56 ------------------- 1 file changed, 56 deletions(-) delete mode 100644 commons/src/main/java/fr/free/nrw/commons/upload/FilePathConverter.java diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/FilePathConverter.java b/commons/src/main/java/fr/free/nrw/commons/upload/FilePathConverter.java deleted file mode 100644 index 9267bf9f8..000000000 --- a/commons/src/main/java/fr/free/nrw/commons/upload/FilePathConverter.java +++ /dev/null @@ -1,56 +0,0 @@ -package fr.free.nrw.commons.upload; - - -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.provider.DocumentsContract; -import android.provider.MediaStore; -import android.util.Log; - -public class FilePathConverter { - - private Uri uri; - private Context context; - - public FilePathConverter(Context context, Uri uri) { - this.context = context; - this.uri = uri; - } - - /** - * Gets file path of image from its Uri - * May return null - */ - public String getFilePath(){ - - String filePath =""; - - try { - // Will return "image:x*" - String wholeID = DocumentsContract.getDocumentId(uri); - - // Split at colon, use second item in the array - String id = wholeID.split(":")[1]; - String[] column = {MediaStore.Images.Media.DATA}; - - // where id is equal to - String sel = MediaStore.Images.Media._ID + "=?"; - Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, - column, sel, new String[]{id}, null); - - int columnIndex = cursor.getColumnIndex(column[0]); - - if (cursor.moveToFirst()) { - filePath = cursor.getString(columnIndex); - } - cursor.close(); - - Log.d("Image", "File path: " + filePath); - return filePath; - } catch (IllegalArgumentException e) { - Log.w("Image", e); - return null; - } - } -} From 5dcfd0964d6d4b0aa1672ddc0efe93b5dcb7d321 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 20:03:16 +1300 Subject: [PATCH 16/18] Added FileUtils --- commons/AndroidManifest.xml | 2 +- .../fr/free/nrw/commons/upload/FileUtils.java | 137 +++++++++++++++++- 2 files changed, 136 insertions(+), 3 deletions(-) diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml index de1e407dc..494b6f511 100644 --- a/commons/AndroidManifest.xml +++ b/commons/AndroidManifest.xml @@ -5,7 +5,7 @@ + android:targetSdkVersion="23" /> diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java b/commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java index cdcc268a2..28f1b6052 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/FileUtils.java @@ -1,5 +1,138 @@ package fr.free.nrw.commons.upload; -//Taken from https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java#L257 (Apache License 2.0) +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.provider.DocumentsContract; + + +/** + * Get a file path from a Uri. This will get the the path for Storage Access + * Framework Documents, as well as the _data field for the MediaStore and + * other file-based ContentProviders. + * + * @author paulburke + */ + public class FileUtils { -} + public static String getPath(final Context context, final Uri uri) { + + final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + + // DocumentProvider + if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + if ("primary".equalsIgnoreCase(type)) { + return Environment.getExternalStorageDirectory() + "/" + split[1]; + } + } + // DownloadsProvider + else if (isDownloadsDocument(uri)) { + + final String id = DocumentsContract.getDocumentId(uri); + final Uri contentUri = ContentUris.withAppendedId( + Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); + + return getDataColumn(context, contentUri, null, null); + } + // MediaProvider + else if (isMediaDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + + final String selection = "_id=?"; + final String[] selectionArgs = new String[]{ + split[1] + }; + + return getDataColumn(context, contentUri, selection, selectionArgs); + } + } + // MediaStore (and general) + else if ("content".equalsIgnoreCase(uri.getScheme())) { + return getDataColumn(context, uri, null, null); + } + // File + else if ("file".equalsIgnoreCase(uri.getScheme())) { + return uri.getPath(); + } + + return null; + } + + /** + * Get the value of the data column for this Uri. This is useful for + * MediaStore Uris, and other file-based ContentProviders. + * + * @param context The context. + * @param uri The Uri to query. + * @param selection (Optional) Filter used in the query. + * @param selectionArgs (Optional) Selection arguments used in the query. + * @return The value of the _data column, which is typically a file path. + */ + public static String getDataColumn(Context context, Uri uri, String selection, + String[] selectionArgs) { + + Cursor cursor = null; + final String column = "_data"; + final String[] projection = { + column + }; + + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + final int column_index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(column_index); + } + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } + + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is ExternalStorageProvider. + */ + public static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is DownloadsProvider. + */ + public static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is MediaProvider. + */ + public static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } +} \ No newline at end of file From 87ad638b56f96d5af2707ff9e17540d9e5cdd3ca Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 20:07:01 +1300 Subject: [PATCH 17/18] Tidying up code --- .../nrw/commons/upload/ShareActivity.java | 26 +------------------ 1 file changed, 1 insertion(+), 25 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 5a494bb25..e1d454fe9 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 @@ -166,25 +166,6 @@ public class ShareActivity finish(); } - - private String getRealPathFromURI(Uri contentUri) { - Cursor cursor = null; - try { - String[] proj = {MediaStore.Images.Media.DATA}; - cursor = getContentResolver().query(contentUri, proj, null, null, null); - int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - return cursor.getString(column_index); - } catch (Exception e) { - Log.w(TAG, e); - return ""; - } finally { - if (cursor != null) { - cursor.close(); - } - } - } - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -213,10 +194,9 @@ public class ShareActivity Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); //convert image Uri to file path - String filePath = getRealPathFromURI(mediaUri); + 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"); @@ -247,16 +227,12 @@ public class ShareActivity Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString()); MwVolleyApi.setGpsCat(displayCatList); } - } } - - if(savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); } - requestAuthToken(); } From 6226f2cd2634fb4b48e10d835df0fd411ad16173 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jan 2016 20:11:24 +1300 Subject: [PATCH 18/18] Versioning, changelog --- CHANGELOG.md | 3 +++ commons/AndroidManifest.xml | 4 ++-- .../fr/free/nrw/commons/upload/FileUtils.java | 20 +++++++++---------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 526c48bab..7ebe616ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Wikimedia Commons for Android +## v1.6 +- Bugfix for invalid images + ## v1.5 - Caches area and associated categories - Increased search radius for nearby categories diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml index 494b6f511..9ee639ad6 100644 --- a/commons/AndroidManifest.xml +++ b/commons/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="22" + android:versionName="1.6" > = Build.VERSION_CODES.KITKAT; @@ -111,7 +112,6 @@ public class FileUtils { return null; } - /** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider.