package com.myMinistry.model;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Locale;
import android.app.ProgressDialog;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.widget.Toast;
import com.myMinistry.Helper;
import com.myMinistry.R;
import com.myMinistry.provider.MinistryContract.Publisher;
import com.myMinistry.provider.MinistryContract.Time;
import com.myMinistry.provider.MinistryDatabase;
import com.myMinistry.provider.MinistryService;
import com.myMinistry.util.FileUtils;
import com.myMinistry.util.PrefUtils;
import com.myMinistry.util.TimeUtils;
public class AppUpdated extends AsyncTask<Void, Integer, Void> {
private Context mContext;
ProgressDialog mProgress;
private int mProgressDialog = 1;
public AppUpdated(Context context, int progressDialog) {
this.mContext = context;
this.mProgressDialog = progressDialog;
}
@Override
public void onPreExecute() {
mProgress = new ProgressDialog(mContext);
mProgress.setMessage(mContext.getResources().getString(R.string.updating_app));
if (mProgressDialog == ProgressDialog.STYLE_HORIZONTAL) {
mProgress.setIndeterminate(false);
mProgress.setMax(100);
mProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgress.setCancelable(true);
}
mProgress.show();
}
@Override
protected void onProgressUpdate(Integer... values) {
if (mProgressDialog == ProgressDialog.STYLE_HORIZONTAL) {
mProgress.setProgress(values[0]);
}
}
@Override
protected Void doInBackground(Void... values) {
doApplicationUpdatedWork();
/*
try {
doApplicationUpdatedWork();
for (int i = 1; i <= 10; i++) {
publishProgress(i * 10);
Thread.sleep(500);
}
} catch (Exception e) {
e.printStackTrace();
}
*/
return null;
}
@Override
protected void onPostExecute(Void result) {
mProgress.dismiss();
Toast.makeText(mContext, R.string.toast_update_done, Toast.LENGTH_LONG).show();
}
private void doApplicationUpdatedWork() {
int currentVersionNumber = 0;
int savedVersionNumber = PrefUtils.getVersionNumber(mContext);
try {
currentVersionNumber = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode;
} catch (Exception e) {}
/** Cleanup SharedPrefs - This will always check for the old "defaults" as well as cleanup the prefs to use the Android default. */
// sp.upgradePrefs();
if(savedVersionNumber <= 161) {
Helper.renameDB(mContext);
Helper.renameAndMoveBackups(mContext);
File intDB = mContext.getDatabasePath(MinistryDatabase.DATABASE_NAME);
File extDB = FileUtils.getExternalDBFile(mContext, "auto-db-v" + MinistryDatabase.DATABASE_VERSION + "-1.db");
/** Create a backup just in case */
try {
if(extDB != null) {
if(!extDB.exists())
extDB.createNewFile();
FileUtils.copyFile(intDB, extDB);
}
} catch (IOException e) { }
/** This is to recalculate everyone's roll over time entries. */
MinistryService database = new MinistryService(mContext);
database.openWritable();
//SimpleDateFormat dbDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
Calendar start = Calendar.getInstance(Locale.getDefault());
int pubID = 0;
/** Loop over each publisher for each available month to convert */
if(!database.isOpen())
database.openWritable();
Cursor pubs = database.fetchAllPublishers();
Cursor theDate;
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for(pubs.moveToFirst();!pubs.isAfterLast();pubs.moveToNext()) {
pubID = pubs.getInt(pubs.getColumnIndex(Publisher._ID));
/** Get first time entry date for publisher */
theDate = database.fetchPublisherFirstTimeEntry(pubID);
if(theDate.moveToFirst()) {
try {
start.setTime(TimeUtils.dbDateFormat.parse(theDate.getString(theDate.getColumnIndex(Time.DATE_START))));
database.processRolloverTime(pubID, start);
} catch (ParseException e) {
start = Calendar.getInstance(Locale.getDefault());
}
}
theDate.close();
}
pubs.close();
database.close();
}
PrefUtils.setVersionNumber(mContext,currentVersionNumber);
}
}