mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
color the days with events in the yearly view
This commit is contained in:
@ -1,5 +1,8 @@
|
|||||||
package com.simplemobiletools.calendar
|
package com.simplemobiletools.calendar
|
||||||
|
|
||||||
|
import android.util.SparseArray
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
interface YearlyCalendar {
|
interface YearlyCalendar {
|
||||||
fun updateYearlyCalendar(events: MutableList<String>)
|
fun updateYearlyCalendar(events: SparseArray<ArrayList<Int>>)
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package com.simplemobiletools.calendar
|
package com.simplemobiletools.calendar
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.util.SparseArray
|
||||||
import com.simplemobiletools.calendar.models.Event
|
import com.simplemobiletools.calendar.models.Event
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class YearlyCalendarImpl(val callback: YearlyCalendar, val context: Context) : DBHelper.GetEventsListener {
|
class YearlyCalendarImpl(val callback: YearlyCalendar, val context: Context) : DBHelper.GetEventsListener {
|
||||||
|
|
||||||
@ -14,6 +16,16 @@ class YearlyCalendarImpl(val callback: YearlyCalendar, val context: Context) : D
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun gotEvents(events: MutableList<Event>) {
|
override fun gotEvents(events: MutableList<Event>) {
|
||||||
|
val arr = SparseArray<ArrayList<Int>>(12)
|
||||||
|
for (e in events) {
|
||||||
|
val dateTime = DateTime().withMillis(e.startTS * 1000L)
|
||||||
|
val month = dateTime.monthOfYear
|
||||||
|
val day = dateTime.dayOfMonth
|
||||||
|
if (arr[month] == null)
|
||||||
|
arr.put(month, ArrayList<Int>())
|
||||||
|
|
||||||
|
arr.get(month).add(day)
|
||||||
|
}
|
||||||
|
callback.updateYearlyCalendar(arr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.simplemobiletools.calendar.fragments
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v4.app.Fragment
|
import android.support.v4.app.Fragment
|
||||||
|
import android.util.SparseArray
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@ -9,6 +10,7 @@ import com.simplemobiletools.calendar.*
|
|||||||
import com.simplemobiletools.calendar.views.SmallMonthView
|
import com.simplemobiletools.calendar.views.SmallMonthView
|
||||||
import kotlinx.android.synthetic.main.year_fragment.view.*
|
import kotlinx.android.synthetic.main.year_fragment.view.*
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class YearFragment : Fragment(), YearlyCalendar {
|
class YearFragment : Fragment(), YearlyCalendar {
|
||||||
private var mListener: NavigationListener? = null
|
private var mListener: NavigationListener? = null
|
||||||
@ -52,7 +54,7 @@ class YearFragment : Fragment(), YearlyCalendar {
|
|||||||
|
|
||||||
monthView.setFirstDay(dayOfWeek)
|
monthView.setFirstDay(dayOfWeek)
|
||||||
monthView.setOnClickListener {
|
monthView.setOnClickListener {
|
||||||
mListener?.goToDateTime(DateTime().withDate(mYear, i, 1)
|
mListener?.goToDateTime(DateTime().withDate(mYear, i, 1))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -61,7 +63,15 @@ class YearFragment : Fragment(), YearlyCalendar {
|
|||||||
mListener = listener
|
mListener = listener
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateYearlyCalendar(events: MutableList<String>) {
|
override fun updateYearlyCalendar(events: SparseArray<ArrayList<Int>>) {
|
||||||
|
if (!isAdded)
|
||||||
|
return
|
||||||
|
|
||||||
|
val res = resources
|
||||||
|
|
||||||
|
for (i in 1..12) {
|
||||||
|
val monthView = mView.findViewById(res.getIdentifier("month_$i", "id", context.packageName)) as SmallMonthView
|
||||||
|
monthView.setEvents(events.get(i))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,14 +10,19 @@ import com.simplemobiletools.calendar.Config
|
|||||||
import com.simplemobiletools.calendar.Constants
|
import com.simplemobiletools.calendar.Constants
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.Utils
|
import com.simplemobiletools.calendar.Utils
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
|
class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
|
||||||
var mPaint: Paint
|
var mPaint: Paint
|
||||||
|
var mColoredPaint: Paint
|
||||||
var mDayWidth = 0f
|
var mDayWidth = 0f
|
||||||
var mTextColor = 0
|
var mTextColor = 0
|
||||||
|
var mColoredTextColor = 0
|
||||||
var mDays = 31
|
var mDays = 31
|
||||||
var mFirstDay = 0
|
var mFirstDay = 0
|
||||||
|
|
||||||
|
var mEvents: ArrayList<Int>? = null
|
||||||
|
|
||||||
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) {
|
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,6 +35,11 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
|||||||
mFirstDay = firstDay
|
mFirstDay = firstDay
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setEvents(events: ArrayList<Int>?) {
|
||||||
|
mEvents = events
|
||||||
|
post { invalidate() }
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val a = context.theme.obtainStyledAttributes(
|
val a = context.theme.obtainStyledAttributes(
|
||||||
attrs,
|
attrs,
|
||||||
@ -44,11 +54,16 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
|||||||
|
|
||||||
val baseColor = if (Config.newInstance(context).isDarkTheme) Color.WHITE else Color.BLACK
|
val baseColor = if (Config.newInstance(context).isDarkTheme) Color.WHITE else Color.BLACK
|
||||||
mTextColor = Utils.adjustAlpha(baseColor, Constants.MEDIUM_ALPHA)
|
mTextColor = Utils.adjustAlpha(baseColor, Constants.MEDIUM_ALPHA)
|
||||||
|
mColoredTextColor = Utils.adjustAlpha(resources.getColor(R.color.colorPrimary), Constants.MEDIUM_ALPHA)
|
||||||
|
|
||||||
mPaint = Paint(Paint.ANTI_ALIAS_FLAG)
|
mPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||||
mPaint.color = mTextColor
|
color = mTextColor
|
||||||
mPaint.textSize = resources.getDimensionPixelSize(R.dimen.tiny_text_size).toFloat()
|
textSize = resources.getDimensionPixelSize(R.dimen.tiny_text_size).toFloat()
|
||||||
mPaint.textAlign = Paint.Align.RIGHT
|
textAlign = Paint.Align.RIGHT
|
||||||
|
}
|
||||||
|
|
||||||
|
mColoredPaint = Paint(mPaint)
|
||||||
|
mColoredPaint.color = mColoredTextColor
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDraw(canvas: Canvas) {
|
override fun onDraw(canvas: Canvas) {
|
||||||
@ -61,7 +76,10 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
|||||||
for (y in 1..6) {
|
for (y in 1..6) {
|
||||||
for (x in 1..7) {
|
for (x in 1..7) {
|
||||||
if (curId > 0 && curId <= mDays) {
|
if (curId > 0 && curId <= mDays) {
|
||||||
canvas.drawText(curId.toString(), x * mDayWidth, y * mDayWidth, mPaint)
|
if (mEvents?.contains(curId) == true)
|
||||||
|
canvas.drawText(curId.toString(), x * mDayWidth, y * mDayWidth, mColoredPaint)
|
||||||
|
else
|
||||||
|
canvas.drawText(curId.toString(), x * mDayWidth, y * mDayWidth, mPaint)
|
||||||
}
|
}
|
||||||
curId++
|
curId++
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user