diff options
author | Chia-chi Yeh <chiachi@android.com> | 2010-12-22 14:41:10 +0800 |
---|---|---|
committer | Chia-chi Yeh <chiachi@android.com> | 2010-12-22 17:02:04 +0800 |
commit | 721d2d2a963799fad4bda9bb4b278c24fc469303 (patch) | |
tree | 28676ac38664190e40c592679c6ba396d08b5bb6 /src/com/android/camera/Storage.java | |
parent | 4e4a01ffea6c4406c06087bf49b444abe114ef9c (diff) | |
download | packages_apps_LegacyCamera-721d2d2a963799fad4bda9bb4b278c24fc469303.zip packages_apps_LegacyCamera-721d2d2a963799fad4bda9bb4b278c24fc469303.tar.gz packages_apps_LegacyCamera-721d2d2a963799fad4bda9bb4b278c24fc469303.tar.bz2 |
Check and create directories in Storage.getAvailableSpace().
Since creating directories and files is not an atomic operation,
there is no way to prevent MediaRecorder.prepare() from throwing
exceptions. Now we let Storage.getAvailableSpace() to create the
directory and then bail out gracefully if it still fails.
Bug: 3304420
Change-Id: I98f1975b90250d63b60b36950e5813528862cc98
Diffstat (limited to 'src/com/android/camera/Storage.java')
-rw-r--r-- | src/com/android/camera/Storage.java | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/com/android/camera/Storage.java b/src/com/android/camera/Storage.java index bd42828..a42d03c 100644 --- a/src/com/android/camera/Storage.java +++ b/src/com/android/camera/Storage.java @@ -20,24 +20,37 @@ import android.os.Environment; import android.os.StatFs; import android.util.Log; +import java.io.File; + class Storage { private static final String TAG = "CameraStorage"; + private static final String DCIM = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(); + + public static final String DIRECTORY = DCIM + "/Camera"; + public static final long UNAVAILABLE = -1L; public static final long PREPARING = -2L; public static final long UNKNOWN_SIZE = -3L; public static long getAvailableSpace() { + String state = Environment.getExternalStorageState(); + if (Environment.MEDIA_CHECKING.equals(state)) { + return PREPARING; + } + if (!Environment.MEDIA_MOUNTED.equals(state)) { + return UNAVAILABLE; + } + + File dir = new File(DIRECTORY); + dir.mkdirs(); + if (!dir.isDirectory() || !dir.canWrite()) { + return UNAVAILABLE; + } + try { - String state = Environment.getExternalStorageState(); - if (Environment.MEDIA_CHECKING.equals(state)) { - return PREPARING; - } - if (!Environment.MEDIA_MOUNTED.equals(state)) { - return UNAVAILABLE; - } - StatFs stat = new StatFs( - Environment.getExternalStorageDirectory().toString()); + StatFs stat = new StatFs(DIRECTORY); return stat.getAvailableBlocks() * (long) stat.getBlockSize(); } catch (Exception e) { Log.i(TAG, "Fail to access external storage", e); |