mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
Strikethrough events when status is set to "Not going"
This commit is contained in:
@@ -232,36 +232,24 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
|||||||
|
|
||||||
var time = dateTime.withHourOfDay(7)
|
var time = dateTime.withHourOfDay(7)
|
||||||
listItems.add(
|
listItems.add(
|
||||||
ListEvent(
|
ListEvent.empty.copy(
|
||||||
1,
|
id = 1,
|
||||||
time.seconds(),
|
startTS = time.seconds(),
|
||||||
time.plusMinutes(30).seconds(),
|
endTS = time.plusMinutes(30).seconds(),
|
||||||
getString(R.string.sample_title_1),
|
title = getString(R.string.sample_title_1),
|
||||||
getString(R.string.sample_description_1),
|
description = getString(R.string.sample_description_1),
|
||||||
false,
|
color = getProperPrimaryColor(),
|
||||||
getProperPrimaryColor(),
|
|
||||||
"",
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
time = dateTime.withHourOfDay(8)
|
time = dateTime.withHourOfDay(8)
|
||||||
listItems.add(
|
listItems.add(
|
||||||
ListEvent(
|
ListEvent.empty.copy(
|
||||||
2,
|
id = 2,
|
||||||
time.seconds(),
|
startTS = time.seconds(),
|
||||||
time.plusHours(1).seconds(),
|
endTS = time.plusHours(1).seconds(),
|
||||||
getString(R.string.sample_title_2),
|
title = getString(R.string.sample_title_2),
|
||||||
getString(R.string.sample_description_2),
|
description = getString(R.string.sample_description_2),
|
||||||
false,
|
color = getProperPrimaryColor(),
|
||||||
getProperPrimaryColor(),
|
|
||||||
"",
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -272,53 +260,35 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
|||||||
|
|
||||||
time = dateTime.withHourOfDay(8)
|
time = dateTime.withHourOfDay(8)
|
||||||
listItems.add(
|
listItems.add(
|
||||||
ListEvent(
|
ListEvent.empty.copy(
|
||||||
3,
|
id = 3,
|
||||||
time.seconds(),
|
startTS = time.seconds(),
|
||||||
time.plusHours(1).seconds(),
|
endTS = time.plusHours(1).seconds(),
|
||||||
getString(R.string.sample_title_3),
|
title = getString(R.string.sample_title_3),
|
||||||
"",
|
description = "",
|
||||||
false,
|
color = getProperPrimaryColor(),
|
||||||
getProperPrimaryColor(),
|
|
||||||
"",
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
time = dateTime.withHourOfDay(13)
|
time = dateTime.withHourOfDay(13)
|
||||||
listItems.add(
|
listItems.add(
|
||||||
ListEvent(
|
ListEvent.empty.copy(
|
||||||
4,
|
id = 4,
|
||||||
time.seconds(),
|
startTS = time.seconds(),
|
||||||
time.plusHours(1).seconds(),
|
endTS = time.plusHours(1).seconds(),
|
||||||
getString(R.string.sample_title_4),
|
title = getString(R.string.sample_title_4),
|
||||||
getString(R.string.sample_description_4),
|
description = getString(R.string.sample_description_4),
|
||||||
false,
|
color = getProperPrimaryColor(),
|
||||||
getProperPrimaryColor(),
|
|
||||||
"",
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
time = dateTime.withHourOfDay(18)
|
time = dateTime.withHourOfDay(18)
|
||||||
listItems.add(
|
listItems.add(
|
||||||
ListEvent(
|
ListEvent.empty.copy(
|
||||||
5,
|
id = 5,
|
||||||
time.seconds(),
|
startTS = time.seconds(),
|
||||||
time.plusMinutes(10).seconds(),
|
endTS = time.plusMinutes(10).seconds(),
|
||||||
getString(R.string.sample_title_5),
|
title = getString(R.string.sample_title_5),
|
||||||
"",
|
description = "",
|
||||||
false,
|
color = getProperPrimaryColor(),
|
||||||
getProperPrimaryColor(),
|
|
||||||
"",
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -90,7 +90,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
|||||||
eventItemHolder.isSelected = selectedKeys.contains(event.id?.toInt())
|
eventItemHolder.isSelected = selectedKeys.contains(event.id?.toInt())
|
||||||
eventItemHolder.background.applyColorFilter(textColor)
|
eventItemHolder.background.applyColorFilter(textColor)
|
||||||
eventItemTitle.text = event.title
|
eventItemTitle.text = event.title
|
||||||
eventItemTitle.checkViewStrikeThrough(event.isTaskCompleted())
|
eventItemTitle.checkViewStrikeThrough(event.shouldStrikeThrough())
|
||||||
eventItemTime.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(activity, event.startTS)
|
eventItemTime.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(activity, event.startTS)
|
||||||
if (event.startTS != event.endTS) {
|
if (event.startTS != event.endTS) {
|
||||||
val startDayCode = Formatter.getDayCodeFromTS(event.startTS)
|
val startDayCode = Formatter.getDayCodeFromTS(event.startTS)
|
||||||
|
@@ -136,7 +136,7 @@ class EventListAdapter(
|
|||||||
eventItemHolder.isSelected = selectedKeys.contains(listEvent.hashCode())
|
eventItemHolder.isSelected = selectedKeys.contains(listEvent.hashCode())
|
||||||
eventItemHolder.background.applyColorFilter(textColor)
|
eventItemHolder.background.applyColorFilter(textColor)
|
||||||
eventItemTitle.text = listEvent.title
|
eventItemTitle.text = listEvent.title
|
||||||
eventItemTitle.checkViewStrikeThrough(listEvent.isTaskCompleted)
|
eventItemTitle.checkViewStrikeThrough(listEvent.shouldStrikeThrough())
|
||||||
eventItemTime.text = if (listEvent.isAllDay) allDayString else Formatter.getTimeFromTS(activity, listEvent.startTS)
|
eventItemTime.text = if (listEvent.isAllDay) allDayString else Formatter.getTimeFromTS(activity, listEvent.startTS)
|
||||||
if (listEvent.startTS != listEvent.endTS) {
|
if (listEvent.startTS != listEvent.endTS) {
|
||||||
if (!listEvent.isAllDay) {
|
if (!listEvent.isAllDay) {
|
||||||
|
@@ -6,10 +6,7 @@ import android.graphics.Paint
|
|||||||
import android.widget.RemoteViews
|
import android.widget.RemoteViews
|
||||||
import android.widget.RemoteViewsService
|
import android.widget.RemoteViewsService
|
||||||
import com.simplemobiletools.calendar.pro.R
|
import com.simplemobiletools.calendar.pro.R
|
||||||
import com.simplemobiletools.calendar.pro.extensions.config
|
import com.simplemobiletools.calendar.pro.extensions.*
|
||||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
|
||||||
import com.simplemobiletools.calendar.pro.extensions.getWidgetFontSize
|
|
||||||
import com.simplemobiletools.calendar.pro.extensions.seconds
|
|
||||||
import com.simplemobiletools.calendar.pro.helpers.*
|
import com.simplemobiletools.calendar.pro.helpers.*
|
||||||
import com.simplemobiletools.calendar.pro.models.*
|
import com.simplemobiletools.calendar.pro.models.*
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
@@ -120,7 +117,7 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
|
|||||||
setViewPadding(R.id.event_item_title, normalMargin, 0, smallMargin, 0)
|
setViewPadding(R.id.event_item_title, normalMargin, 0, smallMargin, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.isTaskCompleted) {
|
if (item.shouldStrikeThrough()) {
|
||||||
setInt(R.id.event_item_title, "setPaintFlags", Paint.ANTI_ALIAS_FLAG or Paint.STRIKE_THRU_TEXT_FLAG)
|
setInt(R.id.event_item_title, "setPaintFlags", Paint.ANTI_ALIAS_FLAG or Paint.STRIKE_THRU_TEXT_FLAG)
|
||||||
} else {
|
} else {
|
||||||
setInt(R.id.event_item_title, "setPaintFlags", Paint.ANTI_ALIAS_FLAG)
|
setInt(R.id.event_item_title, "setPaintFlags", Paint.ANTI_ALIAS_FLAG)
|
||||||
@@ -226,18 +223,19 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
|
|||||||
}
|
}
|
||||||
|
|
||||||
val listEvent = ListEvent(
|
val listEvent = ListEvent(
|
||||||
event.id!!,
|
id = event.id!!,
|
||||||
event.startTS,
|
startTS = event.startTS,
|
||||||
event.endTS,
|
endTS = event.endTS,
|
||||||
event.title,
|
title = event.title,
|
||||||
event.description,
|
description = event.description,
|
||||||
event.getIsAllDay(),
|
isAllDay = event.getIsAllDay(),
|
||||||
event.color,
|
color = event.color,
|
||||||
event.location,
|
location = event.location,
|
||||||
event.isPastEvent,
|
isPastEvent = event.isPastEvent,
|
||||||
event.repeatInterval > 0,
|
isRepeatable = event.repeatInterval > 0,
|
||||||
event.isTask(),
|
isTask = event.isTask(),
|
||||||
event.isTaskCompleted()
|
isTaskCompleted = event.isTaskCompleted(),
|
||||||
|
isAttendeeInviteDeclined = event.isAttendeeInviteDeclined()
|
||||||
)
|
)
|
||||||
listItems.add(listEvent)
|
listItems.add(listEvent)
|
||||||
}
|
}
|
||||||
|
@@ -601,7 +601,7 @@ fun Context.addDayEvents(day: DayMonthly, linearLayout: LinearLayout, res: Resou
|
|||||||
dayMonthlyEventId.apply {
|
dayMonthlyEventId.apply {
|
||||||
setTextColor(textColor)
|
setTextColor(textColor)
|
||||||
text = it.title.replace(" ", "\u00A0") // allow word break by char
|
text = it.title.replace(" ", "\u00A0") // allow word break by char
|
||||||
checkViewStrikeThrough(it.isTaskCompleted())
|
checkViewStrikeThrough(it.shouldStrikeThrough())
|
||||||
contentDescription = it.title
|
contentDescription = it.title
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -669,7 +669,8 @@ fun Context.getEventListItems(events: List<Event>, addSectionDays: Boolean = tru
|
|||||||
it.isPastEvent,
|
it.isPastEvent,
|
||||||
it.repeatInterval > 0,
|
it.repeatInterval > 0,
|
||||||
it.isTask(),
|
it.isTask(),
|
||||||
it.isTaskCompleted()
|
it.isTaskCompleted(),
|
||||||
|
it.isAttendeeInviteDeclined()
|
||||||
)
|
)
|
||||||
listItems.add(listEvent)
|
listItems.add(listEvent)
|
||||||
}
|
}
|
||||||
|
@@ -40,3 +40,5 @@ fun Event.maybeAdjustRepeatLimitCount(original: Event, occurrenceTS: Long) {
|
|||||||
this.repeatLimit = newRepeatLimit
|
this.repeatLimit = newRepeatLimit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Event.shouldStrikeThrough() = isTaskCompleted() || isAttendeeInviteDeclined()
|
||||||
|
@@ -0,0 +1,5 @@
|
|||||||
|
package com.simplemobiletools.calendar.pro.extensions
|
||||||
|
|
||||||
|
import com.simplemobiletools.calendar.pro.models.ListEvent
|
||||||
|
|
||||||
|
fun ListEvent.shouldStrikeThrough() = isTaskCompleted || isAttendeeInviteDeclined
|
@@ -0,0 +1,5 @@
|
|||||||
|
package com.simplemobiletools.calendar.pro.extensions
|
||||||
|
|
||||||
|
import com.simplemobiletools.calendar.pro.models.MonthViewEvent
|
||||||
|
|
||||||
|
fun MonthViewEvent.shouldStrikeThrough() = isTaskCompleted || isAttendeeInviteDeclined
|
@@ -645,7 +645,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
text = event.title
|
text = event.title
|
||||||
checkViewStrikeThrough(event.isTaskCompleted())
|
checkViewStrikeThrough(event.shouldStrikeThrough())
|
||||||
contentDescription = text
|
contentDescription = text
|
||||||
|
|
||||||
minHeight = if (event.startTS == event.endTS) {
|
minHeight = if (event.startTS == event.endTS) {
|
||||||
@@ -785,7 +785,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||||||
setTextColor(textColor)
|
setTextColor(textColor)
|
||||||
maxLines = if (event.isTask()) 1 else 2
|
maxLines = if (event.isTask()) 1 else 2
|
||||||
text = event.title
|
text = event.title
|
||||||
checkViewStrikeThrough(event.isTaskCompleted())
|
checkViewStrikeThrough(event.shouldStrikeThrough())
|
||||||
contentDescription = text
|
contentDescription = text
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -12,10 +12,7 @@ import android.view.View
|
|||||||
import android.widget.RemoteViews
|
import android.widget.RemoteViews
|
||||||
import com.simplemobiletools.calendar.pro.R
|
import com.simplemobiletools.calendar.pro.R
|
||||||
import com.simplemobiletools.calendar.pro.activities.SplashActivity
|
import com.simplemobiletools.calendar.pro.activities.SplashActivity
|
||||||
import com.simplemobiletools.calendar.pro.extensions.config
|
import com.simplemobiletools.calendar.pro.extensions.*
|
||||||
import com.simplemobiletools.calendar.pro.extensions.getWidgetFontSize
|
|
||||||
import com.simplemobiletools.calendar.pro.extensions.isWeekendIndex
|
|
||||||
import com.simplemobiletools.calendar.pro.extensions.launchNewEventOrTaskActivity
|
|
||||||
import com.simplemobiletools.calendar.pro.interfaces.MonthlyCalendar
|
import com.simplemobiletools.calendar.pro.interfaces.MonthlyCalendar
|
||||||
import com.simplemobiletools.calendar.pro.models.DayMonthly
|
import com.simplemobiletools.calendar.pro.models.DayMonthly
|
||||||
import com.simplemobiletools.calendar.pro.models.Event
|
import com.simplemobiletools.calendar.pro.models.Event
|
||||||
@@ -155,7 +152,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
|
|||||||
applyColorFilter(R.id.day_monthly_task_image, eventTextColor)
|
applyColorFilter(R.id.day_monthly_task_image, eventTextColor)
|
||||||
setInt(R.id.day_monthly_event_background, "setColorFilter", it.color)
|
setInt(R.id.day_monthly_event_background, "setColorFilter", it.color)
|
||||||
|
|
||||||
if (it.isTaskCompleted()) {
|
if (it.shouldStrikeThrough()) {
|
||||||
setInt(R.id.day_monthly_event_id, "setPaintFlags", Paint.ANTI_ALIAS_FLAG or Paint.STRIKE_THRU_TEXT_FLAG)
|
setInt(R.id.day_monthly_event_id, "setPaintFlags", Paint.ANTI_ALIAS_FLAG or Paint.STRIKE_THRU_TEXT_FLAG)
|
||||||
} else {
|
} else {
|
||||||
setInt(R.id.day_monthly_event_id, "setPaintFlags", Paint.ANTI_ALIAS_FLAG)
|
setInt(R.id.day_monthly_event_id, "setPaintFlags", Paint.ANTI_ALIAS_FLAG)
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package com.simplemobiletools.calendar.pro.models
|
package com.simplemobiletools.calendar.pro.models
|
||||||
|
|
||||||
|
import android.provider.CalendarContract.Attendees
|
||||||
import androidx.collection.LongSparseArray
|
import androidx.collection.LongSparseArray
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -209,4 +210,8 @@ data class Event(
|
|||||||
DateTimeZone.getDefault().id
|
DateTimeZone.getDefault().id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isAttendeeInviteDeclined() = attendees.any {
|
||||||
|
it.isMe && it.status == Attendees.ATTENDEE_STATUS_DECLINED
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,36 @@
|
|||||||
package com.simplemobiletools.calendar.pro.models
|
package com.simplemobiletools.calendar.pro.models
|
||||||
|
|
||||||
data class ListEvent(
|
data class ListEvent(
|
||||||
var id: Long, var startTS: Long, var endTS: Long, var title: String, var description: String, var isAllDay: Boolean, var color: Int,
|
var id: Long,
|
||||||
var location: String, var isPastEvent: Boolean, var isRepeatable: Boolean, var isTask: Boolean, var isTaskCompleted: Boolean
|
var startTS: Long,
|
||||||
) : ListItem()
|
var endTS: Long,
|
||||||
|
var title: String,
|
||||||
|
var description: String,
|
||||||
|
var isAllDay: Boolean,
|
||||||
|
var color: Int,
|
||||||
|
var location: String,
|
||||||
|
var isPastEvent: Boolean,
|
||||||
|
var isRepeatable: Boolean,
|
||||||
|
var isTask: Boolean,
|
||||||
|
var isTaskCompleted: Boolean,
|
||||||
|
var isAttendeeInviteDeclined: Boolean
|
||||||
|
) : ListItem() {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val empty = ListEvent(
|
||||||
|
id = 0,
|
||||||
|
startTS = 0,
|
||||||
|
endTS = 0,
|
||||||
|
title = "",
|
||||||
|
description = "",
|
||||||
|
isAllDay = false,
|
||||||
|
color = 0,
|
||||||
|
location = "",
|
||||||
|
isPastEvent = false,
|
||||||
|
isRepeatable = false,
|
||||||
|
isTask = false,
|
||||||
|
isTaskCompleted = false,
|
||||||
|
isAttendeeInviteDeclined = false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -12,5 +12,6 @@ data class MonthViewEvent(
|
|||||||
val isAllDay: Boolean,
|
val isAllDay: Boolean,
|
||||||
val isPastEvent: Boolean,
|
val isPastEvent: Boolean,
|
||||||
val isTask: Boolean,
|
val isTask: Boolean,
|
||||||
val isTaskCompleted: Boolean
|
val isTaskCompleted: Boolean,
|
||||||
|
val isAttendeeInviteDeclined: Boolean,
|
||||||
)
|
)
|
||||||
|
@@ -130,8 +130,19 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||||||
val daysCnt = getEventLastingDaysCount(event)
|
val daysCnt = getEventLastingDaysCount(event)
|
||||||
|
|
||||||
val monthViewEvent = MonthViewEvent(
|
val monthViewEvent = MonthViewEvent(
|
||||||
event.id!!, event.title, event.startTS, event.endTS, event.color, dayIndexOnMonthView,
|
id = event.id!!,
|
||||||
daysCnt, dayIndexOnMonthView, event.getIsAllDay(), event.isPastEvent, event.isTask(), event.isTaskCompleted()
|
title = event.title,
|
||||||
|
startTS = event.startTS,
|
||||||
|
endTS = event.endTS,
|
||||||
|
color = event.color,
|
||||||
|
startDayIndex = dayIndexOnMonthView,
|
||||||
|
daysCnt = daysCnt,
|
||||||
|
originalStartDayIndex = dayIndexOnMonthView,
|
||||||
|
isAllDay = event.getIsAllDay(),
|
||||||
|
isPastEvent = event.isPastEvent,
|
||||||
|
isTask = event.isTask(),
|
||||||
|
isTaskCompleted = event.isTaskCompleted(),
|
||||||
|
isAttendeeInviteDeclined = event.isAttendeeInviteDeclined()
|
||||||
)
|
)
|
||||||
allEvents.add(monthViewEvent)
|
allEvents.add(monthViewEvent)
|
||||||
}
|
}
|
||||||
@@ -370,7 +381,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||||||
|
|
||||||
val curPaint = Paint(eventTitlePaint)
|
val curPaint = Paint(eventTitlePaint)
|
||||||
curPaint.color = paintColor
|
curPaint.color = paintColor
|
||||||
curPaint.isStrikeThruText = event.isTaskCompleted
|
curPaint.isStrikeThruText = event.shouldStrikeThrough()
|
||||||
return curPaint
|
return curPaint
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user