@@ -2,7 +2,8 @@ package com.shahzadafridi.calendarview
22
33import android.content.Context
44import android.graphics.Color
5- import android.graphics.Typeface
5+ import android.graphics.drawable.ShapeDrawable
6+ import android.graphics.drawable.shapes.RoundRectShape
67import android.view.LayoutInflater
78import android.view.View
89import android.view.ViewGroup
@@ -13,76 +14,89 @@ import androidx.core.content.res.ResourcesCompat
1314import androidx.recyclerview.widget.RecyclerView
1415import java.util.*
1516
17+
1618class CalendarAdapter (
1719 context : Context ,
1820 private val days : ArrayList <Calendar >, // days with events
1921 private val eventDays : HashSet <Calendar >? ,
2022 private var eventsHandler : CalenderViewInterface .EventHandler ? ,
21- private var cellConfig : CellConfiguration ?
23+ private var dayConfig : DayConfiguration ? ,
24+ monthNumber : Int
2225) : RecyclerView.Adapter<CalendarAdapter.MyViewHolder>() {
2326
2427 // for view inflation
2528 private val inflater: LayoutInflater
2629 private val mContext: Context
30+ private val mMonthNumber = monthNumber
2731
28- // Cell Configuration
29- private var cell_font : Int? = null
30- private var cell_size : Int? = null
31- private var cell_bg : Int? = null
32- private var cell_txt_clr : Int? = null
33- private var cell_txt_size : Int? = null
34- private var cell_selected_txt_clr : Int? = null
35- private var cell_select_bg : Int? = null
32+ // Day Configuration
33+ private var day_font : Int? = null
34+ private var day_bg : Int? = null
35+ private var day_txt_clr : Int? = null
36+ private var day_txt_size : Int? = null
37+ private var day_selected_txt_clr : Int? = null
38+ private var day_selected_bg : Int? = null
39+ private var event_dot_clr : Int? = null
3640
3741 init {
3842 inflater = LayoutInflater .from(context)
3943 mContext = context
40- cellConfig ?.let {
41- cell_font = it.cellFont
42- cell_size = it.cellSize
43- cell_bg = it.cellBg
44- cell_txt_clr = it.cellTxtClr
45- cell_txt_size = it.cellTxtSize
46- cell_selected_txt_clr = it.cellSelectedClr
47- cell_select_bg = it.cellSelectBg
44+ dayConfig ?.let {
45+ day_font = it.dayFont
46+ day_bg = it.dayBg
47+ day_txt_clr = it.dayTxtClr
48+ day_txt_size = it.dayTxtSize
49+ day_selected_txt_clr = it.daySelectedClr
50+ day_selected_bg = it.daySelectedBg
51+ event_dot_clr = it.eventDotColor
4852 }
4953 }
5054
51- override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): CalendarAdapter .MyViewHolder {
52- val view = LayoutInflater .from(mContext).inflate(R .layout.row_calendar_day_layout, parent, false )
55+ override fun onCreateViewHolder (
56+ parent : ViewGroup ,
57+ viewType : Int
58+ ): CalendarAdapter .MyViewHolder {
59+ val view =
60+ LayoutInflater .from(mContext).inflate(R .layout.row_calendar_day_layout, parent, false )
5361 return MyViewHolder (view)
5462 }
5563
5664 override fun onBindViewHolder (holder : CalendarAdapter .MyViewHolder , position : Int ) {
57- holder.updateUi(holder,days[position])
65+ holder.updateUi(holder, days[position])
5866 }
5967
6068 override fun getItemCount (): Int {
6169 return days.size
6270 }
6371
64- inner class MyViewHolder (itemView : View ) : RecyclerView.ViewHolder(itemView), View.OnClickListener, View.OnLongClickListener {
72+ inner class MyViewHolder (itemView : View ) : RecyclerView.ViewHolder(itemView),
73+ View .OnClickListener , View .OnLongClickListener {
6574
6675 var textView: TextView
76+ var textViewEvent: TextView
6777 var rowLayout: RelativeLayout
6878
6979 init {
7080 textView = itemView.findViewById(R .id.control_calendar_day)
81+ textViewEvent = itemView.findViewById(R .id.control_calendar_event)
7182 rowLayout = itemView.findViewById(R .id.row_calendar_layout)
7283 rowLayout.setOnClickListener(this )
7384 rowLayout.setOnLongClickListener(this )
74- cell_txt_size ?.let {
85+ day_txt_size ?.let {
7586 textView.textSize = it.toFloat()
7687 }
77- cell_txt_clr ?.let {
88+ day_txt_clr ?.let {
7889 textView.setTextColor(ContextCompat .getColor(mContext, it))
7990 }
80- cell_font ?.let {
91+ day_font ?.let {
8192 textView.typeface = ResourcesCompat .getFont(mContext, it)
8293 }
83- cell_bg ?.let {
94+ day_bg ?.let {
8495 rowLayout.setBackgroundResource(it)
8596 }
97+ event_dot_clr?.let {
98+ eventShape(textViewEvent,it)
99+ }
86100 }
87101
88102 fun updateUi (holder : MyViewHolder , date : Calendar ) {
@@ -98,47 +112,59 @@ class CalendarAdapter(
98112 holder.textView.text = date.get(Calendar .DATE ).toString()
99113
100114
101- if (month != today.get( Calendar . MONTH ) || year != today.get(Calendar .YEAR )) {
115+ if (month != mMonthNumber || year != today.get(Calendar .YEAR )) {
102116 // if this day is outside current month, grey it out
103117 holder.textView.setTextColor(ContextCompat .getColor(mContext, R .color.greyed_out))
104- } else if (day == today.get(Calendar .DATE ) ) {
118+ } else if (today.get( Calendar . DATE ) == day && today.get( Calendar . MONTH ) == month && today.get(Calendar .YEAR ) == year ) {
105119 // if it is today, set it to blue/bold
106- cell_selected_txt_clr ?.let {
120+ day_selected_txt_clr ?.let {
107121 holder.textView.setTextColor(ContextCompat .getColor(mContext, it))
122+ } ? : run {
123+ holder.textView.setTextColor(ContextCompat .getColor(mContext, R .color.cwhite))
108124 }
109- cell_select_bg ?.let {
125+ day_selected_bg ?.let {
110126 holder.rowLayout.setBackgroundResource(it)
127+ } ? : run {
128+ holder.rowLayout.setBackgroundResource(R .drawable.ic_black_oval)
111129 }
112130 }
113131
132+ textViewEvent.visibility = View .GONE
133+
114134 if (eventDays != null ) {
115135 for (eventDate in eventDays) {
116136 if (eventDate.get(Calendar .DATE ) == day && eventDate.get(Calendar .MONTH ) == month && eventDate.get(Calendar .YEAR ) == year) {
117137 // mark this day for event
118- cell_select_bg?.let {
119- holder.rowLayout.setBackgroundResource(it)
120- }
121- cell_selected_txt_clr?.let {
122- holder.textView.setTextColor(ContextCompat .getColor(mContext, it))
123- }
138+ textViewEvent.visibility = View .VISIBLE
124139 break
125140 }
126141 }
127142 }
128143 }
129144
130145 override fun onClick (v : View ? ) {
131- eventsHandler?.onCellClick (view = v,date = days[adapterPosition].time,adapterPosition)
146+ eventsHandler?.onDayClick (view = v, date = days[adapterPosition].time, adapterPosition)
132147 }
133148
134149 override fun onLongClick (v : View ? ): Boolean {
135- eventsHandler?.onCellLongClick(view = v,date = days[adapterPosition].time,adapterPosition)
150+ eventsHandler?.onDayLongClick(
151+ view = v,
152+ date = days[adapterPosition].time,
153+ adapterPosition
154+ )
136155 return true
137156 }
138157 }
139158
140- fun setEventHandler (mEventsHandler : CalenderViewInterface .EventHandler ){
159+ fun setEventHandler (mEventsHandler : CalenderViewInterface .EventHandler ) {
141160 this .eventsHandler = mEventsHandler
142161 }
143162
163+ fun eventShape (v : View , backgroundColor : Int ) {
164+ val r = 8f
165+ val shape = ShapeDrawable (RoundRectShape (floatArrayOf(r, r, r, r, r, r, r, r), null , null ))
166+ shape.paint.color = backgroundColor
167+ v.setBackground(shape)
168+ }
169+
144170}
0 commit comments