package net.bradmont.openmpd.controllers; import net.bradmont.openmpd.*; import net.bradmont.openmpd.models.*; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.preference.PreferenceManager; import net.bradmont.openmpd.helpers.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.EditText; import android.widget.TextView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleCursorAdapter; /* * Manage Quick Action messages, including selecting and sending messages, * adding and editing message templates. */ public class QuickMessenger { protected Contact contact; protected String messageFilter = null; private Activity activity=null; public QuickMessenger(Activity activity, Contact contact, String messageFilter){ this.activity=activity; this.contact=contact; this.messageFilter = messageFilter; } public QuickMessenger(Activity activity, Contact contact){ this.activity=activity; this.contact=contact; } public void showQuickMessageDialog(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(OpenMPD.get()); if (!prefs.getBoolean("pref_message_templates_enabled", false)){ sendMessage(null, "", ""); return; } String sql; if (messageFilter != null){ sql = "select _id, name, subject, body from quick_message where notification_type = '" + messageFilter+ "' order by name;"; } else { sql = "select _id, name, subject, body from quick_message order by name;"; } AlertDialog.Builder ad = new AlertDialog.Builder(activity); ad.setTitle(R.string.choose_a_template); ad.setPositiveButton(R.string.send_blank, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { sendMessage(null, "", ""); } }); ad.setNegativeButton(R.string.new_template, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { showEditTemplateDialog(null); } }); // set up listview ListView message_list = (ListView) ((LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) .inflate(R.layout.dialog_list, null); Cursor cur = MPDDBHelper.get().getReadableDatabase().rawQuery(sql, null); SimpleCursorAdapter adapter = new SimpleCursorAdapter(activity, R.layout.quick_message_list_item, cur, new String [] {"name"}, new int [] {R.id.name}); message_list.setAdapter(adapter); final AlertDialog dialog = ad.create(); message_list.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, final View view, int position, long id) { QuickMessage message = new QuickMessage((int)id); showPreview(message, dialog); } }); dialog.setView(message_list); dialog.show(); } public void showPreview(final QuickMessage message, final Dialog parentDialog){ // show a preview of the message, and the option to show it AlertDialog.Builder builder = new AlertDialog.Builder(activity); final String body = message.getString("body").replace("$name", contact.getString("fname")); final String subject = message.getString("subject").replace("$name", contact.getString("fname")); builder.setMessage(body) .setTitle(message.getString("subject")); builder.setPositiveButton(R.string.send, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { sendMessage(message, subject, body); parentDialog.dismiss(); } }); builder.setNeutralButton(R.string.edit_template, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { showEditTemplateDialog(message); parentDialog.dismiss(); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } }); builder.show(); } private void showEditTemplateDialog(final QuickMessage message){ AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(R.string.edit_email_template); final LinearLayout layout = (LinearLayout) ((LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) .inflate(R.layout.quick_message_edit, null); builder.setView(layout); if (message != null){ ((EditText) layout.findViewById(R.id.name)) .setText(message.getString("name")); ((EditText) layout.findViewById(R.id.email_subject)) .setText(message.getString("subject")); ((EditText) layout.findViewById(R.id.email_body)) .setText(message.getString("body")); } builder.setPositiveButton(R.string.save_and_send, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { saveTemplate(message, layout); String body = message.getString("body").replace("$name", contact.getString("fname")); String subject = message.getString("subject").replace("$name", contact.getString("fname")); sendMessage(message, subject, body); } }); builder.setNeutralButton(R.string.save, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { saveTemplate(message, layout); ((BaseActivity) activity).userMessage(R.string.saved); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } }); builder.show(); } private void saveTemplate(QuickMessage message, LinearLayout layout){ if (message == null){ message = new QuickMessage(); message.setValue("notification_type", messageFilter); } message.setValue("name", ((EditText) layout.findViewById(R.id.name)).getText().toString()); message.setValue("subject", ((EditText) layout.findViewById(R.id.email_subject)).getText().toString()); message.setValue("body", ((EditText) layout.findViewById(R.id.email_body)).getText().toString()); message.setValue("customized", true); message.dirtySave(); } private void sendMessage(QuickMessage message, String subject, String body){ String recipient_address = ""; try { EmailAddress email = (EmailAddress) MPDDBHelper .getModelByField("email_address", "contact_id", contact.getInt("id")); recipient_address = email.getString("address"); } catch (Exception e){ Log.i("net.bradmont.openmpd", "Problem getting email address"); } Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, new String [] {recipient_address}); if (message != null){ intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_TEXT, body); } activity.startActivity( Intent.createChooser(intent, "Send Email")); } }