package com.sogouchat.ui;
import com.sogouchat.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CompoundButton.OnCheckedChangeListener;
/**
*
* @author Chonwhite 06/19/2011
*
*/
public class ContactSelectActivity extends Activity {
private static final int NORMAL_MODE = 1025;
private static final int EDIT_MODE = 1026;
Activity mActivity;
private int displayMode = NORMAL_MODE;
private Button toEditModeButton;
private ListView normalModeList;
private ListView editModeList;
private Button toNormalModeButton;
private Button deleteButton;
private EditModeAdapter editModeAdapter;
private NormalModeAdapter normalModeAdapter;
// define a class to store data
class Song {
Song(String title, String artist, String duration) {
this.title = title;
this.artist = artist;
this.duration = duration;
}
String title;
String artist;
String duration;
@Override
public String toString() {
return title + "(" + artist + ")";
}
}
// simulated data
Song[] mySongCollection = new Song[] {
new Song("Bonny Bonny", "Cara Dillon", "03:45"),
new Song("Dangerous", "Michael Jackson", "07:00"),
new Song("Numb", "Linkin Park", "03:45"),
new Song("My Love", "Westlife", "03:45"),
new Song("Hero", "Mariah Carey", "04:23"),
new Song("Hotel Carlifornia", "Eagle", "07:13"),
new Song("One I Love", "Meav", "02:56"),
new Song("Flying Without Wing", "Westlife", "03:45"),
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = this;// for further usage;
initUI();
};
private void initUI() {
if (displayMode == NORMAL_MODE) {
toNormalMode();
} else {
toEditMode();
}
};
private void toEditMode() {
displayMode = EDIT_MODE;
this.setContentView(R.layout.multiselection_edit);
editModeList = (ListView) findViewById(R.id.editModeList);
editModeAdapter = new EditModeAdapter();
editModeList.setAdapter(editModeAdapter);
editModeList.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position,
long id) {
editModeAdapter.toggle(position);
}
});
editModeList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
toNormalModeButton = (Button) findViewById(R.id.toNormalModeButton);
toNormalModeButton.setOnClickListener(new SwitchModeButtonListener());
deleteButton = (Button) findViewById(R.id.editModeDeleteButton);
deleteButton.setOnClickListener(new DeleteButtonListener());
};
private void toNormalMode() {
displayMode = NORMAL_MODE;
this.setContentView(R.layout.multiselection_normal);
normalModeList = (ListView) findViewById(R.id.normalModeList);
normalModeAdapter = new NormalModeAdapter();
normalModeList.setAdapter(normalModeAdapter);
toEditModeButton = (Button) findViewById(R.id.toEditModeButton);
toEditModeButton.setOnClickListener(new SwitchModeButtonListener());
}
class SwitchModeButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
if (displayMode == NORMAL_MODE)
toEditMode();
else
toNormalMode();
}
}
class DeleteButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
int[] selectedItemIndexes = editModeAdapter.getSelectedItemIndexes();
int size = selectedItemIndexes.length;
if (size == 0) {
Toast.makeText(mActivity, "Nothing to delete",
Toast.LENGTH_SHORT).show();
} else {
AlertDialog.Builder confirmDeletionDialog = new AlertDialog.Builder(
mActivity);
StringBuilder deletionList = new StringBuilder();
for(int i = 0; i < size; i++){
deletionList.append(mySongCollection[selectedItemIndexes[i]].toString() + " , ");
};
confirmDeletionDialog.setTitle("Delete");
confirmDeletionDialog.setMessage("Are you sure you want to delete " + deletionList
+ " ?");
confirmDeletionDialog.setPositiveButton("Yes,I'm sure", null);
confirmDeletionDialog.setNegativeButton("No,I regret", null);
confirmDeletionDialog.create().show();
}
}
}
static class ViewHolderNormal {
TextView titleText;
TextView artistText;
TextView durationText;
}
class NormalModeAdapter extends BaseAdapter {
LayoutInflater inflater = null;
@Override
public int getCount() {
return mySongCollection.length;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderNormal viewHolder;
if (convertView == null) {
if (inflater == null) {
inflater = (LayoutInflater) mActivity
.getSystemService(LAYOUT_INFLATER_SERVICE);
}
convertView = inflater.inflate(R.layout.item_contact_select__normal, null);
viewHolder = new ViewHolderNormal();
viewHolder.artistText = (TextView) convertView
.findViewById(R.id.artistTextNormal);
viewHolder.titleText = (TextView) convertView
.findViewById(R.id.titleTextNormal);
viewHolder.durationText = (TextView) convertView
.findViewById(R.id.durationTextNormal);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolderNormal) convertView.getTag();
}
viewHolder.titleText.setText(mySongCollection[position].title);
viewHolder.artistText.setText(mySongCollection[position].artist);
viewHolder.durationText
.setText(mySongCollection[position].duration);
return convertView;
}
}
static class ViewHolderEdit {
TextView titleText;
TextView artistText;
TextView durationText;
CheckBox checkBox;
}
class EditModeAdapter extends BaseAdapter {
LayoutInflater inflater = null;
boolean[] itemStatus;
{
itemStatus = new boolean[mySongCollection.length];
}
@Override
public int getCount() {
return mySongCollection.length;
}
@Override
public Object getItem(int arg0) {
return null;
}
public void toggle(int position){
if(itemStatus[position] == true){
itemStatus[position] = false;
}else{
itemStatus[position] = true;
}
this.notifyDataSetChanged();//date changed and we should refresh the view
}
@Override
public long getItemId(int arg0) {
return 0;
}
public int[] getSelectedItemIndexes() {
if (itemStatus == null || itemStatus.length == 0) {
return new int[0];
} else {
int size = itemStatus.length;
int counter = 0;
// TODO how can we skip this iteration?
for (int i = 0; i < size; i++) {
if (itemStatus[i] == true)
++counter;
}
int[] selectedIndexes = new int[counter];
int index = 0;
for (int i = 0; i < size; i++) {
if (itemStatus[i] == true)
selectedIndexes[index++] = i;
}
return selectedIndexes;
}
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderEdit viewHolder;
if (convertView == null) {
if (inflater == null) {
inflater = (LayoutInflater) mActivity
.getSystemService(LAYOUT_INFLATER_SERVICE);
}
convertView = inflater.inflate(R.layout.item_contact_select_edit, null);
viewHolder = new ViewHolderEdit();
viewHolder.artistText = (TextView) convertView
.findViewById(R.id.artistTextEdit);
viewHolder.titleText = (TextView) convertView
.findViewById(R.id.titleTextEdit);
viewHolder.durationText = (TextView) convertView
.findViewById(R.id.durationTextEdit);
viewHolder.checkBox = (CheckBox) convertView
.findViewById(R.id.checkBoxEdit);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolderEdit) convertView.getTag();
}
viewHolder.titleText.setText(mySongCollection[position].title);
viewHolder.artistText.setText(mySongCollection[position].artist);
viewHolder.durationText
.setText(mySongCollection[position].duration);
viewHolder.checkBox
.setOnCheckedChangeListener(new MyCheckBoxChangedListener(
position));
if (itemStatus[position] == true) {
viewHolder.checkBox.setChecked(true);
} else {
viewHolder.checkBox.setChecked(false);
}
return convertView;
}
class MyCheckBoxChangedListener implements OnCheckedChangeListener {
int position;
MyCheckBoxChangedListener(int position) {
this.position = position;
}
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
System.out.println("" + position + "Checked?:" + isChecked);
if (isChecked)
itemStatus[position] = true;
else
itemStatus[position] = false;
}
}
}
}