package de.tudarmstadt.informatik.hostage.ui2.dialog; import java.util.ArrayList; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import de.tudarmstadt.informatik.hostage.R; import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity; public class ChecklistDialog extends DialogFragment { private ArrayList mSelectedItems; private ArrayList itemTitles; private ChecklistDialogListener mListener; private boolean isMultipleChoice; public String title; static public final String DIALOG_TITLE_KEY = "DIALOG_TITLE_KEY"; static public final String DIALOG_IS_MULTIPLECHOICE_KEY = "DIALOG_IS_MULTIPLECHOICE_KEY"; static public final String DIALOG_SELECTED_INDEX_KEY = "DIALOG_SELECTED_INDEX_KEY"; static public final String DIALOG_TITLE_ARRAY_KEY = "DIALOG_TITLE_ARRAY_KEY"; static public final String DIALOG_MULTIPLECHOICE_SELECTED_KEY = "DIALOG_MULTIPLECHOICE_SELECTED_KEY"; public interface ChecklistDialogListener { public void onDialogPositiveClick(ChecklistDialog dialog); public void onDialogNegativeClick(ChecklistDialog dialog); } public String getTitle(){ return this.title; } public boolean isMultipleChoice(){ return this.isMultipleChoice; } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { if (activity.getClass().equals(MainActivity.class)){ mListener = (ChecklistDialogListener) (((MainActivity)activity).getDisplayedFragment()); } else { mListener = (ChecklistDialogListener) activity; } } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement ChecklistDialogListener"); } } public ArrayList getSelectedItemTitles(){ ArrayList list = new ArrayList(); for(Integer i : this.mSelectedItems){ list.add(this.itemTitles.get(i.intValue())); } return list; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { mSelectedItems = new ArrayList(); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); Intent intent = this.getActivity().getIntent(); String title = intent.getStringExtra(DIALOG_TITLE_KEY); this.isMultipleChoice = intent.getBooleanExtra(DIALOG_IS_MULTIPLECHOICE_KEY, true); this.title = title; this.itemTitles = intent.getStringArrayListExtra(DIALOG_TITLE_ARRAY_KEY); CharSequence[] titles = this.itemTitles.toArray(new CharSequence[this.itemTitles.size()]); ArrayList selectedTitles = null; int selectedIndex = 0; boolean[] selectedArray = new boolean[this.itemTitles.size()]; if(this.isMultipleChoice){ selectedTitles = intent.getStringArrayListExtra(DIALOG_MULTIPLECHOICE_SELECTED_KEY); int i = 0; for(String t : this.itemTitles){ boolean isSelected = selectedTitles.contains(t); selectedArray[i] = isSelected; if(isSelected) this.mSelectedItems.add(i); i++; } } else { selectedIndex = intent.getIntExtra(DIALOG_SELECTED_INDEX_KEY,selectedIndex); } if(this.isMultipleChoice){ builder.setTitle(title).setMultiChoiceItems(titles, selectedArray, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int which, boolean isChecked) { if (isChecked) { mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { mSelectedItems.remove(Integer.valueOf(which)); } } }).setPositiveButton(R.string.button_title_apply, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onDialogPositiveClick(ChecklistDialog.this); } }) .setNegativeButton(R.string.button_title_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onDialogNegativeClick(ChecklistDialog.this); } }); } else { builder.setTitle(title).setSingleChoiceItems(titles, selectedIndex, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mSelectedItems.clear(); mSelectedItems.add(id); } }) .setPositiveButton(R.string.button_title_apply, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onDialogPositiveClick(ChecklistDialog.this); } }) .setNegativeButton(R.string.button_title_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onDialogNegativeClick(ChecklistDialog.this); } }); } return builder.create(); } }