package fi.iki.murgo.irssinotifier;
import java.util.ArrayList;
import java.util.List;
import com.mobeta.android.dslv.DragSortListView;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
public class ChannelSettingsActivity extends ListActivity {
private List<Channel> channels;
private ArrayAdapter<String> adapter;
private Context ctx;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ctx = this;
DataAccess da = new DataAccess(this);
channels = da.getChannels();
List<String> channelNames = new ArrayList<String>();
for (Channel ch : channels)
channelNames.add(ch.getName());
setContentView(R.layout.channel_settings);
final DragSortListView lv = (DragSortListView) getListView();
lv.setDropListener(onDrop);
lv.setRemoveListener(onRemove);
lv.setOnItemLongClickListener(getOnItemLongClickListener());
adapter = new ArrayAdapter<String>(this, R.layout.channel_settings_row, R.id.label,
channelNames);
setListAdapter(adapter);
MessageBox.Show(this, null, "Drag channels from the grabber to reorder them, long press channel to remove it.", null);
}
@Override
protected void onDestroy() {
super.onDestroy();
int count = adapter.getCount();
List<String> names = new ArrayList<String>();
for (int i = 0; i < count; i++) {
names.add(adapter.getItem(i));
}
DataAccess da = new DataAccess(this);
for (Channel ch : channels) {
int order = -1;
int i = 0;
for (String n : names) {
if (n.equalsIgnoreCase(ch.getName())) {
order = i;
break;
}
i++;
}
if (order < 0) {
da.removeChannel(ch);
} else {
ch.setOrder(order);
da.updateChannel(ch);
}
}
IrssiNotifierActivity.refreshIsNeeded();
}
private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
String item = adapter.getItem(from);
adapter.remove(item);
adapter.insert(item, to);
}
};
private DragSortListView.RemoveListener onRemove = new DragSortListView.RemoveListener() {
@Override
public void remove(int which) {
adapter.remove(adapter.getItem(which));
}
};
private OnItemLongClickListener getOnItemLongClickListener() {
return new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position,
long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setMessage(
"Are you sure you want to remove channel " + adapter.getItem(position))
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
String item = adapter.getItem(position);
adapter.remove(item);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
}
};
}
}