package org.sana.android.task; import org.sana.android.util.SanaUtil; import android.app.ProgressDialog; import android.content.Context; import android.net.Uri; import android.os.AsyncTask; import android.util.Log; /** * Task for resetting the application database. * * @author Sana Development Team * */ public class ResetDatabaseTask extends AsyncTask<Context, Void, Integer> { private static final String TAG = ResetDatabaseTask.class.getSimpleName(); private ProgressDialog progressDialog; private Context mContext = null; // TODO context leak? private boolean quiet = false; private Uri[] uris = new Uri[0]; /** * A new task for resetting the database. * @param c the current Context. */ public ResetDatabaseTask(Context c) { this.mContext = c; } /** * A new task for resetting the database. * @param c the current Context. */ public ResetDatabaseTask(Context c, boolean quiet) { this.mContext = c; this.quiet = quiet; } /** * A new task for resetting the database. * @param c the current Context. */ public ResetDatabaseTask(Context c, boolean quiet, Uri[] uris) { this.mContext = c; this.quiet = quiet; this.uris = new Uri[uris.length]; int index = 0; for(Uri uri:uris){ this.uris[index] = uri; index++; } } /** {@inheritDoc} */ @Override protected Integer doInBackground(Context... params) { Log.i(TAG, "Executing ResetDatabaseTask"); Context c = params[0]; try{ SanaUtil.clearDatabase(c); for(Uri uri:uris){ Log.d(TAG, "Clearing: " + uri); c.getContentResolver().delete(uri, null, null); } SanaUtil.loadDefaultDatabase(c); } catch(Exception e){ Log.e(TAG, "Could not sync. " + e.toString()); } return 0; } /** {@inheritDoc} */ @Override protected void onPreExecute() { Log.i(TAG, "About to execute ResetDatabaseTask"); if(quiet) return; if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } progressDialog = new ProgressDialog(mContext); progressDialog.setMessage("Clearing Database"); // TODO i18n progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.show(); } /** {@inheritDoc} */ @Override protected void onPostExecute(Integer result) { Log.i(TAG, "Completed ResetDatabaseTask"); if(quiet) return; if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } }