package org.hansel.myAlert;
import java.util.ArrayList;
import java.util.HashMap;
import org.hansel.myAlert.Log.Log;
import org.hansel.myAlert.Utils.Contactos;
import org.hansel.myAlert.Utils.PreferenciasHancel;
import org.hansel.myAlert.Utils.Util;
import org.hansel.myAlert.dataBase.ContactoDAO;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
public class ConfigContactsActivity extends org.holoeverywhere.app.Activity{
private static final int REQ_CODE_CHOOSE_CONTACT = 0;
private static final int REQ_CODE_CHOOSE_NUMBERS = 1;
private ListView lvContactos;
private boolean isFromRegister=false;
private Contactos c;
private ContactoDAO contactoDAO;
private HashMap<String, ContactInfo> contactos;
private ArrayList<String> users;
private VerticalHashMapAdapterContacts mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_chooser);
c= new Contactos(getApplicationContext());
contactoDAO=new ContactoDAO(this);
contactoDAO.open();
contactos = creaAdapter();
mAdapter= new VerticalHashMapAdapterContacts(contactos, this);
lvContactos = (ListView)findViewById(R.id.lvContactos);
lvContactos.setAdapter(mAdapter);
View buttonWrapper = findViewById(R.id.btnWrapperContacts);
if(getIntent().getExtras()!=null && getIntent().getExtras().getBoolean("registro",false) )
{ // si viene de registro mostramos botones
isFromRegister=true;
//guardamos el paso en que se quedo
PreferenciasHancel.setCurrentWizardStep(ConfigContactsActivity.this, Util.REGISTRO_PASO_2);
buttonWrapper.setVisibility(View.VISIBLE);
findViewById(R.id.stepWrapperContacts).setVisibility(View.VISIBLE);
Button aceptar = (Button)findViewById(R.id.btnAceptarContactos);
aceptar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//pasamos al ultimo paso de las ONG
Intent i = new Intent(getApplicationContext(), PreferenceOng.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("registro", true);
startActivity(i);
}
});
Button cancButton= (Button)findViewById(R.id.btnCancelarContactos);
cancButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent reg = new Intent(getApplicationContext(), Registro.class);
reg.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
if(Util.isICS()) reg.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(reg);
}
});
}else
{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
lvContactos.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
ContactInfo _contInf = (ContactInfo) mAdapter.getItem(arg2);
//delete base de datos sql
String contactId = _contInf.get_id();
contactoDAO.deleteTurno(Integer.valueOf(contactId));
Toast.makeText(getApplicationContext(), "Removiendo: "+contactId, Toast.LENGTH_SHORT).show();
//remueve contacto basado en el ID contactId usar try, catch en caso de error
updateListView();
return true;
}
});
}
/* (non-Javadoc)
* @see android.app.Activity#onBackPressed()
*/
@Override
public void onBackPressed() {
if(!isFromRegister) // solo permite "atras" si no viene de registro
super.onBackPressed();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater infla = getSupportMenuInflater();
infla.inflate(R.menu.menu_contactos, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.CMD_ADD_CONTACT:
startContactPicker();
break;
}
return super.onOptionsItemSelected(item);
}
private void startContactPicker() {
// startActivityForResult(
// new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), REQ_CODE_CHOOSE_CONTACT);
startActivityForResult(
new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI), REQ_CODE_CHOOSE_CONTACT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE_CHOOSE_CONTACT:
if (resultCode == RESULT_OK) { // Success, contact chosen
// final String lookupKey = segments.get(segments.size() - 2);
final String contactId = data.getData().getLastPathSegment();
// final String lookupKey = segments.get(segments.size() - 2);
//final String contactId = segments.get(segments.size() - 1);
ContactInfo ci = c.getContacts(contactId);
if(ci!=null)
{
Log.v(ci.get_id());
if(contactoDAO.getList(Integer.valueOf(contactId))==0 && ci.getPhoneNumbers().size()>1)
{
launchPicker(contactId);
}else if(contactoDAO.getList(Integer.valueOf(contactId))==0 && ci.getPhoneNumbers().size()==1)
{
//si solo tiene un contacto no es necesario preguntar por que n�meros agregar
InsertaBD(ci.getPhoneNumbers(),contactId,ci.getPhotoId());
}else
{
Toast.makeText(getApplicationContext(), "Contacto Existente", Toast.LENGTH_SHORT).show();
}
}else
{
Toast.makeText(getApplicationContext(), "No contiene N�meros telef�nicos", Toast.LENGTH_SHORT).show();
//no inserta, no existen numeros telef�nicos
}
// updateListView();
}
break;
case REQ_CODE_CHOOSE_NUMBERS:
//actualizamos BD con los numeros seleccionados
if(resultCode==RESULT_OK)
{
String contactoId = data.getExtras().getString("id");
ArrayList<String> phoneNumbers = data.getExtras().getStringArrayList("phones");
//guardar los tel�fonos en la BD
InsertaBD(phoneNumbers, contactoId,contactoId);
}
break;
}
}
private void InsertaBD(ArrayList<String> phoneNumbers,String contactId,String photID) {
String csv ="";
try { //en caso que exista alg�n error
for (int i = 0; i < phoneNumbers.size(); i++) {
csv += phoneNumbers.get(i)+",";
}
csv = csv.length()>0? csv.substring(0,csv.length()-1) :"" ; //quitamos �ltima "coma,"
//csv =phoneNumbers.toString().substring(1, phoneNumbers.toString().length() - 2).replace(", ", ",");
} catch (Exception e) {
//usamos for para concatenar
for (int i = 0; i < phoneNumbers.size(); i++) {
csv += phoneNumbers.get(i)+",";
}
csv = csv.length()>0? csv.substring(0,csv.length()-1) :"" ; //quitamos �ltima "coma,"
}
//guardamos email
//String lista="";
/*if(emailList!=null && emailList.size()>0)
{
for (int i = 0; i < emailList.size(); i++) {
lista += emailList.get(i)+"|";
}
}*/
contactoDAO.Insertar(Integer.parseInt(contactId), csv,photID);
mAdapter.changeAdapter(creaAdapter());
}
private void launchPicker(String contactId) {
Log.v("Lanzando picker");
Intent cont = new Intent(getApplicationContext(),PickContactsDialog.class);
cont.putExtra("id", contactId);
startActivityForResult(cont, REQ_CODE_CHOOSE_NUMBERS);
}
private void updateListView() {
mAdapter.changeAdapter(creaAdapter());
}
private HashMap<String, ContactInfo> creaAdapter()
{
HashMap<String, ContactInfo> con= new HashMap<String, ContactInfo>();
ArrayList<String> us = getUsersSqlite();
for (String _usr : us) {
ContactInfo ci = c.getContacts(_usr);
if(ci!=null)
{
con.put(_usr, ci);
}
}
return con;
}
private ArrayList<String> getUsersSqlite()
{
users= new ArrayList<String>();
users.clear();
Cursor c = contactoDAO.getList();
if(c!=null)
{
while(c.moveToNext()){
int id = c.getInt(1);
users.add(Integer.toString(id));
}
}
//obtienes cursor y hace foreach y le haces put al ID de usuario
return users;
}
}