package org.azavea.otm.ui;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import org.azavea.otm.Choice;
import org.azavea.otm.R;
import java.util.List;
import static com.google.common.collect.Lists.transform;
public abstract class UDFChoiceFragment extends Fragment {
protected static final String CHOICES = "choices";
protected UDFCollectionActivity changeListener;
private List<Choice> choices;
private int currentRow = -1;
public UDFChoiceFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
choices = (List<Choice>) getArguments().getSerializable(CHOICES);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View layout = inflater.inflate(R.layout.collection_udf_add_choice, container, false);
List<String> choiceLabels = transform(choices, Choice::getText);
final ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), R.layout.simple_list_item, choiceLabels);
final ListView list = (ListView) layout.findViewById(R.id.udf_choices);
list.setAdapter(adapter);
list.setOnItemClickListener((listView, rowView, pos, id) -> {
currentRow = pos;
setSelectedStyle(list);
if (changeListener != null) {
callListener(choices.get(pos));
}
});
return layout;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
changeListener = (UDFCollectionActivity) activity;
}
@Override
public void onDetach() {
super.onDetach();
changeListener = null;
}
@Override
public void onHiddenChanged(boolean hidden) {
if (!hidden && currentRow != -1 && changeListener != null) {
callListener(choices.get(currentRow));
}
}
protected abstract void callListener(Choice choice);
public void setSelectedStyle(ListView list) {
for (int i = list.getFirstVisiblePosition(); i <= list.getLastVisiblePosition(); i++) {
View row = list.getChildAt(i);
row.setBackgroundResource(R.drawable.list_element_border);
}
View selectedRow = list.getChildAt(currentRow);
if (selectedRow != null) {
selectedRow.setBackgroundResource(R.drawable.list_header_border);
}
}
}