From f05142340937c67fdab567c168194c7562a7e3e8 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Tue, 21 Jan 2014 23:10:19 +0100 Subject: fix #3559: add picture to log fails on KitKat --- main/src/cgeo/geocaching/ImageSelectActivity.java | 27 ++++++++++++++++++++--- main/src/cgeo/geocaching/files/LocalStorage.java | 2 +- 2 files changed, 25 insertions(+), 4 deletions(-) (limited to 'main/src') diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java index 9e0a37d..2fd7fb9 100644 --- a/main/src/cgeo/geocaching/ImageSelectActivity.java +++ b/main/src/cgeo/geocaching/ImageSelectActivity.java @@ -4,10 +4,12 @@ import butterknife.ButterKnife; import butterknife.InjectView; import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.files.LocalStorage; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.ImageUtils; import cgeo.geocaching.utils.Log; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.jdt.annotation.Nullable; @@ -15,6 +17,8 @@ import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; +import android.os.Build; +import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; @@ -27,6 +31,10 @@ import android.widget.ImageView; import android.widget.Spinner; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; public class ImageSelectActivity extends AbstractActivity { @@ -216,8 +224,8 @@ public class ImageSelectActivity extends AbstractActivity { return; } - if (data != null) { - Uri selectedImage = data.getData(); + final Uri selectedImage = data.getData(); + if (Build.VERSION.SDK_INT < VERSION_CODES.KITKAT) { String[] filePathColumn = { MediaColumns.DATA }; Cursor cursor = null; @@ -247,7 +255,20 @@ public class ImageSelectActivity extends AbstractActivity { Log.d("SELECT IMAGE data = " + data.toString()); } else { - Log.d("SELECT IMAGE data is null"); + InputStream input = null; + OutputStream output = null; + try { + input = getContentResolver().openInputStream(selectedImage); + final File outputFile = ImageUtils.getOutputImageFile(); + output = new FileOutputStream(outputFile); + LocalStorage.copy(input, output); + imageUri = Uri.fromFile(outputFile); + } catch (FileNotFoundException e) { + Log.e("ImageSelectActivity.onStartResult", e); + } finally { + IOUtils.closeQuietly(input); + IOUtils.closeQuietly(output); + } } if (requestCode == SELECT_NEW_IMAGE) { diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java index edbecf6..d57c247 100644 --- a/main/src/cgeo/geocaching/files/LocalStorage.java +++ b/main/src/cgeo/geocaching/files/LocalStorage.java @@ -333,7 +333,7 @@ public final class LocalStorage { return copyDone; } - private static boolean copy(final InputStream input, final OutputStream output) { + public static boolean copy(final InputStream input, final OutputStream output) { try { int length; final byte[] buffer = new byte[4096]; -- cgit v1.1