package mil.nga.giat.mage.cache;
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import java.io.File;
import mil.nga.geopackage.validate.GeoPackageValidate;
import mil.nga.giat.mage.map.cache.CacheProvider;
import mil.nga.giat.mage.sdk.utils.MediaUtility;
/**
* Cache File Utilities
*/
public class CacheUtils {
public static String CACHE_DIRECTORY = "caches";
/**
* Copy the Uri to the cache directory in a background task
*
* @param context
* @param uri
* @param path bn
*/
public static void copyToCache(Context context, Uri uri, String path) {
// Get the Uri display name, which should be the file name with extension
String name = MediaUtility.getDisplayName(context, uri, path);
// Get a cache directory to write to
File cacheDirectory = CacheUtils.getApplicationCacheDirectory(context);
if (cacheDirectory != null) {
// Verify that the file is a cache file by its extension
File cacheFile = new File(cacheDirectory, name);
if (isCacheFile(cacheFile)) {
if(cacheFile.exists()) {
cacheFile.delete();
}
String cacheName = MediaUtility.getFileNameWithoutExtension(cacheFile);
CacheProvider.getInstance(context).removeCacheOverlay(cacheName);
// Copy the file in a background task
CopyCacheStreamTask task = new CopyCacheStreamTask(context, uri, cacheFile, cacheName);
task.execute();
}
}
}
/**
* Determine if the file is a cache file based upon its extension
*
* @param file potential cache file
* @return true if a cache file
*/
public static boolean isCacheFile(File file) {
return GeoPackageValidate.hasGeoPackageExtension(file);
}
/**
* Get a writeable cache directory for saving cache files
*
* @param context
* @return file directory or null
*/
public static File getApplicationCacheDirectory(Context context) {
File directory = context.getFilesDir();
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File externalDirectory = context.getExternalFilesDir(null);
if (externalDirectory != null) {
directory = externalDirectory;
}
}
File cacheDirectory = new File(directory, CACHE_DIRECTORY);
if (!cacheDirectory.exists()) {
cacheDirectory.mkdir();
}
return cacheDirectory;
}
}