/**
*
*/
package com.gmail.charleszq.picorner.offline;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import com.gmail.charleszq.picorner.BuildConfig;
import com.gmail.charleszq.picorner.model.MediaObject;
import com.gmail.charleszq.picorner.utils.ImageUtils;
/**
* @author charles(charleszq@gmail.com)
*
*/
public final class OfflineControlFileUtil {
private static final String TAG = OfflineControlFileUtil.class
.getSimpleName();
public static void saveBitmapForOfflineView(Context context, Bitmap bmp,
MediaObject photo) {
String photoFilename = OfflineControlFileUtil
.getOfflinePhotoFileName(photo);
if (isFileExist(context, photoFilename)) {
if (BuildConfig.DEBUG)
Log.d(TAG, String.format("%s exists.", photoFilename)); //$NON-NLS-1$
return;
}
ImageUtils.saveImageToFile(context, photoFilename, bmp);
}
/**
*
* @return
*/
@SuppressWarnings("unchecked")
public static List<IOfflineViewParameter> getExistingOfflineParameters(
Context ctx) {
if (isFileExist(ctx, IOfflineViewParameter.OFFLINE_REPO_FILE_NAME)) {
FileInputStream fis = null;
try {
fis = ctx
.openFileInput(IOfflineViewParameter.OFFLINE_REPO_FILE_NAME);
ObjectInputStream ois = new ObjectInputStream(fis);
return (List<IOfflineViewParameter>) ois.readObject();
} catch (Exception e) {
return null;
} finally {
if (fis != null)
try {
fis.close();
} catch (IOException e) {
}
}
}
return null;
}
public static void saveRepositoryControlFile(Context ctx,
List<IOfflineViewParameter> params) throws Exception {
if (params == null || ctx == null) {
return;
}
FileOutputStream fos = null;
fos = ctx.openFileOutput(IOfflineViewParameter.OFFLINE_REPO_FILE_NAME,
Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(params);
oos.flush();
oos.close();
}
public static boolean isOfflineViewEnabled(Context ctx,
IOfflineViewParameter param) {
if (ctx == null) {
return false;
}
List<IOfflineViewParameter> params = getExistingOfflineParameters(ctx);
return params != null && params.contains(param);
}
public static boolean isOfflineControlFileReady(Context ctx,
IOfflineViewParameter param) {
String controlFileName = param.getControlFileName();
boolean ready = isFileExist(ctx, controlFileName);
if (BuildConfig.DEBUG) {
Log.d(TAG, String.format("Offline control file %s is ready? %s", //$NON-NLS-1$
param.getControlFileName(), Boolean.toString(ready)));
}
return ready;
}
public static boolean isFileExist(Context ctx, String filename) {
File rootDir = ctx.getFilesDir();
if (rootDir.exists()) {
File file = new File(rootDir, filename);
return file.exists();
}
return false;
}
public static String getOfflinePhotoFileName(MediaObject photo) {
StringBuilder sb = new StringBuilder();
switch (photo.getMediaSource()) {
case FLICKR:
sb.append(IOfflineViewParameter.OFFLINE_FLICKR_PHOTO_FILE_PREFIX);
break;
case INSTAGRAM:
sb.append(IOfflineViewParameter.OFFLINE_INSTAGRAM_PHOTO_FILE_PREFIX);
break;
case PX500:
sb.append(IOfflineViewParameter.OFFLINE_500PX_PHOTO_FILE_PREFIX);
break;
}
sb.append("_"); //$NON-NLS-1$
sb.append(photo.getId());
sb.append(".png"); //$NON-NLS-1$
return sb.toString();
}
}