package org.yaxim.androidclient.dialogs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.yaxim.androidclient.MainWindow;
import org.yaxim.androidclient.R;
import org.yaxim.androidclient.util.StatusMode;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AutoCompleteTextView;
public class ChangeStatusDialog extends AlertDialog {
private final Spinner mStatus;
private final AutoCompleteTextView mMessage;
private final MainWindow mContext;
public ChangeStatusDialog(final MainWindow context, final StatusMode status_mode,
final String status_message, final String[] status_message_history) {
super(context);
mContext = context;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View group = inflater.inflate(R.layout.statusview, null, false);
List<StatusMode> modes = new ArrayList<StatusMode>(
Arrays.asList(StatusMode.values()));
// the user can not set statusmode "subscribe", it is only for incoming presences
modes.remove(StatusMode.subscribe);
Collections.sort(modes, new Comparator<StatusMode>() {
public int compare(StatusMode object1, StatusMode object2) {
return object2.compareTo(object1);
}
});
mStatus = (Spinner) group.findViewById(R.id.statusview_spinner);
StatusModeAdapter mStatusAdapter;
mStatusAdapter = new StatusModeAdapter(context, R.layout.status_spinner_item, modes);
mStatus.setAdapter(mStatusAdapter);
for (int i = 0; i < modes.size(); i++) {
if (modes.get(i).equals(status_mode)) {
mStatus.setSelection(i);
}
}
mMessage = (AutoCompleteTextView) group.findViewById(R.id.statusview_message);
mMessage.setText(status_message);
mMessage.setAdapter(new ArrayAdapter<String>(context,
android.R.layout.simple_dropdown_item_1line, status_message_history));
mMessage.setThreshold(1);
Button messageClearButton = (Button) group.findViewById(R.id.statusview_message_button_clear);
messageClearButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
mMessage.setText("");
}
});
setTitle(R.string.statuspopup_name);
setView(group);
setButton(BUTTON_POSITIVE, context.getString(android.R.string.ok),
new OkListener());
setButton(BUTTON_NEGATIVE, context.getString(android.R.string.cancel),
(OnClickListener) null);
}
private class OkListener implements OnClickListener {
@Override
public void onClick(DialogInterface dialog, int which) {
StatusMode status = (StatusMode) mStatus.getSelectedItem();
String message = mMessage.getText().toString();
mContext.setAndSaveStatus(status, message);
}
}
private class StatusModeAdapter extends ArrayAdapter<StatusMode> {
public StatusModeAdapter(Context context, int textViewResourceId,
List<StatusMode> modes) {
super(context, textViewResourceId, modes);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent, true);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent, false);
}
public View getCustomView(int position, View convertView, ViewGroup parent, boolean padding) {
LayoutInflater inflater = getLayoutInflater();
View spinner = inflater.inflate(R.layout.status_spinner_item, parent, false);
TextView text = (TextView) spinner.findViewById(R.id.status_text);
text.setText(getItem(position).getTextId());
ImageView icon = (ImageView) spinner.findViewById(R.id.status_icon);
icon.setImageResource(getItem(position).getDrawableId());
if (!padding)
spinner.setPadding(0, 0, 0, 0);
return spinner;
}
}
}