Apply ripple effect on grade details header only if item is expandable (#239)

Resolves #234
This commit is contained in:
Mikołaj Pich
2019-02-14 22:23:52 +01:00
committed by Rafał Borcz
parent f305a7a599
commit c56cfec564
21 changed files with 146 additions and 61 deletions

View File

@ -8,6 +8,7 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -66,6 +67,10 @@ class AttendanceFragment : BaseSessionFragment(), AttendanceView, MainView.MainC
attendanceRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = attendanceAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
attendanceSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
attendancePreviousButton.setOnClickListener { presenter.onPreviousDay() }

View File

@ -8,6 +8,7 @@ import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -56,6 +57,10 @@ class ExamFragment : BaseSessionFragment(), ExamView, MainView.MainChildView, Ma
examRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = examAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider(R.layout.item_exam)
.withDrawDividerOnLastItem(false)
)
}
examSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
examPreviousButton.setOnClickListener { presenter.onPreviousWeek() }

View File

@ -78,6 +78,9 @@ class GradeDetailsFragment : BaseSessionFragment(), GradeDetailsView, GradeView.
gradeDetailsRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = gradeDetailsAdapter
addItemDecoration(GradeDetailsHeaderItemDecoration(context)
.withDefaultDivider(R.layout.header_grade_details)
)
}
gradeDetailsSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
}

View File

@ -38,6 +38,7 @@ class GradeDetailsHeader(
gradeHeaderAverage.text = average
gradeHeaderNumber.text = number
gradeHeaderNote.visibility = if (newGrades > 0) VISIBLE else GONE
gradeHeaderContainer.isEnabled = isExpandable
isViewExpandable = isExpandable
}

View File

@ -0,0 +1,38 @@
package io.github.wulkanowy.ui.modules.grade.details
import android.content.Context
import android.graphics.Canvas
import androidx.recyclerview.widget.RecyclerView
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
class GradeDetailsHeaderItemDecoration(context: Context) : FlexibleItemDecoration(context) {
override fun drawVertical(canvas: Canvas, parent: RecyclerView) {
canvas.save()
val left: Int
val right: Int
if (parent.clipToPadding) {
left = parent.paddingLeft
right = parent.width - parent.paddingRight
canvas.clipRect(left, parent.paddingTop, right,
parent.height - parent.paddingBottom)
} else {
left = 0
right = parent.width
}
val itemCount = parent.childCount
for (i in 1 until itemCount) {
val child = parent.getChildAt(i)
val viewHolder = parent.getChildViewHolder(child)
if (shouldDrawDivider(viewHolder)) {
parent.getDecoratedBoundsWithMargins(child, mBounds)
val bottom = mBounds.top + Math.round(child.translationY)
val top = bottom - mDivider.intrinsicHeight
mDivider.setBounds(left, top, right, bottom)
mDivider.draw(canvas)
}
}
canvas.restore()
}
}

View File

@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -51,6 +52,10 @@ class HomeworkFragment : BaseSessionFragment(), HomeworkView, MainView.TitledVie
homeworkRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = homeworkAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
homeworkSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
homeworkPreviousButton.setOnClickListener { presenter.onPreviousDay() }

View File

@ -8,6 +8,7 @@ import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -66,6 +67,10 @@ class MessageTabFragment : BaseSessionFragment(), MessageTabView, MessageView.Me
messageTabRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = tabAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
messageTabSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
}

View File

@ -7,6 +7,7 @@ import android.view.View.GONE
import android.view.View.VISIBLE
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -53,6 +54,10 @@ class NoteFragment : BaseSessionFragment(), NoteView, MainView.TitledView {
noteRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = noteAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
noteSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
}

View File

@ -8,6 +8,7 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -69,6 +70,10 @@ class TimetableFragment : BaseSessionFragment(), TimetableView, MainView.MainChi
timetableRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = timetableAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
timetableSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
timetablePreviousButton.setOnClickListener { presenter.onPreviousDay() }