Compare commits

..

4 Commits

7 changed files with 64 additions and 50 deletions

View File

@ -221,6 +221,12 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
}
Constants.GlanceProviderId.EVENTS -> {
Preferences.showEventsAsGlanceProvider = isChecked
if (isChecked) {
com.tommasoberlose.anotherwidget.db.EventRepository(context).run {
resetNextEventData()
close()
}
}
}
Constants.GlanceProviderId.WEATHER -> {
Preferences.showWeatherAsGlanceProvider = isChecked

View File

@ -27,7 +27,7 @@ class EventRepository(val context: Context) {
db.runInTransaction{
db.dao().run {
deleteAll()
insertAll(eventList)
insert(eventList)
}
}
}
@ -39,12 +39,6 @@ class EventRepository(val context: Context) {
fun resetNextEventData() {
Preferences.bulk {
remove(Preferences::nextEventId)
remove(Preferences::nextEventName)
remove(Preferences::nextEventStartDate)
remove(Preferences::nextEventAllDay)
remove(Preferences::nextEventLocation)
remove(Preferences::nextEventEndDate)
remove(Preferences::nextEventCalendarId)
}
}
@ -75,7 +69,7 @@ class EventRepository(val context: Context) {
val events = getEvents()
if (events.isNotEmpty()) {
val newNextEvent = events.first()
Preferences.nextEventId = newNextEvent.id
saveNextEventData(newNextEvent)
newNextEvent
} else {
resetNextEventData()
@ -93,9 +87,9 @@ class EventRepository(val context: Context) {
if (eventList.isNotEmpty()) {
val index = eventList.indexOfFirst { it.id == Preferences.nextEventId }
if (index > -1 && index < eventList.size - 1) {
Preferences.nextEventId = eventList[index + 1].id
saveNextEventData(eventList[index + 1])
} else {
Preferences.nextEventId = eventList.first().id
saveNextEventData(eventList.first())
}
} else {
resetNextEventData()
@ -111,9 +105,9 @@ class EventRepository(val context: Context) {
if (eventList.isNotEmpty()) {
val index = eventList.indexOfFirst { it.id == Preferences.nextEventId }
if (index > 0) {
Preferences.nextEventId = eventList[index - 1].id
saveNextEventData(eventList[index - 1])
} else {
Preferences.nextEventId = eventList.last().id
saveNextEventData(eventList.last())
}
} else {
resetNextEventData()
@ -125,7 +119,7 @@ class EventRepository(val context: Context) {
}
fun getFutureEvents(): List<Event> {
return db.dao().findFuture(Calendar.getInstance().timeInMillis).applyFilters().sortEvents()
return db.dao().find(Calendar.getInstance().timeInMillis).sortEvents()
}
private fun getEvents(): List<Event> {
@ -144,7 +138,7 @@ class EventRepository(val context: Context) {
else -> add(Calendar.HOUR, 6)
}
}
return db.dao().find(now, limit.timeInMillis).applyFilters().sortEvents()
return db.dao().find(now, limit.timeInMillis).sortEvents()
}
fun getEventsCount(): Int = getEvents().size
@ -156,16 +150,16 @@ class EventRepository(val context: Context) {
@Dao
interface EventDao {
@Query("SELECT * FROM events WHERE id = :id LIMIT 1")
fun findById(id: Long) : Event?
fun findById(id: Long): Event?
@Query("SELECT * FROM events WHERE end_date > :from")
fun findFuture(from: Long) : List<Event>
fun find(from: Long): List<Event>
@Query("SELECT * FROM events WHERE end_date > :from and start_date <= :to")
fun find(from: Long, to: Long) : List<Event>
@Query("SELECT * FROM events WHERE end_date > :from AND start_date <= :to")
fun find(from: Long, to: Long): List<Event>
@Insert
fun insertAll(events: List<Event>)
fun insert(events: List<Event>)
@Query("DELETE FROM events")
fun deleteAll()

View File

@ -23,12 +23,6 @@ object Preferences : KotprefModel() {
var calendarFilter by stringPref(key = "PREF_CALENDAR_FILTER", default = "")
var nextEventId by longPref(key = "PREF_NEXT_EVENT_ID", default = -1)
var nextEventName by stringPref(key = "PREF_NEXT_EVENT_NAME")
var nextEventStartDate by longPref(key = "PREF_NEXT_EVENT_START_DATE")
var nextEventAllDay by booleanPref(key = "PREF_NEXT_EVENT_ALL_DAY")
var nextEventLocation by stringPref(key = "PREF_NEXT_EVENT_LOCATION")
var nextEventEndDate by longPref(key = "PREF_NEXT_EVENT_END_DATE")
var nextEventCalendarId by intPref(key = "PREF_NEXT_EVENT_CALENDAR_ID")
var customLocationLat by stringPref(key = "PREF_CUSTOM_LOCATION_LAT", default = "")
var customLocationLon by stringPref(key = "PREF_CUSTOM_LOCATION_LON", default = "")
var customLocationAdd by stringPref(key = "PREF_CUSTOM_LOCATION_ADD", default = "")

View File

@ -66,11 +66,11 @@ class UpdateCalendarWorker(context: Context, params: WorkerParameters) : Worker(
limit.timeInMillis + limit.timeZone.getOffset(limit.timeInMillis).coerceAtLeast(0)
)
if (data != null) {
val instances = data.list
for (instance in instances) {
val filteredCalendarIdList = CalendarHelper.getFilteredCalendarIdList()
for (instance in data.list) {
try {
val e = provider.getEvent(instance.eventId)
if (e == null || e.deleted || CalendarHelper.getFilteredCalendarIdList().contains(e.calendarId))
if (e == null || e.deleted || filteredCalendarIdList.contains(e.calendarId))
continue
if (e.allDay) {
val start = Calendar.getInstance()
@ -131,8 +131,12 @@ class UpdateCalendarWorker(context: Context, params: WorkerParameters) : Worker(
eventRepository.resetNextEventData()
eventRepository.clearEvents()
} else {
eventRepository.saveEvents(sortedEvents)
eventRepository.saveNextEventData(filteredEventList.first())
val first = filteredEventList.first()
if (Preferences.nextEventId != first.id && (
//Preferences.showWeatherAsGlanceProvider || !Preferences.showNextEvent ||
eventRepository.getEventById(first.id)?.startDate != first.startDate))
eventRepository.saveNextEventData(first)
eventRepository.saveEvents(filteredEventList)
}
} catch (ignored: java.lang.Exception) {
}

View File

@ -144,6 +144,12 @@ class GesturesFragment : Fragment() {
binding.showMultipleEventsToggle.setOnCheckedChangeListener { _, isChecked ->
Preferences.showNextEvent = isChecked
if (!isChecked) {
com.tommasoberlose.anotherwidget.db.EventRepository(requireContext()).run {
resetNextEventData()
close()
}
}
}
binding.actionOpenEventDetails.setOnClickListener {

View File

@ -496,8 +496,7 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
context,
now.timeInMillis,
nextEvent.startDate
)
.toLowerCase(Locale.getDefault())
).toLowerCase(Locale.getDefault())
} else {
SettingsStringHelper.getAllDayEventDifferenceText(
context,
@ -510,7 +509,18 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
if (!Preferences.showNextEventOnMultipleLines) {
bindingView.nextEventDifferenceTime.isVisible = true
} else {
bindingView.nextEvent.text = context.getString(R.string.events_glance_provider_format).format(nextEvent.title, diffTime)
val text = context.getString(R.string.events_glance_provider_format).format(nextEvent.title, diffTime)
if (text.endsWith(diffTime)) {
bindingView.nextEvent.addOnLayoutChangeListener { v, _, _, _, _, _, _, _, _ ->
(v as TextView).layout?.run {
val diff = diffTime.trimStart();
val diffStart = text.length - diff.length
if (getLineStart(lineCount - 1) > diffStart)
v.text = (text.substring(0, diffStart).trimEnd() + '\n' + diff)
}
}
}
bindingView.nextEvent.text = text
bindingView.nextEventDifferenceTime.isVisible = false
}
} else {
@ -577,11 +587,7 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
} else {
val start = Calendar.getInstance().apply { timeInMillis = nextEvent.startDate }
bindingView.subLineText.text = if (now.get(Calendar.DAY_OF_YEAR) == start.get(
Calendar.DAY_OF_YEAR)) {
DateHelper.getDateText(context, start)
} else if (now.get(Calendar.DAY_OF_YEAR) > start.get(Calendar.DAY_OF_YEAR) || now.get(
Calendar.YEAR) > start.get(Calendar.YEAR)) {
bindingView.subLineText.text = if (now.after(start)) {
DateHelper.getDateText(context, now)
} else {
DateHelper.getDateText(context, start)
@ -716,8 +722,7 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
context,
now.timeInMillis,
nextEvent.startDate
)
.toLowerCase(Locale.getDefault())
).toLowerCase(Locale.getDefault())
} else {
SettingsStringHelper.getAllDayEventDifferenceText(
context,

View File

@ -528,8 +528,7 @@ class StandardWidget(val context: Context) {
context,
now.timeInMillis,
nextEvent.startDate
)
.toLowerCase(Locale.getDefault())
).toLowerCase(Locale.getDefault())
} else {
SettingsStringHelper.getAllDayEventDifferenceText(
context,
@ -542,7 +541,18 @@ class StandardWidget(val context: Context) {
if (!Preferences.showNextEventOnMultipleLines) {
bindingView.nextEventDifferenceTime.isVisible = true
} else {
bindingView.nextEvent.text = context.getString(R.string.events_glance_provider_format).format(nextEvent.title, diffTime)
val text = context.getString(R.string.events_glance_provider_format).format(nextEvent.title, diffTime)
if (text.endsWith(diffTime)) {
bindingView.nextEvent.addOnLayoutChangeListener { v, _, _, _, _, _, _, _, _ ->
(v as TextView).layout?.run {
val diff = diffTime.trimStart();
val diffStart = text.length - diff.length
if (getLineStart(lineCount - 1) > diffStart)
v.text = (text.substring(0, diffStart).trimEnd() + '\n' + diff)
}
}
}
bindingView.nextEvent.text = text
bindingView.nextEventDifferenceTime.isVisible = false
}
} else {
@ -609,11 +619,7 @@ class StandardWidget(val context: Context) {
} else {
val start = Calendar.getInstance().apply { timeInMillis = nextEvent.startDate }
bindingView.subLineText.text = if (now.get(Calendar.DAY_OF_YEAR) == start.get(
Calendar.DAY_OF_YEAR)) {
DateHelper.getDateText(context, start)
} else if (now.get(Calendar.DAY_OF_YEAR) > start.get(Calendar.DAY_OF_YEAR) || now.get(
Calendar.YEAR) > start.get(Calendar.YEAR)) {
bindingView.subLineText.text = if (now.after(start)) {
DateHelper.getDateText(context, now)
} else {
DateHelper.getDateText(context, start)
@ -748,8 +754,7 @@ class StandardWidget(val context: Context) {
context,
now.timeInMillis,
nextEvent.startDate
)
.toLowerCase(Locale.getDefault())
).toLowerCase(Locale.getDefault())
} else {
SettingsStringHelper.getAllDayEventDifferenceText(
context,