package typical_if.android.adapter;
import android.content.Context;
import android.content.Intent;
import android.provider.CalendarContract;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import com.daimajia.swipe.SwipeLayout;
import com.devspark.robototextview.widget.RobotoTextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.vk.sdk.api.model.VKApiPhoto;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import typical_if.android.Constants;
import typical_if.android.ItemDataSetter;
import typical_if.android.R;
import typical_if.android.TIFApp;
import typical_if.android.VKHelper;
import typical_if.android.util.DateUtils;
import typical_if.android.view.ResizableImageView;
/**
* Created by gigamole on 16.02.15.
*/
public class RecyclerEventAdapter extends RecyclerView.Adapter<RecyclerEventAdapter.ViewHolder> {
private final LayoutInflater layoutInflater;
private final Context context;
public static FragmentManager fragmentManager;
public ArrayList<EventObject> eventObjects;
public RecyclerEventAdapter(ArrayList<EventObject> eventObjects, LayoutInflater inflater, FragmentManager fragmentManager) {
this.layoutInflater = inflater;
this.context = TIFApp.getAppContext();
this.fragmentManager = fragmentManager;
this.eventObjects = eventObjects;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.event_item_layout, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
initEventViewHolder(viewHolder, eventObjects.get(i));
if (i == 0) {
viewHolder.itemView.setPadding(0, TIFApp.getScaledDp(48), 0, 0);
} else {
viewHolder.itemView.setPadding(0, 0, 0, 0);
}
}
@Override
public int getItemCount() {
return eventObjects.size();
}
public void setEvent(ArrayList<EventObject> events) {
this.eventObjects.clear();
this.eventObjects.addAll(events);
notifyDataSetChanged();
}
public final View.OnClickListener imgClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<VKApiPhoto> photos = (ArrayList<VKApiPhoto>) v.getTag();
VKHelper.countOfPhotos = photos.size();
ItemDataSetter.makeSaveTransaction(fragmentManager, photos, 0);
}
};
private static class CalendarData {
public final String timeStart;
public final String title;
public final String location;
private CalendarData(String timeStart, String title, String location) {
this.timeStart = timeStart;
this.title = title;
this.location = location;
}
}
public final View.OnClickListener flClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
SwipeLayout eventSwipeLayout = (SwipeLayout) v.getTag();
eventSwipeLayout.close(true);
CalendarData calendarData = (CalendarData) eventSwipeLayout.getTag();
pushAppointmentsToCalender(context, calendarData.title, calendarData.location, calendarData.timeStart);
}
};
public final View.OnClickListener slClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
((SwipeLayout) v.getTag()).toggle(true);
}
};
public void pushAppointmentsToCalender(Context context, String title, String place, String startTime) {
Intent intent = new Intent(Intent.ACTION_INSERT)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setData(CalendarContract.Events.CONTENT_URI)
.putExtra(CalendarContract.Events.TITLE, title)
.putExtra(CalendarContract.Events.DESCRIPTION, context.getString(R.string.today_event_description))
.putExtra(CalendarContract.Events.EVENT_LOCATION, place)
.putExtra(CalendarContract.Events.CALENDAR_TIME_ZONE, TimeZone.getDefault().getID());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
sdf.setTimeZone(TimeZone.getTimeZone("GMC"));
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
long currentDate = 0;
try {
currentDate = dateFormat.parse(dateFormat.format(new Date())).getTime();
} catch (ParseException e) {
}
long startDate;
long endDate;
try {
startDate = currentDate + sdf.parse(startTime).getTime();
endDate = startDate + 2000 * 60 * 60;
} catch (ParseException e) {
startDate = currentDate + 60 * 60 * 1000 * 24;
endDate = startDate + 48 * 1000 * 60 * 60;
intent.putExtra(CalendarContract.Events.ALL_DAY, true);
}
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startDate)
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endDate);
context.startActivity(intent);
}
public void initEventViewHolder(RecyclerEventAdapter.ViewHolder viewHolder, EventObject item) {
ItemDataSetter.fragmentManager = fragmentManager;
if (!item.urlPhoto.get(0).photo_604.equals("fake_photo")) {
// Glide.with(context)
// .load(item.urlPhoto.get(0).photo_604)
// .placeholder(R.drawable.event_stub)
// .crossFade()
// .into(viewHolder.imgPhoto);
ImageLoader.getInstance().displayImage(item.urlPhoto.get(0).photo_604, viewHolder.imgPhoto, TIFApp.eventOptions);
viewHolder.btImgPhoto.setTag(item.urlPhoto);
viewHolder.btImgPhoto.setOnClickListener(imgClickListener);
} else {
// Glide.with(context)
// .load("drawable://" + R.drawable.stub_null_event)
// .placeholder(R.drawable.event_stub)
// .crossFade()
// .into(viewHolder.imgPhoto);
ImageLoader.getInstance().displayImage("drawable://" + R.drawable.stub_null_event, viewHolder.imgPhoto, TIFApp.eventOptions);
viewHolder.btImgPhoto.setTag(null);
viewHolder.btImgPhoto.setOnClickListener(null);
}
LinearLayout tempLayout = null;
for (int i = 0; i < Constants.EVENT_COUNT; i++) {
switch (i) {
case Constants.TODAY_EVENT:
tempLayout = viewHolder.fakeTodayListView;
break;
case Constants.STATION_EVENT:
tempLayout = viewHolder.fakeStationListView;
break;
case Constants.PERIOD_EVENT:
tempLayout = viewHolder.fakePeriodListView;
break;
}
tempLayout.removeAllViews();
for (int j = 0; j < item.array.get(i).size(); j++) {
View eventView = layoutInflater.inflate(R.layout.events_list_item_layout, null, false);
RobotoTextView eventTextView = ((RobotoTextView) eventView.findViewById(R.id.txt_event_list_item));
eventTextView.setText(item.array.get(i).get(j));
SwipeLayout eventSwipeLayout = (SwipeLayout) eventView.findViewById(R.id.event_swipe_layout);
if (i == 1) {
eventSwipeLayout.getBottomView().setBackgroundColor(context.getResources().getColor(R.color.ST_BG_COLOR));
} else {
eventSwipeLayout.getBottomView().setBackgroundColor(context.getResources().getColor(R.color.FAB_UNSELECTED));
}
if (DateUtils.isToday(item.date)) {
if (item.array.get(i).get(j).equals(context.getString(R.string.null_events))) {
unsetSwipeLayout(eventSwipeLayout);
} else {
StringBuilder text = new StringBuilder(eventTextView.getText());
String startTime = "";
String title;
String location;
switch (i) {
case 0:
case 1:
startTime = text.substring(2, 7);
text = text.replace(0, 8, "");
break;
case 2:
startTime = "";
text = text.replace(0, 2, "");
break;
}
try {
title = text.substring(0, text.indexOf(","));
text = text.replace(0, text.indexOf(",") + 1, "");
} catch (StringIndexOutOfBoundsException e) {
title = text.substring(0, text.length());
text = text.replace(0, text.length(), "");
}
location = text.toString();
setSwipeLayout(eventSwipeLayout, new CalendarData(startTime, title, location));
}
} else {
unsetSwipeLayout(eventSwipeLayout);
}
tempLayout.addView(eventView);
}
}
}
public void unsetSwipeLayout(SwipeLayout eventSwipeLayout) {
eventSwipeLayout.getBottomView().setOnClickListener(null);
eventSwipeLayout.getSurfaceView().setOnClickListener(null);
eventSwipeLayout.setSwipeEnabled(false);
}
public void setSwipeLayout(SwipeLayout eventSwipeLayout, CalendarData calendarData) {
eventSwipeLayout.setShowMode(SwipeLayout.ShowMode.PullOut);
eventSwipeLayout.setDragEdge(SwipeLayout.DragEdge.Right);
eventSwipeLayout.setSwipeEnabled(true);
eventSwipeLayout.getSurfaceView().setTag(eventSwipeLayout);
eventSwipeLayout.getSurfaceView().setOnClickListener(slClickListener);
eventSwipeLayout.setTag(calendarData);
eventSwipeLayout.getBottomView().setTag(eventSwipeLayout);
eventSwipeLayout.getBottomView().setOnClickListener(flClickListener);
}
public static class EventObject {
public final SparseArray<List<String>> array;
public final long date;
public final ArrayList<VKApiPhoto> urlPhoto;
public EventObject(SparseArray<List<String>> array, long date, ArrayList<VKApiPhoto> urlPhoto) {
this.array = array;
this.date = date;
this.urlPhoto = urlPhoto;
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public final ResizableImageView imgPhoto;
public final Button btImgPhoto;
public final LinearLayout fakeTodayListView;
public final LinearLayout fakeStationListView;
public final LinearLayout fakePeriodListView;
ViewHolder(View convertView) {
super(convertView);
this.btImgPhoto = (Button) convertView.findViewById(R.id.bt_img_event);
this.imgPhoto = (ResizableImageView) convertView.findViewById(R.id.img_event_item);
this.fakeTodayListView = (LinearLayout) convertView.findViewById(R.id.fake_lv_today_event_item);
this.fakeStationListView = (LinearLayout) convertView.findViewById(R.id.fake_lv_yesterday_event_item);
this.fakePeriodListView = (LinearLayout) convertView.findViewById(R.id.fake_lv_period_event_item);
}
}
}