/*******************************************************************************
* Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang
*
* 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.fanfou.app.opensource.util;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore.MediaColumns;
import android.text.ClipboardManager;
import com.fanfou.app.opensource.api.bean.DirectMessage;
import com.fanfou.app.opensource.api.bean.Status;
import com.fanfou.app.opensource.api.bean.User;
import com.fanfou.app.opensource.db.Contents.DirectMessageInfo;
import com.fanfou.app.opensource.db.Contents.DraftInfo;
import com.fanfou.app.opensource.db.Contents.StatusInfo;
import com.fanfou.app.opensource.db.Contents.UserInfo;
/**
* @author mcxiaoke
* @version 1.0 2011.05.19
* @version 1.1 2011.10.11
*
*/
public final class IOHelper {
public static final SimpleDateFormat IMG_NAME_FORMAT = new SimpleDateFormat(
"'IMG'_yyyyMMdd_HHmmss.'jpg'");
public static final SimpleDateFormat IMG2_NAME_FORMAT = new SimpleDateFormat(
"'IMG2'_yyyyMMdd_HHmmss.'jpg'");
public static void cleanDB(final Context context) {
final ContentResolver cr = context.getContentResolver();
cr.delete(StatusInfo.CONTENT_URI, null, null);
cr.delete(UserInfo.CONTENT_URI, null, null);
cr.delete(DirectMessageInfo.CONTENT_URI, null, null);
cr.delete(DraftInfo.CONTENT_URI, null, null);
}
public static void ClearBigPictures(final Context context) {
IOHelper.deleteDir(IOHelper.getImageCacheDir(context), 6 * 1024);
}
public static void ClearCache(final Context context) {
final File target = IOHelper.getImageCacheDir(context);
if (target.exists() == false) {
return;
}
if (target.isFile()) {
target.delete();
}
if (target.isDirectory()) {
final File[] files = target.listFiles();
for (final File file : files) {
IOHelper.deleteDir(file);
}
target.delete();
}
}
public static void closeStream(final Closeable stream) {
if (stream != null) {
try {
stream.close();
} catch (final IOException e) {
}
}
}
public static void copyFile(final File src, final File dest)
throws IOException {
final FileChannel srcChannel = new FileInputStream(src).getChannel();
final FileChannel destChannel = new FileOutputStream(dest).getChannel();
srcChannel.transferTo(0, srcChannel.size(), destChannel);
srcChannel.close();
destChannel.close();
}
public static void copyStream(final InputStream in, final OutputStream out)
throws IOException {
final byte[] b = new byte[8 * 1024];
int read;
while ((read = in.read(b)) != -1) {
out.write(b, 0, read);
}
}
public static void copyStream(final InputStream in, final OutputStream out,
final int bufferSize) throws IOException {
final byte[] buf = new byte[bufferSize];
int len = 0;
while ((len = in.read(buf)) >= 0) {
out.write(buf, 0, len);
}
}
public static void copyToClipBoard(final Context context,
final String content) {
final ClipboardManager cm = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(content);
}
public static void deleteDir(final File target) {
if (!target.exists()) {
return;
}
if (target.isFile()) {
target.delete();
}
if (target.isDirectory()) {
final File[] files = target.listFiles();
for (final File file : files) {
IOHelper.deleteDir(file);
}
target.delete();
}
}
public static void deleteDir(final File target, final int minFileSize) {
if (!target.exists()) {
return;
}
if (target.isFile()) {
if (target.length() > minFileSize) {
target.delete();
}
}
if (target.isDirectory()) {
final File[] files = target.listFiles();
for (final File file : files) {
IOHelper.deleteDir(file, minFileSize);
}
}
}
public static void forceClose(final Closeable c) {
try {
if (c != null) {
c.close();
}
} catch (final IOException e) {
}
}
public static File getDownloadDir(final Context context) {
File cacheDir;
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
cacheDir = new File(Environment.getExternalStorageDirectory(),
"/download");
} else {
cacheDir = context.getCacheDir();
}
if (!cacheDir.exists()) {
cacheDir.mkdirs();
}
return cacheDir;
}
public static File getFilteredPhotoFilePath(final Context context) {
final File baseDir = IOHelper.getPhotoDir(context);
if (!baseDir.exists()) {
baseDir.mkdirs();
}
final Date date = new Date();
final String filename = IOHelper.IMG2_NAME_FORMAT.format(date);
return new File(baseDir, filename);
}
public static File getImageCacheDir(final Context context) {
File cacheDir;
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
cacheDir = new File(Environment.getExternalStorageDirectory(),
"/Android/data/" + context.getPackageName() + "/photocache");
} else {
cacheDir = context.getCacheDir();
}
if (!cacheDir.exists()) {
cacheDir.mkdirs();
final File nomedia = new File(cacheDir, ".nomedia");
if (!nomedia.exists()) {
nomedia.mkdirs();
}
}
return cacheDir;
}
public static File getPhotoDir(final Context context) {
File photoDir;
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
photoDir = new File(Environment.getExternalStorageDirectory(),
"/DCIM/FANFOU");
} else {
photoDir = context.getCacheDir();
}
if (!photoDir.exists()) {
photoDir.mkdirs();
}
return photoDir;
}
public static File getPhotoFilePath(final Context context) {
final File baseDir = IOHelper.getPhotoDir(context);
if (!baseDir.exists()) {
baseDir.mkdirs();
}
final Date date = new Date();
final String filename = IOHelper.IMG_NAME_FORMAT.format(date);
return new File(baseDir, filename);
}
public static String getRealPathFromURI(final Context context,
final Uri contentUri) {
// get path from uri like content://media//
final Cursor cursor = context.getContentResolver().query(contentUri,
new String[] { MediaColumns.DATA }, null, null, null);
String path = null;
if (cursor != null) {
final int column_index = cursor
.getColumnIndexOrThrow(MediaColumns.DATA);
cursor.moveToFirst();
path = cursor.getString(column_index);
} else {
path = null;
}
cursor.close();
if (path == null) {
path = contentUri.getPath();
}
return path;
}
public static void storeDirectMessage(final Context context,
final DirectMessage dm) {
final ContentResolver cr = context.getContentResolver();
cr.insert(DirectMessageInfo.CONTENT_URI, dm.toContentValues());
}
public static void storeStatus(final Context context, final Status s) {
final ContentResolver cr = context.getContentResolver();
cr.insert(StatusInfo.CONTENT_URI, s.toContentValues());
}
public static void storeUser(final Context context, final User u) {
final ContentResolver cr = context.getContentResolver();
cr.insert(UserInfo.CONTENT_URI, u.toContentValues());
}
private IOHelper() {
throw new IllegalAccessError("此类为静态工具类,不能被实例化");
}
}