package org.projectbuendia.client.ui.dialogs; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.widget.ExpandableListView; import org.projectbuendia.client.App; import org.projectbuendia.client.R; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import butterknife.ButterKnife; import org.projectbuendia.client.events.actions.VoidObservationsRequestEvent; import org.projectbuendia.client.models.ObsRow; import org.projectbuendia.client.ui.lists.ExpandableVoidObsRowAdapter; import de.greenrobot.event.EventBus; public class VoidObservationsDialogFragment extends DialogFragment { private LayoutInflater mInflater; private ExpandableListView expListView; private List<String> listDataHeader; private HashMap<String, ArrayList<ObsRow>> listDataChild; public static VoidObservationsDialogFragment newInstance(ArrayList<ObsRow> observations) { Bundle args = new Bundle(); args.putParcelableArrayList("obsrows", observations); VoidObservationsDialogFragment f = new VoidObservationsDialogFragment(); f.setArguments(args); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mInflater = LayoutInflater.from(getActivity()); } private boolean isExistingHeader(String check){ for (String header:listDataHeader) if (header.equals(check)) return true; return false; } private void prepareData(ArrayList<ObsRow> rows){ ArrayList<ObsRow> child; String verifyTitle; String Title; listDataHeader = new ArrayList<>(); listDataChild = new HashMap<String, ArrayList<ObsRow>>(); for (ObsRow row: rows) { Title = row.conceptName + " " + row.day; if(!isExistingHeader(Title)){ listDataHeader.add(Title); } } for (String header: listDataHeader){ child = new ArrayList<ObsRow>(); for (ObsRow row: rows){ verifyTitle = row.conceptName + " " + row.day; if (verifyTitle.equals(header)){ child.add(row); } } if (!child.isEmpty()){ listDataChild.put(header, child); } } } @Override public @NonNull Dialog onCreateDialog(Bundle savedInstanceState) { View fragment = mInflater.inflate(R.layout.view_observations_dialog_fragment, null); ButterKnife.inject(this, fragment); final ArrayList<ObsRow> obsrows = getArguments().getParcelableArrayList("obsrows"); prepareData(obsrows); final ExpandableVoidObsRowAdapter listAdapter = new ExpandableVoidObsRowAdapter(App.getInstance().getApplicationContext(), listDataHeader, listDataChild); ExpandableListView listView = (ExpandableListView) fragment.findViewById(R.id.lvObs); listView.setAdapter(listAdapter); for(int i=0; i < listAdapter.getGroupCount(); i++) listView.expandGroup(i); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }) .setPositiveButton(R.string.voiding, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if ((listAdapter.mCheckedItems != null) && (!listAdapter.mCheckedItems.isEmpty())) { EventBus.getDefault().post(new VoidObservationsRequestEvent(listAdapter.mCheckedItems)); } dialogInterface.dismiss(); } }).setTitle(getResources().getString(R.string.void_observations)) .setView(fragment); return builder.create(); } @Override public void show(FragmentManager manager, String tag) { if (manager.findFragmentByTag(tag) == null) { super.show(manager, tag); } } }