project_files/Android-build/DataPackage/src/org/xeli/dataapk/AssetsToSDCard.java
branchhedgeroid
changeset 5383 cb217271f344
equal deleted inserted replaced
5381:8f95038f3f75 5383:cb217271f344
       
     1 package org.xeli.dataapk;
       
     2 
       
     3 
       
     4 import java.io.File;
       
     5 import java.io.FileOutputStream;
       
     6 import java.io.IOException;
       
     7 import java.io.InputStream;
       
     8 import java.io.OutputStream;
       
     9 
       
    10 import android.content.Context;
       
    11 import android.content.res.AssetManager;
       
    12 import android.util.Log;
       
    13 
       
    14 public class AssetsToSDCard implements Runnable {
       
    15 
       
    16 	public int INTERNAL_SDCARD = 0;
       
    17 	public int EXTERNAL_SDCARD = 1;
       
    18 
       
    19 	private Context context;
       
    20 	private File outputDir;
       
    21 	public AssetsToSDCard(Context c, boolean verifiedFreeSpace, String _outputDir){
       
    22 		context = c;
       
    23 		outputDir = c.getExternalFilesDir("Data").getParentFile();
       
    24 	}
       
    25 
       
    26 	private void copyFile(InputStream in, OutputStream out) throws IOException {
       
    27 		byte[] buffer = new byte[1024];
       
    28 		int read;
       
    29 		while((read = in.read(buffer)) != -1){
       
    30 			out.write(buffer, 0, read);
       
    31 		}
       
    32 	}
       
    33 
       
    34 	private void visitAllFiles(AssetManager assManager, String[] childs, String file){
       
    35 		try {
       
    36 			InputStream in;
       
    37 			OutputStream out;
       
    38 			if(childs.length == 0){ //file = a non directory file
       
    39 				in = assManager.open(file);
       
    40 				File f = new File(outputDir, file);
       
    41 				out = new FileOutputStream(f);
       
    42 				copyFile(in, out);
       
    43 			}else{ //file = a directory
       
    44 				for(String s : childs){
       
    45 					File f = new File(outputDir, file);
       
    46 					f.mkdir();
       
    47 					String tmp = file + '/' + s;
       
    48 					visitAllFiles(assManager, assManager.list(tmp), tmp);
       
    49 				}
       
    50 			}
       
    51 
       
    52 		} catch (IOException e) {
       
    53 			//TODO handle correctly
       
    54 			Log.e("fail", file);
       
    55 			e.printStackTrace();
       
    56 		}
       
    57 	}
       
    58 
       
    59 	public void run() {//Runs in it's own thread
       
    60 		AssetManager assManager = context.getAssets();
       
    61 
       
    62 		try {
       
    63 			Log.e("DataDownloader", "Starting to copy files");
       
    64 			visitAllFiles(assManager, assManager.list("Data"), "Data");
       
    65 			Log.e("DataDownloader", "Done copying files");
       
    66 		} catch (IOException e) {
       
    67 			e.printStackTrace();
       
    68 		}
       
    69 	}
       
    70 
       
    71 }