package org.oobd.ui.android;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.charset.Charset;
import android.content.res.AssetManager;
public class AssetInstaller {
AssetManager assetManager;
String target;
String rev;
BufferedReader inputFileReader;
public AssetInstaller(AssetManager am,
String targetPath, String revision) {
assetManager = am;
target = targetPath;
rev = revision;
}
public boolean isInstallNeeded() {
String amName = target + "/am.rev";
File revFile = new File(amName);
if (!revFile.exists()) {
return true;
}
String line;
try {
InputStream fis = new FileInputStream(amName);
InputStreamReader isr = new InputStreamReader(fis,
Charset.forName("UTF-8"));
inputFileReader = new BufferedReader(isr);
line = inputFileReader.readLine();
inputFileReader.close();
isr.close();
fis.close();
return (line==null || line.trim().equalsIgnoreCase(rev) );
} catch (IOException e) {
return true;
}
}
public int copyAll() {
String line;
try {
InputStream fis = assetManager.open("am.rev");
InputStreamReader isr = new InputStreamReader(fis,
Charset.forName("UTF-8"));
this.inputFileReader = new BufferedReader(isr);
while ((line = inputFileReader.readLine()) != null) {
copyFile(line.trim());
}
copyFile("./am.rev");
return 0;
} catch (IOException e) {
return 1;
}
}
private boolean copyFile(String sourceFileName) {
InputStream in = null;
OutputStream out = null;
try {
String[] parts = sourceFileName.split("/", 2);
if (parts.length != 2) {
return false;
}
String fileType = parts[0];
String newFileName = target + "/" + parts[1];
File tmp = new File(newFileName);
if ("opt".equalsIgnoreCase(fileType) && tmp.exists()) { // the file
// is
// optional
// and exist
// already,
// so do not
// overwrite
// it
return true;
}
tmp.getParentFile().mkdirs();
if (".".equals(fileType)){
sourceFileName=parts[1];
}
in = assetManager.open(sourceFileName);
out = new FileOutputStream(newFileName);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
in = null;
out.flush();
out.close();
out = null;
return true;
} catch (Exception e) {
return false;
}
}
}