package org.droidplanner.android.dialogs.openfile;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.widget.Toast;
import com.o3dr.services.android.lib.drone.property.Parameter;
import org.droidplanner.android.R;
import org.droidplanner.android.utils.file.IO.ParameterReader;
import java.lang.ref.WeakReference;
import java.util.List;
public abstract class OpenParameterDialog extends OpenFileDialog {
private Activity activity;
@Override
public void openDialog(Activity activity, final String rootPath, final String[] fileList) {
this.activity = activity;
super.openDialog(activity, rootPath, fileList);
}
public abstract void parameterFileLoaded(String filename, List<Parameter> parameters);
@Override
public void onFileSelected(String filepath){
new OpenFileAsyncTask(this, filepath).execute();
}
private static class OpenFileAsyncTask extends AsyncTask<String, Void, Boolean> {
private final WeakReference<OpenParameterDialog> containerRef;
private final ProgressDialog progressDialog;
private final ParameterReader reader;
private final String filepath;
public OpenFileAsyncTask(OpenParameterDialog dialog, String filepath){
containerRef = new WeakReference<>(dialog);
this.reader = new ParameterReader();
this.filepath = filepath;
progressDialog = new ProgressDialog(dialog.activity);
progressDialog.setTitle("Processing...");
progressDialog.setMessage("Please wait.");
progressDialog.setIndeterminate(true);
}
@Override
protected void onPreExecute(){
progressDialog.show();
}
@Override
protected Boolean doInBackground(String... params) {
final OpenFileDialog ref = containerRef.get();
if(ref == null) return Boolean.FALSE;
boolean isFileOpen = reader.openFile(filepath);
return isFileOpen;
}
@Override
protected void onCancelled(){
if(progressDialog.isShowing())
progressDialog.dismiss();
}
@Override
protected void onPostExecute(Boolean result){
final OpenParameterDialog ref = containerRef.get();
if(ref != null){
if (result) {
Toast.makeText(ref.activity, R.string.status_file_opened, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ref.activity, R.string.error_when_opening_file,
Toast.LENGTH_SHORT).show();
}
ref.parameterFileLoaded(filepath, reader.getParameters());
}
if(progressDialog.isShowing())
progressDialog.dismiss();
}
}
}