package org.adaptlab.chpir.android.survey.QuestionFragments;
import java.util.ArrayList;
import java.util.List;
import org.adaptlab.chpir.android.survey.PictureUtils;
import org.adaptlab.chpir.android.survey.QuestionFragment;
import org.adaptlab.chpir.android.survey.R;
import org.adaptlab.chpir.android.survey.Models.Image;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class SelectMultipleImageQuestionFragment extends QuestionFragment {
private final int SELECTED = Color.GREEN;
private final int UNSELECTED = Color.TRANSPARENT;
private List<Integer> mSelectedViews;
private GridView mGridView;
private ArrayList<Image> mImages;
@Override
protected void createQuestionComponent(ViewGroup questionComponent) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View v = inflater.inflate(R.layout.fragment_image, questionComponent, false);
mImages = (ArrayList<Image>) getQuestion().images();
mSelectedViews = new ArrayList<Integer>();
mGridView = (GridView) v.findViewById(R.id.imageGridView);
setUpAdapter();
mGridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
toggleImageBackgroundColor((ImageView) v);
}
});
questionComponent.addView(mGridView);
}
private void setUpAdapter() {
if (getActivity() == null || mGridView == null) return;
if (mImages != null) {
mGridView.setAdapter(new ImageAdapter(mImages));
} else {
mGridView.setAdapter(null);
}
}
private void toggleImageBackgroundColor(ImageView view) {
ColorDrawable drawable = (ColorDrawable) view.getBackground();
if (drawable.getColor() == SELECTED) {
view.setBackgroundColor(UNSELECTED);
} else {
view.setBackgroundColor(SELECTED);
}
saveResponse();
}
@Override
protected String serialize() {
String serialized = "";
for (int i=0; i < mGridView.getChildCount(); i++) {
ImageView view = (ImageView) mGridView.getChildAt(i);
ColorDrawable drawable = (ColorDrawable) view.getBackground();
if (drawable.getColor() == SELECTED) {
serialized += i;
if (i < mGridView.getChildCount() - 1) serialized += LIST_DELIMITER;
}
}
return serialized;
}
@Override
protected void deserialize(String responseText) {
if (responseText.equals("")) return;
String[] listOfIndices = responseText.split(LIST_DELIMITER);
for (String index : listOfIndices) {
if (!index.equals("")) {
Integer indexInteger = Integer.parseInt(index);
mSelectedViews.add(indexInteger);
}
}
}
private class ImageAdapter extends ArrayAdapter<Image> {
public ImageAdapter(ArrayList<Image> images) {
super(getActivity(), 0, images);
}
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
view = getActivity().getLayoutInflater().inflate(R.layout.image_item, parent, false);
}
Image img = getItem(position);
ImageView imageView = (ImageView)view.findViewById(R.id.image_item_view);
String path = getActivity().getFileStreamPath(img.getBitmapPath()).getAbsolutePath();
BitmapDrawable bitmap = PictureUtils.getScaledDrawable(getActivity(), path);
imageView.setImageDrawable(bitmap);
if (mSelectedViews.contains(position)) {
imageView.setBackgroundColor(SELECTED);
} else {
imageView.setBackgroundColor(UNSELECTED);
}
return view;
}
}
}