mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
136 lines
4.1 KiB
Java
136 lines
4.1 KiB
Java
package com.simplemobiletools.calendar;
|
|
|
|
import android.content.Context;
|
|
|
|
import com.simplemobiletools.calendar.models.Day;
|
|
import com.simplemobiletools.calendar.models.Event;
|
|
|
|
import org.joda.time.DateTime;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class MonthlyCalendarImpl implements DBHelper.DBOperationsListener {
|
|
private static final int DAYS_CNT = 42;
|
|
private static final String YEAR_PATTERN = "YYYY";
|
|
|
|
private final MonthlyCalendar mCallback;
|
|
private final String mToday;
|
|
private final Context mContext;
|
|
private DateTime mTargetDate;
|
|
private List<Event> mEvents;
|
|
|
|
public MonthlyCalendarImpl(MonthlyCalendar callback, Context context) {
|
|
mCallback = callback;
|
|
mContext = context;
|
|
mToday = new DateTime().toString(Formatter.DAYCODE_PATTERN);
|
|
mEvents = new ArrayList<>();
|
|
}
|
|
|
|
public void updateMonthlyCalendar(DateTime targetDate) {
|
|
mTargetDate = targetDate;
|
|
final int startTS = Formatter.getDayStartTS(Formatter.getDayCodeFromDateTime(mTargetDate.minusMonths(1)));
|
|
final int endTS = Formatter.getDayEndTS(Formatter.getDayCodeFromDateTime(mTargetDate.plusMonths(1)));
|
|
new DBHelper(mContext, this).getEvents(startTS, endTS);
|
|
}
|
|
|
|
public void setTargetDate(DateTime dateTime) {
|
|
mTargetDate = dateTime;
|
|
}
|
|
|
|
void getPrevMonth() {
|
|
updateMonthlyCalendar(mTargetDate.minusMonths(1));
|
|
}
|
|
|
|
void getNextMonth() {
|
|
updateMonthlyCalendar(mTargetDate.plusMonths(1));
|
|
}
|
|
|
|
public void getDays() {
|
|
final List<Day> days = new ArrayList<>(DAYS_CNT);
|
|
|
|
final int currMonthDays = mTargetDate.dayOfMonth().getMaximumValue();
|
|
int firstDayIndex = mTargetDate.withDayOfMonth(1).getDayOfWeek();
|
|
if (!Config.newInstance(mContext).getIsSundayFirst())
|
|
firstDayIndex -= 1;
|
|
final int prevMonthDays = mTargetDate.minusMonths(1).dayOfMonth().getMaximumValue();
|
|
|
|
boolean isThisMonth = false;
|
|
boolean isToday;
|
|
int value = prevMonthDays - firstDayIndex + 1;
|
|
DateTime curDay = mTargetDate;
|
|
|
|
for (int i = 0; i < DAYS_CNT; i++) {
|
|
if (i < firstDayIndex) {
|
|
isThisMonth = false;
|
|
curDay = mTargetDate.minusMonths(1);
|
|
} else if (i == firstDayIndex) {
|
|
value = 1;
|
|
isThisMonth = true;
|
|
curDay = mTargetDate;
|
|
} else if (value == currMonthDays + 1) {
|
|
value = 1;
|
|
isThisMonth = false;
|
|
curDay = mTargetDate.plusMonths(1);
|
|
}
|
|
|
|
isToday = isThisMonth && isToday(mTargetDate, value);
|
|
|
|
final DateTime newDay = curDay.withDayOfMonth(value);
|
|
final String dayCode = Formatter.getDayCodeFromDateTime(newDay);
|
|
final Day day = new Day(value, isThisMonth, isToday, dayCode, hasEvent(dayCode), newDay.getWeekOfWeekyear());
|
|
days.add(day);
|
|
value++;
|
|
}
|
|
|
|
mCallback.updateMonthlyCalendar(getMonthName(), days);
|
|
}
|
|
|
|
private boolean hasEvent(String dayCode) {
|
|
for (Event event : mEvents) {
|
|
if (Formatter.getDayCodeFromTS(event.getStartTS()).equals(dayCode)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private boolean isToday(DateTime targetDate, int curDayInMonth) {
|
|
return targetDate.withDayOfMonth(curDayInMonth).toString(Formatter.DAYCODE_PATTERN).equals(mToday);
|
|
}
|
|
|
|
private String getMonthName() {
|
|
String month = Formatter.getMonthName(mContext, mTargetDate.getMonthOfYear() - 1);
|
|
final String targetYear = mTargetDate.toString(YEAR_PATTERN);
|
|
if (!targetYear.equals(new DateTime().toString(YEAR_PATTERN))) {
|
|
month += " " + targetYear;
|
|
}
|
|
return month;
|
|
}
|
|
|
|
public DateTime getTargetDate() {
|
|
return mTargetDate;
|
|
}
|
|
|
|
@Override
|
|
public void eventInserted(Event event) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void eventUpdated(Event event) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void eventsDeleted(int cnt) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void gotEvents(List<Event> events) {
|
|
mEvents = events;
|
|
getDays();
|
|
}
|
|
}
|