package se.dat255.grupp12;
import android.app.ActionBar;
import android.app.FragmentManager;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
/**
* Created by Oscar on 2013-10-16.
*/
public class ContactTabsActivity extends FragmentActivity {
// When requested, this adapter returns a DemoObjectFragment,
// representing an object in the collection.
ContactPagerAdapter pagerAdapter;
ViewPager mViewPager;
private ArrayList<Contact> contacts;
private EditText name;
private EditText email;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_tabs_view);
final ActionBar actionBar = getActionBar();
getActionBar().setDisplayShowTitleEnabled(false);
getActionBar().setDisplayHomeAsUpEnabled(true);
contacts = getNameEmailDetails();
// ViewPager and its adapters use support library
// fragments, so use getSupportFragmentManager.
pagerAdapter = new ContactPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(pagerAdapter);
// Specify that tabs should be displayed in the action bar.
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Create a tab listener that is called when the user changes tabs.
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(ActionBar.Tab tab, android.app.FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, android.app.FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, android.app.FragmentTransaction fragmentTransaction) {
}
};
mViewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// When swiping between pages, select the
// corresponding tab.
getActionBar().setSelectedNavigationItem(position);
}
});
actionBar.addTab(actionBar.newTab()
.setText("New Contact")
.setTabListener(tabListener));
actionBar.addTab(actionBar.newTab()
.setText("Choose Contact")
.setTabListener(tabListener));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.add_people_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.add_people_button:
pressedAddContactsToList();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/**
* Adds the checked contacts to the list by modification to tell server, and locally
*/
public void pressedAddContactsToList() {
System.out.println("Adding contacts....");
for(Contact c : contacts){
if(c.getChecked()){
User userToAdd = new User(c.getName(), c.getEmail());
System.out.println("Added " + userToAdd.getEmail());
System.out.println("Added " + userToAdd.getName());
TodoList.addCollaboratorToCurrentTodo(userToAdd);
Modification.logPersonAddedToList(c, TodoList.getCurrentList().getId());
}
}
Toast.makeText(getApplicationContext(), "Collaborators added!", Toast.LENGTH_SHORT).show();
finish();
}
private ArrayList<Contact> getNameEmailDetails(){
//Get contactdetails with sql lookup
ArrayList<Contact> emlRecs = new ArrayList<Contact>();
Context context = this;
ContentResolver cr = context.getContentResolver();
String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_ID,
ContactsContract.CommonDataKinds.Email.DATA,
ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
String order = "CASE WHEN "
+ ContactsContract.Contacts.DISPLAY_NAME
+ " NOT LIKE '%@%' THEN 1 ELSE 2 END, "
+ ContactsContract.Contacts.DISPLAY_NAME
+ ", "
+ ContactsContract.CommonDataKinds.Email.DATA
+ " COLLATE NOCASE";
String filter = ContactsContract.CommonDataKinds.Email.DATA + " NOT LIKE ''";
Cursor cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, filter, null, order);
if (cur.moveToFirst()) {
do {
// Names and string as a contact
// 1 is for name, 3 is for mail
Contact contact = new Contact(cur.getString(1), cur.getString(3));
emlRecs.add(contact);
} while (cur.moveToNext());
}
cur.close();
return emlRecs;
}
public ArrayList<Contact> getContacts() {
return contacts;
}
/**
* Identifies checkbox with tag and sets the checked state of the contact
* @param view
*/
public void checkboxClicked(View view){
Integer position = (Integer) view.getTag();
CheckBox box = (CheckBox) view;
contacts.get(position).setChecked(box.isChecked());
}
public void addNewContact(String name, String email){
Contact c = new Contact(name, email);
Modification.logPersonAddedToList(c, TodoList.getCurrentList().getId());
TodoList.addCollaboratorToCurrentTodo(new User(c.getName(), c.getEmail()));
Toast.makeText(getApplicationContext(), "Collaborator added!", Toast.LENGTH_SHORT).show();
//
}
}