From 23af3c16cefd0eafcfe909fa65fb6e6051df247a Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Mon, 4 Feb 2013 03:01:51 +0530 Subject: [PATCH] Support for content URIs that do not report their size Also brought back ACTION_GET_CONTENT - people should pick from wherever they want! --- .../java/org/wikimedia/commons/UploadService.java | 15 ++++++++++++++- .../contributions/ContributionsActivity.java | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/org/wikimedia/commons/UploadService.java b/commons/src/main/java/org/wikimedia/commons/UploadService.java index 16c6fb85f..7cbd479f5 100644 --- a/commons/src/main/java/org/wikimedia/commons/UploadService.java +++ b/commons/src/main/java/org/wikimedia/commons/UploadService.java @@ -124,6 +124,15 @@ public class UploadService extends IntentService { return cursor.getString(column_index); } + private long countBytes(InputStream stream) throws IOException { + long count = 0; + BufferedInputStream bis = new BufferedInputStream(stream); + while(bis.read() != -1) { + count++; + } + return count; + } + private Contribution mediaFromIntent(Intent intent) { Bundle extras = intent.getExtras(); Uri mediaUri = (Uri) extras.getParcelable(EXTRA_MEDIA_URI); @@ -136,7 +145,11 @@ public class UploadService extends IntentService { Long length = null; try { length = this.getContentResolver().openAssetFileDescriptor(mediaUri, "r").getLength(); - } catch(FileNotFoundException e) { + if(length == -1) { + // Let us find out the long way! + length = countBytes(this.getContentResolver().openInputStream(mediaUri)); + } + } catch(IOException e) { throw new RuntimeException(e); } diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java index c2a95c686..dd884fd46 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java @@ -245,7 +245,7 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.menu_from_gallery: - Intent pickImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); + Intent pickImageIntent = new Intent(Intent.ACTION_GET_CONTENT); pickImageIntent.setType("image/*"); startActivityForResult(pickImageIntent, SELECT_FROM_GALLERY); return true;