package com.maxiee.heartbeat.ui.adapter; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.support.v7.app.AlertDialog; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import com.maxiee.heartbeat.R; import com.maxiee.heartbeat.common.GalleryUtils; import com.maxiee.heartbeat.common.TimeUtils; import com.maxiee.heartbeat.data.DataManager; import com.maxiee.heartbeat.database.utils.ImageUtils; import com.maxiee.heartbeat.database.utils.ThoughtUtils; import com.maxiee.heartbeat.model.DayCard; import com.maxiee.heartbeat.model.Event; import com.maxiee.heartbeat.model.Image; import com.maxiee.heartbeat.ui.AddEventActivity; import com.maxiee.heartbeat.ui.EventDetailActivity; import java.util.ArrayList; import butterknife.Bind; import butterknife.ButterKnife; /** * Created by maxiee on 16/1/22. */ public class DayCardEventAdapter extends RecyclerView.Adapter<DayCardEventAdapter.DayCardHolder>{ private ArrayList<DayCard> mDayCardData; public DayCardEventAdapter(ArrayList<DayCard> dayCardData) { mDayCardData = dayCardData; } public void setData(ArrayList<DayCard> dayCardData) { mDayCardData = dayCardData; } @Override public DayCardHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_day_card, parent, false); return new DayCardHolder(v); } @Override public void onBindViewHolder(DayCardHolder holder, int position) { holder.onBind(position); } @Override public void onViewRecycled(DayCardHolder holder) { holder.onViewRecycled(); super.onViewRecycled(holder); } @Override public int getItemCount() { return mDayCardData.size(); } class DayCardHolder extends RecyclerView.ViewHolder { Context context; @Bind(R.id.day_card_head_date) TextView headerDate; @Bind(R.id.item_layout) LinearLayout itemLayout; private ArrayList<AsyncTask> mTasks = new ArrayList<>(); DayCardHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); context = itemView.getContext(); } void onBind(int position) { DayCard dayCard = mDayCardData.get(position); headerDate.setText( TimeUtils.parseDateDate(context, dayCard.getTimeStamp())); float itemHeight = context.getResources().getDimension(R.dimen.day_card_item_height); int eventCount = dayCard.getEventList().size(); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, (int) itemHeight * eventCount); itemLayout.setLayoutParams(lp); itemLayout.removeAllViewsInLayout(); for (Event e: dayCard.getEventList()) { boolean drawSeparator = e.equals(dayCard.getEventList().get(dayCard.getEventList().size() - 1)); DayCardItemTask task = new DayCardItemTask(e, drawSeparator); mTasks.add(task); task.execute(); } } void onViewRecycled() { for (AsyncTask t: mTasks) t.cancel(true); } class DayCardItemTask extends AsyncTask<Void, Void, View> { private Event mEvent; private boolean mDrawSeparator; public DayCardItemTask (Event event, boolean drawSeparator) { mEvent = event; mDrawSeparator = drawSeparator; } @Override protected View doInBackground(Void... params) { return LayoutInflater.from(context) .inflate(R.layout.item_day_card_item, itemLayout, false); } @Override protected void onPostExecute(View v) { v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, EventDetailActivity.class); intent.putExtra( EventDetailActivity.EXTRA_NAME, mEvent.getId()); context.startActivity(intent); } }); v.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); final String[] items = new String[]{ v.getContext().getString(R.string.dialog_edit_event), v.getContext().getString(R.string.delete) }; final Context context = v.getContext(); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { Intent i = new Intent(context, AddEventActivity.class); i.putExtra(AddEventActivity.ID_EVENT_MODIFY, mEvent.getId()); context.startActivity(i); } if (which == 1) { DataManager.getInstance(context).deleteEvent(mEvent.getId()); } } }); builder.show(); return true; } }); TextView eventText = ButterKnife.findById(v, R.id.event_text); TextView thoughtCount = ButterKnife.findById(v, R.id.tv_thought_count); ImageView eventImage = ButterKnife.findById(v, R.id.event_image); FrameLayout imageContainer = ButterKnife.findById(v, R.id.image_container); View separator = ButterKnife.findById(v, R.id.separator); eventText.setText(mEvent.getEvent()); thoughtCount.setText(String.valueOf(ThoughtUtils.getEventCount(context, mEvent.getId()))); Image i = ImageUtils.getImageByEventId(context, mEvent.getId()); if (i != null) { imageContainer.setVisibility(View.VISIBLE); Glide.with(context).load( GalleryUtils.getImagePath( i.getPath())).centerCrop().into(eventImage); } else eventImage.setVisibility(View.GONE); if (mDrawSeparator) separator.setVisibility(View.GONE); itemLayout.addView(v); } } } }