package org.adaptlab.chpir.android.survey.Tasks;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.UUID;
import org.adaptlab.chpir.android.activerecordcloudsync.ActiveRecordCloudSync;
import org.adaptlab.chpir.android.activerecordcloudsync.NetworkNotificationUtils;
import org.adaptlab.chpir.android.survey.AppUtil;
import org.adaptlab.chpir.android.survey.Models.Image;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
public class DownloadImagesTask extends AsyncTask<Void, Void, Void> {
public static String ACCESS_TOKEN;
private final static String TAG = "ImageDownloader";
private Context mContext;
public DownloadImagesTask(Context context) {
mContext = context;
}
@Override
protected Void doInBackground(Void... arg0) {
if (NetworkNotificationUtils.checkForNetworkErrors(mContext)) {
downloadImages();
}
return null;
}
public void downloadImages() {
ACCESS_TOKEN = AppUtil.getAdminSettingsInstance().getApiKey();
ActiveRecordCloudSync.setAccessToken(ACCESS_TOKEN);
ActiveRecordCloudSync.setVersionCode(AppUtil.getVersionCode(mContext));
for (Image img : Image.getAll()) {
String[] imageUrl = img.getPhotoUrl().split("/");
String url = ActiveRecordCloudSync.getEndPoint() + "images/" + imageUrl[2] + "/" + ActiveRecordCloudSync.getParams();
Log.i(TAG, "Image url: " + url);
String filename = UUID.randomUUID().toString() + ".jpg";
FileOutputStream filewriter = null;
try {
byte[] imageBytes = getUrlBytes(url);
filewriter = mContext.openFileOutput(filename, Context.MODE_PRIVATE);
filewriter.write(imageBytes);
img.setBitmapPath(filename);
img.save();
Log.i(TAG, "image saved in " + filename);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (filewriter != null)
filewriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private byte[] getUrlBytes(String urlSpec) throws IOException {
URL url = new URL(urlSpec);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream in = connection.getInputStream();
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
return null;
}
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = in.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
}
out.close();
return out.toByteArray();
} finally {
connection.disconnect();
}
}
}