package us.achromaticmetaphor.imcktg; import java.io.IOException; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; public class AsyncGenerateMorseTones extends AsyncTask<AsyncGenerateMorseTones.Params, Void, Tone []> { public static interface Listener { public abstract void onFinished(boolean succeeded); } public static class Params { private final Context c; private final String s; private final ToneGenerator gen; private final Listener l; private final Uri contacturi; private final Intent i; public Params(Listener l, Context c, String s, ToneGenerator gen, Uri contacturi, Intent i) { this.l = l; this.c = c; this.s = s; this.gen = gen; this.contacturi = contacturi; this.i = i; } public Tone gentone() { try { Tone tone = Tone.generateTone(c, s, gen, i); if (contacturi != null) tone.assign(c, contacturi); else tone.assignDefault(c, i); return tone; } catch (IOException e) { return null; } } } private Params [] params; @Override protected Tone [] doInBackground(Params... params) { this.params = params; Tone [] tones = new Tone [params.length]; for (int i = 0; i < params.length; i++) tones[i] = params[i].gentone(); return tones; } @Override protected void onPostExecute(Tone [] tones) { for (int i = 0; i < tones.length; i++) params[i].l.onFinished(tones[i] != null); } }