ContactDetailsActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import android.app.AlertDialog;
  4import android.content.DialogInterface;
  5import android.content.Intent;
  6import android.net.Uri;
  7import android.os.Bundle;
  8import android.provider.ContactsContract.CommonDataKinds;
  9import android.provider.ContactsContract.Contacts;
 10import android.provider.ContactsContract.Intents;
 11import android.view.Menu;
 12import android.view.MenuItem;
 13import android.view.View;
 14import android.view.View.OnClickListener;
 15import android.widget.CheckBox;
 16import android.widget.EditText;
 17import android.widget.QuickContactBadge;
 18import android.widget.TextView;
 19import eu.siacs.conversations.R;
 20import eu.siacs.conversations.entities.Contact;
 21import eu.siacs.conversations.entities.Presences;
 22import eu.siacs.conversations.utils.UIHelper;
 23
 24public class ContactDetailsActivity extends XmppActivity {
 25	public static final String ACTION_VIEW_CONTACT = "view_contact";
 26
 27	protected ContactDetailsActivity activity = this;
 28
 29	private String uuid;
 30	private Contact contact;
 31
 32	private EditText name;
 33	private TextView contactJid;
 34	private TextView accountJid;
 35	private TextView status;
 36	private CheckBox send;
 37	private CheckBox receive;
 38	private QuickContactBadge badge;
 39
 40	private DialogInterface.OnClickListener removeFromRoster = new DialogInterface.OnClickListener() {
 41
 42		@Override
 43		public void onClick(DialogInterface dialog, int which) {
 44			activity.xmppConnectionService.deleteContact(contact);
 45			activity.finish();
 46		}
 47	};
 48
 49	private DialogInterface.OnClickListener editContactNameListener = new DialogInterface.OnClickListener() {
 50
 51		@Override
 52		public void onClick(DialogInterface dialog, int which) {
 53			contact.setDisplayName(name.getText().toString());
 54			activity.xmppConnectionService.updateContact(contact);
 55			populateView();
 56		}
 57	};
 58
 59	private DialogInterface.OnClickListener addToPhonebook = new DialogInterface.OnClickListener() {
 60
 61		@Override
 62		public void onClick(DialogInterface dialog, int which) {
 63			Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
 64			intent.setType(Contacts.CONTENT_ITEM_TYPE);
 65			intent.putExtra(Intents.Insert.IM_HANDLE, contact.getJid());
 66			intent.putExtra(Intents.Insert.IM_PROTOCOL,
 67					CommonDataKinds.Im.PROTOCOL_JABBER);
 68			intent.putExtra("finishActivityOnSaveCompleted", true);
 69			activity.startActivityForResult(intent, 0);
 70		}
 71	};
 72	private OnClickListener onBadgeClick = new OnClickListener() {
 73
 74		@Override
 75		public void onClick(View v) {
 76			AlertDialog.Builder builder = new AlertDialog.Builder(activity);
 77			builder.setTitle("Add to phone book");
 78			builder.setMessage("Do you want to add " + contact.getJid()
 79					+ " to your phones contact list?");
 80			builder.setNegativeButton("Cancel", null);
 81			builder.setPositiveButton("Add", addToPhonebook);
 82			builder.create().show();
 83		}
 84	};
 85
 86	@Override
 87	protected void onCreate(Bundle savedInstanceState) {
 88		super.onCreate(savedInstanceState);
 89		if (getIntent().getAction().equals(ACTION_VIEW_CONTACT)) {
 90			this.uuid = getIntent().getExtras().getString("uuid");
 91		}
 92		setContentView(R.layout.activity_contact_details);
 93
 94		contactJid = (TextView) findViewById(R.id.details_contactjid);
 95		accountJid = (TextView) findViewById(R.id.details_account);
 96		status = (TextView) findViewById(R.id.details_contactstatus);
 97		send = (CheckBox) findViewById(R.id.details_send_presence);
 98		receive = (CheckBox) findViewById(R.id.details_receive_presence);
 99		badge = (QuickContactBadge) findViewById(R.id.details_contact_badge);
100
101		getActionBar().setHomeButtonEnabled(true);
102		getActionBar().setDisplayHomeAsUpEnabled(true);
103
104	}
105
106	@Override
107	public boolean onOptionsItemSelected(MenuItem menuItem) {
108		AlertDialog.Builder builder = new AlertDialog.Builder(this);
109		builder.setNegativeButton("Cancel", null);
110		switch (menuItem.getItemId()) {
111		case android.R.id.home:
112			finish();
113			break;
114		case R.id.action_delete_contact:
115			builder.setTitle("Delete from roster")
116					.setMessage(getString(R.string.remove_contact_text, contact.getJid()))
117					.setPositiveButton("Delete", removeFromRoster).create()
118					.show();
119			break;
120		case R.id.action_edit_contact:
121			if (contact.getSystemAccount() == null) {
122				
123				View view = (View) getLayoutInflater().inflate(R.layout.edit_contact_name, null);
124				name = (EditText) view.findViewById(R.id.editText1);
125				name.setText(contact.getDisplayName());
126				builder.setView(view)
127			.setTitle(contact.getJid())
128						.setPositiveButton("Edit", editContactNameListener)
129						.create().show();
130
131			} else {
132				Intent intent = new Intent(Intent.ACTION_EDIT);
133				String[] systemAccount = contact.getSystemAccount().split("#");
134				long id = Long.parseLong(systemAccount[0]);
135				Uri uri = Contacts.getLookupUri(id, systemAccount[1]);
136				intent.setDataAndType(uri,Contacts.CONTENT_ITEM_TYPE);
137				intent.putExtra("finishActivityOnSaveCompleted", true);
138			    startActivity(intent);
139			}
140			break;
141		}
142		return super.onOptionsItemSelected(menuItem);
143	}
144
145	@Override
146	public boolean onCreateOptionsMenu(Menu menu) {
147		getMenuInflater().inflate(R.menu.contact_details, menu);
148		return true;
149	}
150	
151	private void populateView() {
152		setTitle(contact.getDisplayName());
153		if (contact.getSubscriptionOption(Contact.Subscription.FROM)) {
154			send.setChecked(true);
155		} else {
156			send.setText("Preemptively grant subscription request");
157			if (contact
158					.getSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT)) {
159				send.setChecked(true);
160			} else {
161				send.setChecked(false);
162			}
163		}
164		if (contact.getSubscriptionOption(Contact.Subscription.TO)) {
165			receive.setChecked(true);
166		} else {
167			receive.setText("Request presence updates");
168			if (contact
169					.getSubscriptionOption(Contact.Subscription.ASKING)) {
170				receive.setChecked(true);
171			} else {
172				receive.setChecked(false);
173			}
174		}
175
176		switch (contact.getMostAvailableStatus()) {
177		case Presences.CHAT:
178			status.setText("free to chat");
179			status.setTextColor(0xFF83b600);
180			break;
181		case Presences.ONLINE:
182			status.setText("online");
183			status.setTextColor(0xFF83b600);
184			break;
185		case Presences.AWAY:
186			status.setText("away");
187			status.setTextColor(0xFFffa713);
188			break;
189		case Presences.XA:
190			status.setText("extended away");
191			status.setTextColor(0xFFffa713);
192			break;
193		case Presences.DND:
194			status.setText("do not disturb");
195			status.setTextColor(0xFFe92727);
196			break;
197		case Presences.OFFLINE:
198			status.setText("offline");
199			status.setTextColor(0xFFe92727);
200			break;
201		default:
202			status.setText("offline");
203			status.setTextColor(0xFFe92727);
204			break;
205		}
206		contactJid.setText(contact.getJid());
207		accountJid.setText(contact.getAccount().getJid());
208
209		UIHelper.prepareContactBadge(this, badge, contact);
210
211		if (contact.getSystemAccount() == null) {
212			badge.setOnClickListener(onBadgeClick);
213		}
214	}
215
216	@Override
217	public void onBackendConnected() {
218		if (uuid != null) {
219			this.contact = xmppConnectionService.findContact(uuid);
220			if (this.contact != null) {
221				populateView();
222			}
223		}
224	}
225
226}