//------------------------------------------------------------------------------
// Copyright (c) 2012 Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
package com.microsoft.live.sample.hotmail;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.microsoft.live.LiveConnectClient;
import com.microsoft.live.LiveOperation;
import com.microsoft.live.LiveOperationException;
import com.microsoft.live.LiveOperationListener;
import com.microsoft.live.sample.LiveSdkSampleApplication;
import com.microsoft.live.sample.R;
import com.microsoft.live.sample.util.JsonKeys;
public class ContactsActivity extends ListActivity {
private class CreateContactDialog extends Dialog {
public CreateContactDialog(Context context) {
super(context);
setContentView(R.layout.create_contact);
final EditText firstName = (EditText) findViewById(R.id.firstNameEditText);
final EditText lastName = (EditText) findViewById(R.id.lastNameEditText);
final RadioGroup gender = (RadioGroup) findViewById(R.id.genderRadioGroup);
findViewById(R.id.saveButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ProgressDialog progDialog = ProgressDialog.show(ContactsActivity.this,
"",
"Saving. Please wait...");
JSONObject body = new JSONObject();
try {
body.put(JsonKeys.FIRST_NAME, firstName.getText().toString());
body.put(JsonKeys.LAST_NAME, lastName.getText().toString());
switch (gender.getCheckedRadioButtonId()) {
case R.id.maleRadio: {
body.put(JsonKeys.GENDER, "male");
break;
}
case R.id.femaleRadio: {
body.put(JsonKeys.GENDER, "female");
break;
}
}
} catch (JSONException e) {
showToast(e.getMessage());
return;
}
mClient.postAsync("me/contacts", body, new LiveOperationListener() {
@Override
public void onError(LiveOperationException exception,
LiveOperation operation) {
progDialog.dismiss();
showToast(exception.getMessage());
}
@Override
public void onComplete(LiveOperation operation) {
progDialog.dismiss();
JSONObject result = operation.getResult();
if (result.has(JsonKeys.ERROR)) {
JSONObject error = result.optJSONObject(JsonKeys.ERROR);
String message = error.optString(JsonKeys.MESSAGE);
String code = error.optString(JsonKeys.CODE);
showToast(code + ": " + message);
} else {
loadContacts();
dismiss();
}
}
});
}
});
}
}
private class ContactsListAdapter extends BaseAdapter {
private final LayoutInflater mInflater;
private final ArrayList<Contact> mContacts;
public ContactsListAdapter(Context context) {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mContacts = new ArrayList<Contact>();
}
public ArrayList<Contact> getContacts() {
return mContacts;
}
@Override
public int getCount() {
return mContacts.size();
}
@Override
public Contact getItem(int position) {
return mContacts.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView != null ? convertView :
mInflater.inflate(R.layout.view_contacts_list_item,
parent,
false);
TextView name = (TextView) v.findViewById(R.id.nameTextView);
Contact contact = getItem(position);
name.setText(contact.getName());
return v;
}
}
private class ViewContactDialog extends Dialog {
private final Contact mContact;
public ViewContactDialog(Context context, Contact contact) {
super(context);
assert contact != null;
mContact = contact;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_contact);
((TextView) findViewById(R.id.idTextView)).setText("Id: " + mContact.getId());
((TextView) findViewById(R.id.nameTextView)).setText("Name: " + mContact.getName());
((TextView) findViewById(R.id.genderTextView)).setText("Gender: " + mContact.getGender());
((TextView) findViewById(R.id.isFriendTextView)).setText("Is Friend?: " + mContact.getIsFriend());
((TextView) findViewById(R.id.isFavoriteTextView)).setText("Is Favorite?: " + mContact.getIsFavorite());
((TextView) findViewById(R.id.userIdTextView)).setText("User Id: " + mContact.getUserId());
((TextView) findViewById(R.id.updatedTimeTextView)).setText("Updated Time: " + mContact.getUpdatedTime());
}
}
private LiveConnectClient mClient;
private ContactsListAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_contacts);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Contact contact = (Contact) parent.getItemAtPosition(position);
ViewContactDialog dialog = new ViewContactDialog(ContactsActivity.this, contact);
dialog.setOwnerActivity(ContactsActivity.this);
dialog.show();
}
});
LinearLayout layout = new LinearLayout(this);
Button newCalendarButton = new Button(this);
newCalendarButton.setText("New Contact");
newCalendarButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CreateContactDialog dialog = new CreateContactDialog(ContactsActivity.this);
dialog.setOwnerActivity(ContactsActivity.this);
dialog.show();
}
});
layout.addView(newCalendarButton);
lv.addHeaderView(layout);
mAdapter = new ContactsListAdapter(this);
setListAdapter(mAdapter);
LiveSdkSampleApplication app = (LiveSdkSampleApplication) getApplication();
mClient = app.getConnectClient();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Since this activity is part of a TabView we want to send
// the back button to the TabView activity.
if (keyCode == KeyEvent.KEYCODE_BACK) {
return false;
} else {
return super.onKeyDown(keyCode, event);
}
}
@Override
protected void onStart() {
super.onStart();
loadContacts();
}
private void loadContacts() {
final ProgressDialog progDialog =
ProgressDialog.show(this, "", "Loading. Please wait...", true);
mClient.getAsync("me/contacts", new LiveOperationListener() {
@Override
public void onError(LiveOperationException exception, LiveOperation operation) {
progDialog.dismiss();
showToast(exception.getMessage());
}
@Override
public void onComplete(LiveOperation operation) {
progDialog.dismiss();
JSONObject result = operation.getResult();
if (result.has(JsonKeys.ERROR)) {
JSONObject error = result.optJSONObject(JsonKeys.ERROR);
String message = error.optString(JsonKeys.MESSAGE);
String code = error.optString(JsonKeys.CODE);
showToast(code + ": " + message);
return;
}
ArrayList<Contact> contacts = mAdapter.getContacts();
contacts.clear();
JSONArray data = result.optJSONArray(JsonKeys.DATA);
for (int i = 0; i < data.length(); i++) {
Contact contact = new Contact(data.optJSONObject(i));
contacts.add(contact);
}
mAdapter.notifyDataSetChanged();
}
});
}
private void showToast(String message) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}