Merge pull request #1451 from KryptKode/fix/monthly-view-grid-size

fix incorrect month view wrapper clickable background height
This commit is contained in:
Tibor Kaputa 2021-08-22 18:57:20 +02:00 committed by GitHub
commit ce4d094e3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 39 additions and 7 deletions

View File

@ -10,7 +10,7 @@ import com.simplemobiletools.calendar.pro.helpers.COLUMN_COUNT
import com.simplemobiletools.calendar.pro.helpers.ROW_COUNT import com.simplemobiletools.calendar.pro.helpers.ROW_COUNT
import com.simplemobiletools.calendar.pro.models.DayMonthly import com.simplemobiletools.calendar.pro.models.DayMonthly
import com.simplemobiletools.commons.extensions.onGlobalLayout import com.simplemobiletools.commons.extensions.onGlobalLayout
import kotlinx.android.synthetic.main.month_view.view.* import kotlinx.android.synthetic.main.month_view.view.month_view
// used in the Monthly view fragment, 1 view per screen // used in the Monthly view fragment, 1 view per screen
class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) { class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) {
@ -44,6 +44,43 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
} }
} }
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
measureSizes()
var y = 0
var x = 0
var curLeft = dayWidth.toInt()
val end = right + paddingRight
for (i in 0 until childCount) {
val child = getChildAt(i)
if (child is MonthView) {
//ignore the MonthView layout
continue
}
child.measure(MeasureSpec.makeMeasureSpec(dayWidth.toInt(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dayHeight.toInt(), MeasureSpec.EXACTLY))
val childLeft = x * dayWidth + horizontalOffset - child.translationX
val childTop = y * dayHeight + weekDaysLetterHeight - child.translationY
val childWidth = child.measuredWidth
val childHeight = child.measuredHeight
val childRight = childLeft + childWidth
val childBottom = childTop + childHeight
child.layout(childLeft.toInt(), childTop.toInt(), childRight.toInt(), childBottom.toInt())
if (curLeft + childWidth < end) {
curLeft += childWidth
x++
} else {
y++
x = 0
curLeft = childWidth
}
}
}
fun updateDays(newDays: ArrayList<DayMonthly>, addEvents: Boolean, callback: ((DayMonthly) -> Unit)? = null) { fun updateDays(newDays: ArrayList<DayMonthly>, addEvents: Boolean, callback: ((DayMonthly) -> Unit)? = null) {
setupHorizontalOffset() setupHorizontalOffset()
measureSizes() measureSizes()
@ -63,13 +100,8 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
private fun measureSizes() { private fun measureSizes() {
dayWidth = (width - horizontalOffset) / 7f dayWidth = (width - horizontalOffset) / 7f
// avoid updating the height when coming back from a new event screen, when the keyboard was visible
val newHeight = (height - weekDaysLetterHeight) / 6f
if (newHeight > dayHeight) {
dayHeight = (height - weekDaysLetterHeight) / 6f dayHeight = (height - weekDaysLetterHeight) / 6f
} }
}
private fun addClickableBackgrounds() { private fun addClickableBackgrounds() {
removeAllViews() removeAllViews()