Support for content URIs that do not report their size

Also brought back ACTION_GET_CONTENT - people should pick from wherever
they want!
This commit is contained in:
YuviPanda 2013-02-04 03:01:51 +05:30
parent 399609a9d3
commit 23af3c16ce
2 changed files with 15 additions and 2 deletions

View file

@ -124,6 +124,15 @@ public class UploadService extends IntentService {
return cursor.getString(column_index); 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) { private Contribution mediaFromIntent(Intent intent) {
Bundle extras = intent.getExtras(); Bundle extras = intent.getExtras();
Uri mediaUri = (Uri) extras.getParcelable(EXTRA_MEDIA_URI); Uri mediaUri = (Uri) extras.getParcelable(EXTRA_MEDIA_URI);
@ -136,7 +145,11 @@ public class UploadService extends IntentService {
Long length = null; Long length = null;
try { try {
length = this.getContentResolver().openAssetFileDescriptor(mediaUri, "r").getLength(); 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); throw new RuntimeException(e);
} }

View file

@ -245,7 +245,7 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) { switch(item.getItemId()) {
case R.id.menu_from_gallery: 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/*"); pickImageIntent.setType("image/*");
startActivityForResult(pickImageIntent, SELECT_FROM_GALLERY); startActivityForResult(pickImageIntent, SELECT_FROM_GALLERY);
return true; return true;