package com.alamkanak.weekview;
import android.graphics.Shader;
import android.widget.ShareActionProvider;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import static com.alamkanak.weekview.WeekViewUtil.*;
/**
* Created by Raquib-ul-Alam Kanak on 7/21/2014.
* Website: http://april-shower.com
*/
public class WeekViewEvent {
private long mId;
private Calendar mStartTime;
private Calendar mEndTime;
private String mName;
private String mLocation;
private int mColor;
private boolean mAllDay;
private Shader mShader;
public WeekViewEvent(){
}
/**
* Initializes the event for week view.
* @param id The id of the event.
* @param name Name of the event.
* @param startYear Year when the event starts.
* @param startMonth Month when the event starts.
* @param startDay Day when the event starts.
* @param startHour Hour (in 24-hour format) when the event starts.
* @param startMinute Minute when the event starts.
* @param endYear Year when the event ends.
* @param endMonth Month when the event ends.
* @param endDay Day when the event ends.
* @param endHour Hour (in 24-hour format) when the event ends.
* @param endMinute Minute when the event ends.
*/
public WeekViewEvent(long id, String name, int startYear, int startMonth, int startDay, int startHour, int startMinute, int endYear, int endMonth, int endDay, int endHour, int endMinute) {
this.mId = id;
this.mStartTime = Calendar.getInstance();
this.mStartTime.set(Calendar.YEAR, startYear);
this.mStartTime.set(Calendar.MONTH, startMonth-1);
this.mStartTime.set(Calendar.DAY_OF_MONTH, startDay);
this.mStartTime.set(Calendar.HOUR_OF_DAY, startHour);
this.mStartTime.set(Calendar.MINUTE, startMinute);
this.mEndTime = Calendar.getInstance();
this.mEndTime.set(Calendar.YEAR, endYear);
this.mEndTime.set(Calendar.MONTH, endMonth-1);
this.mEndTime.set(Calendar.DAY_OF_MONTH, endDay);
this.mEndTime.set(Calendar.HOUR_OF_DAY, endHour);
this.mEndTime.set(Calendar.MINUTE, endMinute);
this.mName = name;
}
/**
* Initializes the event for week view.
* @param id The id of the event.
* @param name Name of the event.
* @param location The location of the event.
* @param startTime The time when the event starts.
* @param endTime The time when the event ends.
* @param allDay Is the event an all day event.
* @param shader the Shader of the event rectangle
*/
public WeekViewEvent(long id, String name, String location, Calendar startTime, Calendar endTime, boolean allDay, Shader shader) {
this.mId = id;
this.mName = name;
this.mLocation = location;
this.mStartTime = startTime;
this.mEndTime = endTime;
this.mAllDay = allDay;
this.mShader = shader;
}
/**
* Initializes the event for week view.
* @param id The id of the event.
* @param name Name of the event.
* @param location The location of the event.
* @param startTime The time when the event starts.
* @param endTime The time when the event ends.
* @param allDay Is the event an all day event
*/
public WeekViewEvent(long id, String name, String location, Calendar startTime, Calendar endTime, boolean allDay) {
this(id, name, location, startTime, endTime, allDay, null);
}
/**
* Initializes the event for week view.
* @param id The id of the event.
* @param name Name of the event.
* @param location The location of the event.
* @param startTime The time when the event starts.
* @param endTime The time when the event ends.
*/
public WeekViewEvent(long id, String name, String location, Calendar startTime, Calendar endTime) {
this(id, name, location, startTime, endTime, false);
}
/**
* Initializes the event for week view.
* @param id The id of the event.
* @param name Name of the event.
* @param startTime The time when the event starts.
* @param endTime The time when the event ends.
*/
public WeekViewEvent(long id, String name, Calendar startTime, Calendar endTime) {
this(id, name, null, startTime, endTime);
}
public Calendar getStartTime() {
return mStartTime;
}
public void setStartTime(Calendar startTime) {
this.mStartTime = startTime;
}
public Calendar getEndTime() {
return mEndTime;
}
public void setEndTime(Calendar endTime) {
this.mEndTime = endTime;
}
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public String getLocation() {
return mLocation;
}
public void setLocation(String location) {
this.mLocation = location;
}
public int getColor() {
return mColor;
}
public void setColor(int color) {
this.mColor = color;
}
public boolean isAllDay() {
return mAllDay;
}
public void setAllDay(boolean allDay) {
this.mAllDay = allDay;
}
public Shader getShader(){
return mShader;
}
public void setShader(Shader shader){
mShader = shader;
}
public long getId() {
return mId;
}
public void setId(long id) {
this.mId = id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
WeekViewEvent that = (WeekViewEvent) o;
return mId == that.mId;
}
@Override
public int hashCode() {
return (int) (mId ^ (mId >>> 32));
}
public List<WeekViewEvent> splitWeekViewEvents(){
//This function splits the WeekViewEvent in WeekViewEvents by day
List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
// The first millisecond of the next day is still the same day. (no need to split events for this).
Calendar endTime = (Calendar) this.getEndTime().clone();
endTime.add(Calendar.MILLISECOND, -1);
if (!isSameDay(this.getStartTime(), endTime)) {
endTime = (Calendar) this.getStartTime().clone();
endTime.set(Calendar.HOUR_OF_DAY, 23);
endTime.set(Calendar.MINUTE, 59);
WeekViewEvent event1 = new WeekViewEvent(this.getId(), this.getName(), this.getLocation(), this.getStartTime(), endTime, this.isAllDay());
event1.setColor(this.getColor());
events.add(event1);
// Add other days.
Calendar otherDay = (Calendar) this.getStartTime().clone();
otherDay.add(Calendar.DATE, 1);
while (!isSameDay(otherDay, this.getEndTime())) {
Calendar overDay = (Calendar) otherDay.clone();
overDay.set(Calendar.HOUR_OF_DAY, 0);
overDay.set(Calendar.MINUTE, 0);
Calendar endOfOverDay = (Calendar) overDay.clone();
endOfOverDay.set(Calendar.HOUR_OF_DAY, 23);
endOfOverDay.set(Calendar.MINUTE, 59);
WeekViewEvent eventMore = new WeekViewEvent(this.getId(), this.getName(), null, overDay, endOfOverDay, this.isAllDay());
eventMore.setColor(this.getColor());
events.add(eventMore);
// Add next day.
otherDay.add(Calendar.DATE, 1);
}
// Add last day.
Calendar startTime = (Calendar) this.getEndTime().clone();
startTime.set(Calendar.HOUR_OF_DAY, 0);
startTime.set(Calendar.MINUTE, 0);
WeekViewEvent event2 = new WeekViewEvent(this.getId(), this.getName(), this.getLocation(), startTime, this.getEndTime(), this.isAllDay());
event2.setColor(this.getColor());
events.add(event2);
}
else{
events.add(this);
}
return events;
}
}