mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
properly update the days at month view
This commit is contained in:
@ -194,7 +194,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateMonthlyCalendar(context: Context, month: String, days: List<DayMonthly>, checkedEvents: Boolean) {
|
override fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList<DayMonthly>, checkedEvents: Boolean) {
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
mDays = days
|
mDays = days
|
||||||
top_value.text = month
|
top_value.text = month
|
||||||
|
@ -83,7 +83,7 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
|||||||
mCalendar?.updateMonthlyCalendar(Formatter.getDateTimeFromCode(mDayCode))
|
mCalendar?.updateMonthlyCalendar(Formatter.getDateTimeFromCode(mDayCode))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateMonthlyCalendar(context: Context, month: String, days: List<DayMonthly>, checkedEvents: Boolean) {
|
override fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList<DayMonthly>, checkedEvents: Boolean) {
|
||||||
val newHash = month.hashCode() + days.hashCode().toLong()
|
val newHash = month.hashCode() + days.hashCode().toLong()
|
||||||
if ((mLastHash != 0L && !checkedEvents) || mLastHash == newHash) {
|
if ((mLastHash != 0L && !checkedEvents) || mLastHash == newHash) {
|
||||||
return
|
return
|
||||||
@ -166,7 +166,9 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateDays(days: List<DayMonthly>) {
|
private fun updateDays(days: ArrayList<DayMonthly>) {
|
||||||
|
mHolder.month_view.updateDays(days)
|
||||||
|
|
||||||
/*val displayWeekNumbers = mConfig.displayWeekNumbers
|
/*val displayWeekNumbers = mConfig.displayWeekNumbers
|
||||||
val len = days.size
|
val len = days.size
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
|
|||||||
var isThisMonth = false
|
var isThisMonth = false
|
||||||
var isToday: Boolean
|
var isToday: Boolean
|
||||||
var value = prevMonthDays - firstDayIndex + 1
|
var value = prevMonthDays - firstDayIndex + 1
|
||||||
var curDay: DateTime = mTargetDate
|
var curDay = mTargetDate
|
||||||
|
|
||||||
for (i in 0 until DAYS_CNT) {
|
for (i in 0 until DAYS_CNT) {
|
||||||
when {
|
when {
|
||||||
@ -67,7 +67,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isToday = isThisMonth && isToday(mTargetDate, value)
|
isToday = isToday(curDay, value)
|
||||||
|
|
||||||
val newDay = curDay.withDayOfMonth(value)
|
val newDay = curDay.withDayOfMonth(value)
|
||||||
val dayCode = Formatter.getDayCodeFromDateTime(newDay)
|
val dayCode = Formatter.getDayCodeFromDateTime(newDay)
|
||||||
@ -95,13 +95,13 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
|
|||||||
var currDay = startDateTime
|
var currDay = startDateTime
|
||||||
var dayCode = Formatter.getDayCodeFromDateTime(currDay)
|
var dayCode = Formatter.getDayCodeFromDateTime(currDay)
|
||||||
var currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) }
|
var currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) }
|
||||||
dayEvents.put(dayCode, currDayEvents)
|
dayEvents[dayCode] = currDayEvents
|
||||||
|
|
||||||
while (Formatter.getDayCodeFromDateTime(currDay) != endCode) {
|
while (Formatter.getDayCodeFromDateTime(currDay) != endCode) {
|
||||||
currDay = currDay.plusDays(1)
|
currDay = currDay.plusDays(1)
|
||||||
dayCode = Formatter.getDayCodeFromDateTime(currDay)
|
dayCode = Formatter.getDayCodeFromDateTime(currDay)
|
||||||
currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) }
|
currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) }
|
||||||
dayEvents.put(dayCode, currDayEvents)
|
dayEvents[dayCode] = currDayEvents
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,10 +113,8 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isToday(targetDate: DateTime, curDayInMonth: Int): Boolean {
|
private fun isToday(targetDate: DateTime, curDayInMonth: Int): Boolean {
|
||||||
return if (curDayInMonth > targetDate.dayOfMonth().maximumValue)
|
val targetMonthDays = targetDate.dayOfMonth().maximumValue
|
||||||
false
|
return targetDate.withDayOfMonth(Math.min(curDayInMonth, targetMonthDays)).toString(Formatter.DAYCODE_PATTERN) == mToday
|
||||||
else
|
|
||||||
targetDate.withDayOfMonth(curDayInMonth).toString(Formatter.DAYCODE_PATTERN) == mToday
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val monthName: String
|
private val monthName: String
|
||||||
|
@ -149,7 +149,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val monthlyCalendar = object : MonthlyCalendar {
|
private val monthlyCalendar = object : MonthlyCalendar {
|
||||||
override fun updateMonthlyCalendar(context: Context, month: String, days: List<DayMonthly>, checkedEvents: Boolean) {
|
override fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList<DayMonthly>, checkedEvents: Boolean) {
|
||||||
val largerFontSize = context.config.getFontSize() + 3f
|
val largerFontSize = context.config.getFontSize() + 3f
|
||||||
val textColor = context.config.widgetTextColor
|
val textColor = context.config.widgetTextColor
|
||||||
val resources = context.resources
|
val resources = context.resources
|
||||||
|
@ -4,5 +4,5 @@ import android.content.Context
|
|||||||
import com.simplemobiletools.calendar.models.DayMonthly
|
import com.simplemobiletools.calendar.models.DayMonthly
|
||||||
|
|
||||||
interface MonthlyCalendar {
|
interface MonthlyCalendar {
|
||||||
fun updateMonthlyCalendar(context: Context, month: String, days: List<DayMonthly>, checkedEvents: Boolean)
|
fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList<DayMonthly>, checkedEvents: Boolean)
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,10 @@ import android.util.AttributeSet
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.extensions.config
|
import com.simplemobiletools.calendar.extensions.config
|
||||||
|
import com.simplemobiletools.calendar.helpers.LOW_ALPHA
|
||||||
|
import com.simplemobiletools.calendar.models.DayMonthly
|
||||||
|
import com.simplemobiletools.commons.extensions.adjustAlpha
|
||||||
|
import com.simplemobiletools.commons.extensions.getContrastColor
|
||||||
|
|
||||||
// used in the Monthly view fragment, 1 view per screen
|
// used in the Monthly view fragment, 1 view per screen
|
||||||
class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
|
class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
|
||||||
@ -14,12 +18,16 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||||||
private var dayWidth = 0f
|
private var dayWidth = 0f
|
||||||
private var dayHeight = 0f
|
private var dayHeight = 0f
|
||||||
private var textColor = 0
|
private var textColor = 0
|
||||||
private var days = 42
|
private var weakTextColor = 0
|
||||||
|
private var todayTextColor = 0
|
||||||
|
private var days = ArrayList<DayMonthly>()
|
||||||
|
|
||||||
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
|
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
textColor = context.config.textColor
|
textColor = context.config.textColor
|
||||||
|
weakTextColor = textColor.adjustAlpha(LOW_ALPHA)
|
||||||
|
todayTextColor = context.config.primaryColor.getContrastColor()
|
||||||
|
|
||||||
paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||||
color = textColor
|
color = textColor
|
||||||
@ -28,6 +36,11 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateDays(newDays: ArrayList<DayMonthly>) {
|
||||||
|
days = newDays
|
||||||
|
invalidate()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDraw(canvas: Canvas) {
|
override fun onDraw(canvas: Canvas) {
|
||||||
super.onDraw(canvas)
|
super.onDraw(canvas)
|
||||||
if (dayWidth == 0f) {
|
if (dayWidth == 0f) {
|
||||||
@ -38,14 +51,34 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||||||
dayHeight = (canvas.height / 6).toFloat()
|
dayHeight = (canvas.height / 6).toFloat()
|
||||||
}
|
}
|
||||||
|
|
||||||
var curId = 1
|
var curId = 0
|
||||||
for (y in 0..5) {
|
for (y in 0..5) {
|
||||||
for (x in 1..7) {
|
for (x in 1..7) {
|
||||||
if (curId in 1..days) {
|
val day = days.getOrNull(curId)
|
||||||
canvas.drawText(curId.toString(), x * dayWidth - dayWidth / 2, y * dayHeight + paint.textSize, paint)
|
if (day != null) {
|
||||||
|
canvas.drawText(day.value.toString(), x * dayWidth - dayWidth / 2, y * dayHeight + paint.textSize, getPaint(day))
|
||||||
}
|
}
|
||||||
curId++
|
curId++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getPaint(day: DayMonthly): Paint {
|
||||||
|
var paintColor = textColor
|
||||||
|
if (day.isToday) {
|
||||||
|
paintColor = paintColor.getContrastColor()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!day.isThisMonth) {
|
||||||
|
paintColor = paintColor.adjustAlpha(LOW_ALPHA)
|
||||||
|
}
|
||||||
|
|
||||||
|
return getColoredPaint(paintColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getColoredPaint(color: Int): Paint {
|
||||||
|
val curPaint = Paint(paint)
|
||||||
|
curPaint.color = color
|
||||||
|
return curPaint
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
tools:ignore="UnknownIdInLayout"/>
|
tools:ignore="UnknownIdInLayout"/>
|
||||||
|
|
||||||
<com.simplemobiletools.calendar.views.MonthView
|
<com.simplemobiletools.calendar.views.MonthView
|
||||||
android:id="@+id/month"
|
android:id="@+id/month_view"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/first_row"
|
android:layout_below="@+id/first_row"
|
||||||
|
Reference in New Issue
Block a user