1
0
mirror of https://github.com/wulkanowy/wulkanowy.git synced 2025-01-19 00:26:45 -06:00

Respect user settings in timetable app widget (#687)

This commit is contained in:
Mikołaj Pich 2020-02-22 20:42:02 +01:00 committed by GitHub
parent 30e43501ac
commit 9a87df7315
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 219 additions and 11 deletions

View File

@ -21,7 +21,7 @@ fun createTimetableLocal(start: LocalDateTime, number: Int, room: String = "", s
teacher = teacher,
teacherOld = "",
info = "",
studentPlan = true,
isStudentPlan = true,
changes = changes,
canceled = false
)

View File

@ -41,7 +41,7 @@ data class Timetable(
val info: String,
@ColumnInfo(name = "student_plan")
val studentPlan: Boolean,
val isStudentPlan: Boolean,
val changes: Boolean,

View File

@ -30,7 +30,7 @@ class TimetableRemote @Inject constructor(private val sdk: Sdk) {
teacher = it.teacher,
teacherOld = it.teacherOld,
info = it.info,
studentPlan = it.studentPlan,
isStudentPlan = it.studentPlan,
changes = it.changes,
canceled = it.canceled
)

View File

@ -4,6 +4,7 @@ import android.content.Intent
import android.widget.RemoteViewsService
import dagger.android.AndroidInjection
import io.github.wulkanowy.data.db.SharedPrefProvider
import io.github.wulkanowy.data.repositories.preferences.PreferencesRepository
import io.github.wulkanowy.data.repositories.semester.SemesterRepository
import io.github.wulkanowy.data.repositories.student.StudentRepository
import io.github.wulkanowy.data.repositories.timetable.TimetableRepository
@ -22,6 +23,9 @@ class TimetableWidgetService : RemoteViewsService() {
@Inject
lateinit var semesterRepo: SemesterRepository
@Inject
lateinit var prefRepository: PreferencesRepository
@Inject
lateinit var sharedPref: SharedPrefProvider
@ -30,6 +34,6 @@ class TimetableWidgetService : RemoteViewsService() {
override fun onGetViewFactory(intent: Intent?): RemoteViewsFactory {
AndroidInjection.inject(this)
return TimetableWidgetFactory(timetableRepo, studentRepo, semesterRepo, sharedPref, schedulers, applicationContext, intent)
return TimetableWidgetFactory(timetableRepo, studentRepo, semesterRepo, prefRepository, sharedPref, schedulers, applicationContext, intent)
}
}

View File

@ -21,7 +21,7 @@ class TimetableItem(val lesson: Timetable, private val showWholeClassPlan: Strin
AbstractFlexibleItem<TimetableItem.ViewHolder>() {
override fun getLayoutRes() = when {
showWholeClassPlan == "small" && !lesson.studentPlan -> R.layout.item_timetable_small
showWholeClassPlan == "small" && !lesson.isStudentPlan -> R.layout.item_timetable_small
else -> R.layout.item_timetable
}

View File

@ -177,7 +177,7 @@ class TimetablePresenter @Inject constructor(
private fun createTimetableItems(items: List<Timetable>): List<TimetableItem> {
return items
.filter { if (prefRepository.showWholeClassPlan == "no") it.studentPlan else true }
.filter { if (prefRepository.showWholeClassPlan == "no") it.isStudentPlan else true }
.map { TimetableItem(it, prefRepository.showWholeClassPlan) }
}

View File

@ -14,6 +14,7 @@ import android.widget.RemoteViewsService
import io.github.wulkanowy.R
import io.github.wulkanowy.data.db.SharedPrefProvider
import io.github.wulkanowy.data.db.entities.Timetable
import io.github.wulkanowy.data.repositories.preferences.PreferencesRepository
import io.github.wulkanowy.data.repositories.semester.SemesterRepository
import io.github.wulkanowy.data.repositories.student.StudentRepository
import io.github.wulkanowy.data.repositories.timetable.TimetableRepository
@ -31,6 +32,7 @@ class TimetableWidgetFactory(
private val timetableRepository: TimetableRepository,
private val studentRepository: StudentRepository,
private val semesterRepository: SemesterRepository,
private val prefRepository: PreferencesRepository,
private val sharedPref: SharedPrefProvider,
private val schedulers: SchedulersProvider,
private val context: Context,
@ -39,6 +41,8 @@ class TimetableWidgetFactory(
private var lessons = emptyList<Timetable>()
private var savedTheme: Long? = null
private var layoutId: Int? = null
private var primaryColor: Int? = null
@ -53,7 +57,7 @@ class TimetableWidgetFactory(
override fun getCount() = lessons.size
override fun getViewTypeCount() = 1
override fun getViewTypeCount() = 2
override fun getItemId(position: Int) = position.toLong()
@ -73,7 +77,7 @@ class TimetableWidgetFactory(
}
private fun updateTheme(appWidgetId: Int) {
val savedTheme = sharedPref.getLong(getThemeWidgetKey(appWidgetId), 0)
savedTheme = sharedPref.getLong(getThemeWidgetKey(appWidgetId), 0)
layoutId = if (savedTheme == 0L) R.layout.item_widget_timetable else R.layout.item_widget_timetable_dark
primaryColor = if (savedTheme == 0L) R.color.colorPrimary else R.color.colorPrimaryLight
@ -81,6 +85,17 @@ class TimetableWidgetFactory(
timetableChangeColor = if (savedTheme == 0L) R.color.timetable_change_dark else R.color.timetable_change_light
}
private fun getItemLayout(lesson: Timetable): Int {
return when {
prefRepository.showWholeClassPlan == "small" && !lesson.isStudentPlan -> {
if (savedTheme == 0L) R.layout.item_widget_timetable_small
else R.layout.item_widget_timetable_small_dark
}
savedTheme == 0L -> R.layout.item_widget_timetable
else -> R.layout.item_widget_timetable_dark
}
}
private fun updateLessons(date: LocalDate, studentId: Long) {
lessons = try {
studentRepository.isStudentSaved()
@ -95,6 +110,7 @@ class TimetableWidgetFactory(
.flatMap { semesterRepository.getCurrentSemester(it).toMaybe() }
.flatMap { timetableRepository.getTimetable(it, date, date).toMaybe() }
.map { item -> item.sortedBy { it.number } }
.map { lessons -> lessons.filter { if (prefRepository.showWholeClassPlan == "no") it.isStudentPlan else true } }
.subscribeOn(schedulers.backgroundThread)
.blockingGet(emptyList())
} catch (e: Exception) {
@ -107,9 +123,8 @@ class TimetableWidgetFactory(
override fun getViewAt(position: Int): RemoteViews? {
if (position == INVALID_POSITION || lessons.getOrNull(position) == null) return null
return RemoteViews(context.packageName, layoutId!!).apply {
val lesson = lessons[position]
val lesson = lessons[position]
return RemoteViews(context.packageName, getItemLayout(lesson)).apply {
setTextViewText(R.id.timetableWidgetItemSubject, lesson.subject)
setTextViewText(R.id.timetableWidgetItemNumber, lesson.number.toString())
setTextViewText(R.id.timetableWidgetItemTimeStart, lesson.start.toFormattedString("HH:mm"))

View File

@ -0,0 +1,94 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:orientation="vertical"
android:paddingStart="6dp"
android:paddingLeft="6dp"
android:paddingEnd="6dp"
android:paddingRight="6dp"
tools:context=".ui.modules.timetablewidget.TimetableWidgetFactory">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/timetableWidgetItemNumber"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:gravity="center"
android:maxLength="2"
android:textColor="@android:color/black"
android:textSize="15sp"
tools:text="5" />
<TextView
android:id="@+id/timetableWidgetItemTimeStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginLeft="6dp"
android:maxLines="1"
android:textColor="@android:color/black"
android:textSize="13sp"
tools:text="11:11" />
<TextView
android:id="@+id/timetableWidgetItemTimeFinish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/timetableWidgetItemSubject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/black"
android:textSize="15sp"
tools:text="Sieci komputerowe" />
<TextView
android:id="@+id/timetableWidgetItemRoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:maxLines="1"
android:textColor="@android:color/black"
android:textSize="15sp"
tools:text="22" />
<TextView
android:id="@+id/timetableWidgetItemTeacher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/black"
android:textSize="15sp"
tools:text="Agata Kowalska - Błaszczyk" />
<TextView
android:id="@+id/timetableWidgetItemDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorDivider" />
</LinearLayout>

View File

@ -0,0 +1,95 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorWidgetBackground"
android:orientation="vertical"
android:paddingStart="6dp"
android:paddingLeft="6dp"
android:paddingEnd="6dp"
android:paddingRight="6dp"
tools:context=".ui.modules.timetablewidget.TimetableWidgetFactory">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/timetableWidgetItemNumber"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:gravity="center"
android:maxLength="2"
android:textColor="@android:color/white"
android:textSize="15sp"
tools:text="5" />
<TextView
android:id="@+id/timetableWidgetItemTimeStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginLeft="6dp"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="13sp"
tools:text="11:11" />
<TextView
android:id="@+id/timetableWidgetItemTimeFinish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/timetableWidgetItemSubject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="15sp"
tools:text="Sieci komputerowe" />
<TextView
android:id="@+id/timetableWidgetItemRoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="15sp"
tools:text="22" />
<TextView
android:id="@+id/timetableWidgetItemTeacher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="15sp"
tools:text="Agata Kowalska - Błaszczyk" />
<TextView
android:id="@+id/timetableWidgetItemDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorDividerInverse" />
</LinearLayout>