package org.sana.android.task; import java.util.List; import org.sana.R; import org.sana.android.Constants; import org.sana.android.util.EnvironmentUtil; import org.sana.android.util.SanaUtil; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.Environment; import android.util.Log; import android.widget.Toast; /** * A task for importing a list of Procedures into the database. * * @author Sana Development Team * */ public class ImportProcedureAll extends AsyncTask<Context, Void, Integer> { private static final String TAG = ImportProcedureAll.class.getSimpleName(); private ProgressDialog progressDialog; private Context mContext = null; // TODO context leak? private List<String> locations; private Integer completed = 0; private Integer duplicates = 0; private Integer importError = 0; private String err = ""; /** * A new task for importing a list of procedures. * * @param c the Context to import into * @param locations a list of Procedure file paths */ public ImportProcedureAll(Context c, List<String> locations) { this.mContext = c; this.locations = locations; } /** {@inheritDoc} */ @Override protected Integer doInBackground(Context... params) { Log.i(TAG, "Executing Import from SD"); String mount = Environment.getExternalStorageState(); if(!mount.equals(Environment.MEDIA_MOUNTED)) return 2; String path = EnvironmentUtil.getProcedureDirectory(); Context c = params[0]; try { for (String location:locations){ switch(SanaUtil.insertProcedureFromSd(c, path + location)){ case 0: completed +=1; break; case 1: duplicates +=1; break; case 2: importError +=1; break; } } } catch (Exception e) { // TODO Auto-generated catch block err = e.getMessage(); Log.v(TAG, err); importError +=1; } if (importError>0){ return 2; }else if(duplicates>0){ return 1; } return 0; } /** {@inheritDoc} */ @Override protected void onPreExecute() { Log.i(TAG, "About to execute ImportProcedureAll"); if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } progressDialog = new ProgressDialog(mContext); progressDialog.setMessage(mContext.getString(R.string.import_proc_all)); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.show(); } /** {@inheritDoc} */ @Override protected void onPostExecute(Integer result) { Log.i(TAG, "Completed ImportProcedure"); if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } switch (result) { case 0: Toast.makeText(mContext, "All Procedures inserted into Database.", Toast.LENGTH_LONG).show(); break; case 1: SanaUtil.errorAlert(this.mContext, "Done: "+completed +"\nDuplicates: "+duplicates+"\nImport Errors: " +importError); break; case 2: SanaUtil.errorAlert(this.mContext, "Done: "+completed+ "\nDuplicates: "+duplicates+"\nImport Errors: " +importError); break; } } }