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;