forked from github/szkolny
[Api/Librus] Add syncing and saving teacher absence
This commit is contained in:
parent
ce0f2f74df
commit
f4b997b41f
@ -72,6 +72,7 @@ import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
|
||||
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
|
||||
import pl.szczodrzynski.edziennik.utils.models.Date;
|
||||
@ -170,6 +171,7 @@ public class Librus implements EdziennikInterface {
|
||||
|
||||
private List<Team> teamList;
|
||||
private List<Teacher> teacherList;
|
||||
private List<TeacherAbsence> teacherAbsenceList;
|
||||
private List<Subject> subjectList;
|
||||
private List<Lesson> lessonList;
|
||||
private List<LessonChange> lessonChangeList;
|
||||
@ -240,6 +242,7 @@ public class Librus implements EdziennikInterface {
|
||||
|
||||
teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId);
|
||||
teacherList = profileId == -1 ? new ArrayList<>() : app.db.teacherDao().getAllNow(profileId);
|
||||
teacherAbsenceList = new ArrayList<>();
|
||||
subjectList = new ArrayList<>();
|
||||
lessonList = new ArrayList<>();
|
||||
lessonChangeList = new ArrayList<>();
|
||||
@ -293,6 +296,7 @@ public class Librus implements EdziennikInterface {
|
||||
targetEndpoints.add("BehaviourGrades");
|
||||
|
||||
targetEndpoints.add("Events");
|
||||
targetEndpoints.add("TeacherFreeDays");
|
||||
targetEndpoints.add("CustomTypes");
|
||||
targetEndpoints.add("Homework");
|
||||
targetEndpoints.add("LuckyNumbers");
|
||||
@ -349,6 +353,7 @@ public class Librus implements EdziennikInterface {
|
||||
targetEndpoints.add("CustomTypes");
|
||||
targetEndpoints.add("PtMeetings");
|
||||
targetEndpoints.add("SchoolFreeDays");
|
||||
targetEndpoints.add("TeacherFreeDays");
|
||||
break;
|
||||
case FEATURE_GRADES:
|
||||
targetEndpoints.add("SavedGradeCategories");
|
||||
@ -589,6 +594,8 @@ public class Librus implements EdziennikInterface {
|
||||
}
|
||||
if (eventTypeList.size() > 0)
|
||||
app.db.eventTypeDao().addAll(eventTypeList);
|
||||
if (teacherAbsenceList.size() > 0)
|
||||
app.db.teacherAbsenceDao().addAll(teacherAbsenceList);
|
||||
if (noticeList.size() > 0) {
|
||||
app.db.noticeDao().clear(profileId);
|
||||
app.db.noticeDao().addAll(noticeList);
|
||||
@ -3107,6 +3114,10 @@ public class Librus implements EdziennikInterface {
|
||||
|
||||
private SparseArray<String> teacherFreeDaysTypes = new SparseArray<>();
|
||||
private void getTeacherFreeDaysTypes() {
|
||||
if (!fullSync) {
|
||||
r("finish", "TeacherFreeDaysTypes");
|
||||
return;
|
||||
}
|
||||
callback.onActionStarted(R.string.sync_action_syncing_teacher_free_days_types);
|
||||
apiRequest("TeacherFreeDays/Types", data -> {
|
||||
if (data == null) {
|
||||
@ -3141,27 +3152,35 @@ public class Librus implements EdziennikInterface {
|
||||
JsonObject freeDay = freeDayEl.getAsJsonObject();
|
||||
|
||||
long id = freeDay.get("Id").getAsLong();
|
||||
long teacherId = freeDay.getAsJsonObject("Teacher").get("Id").getAsLong();
|
||||
|
||||
Date dateFrom = Date.fromY_m_d(freeDay.get("DateFrom").getAsString());
|
||||
Date dateTo = Date.fromY_m_d(freeDay.get("DateTo").getAsString());
|
||||
|
||||
int type = freeDay.getAsJsonObject("Type").get("Id").getAsInt();
|
||||
String topic = teacherFreeDaysTypes.get(type)+"\n"+(dateFrom.getValue() != dateTo.getValue() ? dateFrom.getFormattedString()+" - "+dateTo.getFormattedString() : "");
|
||||
Event eventObject = new Event(
|
||||
long type = freeDay.getAsJsonObject("Type").get("Id").getAsLong();
|
||||
|
||||
//String topic = teacherFreeDaysTypes.get(type)+"\n"+(dateFrom.getValue() != dateTo.getValue() ? dateFrom.getFormattedString()+" - "+dateTo.getFormattedString() : "");
|
||||
|
||||
TeacherAbsence teacherAbsence = new TeacherAbsence(
|
||||
profileId,
|
||||
id,
|
||||
teacherId,
|
||||
type,
|
||||
dateFrom,
|
||||
null,
|
||||
topic,
|
||||
-1,
|
||||
TYPE_TEACHER_ABSENCE,
|
||||
false,
|
||||
freeDay.getAsJsonObject("Teacher").get("Id").getAsLong(),
|
||||
-1,
|
||||
-1
|
||||
dateTo
|
||||
);
|
||||
eventList.add(eventObject);
|
||||
metadataList.add(new Metadata(profileId, Metadata.TYPE_EVENT, eventObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis()));
|
||||
|
||||
teacherAbsenceList.add(teacherAbsence);
|
||||
metadataList.add(
|
||||
new Metadata(
|
||||
profileId,
|
||||
Metadata.TYPE_TEACHER_ABSENCE,
|
||||
teacherAbsence.getId(),
|
||||
true,
|
||||
true,
|
||||
System.currentTimeMillis())
|
||||
);
|
||||
|
||||
}
|
||||
r("finish", "TeacherFreeDays");
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package pl.szczodrzynski.edziennik.data.db;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.sqlite.db.SupportSQLiteDatabase;
|
||||
import androidx.room.Database;
|
||||
import androidx.room.Room;
|
||||
@ -49,6 +50,8 @@ import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileDao;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.subjects.SubjectDao;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceDao;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherDao;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.teams.TeamDao;
|
||||
@ -60,6 +63,7 @@ import android.content.Context;
|
||||
Grade.class,
|
||||
//GradeCategory.class,
|
||||
Teacher.class,
|
||||
TeacherAbsence.class,
|
||||
Subject.class,
|
||||
Notice.class,
|
||||
Lesson.class,
|
||||
@ -77,7 +81,7 @@ import android.content.Context;
|
||||
Message.class,
|
||||
MessageRecipient.class,
|
||||
DebugLog.class,
|
||||
Metadata.class}, version = 52)
|
||||
Metadata.class}, version = 53)
|
||||
@TypeConverters({
|
||||
ConverterTime.class,
|
||||
ConverterDate.class,
|
||||
@ -89,6 +93,7 @@ public abstract class AppDb extends RoomDatabase {
|
||||
public abstract GradeDao gradeDao();
|
||||
//public abstract GradeCategoryDao gradeCategoryDao();
|
||||
public abstract TeacherDao teacherDao();
|
||||
public abstract TeacherAbsenceDao teacherAbsenceDao();
|
||||
public abstract SubjectDao subjectDao();
|
||||
public abstract NoticeDao noticeDao();
|
||||
public abstract LessonDao lessonDao();
|
||||
@ -532,6 +537,20 @@ public abstract class AppDb extends RoomDatabase {
|
||||
database.execSQL("ALTER TABLE teachers ADD teacherTypeDescription TEXT DEFAULT NULL");
|
||||
}
|
||||
};
|
||||
private static final Migration MIGRATION_52_53 = new Migration(52, 53) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||
database.execSQL("CREATE TABLE IF NOT EXISTS teacherAbsence (" +
|
||||
"profileId INTEGER NOT NULL," +
|
||||
"teacherAbsenceId INTEGER NOT NULL," +
|
||||
"teacherId INTEGER NOT NULL," +
|
||||
"teacherAbsenceType INTEGER NOT NULL," +
|
||||
"teacherAbsenceDateFrom TEXT NOT NULL," +
|
||||
"teacherAbsenceDateTo TEXT NOT NULL," +
|
||||
"PRIMARY KEY(profileId, teacherAbsenceId)" +
|
||||
")");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public static AppDb getDatabase(final Context context) {
|
||||
@ -581,7 +600,8 @@ public abstract class AppDb extends RoomDatabase {
|
||||
MIGRATION_48_49,
|
||||
MIGRATION_49_50,
|
||||
MIGRATION_50_51,
|
||||
MIGRATION_51_52)
|
||||
MIGRATION_51_52,
|
||||
MIGRATION_52_53)
|
||||
.allowMainThreadQueries()
|
||||
//.fallbackToDestructiveMigration()
|
||||
.build();
|
||||
|
@ -12,7 +12,7 @@ import androidx.room.RawQuery;
|
||||
import java.util.List;
|
||||
|
||||
import pl.szczodrzynski.edziennik.utils.models.Date;
|
||||
import pl.szczodrzynski.edziennik.utils.models.db.LessonChangeCounter;
|
||||
import pl.szczodrzynski.edziennik.ui.modules.agenda.LessonChangeCounter;
|
||||
|
||||
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
|
||||
import static pl.szczodrzynski.edziennik.utils.Utils.d;
|
||||
|
@ -18,6 +18,7 @@ public class Metadata {
|
||||
public static final int TYPE_LESSON_CHANGE = 6;
|
||||
public static final int TYPE_ANNOUNCEMENT = 7;
|
||||
public static final int TYPE_MESSAGE = 8;
|
||||
public static final int TYPE_TEACHER_ABSENCE = 9;
|
||||
|
||||
public int profileId;
|
||||
|
||||
|
@ -17,7 +17,7 @@ import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
|
||||
import pl.szczodrzynski.edziennik.utils.models.db.UnreadCounter;
|
||||
import pl.szczodrzynski.edziennik.utils.models.UnreadCounter;
|
||||
|
||||
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT;
|
||||
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE;
|
||||
|
@ -0,0 +1,27 @@
|
||||
package pl.szczodrzynski.edziennik.data.db.modules.teachers
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||
|
||||
@Entity(tableName = "teacherAbsence",
|
||||
primaryKeys = ["profileId", "teacherAbsenceId"])
|
||||
open class TeacherAbsence (
|
||||
|
||||
val profileId: Int,
|
||||
|
||||
@ColumnInfo(name = "teacherAbsenceId")
|
||||
val id: Long,
|
||||
|
||||
val teacherId: Long,
|
||||
|
||||
@ColumnInfo(name = "teacherAbsenceType")
|
||||
val type: Long,
|
||||
|
||||
@ColumnInfo(name = "teacherAbsenceDateFrom")
|
||||
val dateFrom: Date,
|
||||
|
||||
@ColumnInfo(name = "teacherAbsenceDateTo")
|
||||
val dateTo: Date
|
||||
|
||||
)
|
@ -0,0 +1,26 @@
|
||||
package pl.szczodrzynski.edziennik.data.db.modules.teachers
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||
|
||||
@Dao
|
||||
interface TeacherAbsenceDao {
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
fun add(teacherAbsence: TeacherAbsence)
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
fun addAll(teacherAbsenceList: List<TeacherAbsence>)
|
||||
|
||||
@Query("SELECT profileId, teacherAbsenceDateFrom, teacherAbsenceDateTo, COUNT(*) as teacherAbsenceCount" +
|
||||
"from teacherAbsence WHERE profileId = :profileId GROUP BY teacherAbsenceDateFrom, teacherAbsenceDateTo")
|
||||
fun getCounters(profileId: Int)
|
||||
|
||||
@Query("SELECT profileId, teacherAbsenceDateFrom, teacherAbsenceDateTo, COUNT(*) as teacherAbsenceCount" +
|
||||
"from teacherAbsence WHERE profileId = :profileId AND :date BETWEEN teacherAbsenceDateFrom and teacherAbsenceDateTo" +
|
||||
"GROUP BY teacherAbsenceDateFrom, teacherAbsenceDateTo")
|
||||
fun getCounterByDate(profileId: Int, date: Date)
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package pl.szczodrzynski.edziennik.data.db.modules.teachers
|
||||
|
||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||
|
||||
class TeacherAbsenceFull(profileId: Int, id: Long, teacherId: Long, type: Long, dateFrom: Date, dateTo: Date)
|
||||
: TeacherAbsence(profileId, id, teacherId, type, dateFrom, dateTo) {
|
||||
|
||||
var teacherFullName = ""
|
||||
|
||||
// metadata
|
||||
var seen: Boolean = false
|
||||
var notified: Boolean = false
|
||||
var addedDate: Long = 0
|
||||
}
|
@ -45,7 +45,6 @@ import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog;
|
||||
import pl.szczodrzynski.edziennik.ui.dialogs.lessonchange.LessonChangeDialog;
|
||||
import pl.szczodrzynski.edziennik.utils.models.Date;
|
||||
import pl.szczodrzynski.edziennik.utils.models.Time;
|
||||
import pl.szczodrzynski.edziennik.utils.models.db.LessonChangeCounter;
|
||||
import pl.szczodrzynski.edziennik.utils.Colors;
|
||||
import pl.szczodrzynski.edziennik.utils.Themes;
|
||||
import pl.szczodrzynski.edziennik.utils.Utils;
|
||||
@ -136,68 +135,76 @@ public class AgendaDefaultFragment extends Fragment {
|
||||
activity.gainAttention();
|
||||
|
||||
if (viewType == AGENDA_DEFAULT) {
|
||||
List<Integer> unreadEventDates = new ArrayList<>();
|
||||
createDefaultAgendaView();
|
||||
}
|
||||
else {
|
||||
createCalendarAgendaView();
|
||||
}
|
||||
}
|
||||
|
||||
final Handler handler = new Handler();
|
||||
handler.postDelayed(() -> AsyncTask.execute(() -> {
|
||||
if (app == null || app.profile == null || activity == null || b_default == null || !isAdded())
|
||||
return;
|
||||
private void createDefaultAgendaView() {
|
||||
List<Integer> unreadEventDates = new ArrayList<>();
|
||||
|
||||
List<CalendarEvent> eventList = new ArrayList<>();
|
||||
final Handler handler = new Handler();
|
||||
handler.postDelayed(() -> AsyncTask.execute(() -> {
|
||||
if (app == null || app.profile == null || activity == null || b_default == null || !isAdded())
|
||||
return;
|
||||
|
||||
List<LessonChangeCounter> lessonChangeCounters = app.db.lessonChangeDao().getLessonChangeCountersNow(App.profileId);
|
||||
for (LessonChangeCounter counter : lessonChangeCounters) {
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
Calendar endTime = Calendar.getInstance();
|
||||
if (counter.lessonChangeDate == null) {
|
||||
continue;
|
||||
}
|
||||
startTime.set(counter.lessonChangeDate.year, counter.lessonChangeDate.month - 1, counter.lessonChangeDate.day, 10, 0, 0);
|
||||
endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45));
|
||||
eventList.add(new LessonChangeEvent(
|
||||
counter.lessonChangeDate.getInMillis(),
|
||||
0xff78909c,
|
||||
Colors.legibleTextColor(0xff78909c),
|
||||
startTime,
|
||||
endTime,
|
||||
counter.profileId,
|
||||
counter.lessonChangeDate,
|
||||
counter.lessonChangeCount
|
||||
));
|
||||
List<CalendarEvent> eventList = new ArrayList<>();
|
||||
|
||||
List<LessonChangeCounter> lessonChangeCounters = app.db.lessonChangeDao().getLessonChangeCountersNow(App.profileId);
|
||||
for (LessonChangeCounter counter : lessonChangeCounters) {
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
Calendar endTime = Calendar.getInstance();
|
||||
if (counter.lessonChangeDate == null) {
|
||||
continue;
|
||||
}
|
||||
startTime.set(counter.lessonChangeDate.year, counter.lessonChangeDate.month - 1, counter.lessonChangeDate.day, 10, 0, 0);
|
||||
endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45));
|
||||
eventList.add(new LessonChangeEvent(
|
||||
counter.lessonChangeDate.getInMillis(),
|
||||
0xff78909c,
|
||||
Colors.legibleTextColor(0xff78909c),
|
||||
startTime,
|
||||
endTime,
|
||||
counter.profileId,
|
||||
counter.lessonChangeDate,
|
||||
counter.lessonChangeCount
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
List<EventFull> events = app.db.eventDao().getAllNow(App.profileId);
|
||||
for (EventFull event : events) {
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
Calendar endTime = Calendar.getInstance();
|
||||
if (event.eventDate == null)
|
||||
continue;
|
||||
startTime.set(
|
||||
event.eventDate.year,
|
||||
event.eventDate.month - 1,
|
||||
event.eventDate.day,
|
||||
event.startTime == null ? 0 : event.startTime.hour,
|
||||
event.startTime == null ? 0 : event.startTime.minute,
|
||||
event.startTime == null ? 0 : event.startTime.second
|
||||
);
|
||||
endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45));
|
||||
eventList.add(new BaseCalendarEvent(event.typeName + " - " + event.topic,
|
||||
"",
|
||||
(event.startTime == null ? getString(R.string.agenda_event_all_day) : event.startTime.getStringHM()) +
|
||||
Utils.bs(", ", event.subjectLongName) +
|
||||
Utils.bs(", ", event.teacherFullName) +
|
||||
Utils.bs(", ", event.teamName),
|
||||
event.getColor(),
|
||||
Colors.legibleTextColor(event.getColor()),
|
||||
startTime,
|
||||
endTime,
|
||||
event.startTime == null,
|
||||
event.id, !event.seen));
|
||||
if (!event.seen) {
|
||||
unreadEventDates.add(event.eventDate.getValue());
|
||||
}
|
||||
List<EventFull> events = app.db.eventDao().getAllNow(App.profileId);
|
||||
for (EventFull event : events) {
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
Calendar endTime = Calendar.getInstance();
|
||||
if (event.eventDate == null)
|
||||
continue;
|
||||
startTime.set(
|
||||
event.eventDate.year,
|
||||
event.eventDate.month - 1,
|
||||
event.eventDate.day,
|
||||
event.startTime == null ? 0 : event.startTime.hour,
|
||||
event.startTime == null ? 0 : event.startTime.minute,
|
||||
event.startTime == null ? 0 : event.startTime.second
|
||||
);
|
||||
endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45));
|
||||
eventList.add(new BaseCalendarEvent(event.typeName + " - " + event.topic,
|
||||
"",
|
||||
(event.startTime == null ? getString(R.string.agenda_event_all_day) : event.startTime.getStringHM()) +
|
||||
Utils.bs(", ", event.subjectLongName) +
|
||||
Utils.bs(", ", event.teacherFullName) +
|
||||
Utils.bs(", ", event.teamName),
|
||||
event.getColor(),
|
||||
Colors.legibleTextColor(event.getColor()),
|
||||
startTime,
|
||||
endTime,
|
||||
event.startTime == null,
|
||||
event.id, !event.seen));
|
||||
if (!event.seen) {
|
||||
unreadEventDates.add(event.eventDate.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/*List<LessonFull> lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId);
|
||||
for (LessonFull lesson: lessonChanges) {
|
||||
@ -232,126 +239,126 @@ public class AgendaDefaultFragment extends Fragment {
|
||||
(int)lesson.changeId, false));
|
||||
}*/
|
||||
|
||||
activity.runOnUiThread(() -> {
|
||||
AgendaCalendarView mAgendaCalendarView = b_default.agendaDefaultView;
|
||||
// minimum and maximum date of our calendar
|
||||
// 2 month behind, one year ahead, example: March 2015 <-> May 2015 <-> May 2016
|
||||
Calendar minDate = Calendar.getInstance();
|
||||
Calendar maxDate = Calendar.getInstance();
|
||||
activity.runOnUiThread(() -> {
|
||||
AgendaCalendarView mAgendaCalendarView = b_default.agendaDefaultView;
|
||||
// minimum and maximum date of our calendar
|
||||
// 2 month behind, one year ahead, example: March 2015 <-> May 2015 <-> May 2016
|
||||
Calendar minDate = Calendar.getInstance();
|
||||
Calendar maxDate = Calendar.getInstance();
|
||||
|
||||
minDate.add(Calendar.MONTH, -2);
|
||||
minDate.set(Calendar.DAY_OF_MONTH, 1);
|
||||
maxDate.add(Calendar.MONTH, 2);
|
||||
minDate.add(Calendar.MONTH, -2);
|
||||
minDate.set(Calendar.DAY_OF_MONTH, 1);
|
||||
maxDate.add(Calendar.MONTH, 2);
|
||||
|
||||
|
||||
mAgendaCalendarView.init(eventList, minDate, maxDate, Locale.getDefault(), new CalendarPickerController() {
|
||||
@Override
|
||||
public void onDaySelected(IDayItem dayItem) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrollToDate(Calendar calendar) {
|
||||
int scrolledDate = Date.fromCalendar(calendar).getValue();
|
||||
if (unreadEventDates.contains(scrolledDate)) {
|
||||
AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true));
|
||||
unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEventSelected(CalendarEvent calendarEvent) {
|
||||
if (calendarEvent instanceof BaseCalendarEvent) {
|
||||
if (!calendarEvent.isPlaceholder() && !calendarEvent.isAllDay()) {
|
||||
new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()), Time.fromMillis(calendarEvent.getStartTime().getTimeInMillis()), true);
|
||||
} else {
|
||||
new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()));
|
||||
}
|
||||
} else if (calendarEvent instanceof LessonChangeEvent) {
|
||||
new LessonChangeDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()));
|
||||
//Toast.makeText(app, "Clicked "+((LessonChangeEvent) calendarEvent).getLessonChangeDate().getFormattedString(), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}, new LessonChangeEventRenderer());
|
||||
b_default.progressBar.setVisibility(View.GONE);
|
||||
});
|
||||
}), 500);
|
||||
}
|
||||
else {
|
||||
List<Integer> unreadEventDates = new ArrayList<>();
|
||||
|
||||
final Handler handler = new Handler();
|
||||
handler.postDelayed(() -> AsyncTask.execute(() -> {
|
||||
if (app == null || app.profile == null || activity == null || b_calendar == null || !isAdded())
|
||||
return;
|
||||
Context c = getContext();
|
||||
Activity a = getActivity();
|
||||
assert c != null;
|
||||
assert a != null;
|
||||
if (!isAdded()) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<EventDay> eventList = new ArrayList<>();
|
||||
|
||||
List<EventFull> events = app.db.eventDao().getAllNow(App.profileId);
|
||||
for (EventFull event : events) {
|
||||
if (event.eventDate == null)
|
||||
continue;
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
startTime.set(
|
||||
event.eventDate.year,
|
||||
event.eventDate.month - 1,
|
||||
event.eventDate.day,
|
||||
event.startTime == null ? 0 : event.startTime.hour,
|
||||
event.startTime == null ? 0 : event.startTime.minute,
|
||||
event.startTime == null ? 0 : event.startTime.second
|
||||
);
|
||||
Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(event.getColor()));
|
||||
eventList.add(new EventDay(startTime, eventIcon));
|
||||
if (!event.seen) {
|
||||
unreadEventDates.add(event.eventDate.getValue());
|
||||
mAgendaCalendarView.init(eventList, minDate, maxDate, Locale.getDefault(), new CalendarPickerController() {
|
||||
@Override
|
||||
public void onDaySelected(IDayItem dayItem) {
|
||||
}
|
||||
}
|
||||
|
||||
List<LessonFull> lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId);
|
||||
|
||||
for (LessonFull lesson: lessonChanges) {
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
if (lesson.lessonDate == null) {
|
||||
continue;
|
||||
}
|
||||
startTime.set(
|
||||
lesson.lessonDate.year,
|
||||
lesson.lessonDate.month - 1,
|
||||
lesson.lessonDate.day,
|
||||
lesson.startTime.hour,
|
||||
lesson.startTime.minute,
|
||||
lesson.startTime.second);
|
||||
Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(0xff78909c));
|
||||
eventList.add(new EventDay(startTime, eventIcon));
|
||||
}
|
||||
|
||||
getActivity().runOnUiThread(() -> {
|
||||
//List<EventDay> eventList = new ArrayList<>();
|
||||
|
||||
//Collections.sort(eventList, new EventListComparator());
|
||||
|
||||
CalendarView calendarView = b_calendar.agendaCalendarView;
|
||||
calendarView.setEvents(eventList);
|
||||
calendarView.setOnDayClickListener(eventDay -> {
|
||||
Date dayDate = Date.fromCalendar(eventDay.getCalendar());
|
||||
int scrolledDate = dayDate.getValue();
|
||||
@Override
|
||||
public void onScrollToDate(Calendar calendar) {
|
||||
int scrolledDate = Date.fromCalendar(calendar).getValue();
|
||||
if (unreadEventDates.contains(scrolledDate)) {
|
||||
AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true));
|
||||
unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate));
|
||||
}
|
||||
}
|
||||
|
||||
new EventListDialog(getContext()).show(app, dayDate);
|
||||
});
|
||||
b_calendar.progressBar.setVisibility(View.GONE);
|
||||
@Override
|
||||
public void onEventSelected(CalendarEvent calendarEvent) {
|
||||
if (calendarEvent instanceof BaseCalendarEvent) {
|
||||
if (!calendarEvent.isPlaceholder() && !calendarEvent.isAllDay()) {
|
||||
new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()), Time.fromMillis(calendarEvent.getStartTime().getTimeInMillis()), true);
|
||||
} else {
|
||||
new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()));
|
||||
}
|
||||
} else if (calendarEvent instanceof LessonChangeEvent) {
|
||||
new LessonChangeDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()));
|
||||
//Toast.makeText(app, "Clicked "+((LessonChangeEvent) calendarEvent).getLessonChangeDate().getFormattedString(), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}, new LessonChangeEventRenderer());
|
||||
b_default.progressBar.setVisibility(View.GONE);
|
||||
});
|
||||
}), 500);
|
||||
}
|
||||
|
||||
private void createCalendarAgendaView() {
|
||||
List<Integer> unreadEventDates = new ArrayList<>();
|
||||
|
||||
final Handler handler = new Handler();
|
||||
handler.postDelayed(() -> AsyncTask.execute(() -> {
|
||||
if (app == null || app.profile == null || activity == null || b_calendar == null || !isAdded())
|
||||
return;
|
||||
Context c = getContext();
|
||||
Activity a = getActivity();
|
||||
assert c != null;
|
||||
assert a != null;
|
||||
if (!isAdded()) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<EventDay> eventList = new ArrayList<>();
|
||||
|
||||
List<EventFull> events = app.db.eventDao().getAllNow(App.profileId);
|
||||
for (EventFull event : events) {
|
||||
if (event.eventDate == null)
|
||||
continue;
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
startTime.set(
|
||||
event.eventDate.year,
|
||||
event.eventDate.month - 1,
|
||||
event.eventDate.day,
|
||||
event.startTime == null ? 0 : event.startTime.hour,
|
||||
event.startTime == null ? 0 : event.startTime.minute,
|
||||
event.startTime == null ? 0 : event.startTime.second
|
||||
);
|
||||
Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(event.getColor()));
|
||||
eventList.add(new EventDay(startTime, eventIcon));
|
||||
if (!event.seen) {
|
||||
unreadEventDates.add(event.eventDate.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
List<LessonFull> lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId);
|
||||
|
||||
for (LessonFull lesson: lessonChanges) {
|
||||
Calendar startTime = Calendar.getInstance();
|
||||
if (lesson.lessonDate == null) {
|
||||
continue;
|
||||
}
|
||||
startTime.set(
|
||||
lesson.lessonDate.year,
|
||||
lesson.lessonDate.month - 1,
|
||||
lesson.lessonDate.day,
|
||||
lesson.startTime.hour,
|
||||
lesson.startTime.minute,
|
||||
lesson.startTime.second);
|
||||
Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(0xff78909c));
|
||||
eventList.add(new EventDay(startTime, eventIcon));
|
||||
}
|
||||
|
||||
getActivity().runOnUiThread(() -> {
|
||||
//List<EventDay> eventList = new ArrayList<>();
|
||||
|
||||
//Collections.sort(eventList, new EventListComparator());
|
||||
|
||||
CalendarView calendarView = b_calendar.agendaCalendarView;
|
||||
calendarView.setEvents(eventList);
|
||||
calendarView.setOnDayClickListener(eventDay -> {
|
||||
Date dayDate = Date.fromCalendar(eventDay.getCalendar());
|
||||
int scrolledDate = dayDate.getValue();
|
||||
if (unreadEventDates.contains(scrolledDate)) {
|
||||
AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true));
|
||||
unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate));
|
||||
}
|
||||
|
||||
new EventListDialog(getContext()).show(app, dayDate);
|
||||
});
|
||||
}), 300);
|
||||
}
|
||||
b_calendar.progressBar.setVisibility(View.GONE);
|
||||
});
|
||||
}), 300);
|
||||
}
|
||||
|
||||
public static class EventListComparator implements java.util.Comparator<CalendarEvent> {
|
||||
|
@ -1,4 +1,4 @@
|
||||
package pl.szczodrzynski.edziennik.utils.models.db;
|
||||
package pl.szczodrzynski.edziennik.ui.modules.agenda;
|
||||
|
||||
import pl.szczodrzynski.edziennik.utils.models.Date;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package pl.szczodrzynski.edziennik.utils.models.db
|
||||
package pl.szczodrzynski.edziennik.utils.models
|
||||
|
||||
import pl.szczodrzynski.navlib.drawer.IUnreadCounter
|
||||
|
Loading…
Reference in New Issue
Block a user