From cd9d69d129959d4fc52a6854648e3ca8f1d4a9c1 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sun, 30 Dec 2012 22:03:55 +0100 Subject: [PATCH] Updated storage availability check --- .../activity/StorageErrorActivity.java | 2 +- .../service/download/HttpDownloader.java | 3 +- .../danoeh/antennapod/util/StorageUtils.java | 47 +++++++++++++------ 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/de/danoeh/antennapod/activity/StorageErrorActivity.java b/src/de/danoeh/antennapod/activity/StorageErrorActivity.java index 6739430cb..514b1f69d 100644 --- a/src/de/danoeh/antennapod/activity/StorageErrorActivity.java +++ b/src/de/danoeh/antennapod/activity/StorageErrorActivity.java @@ -39,7 +39,7 @@ public class StorageErrorActivity extends SherlockActivity { @Override protected void onResume() { super.onResume(); - if (StorageUtils.storageAvailable()) { + if (StorageUtils.storageAvailable(this)) { leaveErrorState(); } else { registerReceiver(mediaUpdate, new IntentFilter( diff --git a/src/de/danoeh/antennapod/service/download/HttpDownloader.java b/src/de/danoeh/antennapod/service/download/HttpDownloader.java index fb51be032..680c20de0 100644 --- a/src/de/danoeh/antennapod/service/download/HttpDownloader.java +++ b/src/de/danoeh/antennapod/service/download/HttpDownloader.java @@ -19,6 +19,7 @@ import org.apache.http.HttpStatus; import android.util.Log; import de.danoeh.antennapod.AppConfig; +import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; import de.danoeh.antennapod.asynctask.DownloadStatus; import de.danoeh.antennapod.util.DownloadError; @@ -104,7 +105,7 @@ public class HttpDownloader extends Downloader { if (AppConfig.DEBUG) { Log.d(TAG, "Connected to resource"); } - if (StorageUtils.externalStorageMounted()) { + if (StorageUtils.storageAvailable(PodcastApp.getInstance())) { File destination = new File(status.getFeedFile() .getFile_url()); if (!destination.exists()) { diff --git a/src/de/danoeh/antennapod/util/StorageUtils.java b/src/de/danoeh/antennapod/util/StorageUtils.java index d4738f14f..f32f51cef 100644 --- a/src/de/danoeh/antennapod/util/StorageUtils.java +++ b/src/de/danoeh/antennapod/util/StorageUtils.java @@ -1,41 +1,58 @@ package de.danoeh.antennapod.util; +import java.io.File; + import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Environment; import android.os.StatFs; +import android.util.Log; +import de.danoeh.antennapod.AppConfig; +import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.activity.StorageErrorActivity; /** Utility functions for handling storage errors */ public class StorageUtils { - public static boolean storageAvailable() { - String state = Environment.getExternalStorageState(); - return state.equals(Environment.MEDIA_MOUNTED); + private static final String TAG = "StorageUtils"; + + public static boolean storageAvailable(Context context) { + File dir = PodcastApp.getDataFolder(context, null); + if (dir != null) { + return dir.exists() && dir.canRead() && dir.canWrite(); + } else { + if (AppConfig.DEBUG) + Log.d(TAG, "Storage not available: data folder is null"); + return false; + } } - - /**Checks if external storage is available. If external storage isn't - * available, the current activity is finsished an an error activity is launched. - * @param activity the activity which would be finished if no storage is available + + /** + * Checks if external storage is available. If external storage isn't + * available, the current activity is finsished an an error activity is + * launched. + * + * @param activity + * the activity which would be finished if no storage is + * available * @return true if external storage is available */ public static boolean checkStorageAvailability(Activity activity) { - boolean storageAvailable = storageAvailable(); + boolean storageAvailable = storageAvailable(activity); if (!storageAvailable) { activity.finish(); - activity.startActivity(new Intent(activity, StorageErrorActivity.class)); + activity.startActivity(new Intent(activity, + StorageErrorActivity.class)); } return storageAvailable; } - + /** Get the number of free bytes that are available on the external storage. */ public static long getFreeSpaceAvailable() { - StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); + StatFs stat = new StatFs(Environment.getExternalStorageDirectory() + .getPath()); long availableBlocks = stat.getAvailableBlocks(); long blockSize = stat.getBlockSize(); return availableBlocks * blockSize; } - - public static boolean externalStorageMounted() { - return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); - } }