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.CompoundButton; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.LinearLayout; import android.widget.Switch; 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.models.ObsRow; import org.projectbuendia.client.ui.lists.ExpandableObsRowAdapter; public class ViewObservationsDialogFragment extends DialogFragment { private LayoutInflater mInflater; private ExpandableListAdapter listAdapter; private ExpandableListView expListView; private List<String> listDataHeader; private HashMap<String, List<String>> listDataChild; public static ViewObservationsDialogFragment newInstance(ArrayList<ObsRow> observations) { Bundle args = new Bundle(); args.putParcelableArrayList("obsrows", observations); ViewObservationsDialogFragment f = new ViewObservationsDialogFragment(); 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){ List<String> child; String verifyTitle; String Title; listDataHeader = new ArrayList<>(); listDataChild = new HashMap<String, List<String>>(); for (ObsRow row: rows) { Title = row.conceptName + " " + row.day; if(!isExistingHeader(Title)){ listDataHeader.add(Title); } } for (String header: listDataHeader){ child = new ArrayList<>(); for (ObsRow row: rows){ verifyTitle = row.conceptName + " " + row.day; if (verifyTitle.equals(header)){ child.add(row.time + " " + row.valueName); } } 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); listAdapter = new ExpandableObsRowAdapter(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); LinearLayout listFooterView = (LinearLayout)mInflater.inflate(R.layout.void_observations_switch, null); listView.addFooterView(listFooterView); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }) .setView(fragment); final Dialog dialog = builder.create(); final Switch swVoid = (Switch) fragment.findViewById(R.id.swVoid); swVoid.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (swVoid.isChecked()){ VoidObservationsDialogFragment.newInstance(obsrows) .show(getActivity().getSupportFragmentManager(), null); } dialog.dismiss(); } }); return dialog; } @Override public void show(FragmentManager manager, String tag) { if (manager.findFragmentByTag(tag) == null) { super.show(manager, tag); } } }