com.kg.emailalbum.mobile.util.CacheManager.java Source code

Java tutorial

Introduction

Here is the source code for com.kg.emailalbum.mobile.util.CacheManager.java

Source

/**
 * Copyright 2009, 2010 Kevin Gaudin
 *
 * This file is part of EmailAlbum.
 *
 * EmailAlbum is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * EmailAlbum is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with EmailAlbum.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.kg.emailalbum.mobile.util;

import java.io.File;
import java.io.IOException;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

/**
 * Provider for the application cache directories. If an external storage is
 * available, use it, otherwise use the application context cache directory/
 * 
 * @author Kevin Gaudin
 * 
 */
public class CacheManager {
    private static final String LOG_TAG = CacheManager.class.getSimpleName();

    private Context mContext = null;

    public CacheManager(Context ctx) {
        mContext = ctx;
    }

    /**
     * Get the application cache root.
     * 
     * @return The application cache root.
     */
    public File getCacheDir() {
        return getCacheDir(null);
    }

    /**
     * Get a cache directory for a specific task.
     * 
     * @param subdir
     *            The name of the task, will result as a subdirectory of the
     *            cache root.
     * @return The cache directory for this task.
     */
    public File getCacheDir(String subdir) {
        if (subdir == null) {
            subdir = "";
        }

        // Default root is the application context cache.
        File result = new File(mContext.getCacheDir(), subdir);

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            // If an external storage is available, use it as it will prevent
            // from overloading the internal memory.
            result = new File(Environment.getExternalStorageDirectory(), "data/EmailAlbum/.cache/" + subdir);
        }

        // Physically create the directory (and its parents) if it does not
        // exist.
        if (!result.exists()) {
            result.mkdirs();
        }

        File noMedia = new File(result, ".nomedia");
        try {
            noMedia.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.e(LOG_TAG, "Error : ", e);
        }

        // Log.i(LOG_TAG, "Using dir " + result + " for cache");
        return result;
    }

    // Clear the whole application cache.
    public void clearCache() {
        clearCache(null);
    }

    // Clear only the cache of a specific task.
    public void clearCache(String subdir) {
        File cacheDir = getCacheDir(subdir);
        if (cacheDir != null) {
            String[] files = cacheDir.list();
            if (files != null && files.length > 0) {
                for (String cachedFile : getCacheDir(subdir).list()) {
                    deleteDirectory(new File(getCacheDir(subdir), cachedFile));
                }
            }
        }
    }

    /**
     * Delete a directory and all its content.
     * 
     * @param path
     *            The directory to delete.
     * @return
     */
    static public int deleteDirectory(File path) {
        int nbDeleted = 0;
        if (path.exists() && path.isDirectory()) {
            File[] files = path.listFiles();

            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) {
                    nbDeleted += deleteDirectory(files[i]);
                } else {
                    if (files[i].delete()) {
                        nbDeleted++;
                    }

                }
            }
        } else if (path.exists()) {
            if (path.delete()) {
                nbDeleted++;
            }
        }
        return nbDeleted;
    }

    public File getInboxDir() {
        String subdir = "received";
        // Default root is the application context internal files dir.
        File result = new File(mContext.getFilesDir(), subdir);

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            // If an external storage is available, use it as it will prevent
            // from overloading the internal memory.
            result = new File(Environment.getExternalStorageDirectory(), "data/EmailAlbum/" + subdir);
        }

        // Physically create the directory (and its parents) if it does not
        // exist.
        if (!result.exists()) {
            result.mkdirs();
        }

        // Log.i(LOG_TAG, "Using dir " + result + " for cache");
        return result;
    }

    public File getOutboxDir() {
        String subdir = "created";
        // Default root is the application context internal files dir.
        File result = new File(mContext.getFilesDir(), subdir);

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            // If an external storage is available, use it as it will prevent
            // from overloading the internal memory.
            result = new File(Environment.getExternalStorageDirectory(), "data/EmailAlbum/" + subdir);
        }

        // Physically create the directory (and its parents) if it does not
        // exist.
        if (!result.exists()) {
            result.mkdirs();
        }

        // Log.i(LOG_TAG, "Using dir " + result + " for cache");
        return result;
    }

}