package com.example.activity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import android.app.Activity;
import android.app.Dialog;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
import com.BeeFramework.example.R;
import com.BeeFramework.theme.ResourcesFactory;
import com.BeeFramework.theme.ThemeManager;
import com.BeeFramework.view.DarkImageView;
public class ThemeDownloadActivity extends Activity {
private Button btn;
private Dialog mDialog;
private ProgressBar progressBar;
private TextView cancel;
private int progress;
private boolean cancelDownload = false;
private FrameLayout nav_bar;
private DarkImageView topview_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.download);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
showDialog();
}
});
nav_bar = (FrameLayout)findViewById(R.id.nav_bar);
Drawable drawable = ResourcesFactory.getDrawable(getResources(), R.drawable.nav_background);
if (null != drawable)
{
nav_bar.setBackgroundDrawable(drawable);
}
topview_back = (DarkImageView) findViewById(R.id.topview_back);
topview_back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void showDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.download_dialog, null);
mDialog = new Dialog(this, R.style.dialog);
mDialog.setContentView(view);
mDialog.setCanceledOnTouchOutside(false);
progressBar = (ProgressBar) view.findViewById(R.id.download_progress);
cancel = (TextView) view.findViewById(R.id.download_cancel);
mDialog.show();
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mDialog.dismiss();
cancelDownload = true;
}
});
initThread("http://www.bee-framework.com/download/theme.zip");
}
int currentPackageSize = 0;
public void initThread(final String zip_url) {
new Thread() {
@Override
public void run() {
super.run();
try {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
String sdpath = Environment.getExternalStorageDirectory()+ "/insthub/ThemeDownload";
File downloadFile = new File(sdpath);
if (!downloadFile.exists())
{
downloadFile.mkdirs();
}
URL url = new URL(zip_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
int length = conn.getContentLength();
InputStream is = conn.getInputStream();
File file = new File(sdpath);
if (!file.exists()) {
file.mkdir();
}
File zipFile = new File(sdpath, "theme.zip");
FileOutputStream fos = new FileOutputStream(zipFile);
int count = 0;
byte buf[] = new byte[1024];
do {
int numread = is.read(buf);
count += numread;
progress = (int) (((float) count / length) * 100);
handler.sendEmptyMessage(1);
if (numread <= 0)
{
handler.sendEmptyMessage(2);
break;
}
fos.write(buf, 0, numread);
} while (!cancelDownload);
fos.close();
is.close();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mDialog.dismiss();
}
}.start();
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 1)
{
progressBar.setProgress(progress);
}
else if(msg.what == 2)
{
try
{
unZipFiles(new File(Environment.getExternalStorageDirectory()+ "/insthub/ThemeDownload/theme.zip"),Environment.getExternalStorageDirectory()+ "/insthub/ThemeDownload/");
ThemeManager.getInstance().setThemeRootPath(Environment.getExternalStorageDirectory()+ "/insthub/ThemeDownload/");
ThemeDownloadActivity.this.ThemeChange();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
};
public void ThemeChange()
{
Drawable drawable = ResourcesFactory.getDrawable(getResources(), R.drawable.nav_background);
if (null != drawable)
{
nav_bar.setBackgroundDrawable(drawable);
}
}
public void unZipFiles(File zipFile, String descDir) throws IOException
{
File pathFile = new File(descDir);
if (!pathFile.exists())
{
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for (Enumeration entries = zip.entries(); entries.hasMoreElements();)
{
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if (!file.exists())
{
file.mkdirs();
}
if (new File(outPath).isDirectory())
{
continue;
}
System.out.println(outPath);
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
in.close();
out.close();
}
Toast.makeText(this, "success", 0).show();
}
}