diff --git a/api/src/main/java/org/tasks/files/FileHelper.java b/api/src/main/java/org/tasks/files/FileHelper.java index 9f3011e14..e89d22e50 100644 --- a/api/src/main/java/org/tasks/files/FileHelper.java +++ b/api/src/main/java/org/tasks/files/FileHelper.java @@ -16,8 +16,11 @@ import java.nio.channels.FileChannel; public class FileHelper { public static File getExternalFilesDir(Context context, String type) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - String filesDir = Environment.getExternalStorageDirectory() + "/Android/data/" + context.getPackageName() + "/files/"; - return new File(type == null ? filesDir : filesDir + "/" + type); + String directory = String.format("%s/Android/data/%s/files/%s", Environment.getExternalStorageDirectory(), context.getPackageName(), type); + File file = new File(directory); + if (file.isDirectory() || file.mkdirs()) { + return file; + } } return null; diff --git a/astrid/src/main/java/com/todoroo/astrid/actfm/ActFmCameraModule.java b/astrid/src/main/java/com/todoroo/astrid/actfm/ActFmCameraModule.java index 905b60189..03c60587b 100644 --- a/astrid/src/main/java/com/todoroo/astrid/actfm/ActFmCameraModule.java +++ b/astrid/src/main/java/com/todoroo/astrid/actfm/ActFmCameraModule.java @@ -11,16 +11,17 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; -import android.os.Environment; import android.provider.MediaStore; import android.support.v4.app.Fragment; import android.widget.ArrayAdapter; +import android.widget.Toast; import com.todoroo.andlib.utility.DateUtilities; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; +import org.tasks.files.FileHelper; import java.io.File; import java.io.IOException; @@ -65,10 +66,13 @@ public class ActFmCameraModule { public void onClick(DialogInterface d, int which) { if(which == 0 && cameraAvailable) { lastTempFile = getTempFile(fragment.getActivity()); - if (lastTempFile != null) { + if (lastTempFile == null) { + Toast.makeText(fragment.getActivity(), R.string.external_storage_unavailable, Toast.LENGTH_LONG).show(); + d.dismiss(); + } else { cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(lastTempFile)); + fragment.startActivityForResult(cameraIntent, REQUEST_CODE_CAMERA); } - fragment.startActivityForResult(cameraIntent, REQUEST_CODE_CAMERA); } else if ((which == 1 && cameraAvailable) || (which == 0 && !cameraAvailable)) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); @@ -90,10 +94,9 @@ public class ActFmCameraModule { private static File getTempFile(Activity activity) { try { - String storageState = Environment.getExternalStorageState(); - if(storageState.equals(Environment.MEDIA_MOUNTED)) { - String path = Environment.getExternalStorageDirectory().getPath() + File.separatorChar + "Android/data/" + activity.getPackageName() + "/files/"; - return File.createTempFile("comment_pic_" + DateUtilities.now(), ".jpg", new File(path)); + File path = FileHelper.getExternalFilesDir(activity, "pictures"); + if (path != null) { + return File.createTempFile(Long.toString(DateUtilities.now()), ".jpg", path); } } catch (IOException e) { log.error(e.getMessage(), e); diff --git a/astrid/src/main/res/values/strings.xml b/astrid/src/main/res/values/strings.xml index 38d94c6c7..ef40435ba 100644 --- a/astrid/src/main/res/values/strings.xml +++ b/astrid/src/main/res/values/strings.xml @@ -5,4 +5,5 @@ Delete task Support Added task + Cannot access external storage \ No newline at end of file