/*******************************************************************************
* Software Name : RCS IMS Stack
*
* Copyright (C) 2010 France Telecom S.A.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.orangelabs.rcs.utils;
import java.io.File;
import android.content.Context;
import android.os.Environment;
import android.os.StatFs;
/**
* Storage utility functions
*
* @author Deutsche Telekom AG
*/
public class StorageUtils {
/**
* Verify if external storage is available (read or write) using
* {@link Environment} external storage state
*
* @see Environment#MEDIA_MOUNTED
* @see Environment#MEDIA_MOUNTED_READ_ONLY
* @return <code>true</code> if available, otherwise <code>false</code>
*/
public static boolean hasExternalStorage() {
String state = Environment.getExternalStorageState();
return Environment.MEDIA_MOUNTED.equals(state)
|| Environment.MEDIA_MOUNTED_READ_ONLY.equals(state);
}
/**
* Get available space in external storage, only if external storage is
* ready to write
*
* @return Available space in bytes, otherwise <code>-1</code>
*/
public static long getExternalStorageFreeSpace() {
long freeSpace = -1;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
freeSpace = blockSize * availableBlocks;
}
return freeSpace;
}
/**
* Get available space in storage
*
* @param context application context
* @return Available space in bytes
*/
public static long getStorageFreeSpace(Context context) {
StatFs stat = new StatFs(getSubpath(context));
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return blockSize * availableBlocks;
}
/**
* Retrieve the subpath for file
*
* @param context application context
* @return subpath
*/
public static String getSubpath(Context context) {
File path = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
path = Environment.getExternalStorageDirectory();
}
if (path == null) {
path = context.getFilesDir();
}
return path.getPath();
}
}