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