diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceDao.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceDao.kt index 35387742..543d8fab 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceDao.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceDao.kt @@ -1,10 +1,12 @@ package pl.szczodrzynski.edziennik.data.db.modules.teachers +import androidx.lifecycle.LiveData import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata +import pl.szczodrzynski.edziennik.utils.models.Date @Dao interface TeacherAbsenceDao { @@ -24,4 +26,12 @@ interface TeacherAbsenceDao { "LEFT JOIN metadata ON teacherAbsenceId = thingId AND metadata.thingType = " + Metadata.TYPE_TEACHER_ABSENCE + " AND metadata.profileId = :profileId WHERE teachers.profileId = :profileId") fun getAllFull(profileId: Int): List + + @Query("SELECT *, teachers.teacherName || ' ' || teachers.teacherSurname as teacherFullName, " + + "metadata.seen, metadata.notified, metadata.addedDate FROM teacherAbsence " + + "LEFT JOIN teachers USING (profileId, teacherId) " + + "LEFT JOIN metadata ON teacherAbsenceId = thingId AND metadata.thingType = " + Metadata.TYPE_TEACHER_ABSENCE + + " AND metadata.profileId = :profileId WHERE teachers.profileId = :profileId " + + "AND :date BETWEEN teacherAbsenceDateFrom AND teacherAbsenceDateTo") + fun getAllByDateFull(profileId: Int, date: Date): LiveData> } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceFull.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceFull.kt index aec02ee3..b37f24f1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceFull.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceFull.kt @@ -5,6 +5,8 @@ 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 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceAdapter.kt new file mode 100644 index 00000000..35292685 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceAdapter.kt @@ -0,0 +1,38 @@ +package pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import pl.szczodrzynski.edziennik.R +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceFull +import pl.szczodrzynski.edziennik.utils.models.Date + +class TeacherAbsenceAdapter( + private val context: Context, + private val date: Date, + private val teacherAbsenceList: List +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater: LayoutInflater = LayoutInflater.from(context) + val view: View = inflater.inflate(R.layout.row_dialog_teacher_absence_item, parent, false) + return ViewHolder(view) + } + + override fun getItemCount(): Int { + return teacherAbsenceList.size + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val teacherAbsence: TeacherAbsenceFull = teacherAbsenceList[position] + + holder.teacherAbsenceTeacher.text = teacherAbsence.teacherFullName + } + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var teacherAbsenceTeacher: TextView = itemView.findViewById(R.id.teacherAbsenceTeacher) + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceDialog.kt new file mode 100644 index 00000000..802f404a --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceDialog.kt @@ -0,0 +1,43 @@ +package pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence + +import android.content.Context +import android.view.View +import androidx.databinding.DataBindingUtil +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.afollestad.materialdialogs.MaterialDialog +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.R +import pl.szczodrzynski.edziennik.databinding.DialogTeacherAbsenceListBinding +import pl.szczodrzynski.edziennik.utils.models.Date + +class TeacherAbsenceDialog(val context: Context) { + + val profileId: Int = App.profileId + private lateinit var b: DialogTeacherAbsenceListBinding + + fun show(app: App, date: Date) { + val dialog = MaterialDialog.Builder(context) + .title(date.formattedString) + .customView(R.layout.dialog_teacher_absence_list, true) + .positiveText(R.string.close) + .autoDismiss(false) + .onPositive { dialog, _ -> dialog.dismiss()} + .show() + + val customView: View = dialog.customView ?: return + b = DataBindingUtil.bind(customView) ?: return + + b.teacherAbsenceView.setHasFixedSize(false) + b.teacherAbsenceView.isNestedScrollingEnabled = false + b.teacherAbsenceView.layoutManager = LinearLayoutManager(context) + + app.db.teacherAbsenceDao().getAllByDateFull(profileId, date).observe(context as LifecycleOwner, Observer { absenceList -> + val adapter = TeacherAbsenceAdapter(context, date, absenceList) + b.teacherAbsenceView.adapter = adapter + b.teacherAbsenceView.visibility = View.VISIBLE + }) + } + +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.java index 758db9eb..8d4e47ca 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.java @@ -44,6 +44,7 @@ import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListDialog; import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog; import pl.szczodrzynski.edziennik.ui.dialogs.lessonchange.LessonChangeDialog; +import pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence.TeacherAbsenceDialog; import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeCounter; import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeEvent; import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeEventRenderer; @@ -322,6 +323,8 @@ public class AgendaFragment extends Fragment { } 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(); + } else if (calendarEvent instanceof TeacherAbsenceEvent) { + new TeacherAbsenceDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay())); } } }, new LessonChangeEventRenderer(), new TeacherAbsenceEventRenderer()); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEventRenderer.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEventRenderer.kt index 541c0ea5..3789beb8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEventRenderer.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEventRenderer.kt @@ -8,9 +8,9 @@ import pl.szczodrzynski.edziennik.R class TeacherAbsenceEventRenderer : EventRenderer() { override fun render(view: View?, event: TeacherAbsenceEvent) { - val card = view?.findViewById(R.id.teacher_absence_card) - val changeText = view?.findViewById(R.id.teacher_absence_text) - val changeCount = view?.findViewById(R.id.teacher_absence_count) + val card = view?.findViewById(R.id.teacherAbsenceCard) + val changeText = view?.findViewById(R.id.teacherAbsenceText) + val changeCount = view?.findViewById(R.id.teacherAbsenceCount) card?.setCardBackgroundColor(event.color) changeText?.setTextColor(event.textColor) changeCount?.setTextColor(event.textColor) diff --git a/app/src/main/res/layout/agenda_event_lesson_change.xml b/app/src/main/res/layout/agenda_event_lesson_change.xml index 36a9a36d..c51f9b35 100644 --- a/app/src/main/res/layout/agenda_event_lesson_change.xml +++ b/app/src/main/res/layout/agenda_event_lesson_change.xml @@ -9,8 +9,8 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/agenda_event_teacher_absence.xml b/app/src/main/res/layout/agenda_event_teacher_absence.xml index 2a4dea9f..785256d0 100644 --- a/app/src/main/res/layout/agenda_event_teacher_absence.xml +++ b/app/src/main/res/layout/agenda_event_teacher_absence.xml @@ -7,7 +7,7 @@ diff --git a/app/src/main/res/layout/dialog_event_list.xml b/app/src/main/res/layout/dialog_event_list.xml index d1ff5684..4489f929 100644 --- a/app/src/main/res/layout/dialog_event_list.xml +++ b/app/src/main/res/layout/dialog_event_list.xml @@ -16,7 +16,7 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/dialog_teacher_absence_list.xml b/app/src/main/res/layout/dialog_teacher_absence_list.xml new file mode 100644 index 00000000..2608ce0d --- /dev/null +++ b/app/src/main/res/layout/dialog_teacher_absence_list.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/layout/row_dialog_teacher_absence_item.xml b/app/src/main/res/layout/row_dialog_teacher_absence_item.xml index cc9a88af..c7befdf2 100644 --- a/app/src/main/res/layout/row_dialog_teacher_absence_item.xml +++ b/app/src/main/res/layout/row_dialog_teacher_absence_item.xml @@ -1,35 +1,34 @@ - + + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content"> - + android:layout_marginStart="8dp" + android:layout_marginTop="4dp" + android:layout_marginEnd="8dp" + android:layout_marginBottom="4dp" + android:background="?selectableItemBackground" + app:cardCornerRadius="5dp" + app:cardElevation="4dp"> - + - - - - - + + + + diff --git a/app/src/main/res/layout/row_dialog_lesson_change_item.xml b/app/src/main/res/layout/row_lesson_change_item.xml similarity index 100% rename from app/src/main/res/layout/row_dialog_lesson_change_item.xml rename to app/src/main/res/layout/row_lesson_change_item.xml diff --git a/app/src/main/res/layout/row_teacher_absence_item.xml b/app/src/main/res/layout/row_teacher_absence_item.xml new file mode 100644 index 00000000..2099699f --- /dev/null +++ b/app/src/main/res/layout/row_teacher_absence_item.xml @@ -0,0 +1,35 @@ + + + + + + + + + + +