package com.commonsensenet.realfarm.view;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.commonsensenet.realfarm.AdviceActivity;
import com.commonsensenet.realfarm.R;
import com.commonsensenet.realfarm.model.aggregate.AdviceSituationItem;
import com.commonsensenet.realfarm.model.aggregate.AdviceSolutionItem;
public class AdviceAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<AdviceSituationItem> groups;
private AdviceActivity adviceActivity;
public AdviceAdapter(Context context,
ArrayList<AdviceSituationItem> groups, AdviceActivity adviceActivity) {
this.context = context;
this.groups = groups;
this.adviceActivity = adviceActivity;
}
public void setGroups(ArrayList<AdviceSituationItem> gr) {
groups = gr;
}
public ArrayList<AdviceSituationItem> getGroups() {
return groups;
}
public void addItem(AdviceSolutionItem item, AdviceSituationItem group) {
if (!groups.contains(group)) {
groups.add(group);
}
int index = groups.indexOf(group);
ArrayList<AdviceSolutionItem> ch = groups.get(index).getItems();
ch.add(item);
groups.get(index).setItems(ch);
}
public AdviceSolutionItem getChild(int groupPosition, int childPosition) {
ArrayList<AdviceSolutionItem> chList = groups.get(groupPosition)
.getItems();
return chList.get(childPosition);
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View view, ViewGroup parent) {
AdviceSituationItem group = (AdviceSituationItem) getGroup(groupPosition);
AdviceSolutionItem child = (AdviceSolutionItem) getChild(groupPosition,
childPosition);
if (view == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = infalInflater.inflate(R.layout.tpl_ad_solution_row, null);
}
setSolutionView(view, child, group, groupPosition, childPosition);
return view;
}
private void setSolutionView(View view, AdviceSolutionItem child,
AdviceSituationItem group, final int groupPosition,
final int childPosition) {
RelativeLayout rl = (RelativeLayout) view
.findViewById(R.id.left_background);
if (child.getResource() != null
&& child.getResource().getBackgroundImage() != -1) {
rl.setBackgroundResource(child.getResource().getBackgroundImage());
} else {
rl.setBackgroundColor(Color.TRANSPARENT);
}
ImageView iw = (ImageView) view.findViewById(R.id.image_left);
if (child.getResource() != null
&& child.getResource().getImage1() != -1)
iw.setImageResource(child.getResource().getImage1());
else
iw.setImageResource(Color.TRANSPARENT);
TextView tv;
if (child.getResource() != null) {
tv = (TextView) view.findViewById(R.id.left_text);
tv.setText(child.getResource().getShortName());
}
tv = (TextView) view.findViewById(R.id.number);
tv.setText(String.valueOf(child.getAdvicePiece().getAdviceId()));
tv = (TextView) view.findViewById(R.id.center_left_text);
tv.setText(""); // String.valueOf(child.getDidIt())
tv = (TextView) view.findViewById(R.id.comment);
tv.setText(child.getAdvicePiece().getComment());
tv = (TextView) view.findViewById(R.id.center_right_text);
tv.setText(String.valueOf(child.getLikes()));
ImageView like = (ImageView) view.findViewById(R.id.right_image);
if (child.getResource() == null
|| child.getResource().getShortName().equals("")) {
tv.setVisibility(View.GONE);
like.setVisibility(View.GONE);
} else {
tv.setVisibility(View.VISIBLE);
// TODO: show if valid date.
like.setVisibility(View.VISIBLE);
like.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
adviceActivity.onLikeClick(groupPosition, childPosition);
}
});
like.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
adviceActivity
.onLikeLongClick(groupPosition, childPosition);
return true;
}
});
if (child.getHasLiked())
like.setImageResource(R.drawable.plantofollowafterclick);
else
like.setImageResource(R.drawable.plantofollowbeforeclick);
}
setDatePassed((LinearLayout) view.findViewById(R.id.solution_row), 1.0F);
}
public int getChildrenCount(int groupPosition) {
ArrayList<AdviceSolutionItem> chList = groups.get(groupPosition)
.getItems();
return chList.size();
}
public AdviceSituationItem getGroup(int groupPosition) {
return groups.get(groupPosition);
}
public int getGroupCount() {
return groups.size();
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isLastChild, View view,
ViewGroup parent) {
AdviceSituationItem group = (AdviceSituationItem) getGroup(groupPosition);
if (view == null) {
LayoutInflater inf = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inf.inflate(R.layout.tpl_ad_situation_row, null);
}
setSituationView(view, group);
return view;
}
private void setSituationView(View view, AdviceSituationItem group) {
TextView tv;
tv = (TextView) view.findViewById(R.id.center_text);
tv.setTypeface(null, Typeface.NORMAL);
tv.setText(group.getProblem().getShortName());
tv = (TextView) view.findViewById(R.id.loss);
tv.setTypeface(null, Typeface.NORMAL);
tv.setText(group.getRecommendation().getProbablity() + "% loss");
tv = (TextView) view.findViewById(R.id.percentage);
tv.setTypeface(null, Typeface.NORMAL);
tv.setText("");
ImageView iw;
iw = (ImageView) view.findViewById(R.id.image_left);
if (group.getProblem().getImage1() != -1) {
iw.setImageResource(group.getProblem().getImage1());
}
iw = (ImageView) view.findViewById(R.id.leftImage);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16 * 1024];
options.inSampleSize = 12;
Bitmap bitmapImage = BitmapFactory.decodeFile(group.getPlotImage(),
options);
if (bitmapImage != null) {
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap rotatedImage = Bitmap.createBitmap(bitmapImage, 0, 0,
bitmapImage.getWidth(), bitmapImage.getHeight(), matrix,
true);
iw.setImageBitmap(rotatedImage);
} else {
iw.setImageResource(R.drawable.ic_plots);
}
LinearLayout ll = (LinearLayout) view.findViewById(R.id.situation_row);
setDatePassed(ll, 1.0F);
if (group.getRecommendation().getIsUnread() == 0) {
((TextView) (view.findViewById(R.id.center_text))).setTypeface(
null, Typeface.BOLD);
((TextView) (view.findViewById(R.id.loss))).setTypeface(null,
Typeface.BOLD);
((TextView) (view.findViewById(R.id.percentage))).setTypeface(null,
Typeface.BOLD);
}
}
public void setDatePassed(View ll, float anim) {
// ll.setBackgroundColor(Color.LTGRAY);
AlphaAnimation alpha = new AlphaAnimation(anim, anim);
alpha.setDuration(0);
alpha.setFillAfter(true);
ll.startAnimation(alpha);
}
public boolean hasStableIds() {
return true;
}
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}
}