package com.geored.gui;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import com.geored.rest.R;
import com.geored.rest.ServicioRestUsuarios;
import com.geored.rest.data.Usuario;
import com.geored.rest.exception.NotFoundException;
import com.geored.rest.exception.RestBlowUpException;
import com.geored.rest.exception.UnauthorizedException;
public class ContactosActivity extends GenericActivity {
@Override
protected void loadVista() {
setContentView(R.layout.activity_contactos);
loadListView();
registerForContextMenu(getListView());
}
@Override
protected void goToPreviousActivity(){
Intent setIntent = new Intent(this,UsuarioActivity.class);
startActivity(setIntent);
}
private void setListAdapter(ArrayAdapter<Usuario> adapter) {
getListView().setAdapter(adapter);
}
private ListAdapter getListAdapter() {
return getListView().getAdapter();
}
private ListView getListView() {
return ((ListView) findViewById(R.id.listView));
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_contactos, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
Usuario itemList = (Usuario)getListAdapter().getItem(info.position);
switch (item.getItemId()) {
// case R.id.menu_invitar_contacto:
// //showToast("Invitar: pos="+info.position +
// " , usr="+itemList.toString());
// showInvitar(itemList.toString());
// showToast("Contacto <"+itemList.toString()+"> invitado");
// return true;
case R.id.menu_iniciar_chat:
showChat(itemList.getId());
// showToast("Chat: pos="+info.position +
// " , usr="+itemList.toString());
return true;
default:
return super.onContextItemSelected(item);
}
}
private void showChat(String id) {
Intent i = new Intent(getApplicationContext(), ChatActivity.class);
i.putExtra("user_id", id);
startActivity(i);
}
private void loadListView() {
progressBar.show();
RegistryAsyncTask task = new RegistryAsyncTask();
task.execute();
}
private void loadListView(List<Usuario> usuarios) {
try {
if (usuarios != null) {
showToast("La cantidad de contactos es " + Integer.toString(usuarios.size()));
ArrayAdapter<Usuario> adapter = new UsuarioAdapter(ContactosActivity.this, R.layout.activity_chat_item, usuarios);
setListAdapter(adapter);
}
else {
showToast("Contactos invalidos: usuarios == null");
}
} catch (Exception ex) {
showToast(ex.getMessage());
}
}
private class RegistryAsyncTask extends AsyncTask<String, Void, List<Usuario>> {
@Override
protected List<Usuario> doInBackground(String... params) {
List<Usuario> usuarios = new ArrayList<Usuario>();
try {
usuarios = ServicioRestUsuarios.getContactos();
} catch (RestBlowUpException e) {
Log.e("ERROR", e.getMessage(), e);
} catch (NotFoundException e) {
Log.w("Warning", e.getMessage(), e);
} catch (UnauthorizedException e) {
Log.w("Warning", e.getMessage(), e);
}
return usuarios;
}
@Override
protected void onPostExecute(List<Usuario> result) {
if (result != null) {
loadListView(result);
}
else {
showToast("Error, resultado invalido de usuarios :(");
}
progressBar.dismiss();
}
}
}