package com.geored.gui;
import java.util.ArrayList;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import com.geored.rest.R;
import com.geored.rest.ServicioRestGCM;
import com.geored.rest.data.Mensaje;
import com.geored.rest.exception.NotFoundException;
import com.geored.rest.exception.RestBlowUpException;
import com.geored.rest.exception.UnauthorizedException;
public class ChatActivity extends GenericActivity {
private ListView listView;
private Button enviarButton;
private List<Mensaje> data;
private MensajeAdapter adapter;
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Mensaje mensaje = new Mensaje();
mensaje.setMessage(intent.getExtras().getString("mensaje"));
mensaje.setIdUsuario(intent.getExtras().getInt("idUsuario"));
data.add(mensaje);
adapter.notifyDataSetChanged();
}
};
@Override
protected void goToPreviousActivity(){
Intent setIntent = new Intent(this,ContactosActivity.class);
startActivity(setIntent);
}
protected void loadVista() {
setContentView(R.layout.activity_chat);
Bundle extras = getIntent().getExtras();
final String value = extras.getString("user_id");
TextView txtView = (TextView)findViewById(R.id.textView2);
txtView.setText(value);
data = new ArrayList<Mensaje>();
adapter = new MensajeAdapter(this, R.layout.activity_chat_item, data);
listView = (ListView)findViewById(R.id.chatlistView);
View footer = (View) getLayoutInflater().inflate(R.layout.activity_chat_footer_row, null);
listView.addFooterView(footer);
enviarButton = (Button)findViewById(R.id.enviarButton);
enviarButton.setOnClickListener(new Button.OnClickListener() {
public void onClick (View v) {
progressBar.show();
String text = ((EditText) findViewById(R.id.txtTextoEnviar)).getText().toString();
Mensaje mensaje = new Mensaje();
mensaje.setIdUsuario(0);
mensaje.setMessage(text);
data.add(mensaje);
adapter.notifyDataSetChanged();
EnviarAsyncTask task = new EnviarAsyncTask();
task.execute(new String[] { text, value });
}
});
listView.setAdapter(adapter);
registerReceiver(mHandleMessageReceiver, new IntentFilter("com.google.android.gcm.demo.app.DISPLAY_MESSAGE"));
}
private Mensaje enviarMensaje(String mensaje, String id) throws RestBlowUpException, UnauthorizedException{
Mensaje msj = new Mensaje(Integer.parseInt(id), mensaje);
try {
ServicioRestGCM.enviarMensaje(msj);
} catch (NotFoundException e) {
Log.i("INFO", "El usuario " + id + " no esta conetado.");
}
return msj;
}
private class EnviarAsyncTask extends AsyncTask<String, Void, Mensaje> {
@Override
protected Mensaje doInBackground(String... params) {
try {
return enviarMensaje(params[0], params[1]);
}
catch (RestBlowUpException e) {
Log.e("Error", "Rest blow up!", e);
}
catch (UnauthorizedException e) {
Log.w("Warning", "Unautorized!", e);
}
catch(Exception ex){
showToast("error al mandar el mensaje");
}
return null;
}
@Override
protected void onPostExecute(Mensaje result) {
if (result != null){
showToast("Mensaje enviado");
}
else{
showToast("Error al enviar el mensaje");
}
progressBar.dismiss();
}
}
}