mirror of
https://github.com/wulkanowy/wulkanowy.git
synced 2025-01-19 02:56:45 -06:00
Respect user settings in timetable app widget (#687)
This commit is contained in:
parent
30e43501ac
commit
9a87df7315
@ -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
|
||||
)
|
||||
|
@ -41,7 +41,7 @@ data class Timetable(
|
||||
val info: String,
|
||||
|
||||
@ColumnInfo(name = "student_plan")
|
||||
val studentPlan: Boolean,
|
||||
val isStudentPlan: Boolean,
|
||||
|
||||
val changes: Boolean,
|
||||
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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) }
|
||||
}
|
||||
|
||||
|
@ -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"))
|
||||
|
94
app/src/main/res/layout/item_widget_timetable_small.xml
Normal file
94
app/src/main/res/layout/item_widget_timetable_small.xml
Normal 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>
|
95
app/src/main/res/layout/item_widget_timetable_small_dark.xml
Normal file
95
app/src/main/res/layout/item_widget_timetable_small_dark.xml
Normal 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>
|
Loading…
x
Reference in New Issue
Block a user