package cm4mmupdater.tasks;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.widget.Toast;
import cm4mmupdater.customTypes.UpdateInfo;
import cm4mmupdater.misc.Constants;
import cm4mmupdater.misc.Log;
import cm4mmupdater.ui.ApplyUpdateActivity;
import cm4mmupdater.ui.MainActivity;
import cm4mmupdater.ui.R;
import cm4mmupdater.utils.MD5;
import java.io.*;
public class MD5CheckerTask extends AsyncTask<File, Void, Boolean> {
private static final String TAG = "MD5CheckerTask";
private Boolean showDebugOutput = false;
private final ProgressDialog mDialog;
private final String mFilename;
private boolean mreturnvalue;
private final Context mCtx;
public MD5CheckerTask(Context ctx, ProgressDialog dialog, String filename, Boolean _showDebugOutput) {
mDialog = dialog;
mFilename = filename;
mCtx = ctx;
showDebugOutput = _showDebugOutput;
}
@Override
public Boolean doInBackground(File... params) {
boolean MD5exists = false;
try {
File MD5file = new File(params[0] + ".md5sum");
if (MD5file.exists() && MD5file.canRead())
MD5exists = true;
if (params[0].exists() && params[0].canRead()) {
//If MD5 File exists, check it
if (MD5exists) {
//Calculate MD5 of Existing Update
String calculatedMD5 = MD5.calculateMD5(params[0]);
//Read the existing MD5SUM
FileReader input = new FileReader(MD5file);
BufferedReader bufRead = new BufferedReader(input);
String firstLine = bufRead.readLine();
bufRead.close();
input.close();
//If the content of the File is not empty, compare it
if (firstLine != null) {
String[] SplittedString = firstLine.split(" ");
if (SplittedString[0].equalsIgnoreCase(calculatedMD5))
mreturnvalue = true;
} else
mreturnvalue = false;
} else {
return true;
}
}
}
catch (IOException e) {
Log.e(TAG, "IOEx while checking MD5 sum", e);
mreturnvalue = false;
}
return mreturnvalue;
}
@Override
public void onPostExecute(Boolean result) {
UpdateInfo ui = new UpdateInfo();
String[] temp = mFilename.split("\\\\");
ui.setName(temp[temp.length - 1]);
ui.setFileName(mFilename);
if (result) {
Intent i = new Intent(mCtx, ApplyUpdateActivity.class)
.putExtra(Constants.KEY_UPDATE_INFO, (Serializable) ui);
mCtx.startActivity(i);
} else {
Toast.makeText(mCtx, R.string.apply_existing_update_md5error_message, Toast.LENGTH_LONG).show();
}
//Is null when no MD5SUM is present
if (mDialog != null)
mDialog.dismiss();
}
@Override
public void onCancelled() {
if (showDebugOutput) Log.d(TAG, "MD5Checker Task cancelled");
Toast.makeText(mCtx, R.string.md5_check_cancelled, Toast.LENGTH_LONG).show();
Intent i = new Intent(mCtx, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mCtx.startActivity(i);
}
}