Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/schaal/ocreader.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schaal <daniel@schaal.email>2021-07-14 15:13:44 +0300
committerDaniel Schaal <daniel@schaal.email>2021-07-25 10:10:47 +0300
commit5b2c99d5a650db8392e00a4a56a0b09f4f0e6ffe (patch)
tree2383b9a0b92d8527591f5e850cd65d81d81517ec
parenta017785ac78d97f5322d2ddbccf78ec9eb87337c (diff)
Refactor DividerItemDecoration
-rw-r--r--app/src/main/java/email/schaal/ocreader/view/DividerItemDecoration.kt53
1 files changed, 26 insertions, 27 deletions
diff --git a/app/src/main/java/email/schaal/ocreader/view/DividerItemDecoration.kt b/app/src/main/java/email/schaal/ocreader/view/DividerItemDecoration.kt
index 4a93869b..30547c02 100644
--- a/app/src/main/java/email/schaal/ocreader/view/DividerItemDecoration.kt
+++ b/app/src/main/java/email/schaal/ocreader/view/DividerItemDecoration.kt
@@ -32,9 +32,12 @@ import androidx.recyclerview.widget.RecyclerView.ItemDecoration
import email.schaal.ocreader.R
class DividerItemDecoration(context: Context, @DimenRes insetRes: Int) : ItemDecoration() {
- private val mDivider: Drawable?
+ private val mDivider: Drawable? = context.obtainStyledAttributes(intArrayOf(android.R.attr.listDivider)).use {
+ it.getDrawable(0)
+ }
private val inset: Int = context.resources.getDimensionPixelSize(insetRes)
- private var size = 0
+ private val size = mDivider?.intrinsicHeight ?: 0
+ private val dividerRect = Rect(0, 0, 0, 0)
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView,
state: RecyclerView.State) {
@@ -45,34 +48,30 @@ class DividerItemDecoration(context: Context, @DimenRes insetRes: Int) : ItemDec
outRect.top = size
}
- private val dividerRect = Rect(0, 0, 0, 0)
override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
if (mDivider == null) return
- val layoutManager = parent.layoutManager
- check(!(layoutManager !is LinearLayoutManager ||
- layoutManager.orientation != RecyclerView.VERTICAL)) { "DividerItemDecoration can only be used with a vertical LinearLayoutManager." }
- val childCount = parent.childCount
- val paddingLeft = parent.paddingLeft
- val paddingLeftInset = paddingLeft + inset
- dividerRect.right = parent.width - parent.paddingRight
- loop@ for (i in 0 until childCount) {
- val child = parent.getChildAt(i)
- when (layoutManager.getItemViewType(child)) {
- R.id.viewtype_item -> if (i == childCount - 1 || i == childCount - 2 && layoutManager.getItemViewType(parent.getChildAt(i + 1)) != R.id.viewtype_item) dividerRect.left = paddingLeft else dividerRect.left = paddingLeftInset
- R.id.viewtype_empty, R.id.viewtype_loadmore -> dividerRect.left = paddingLeft
- R.id.viewtype_error -> continue@loop
- }
- dividerRect.top = child.bottom + (child.layoutParams as RecyclerView.LayoutParams).bottomMargin
- dividerRect.bottom = dividerRect.top + size
- mDivider.bounds = dividerRect
- mDivider.draw(c)
- }
- }
- init {
- mDivider = context.obtainStyledAttributes(intArrayOf(android.R.attr.listDivider)).use {
- it.getDrawable(0)
+ parent.layoutManager?.let { layoutManager ->
+ val childCount = parent.childCount
+ val paddingLeft = parent.paddingLeft
+ val paddingLeftInset = paddingLeft + inset
+ dividerRect.right = parent.width - parent.paddingRight
+ loop@ for (i in 0 until childCount) {
+ val child = parent.getChildAt(i)
+ when (layoutManager.getItemViewType(child)) {
+ R.id.viewtype_item -> if (i == childCount - 1 || i == childCount - 2 && layoutManager.getItemViewType(
+ parent.getChildAt(i + 1)
+ ) != R.id.viewtype_item
+ ) dividerRect.left = paddingLeft else dividerRect.left = paddingLeftInset
+ R.id.viewtype_empty, R.id.viewtype_loadmore -> dividerRect.left = paddingLeft
+ R.id.viewtype_error -> continue@loop
+ }
+ dividerRect.top =
+ child.bottom + (child.layoutParams as RecyclerView.LayoutParams).bottomMargin
+ dividerRect.bottom = dividerRect.top + size
+ mDivider.bounds = dividerRect
+ mDivider.draw(c)
+ }
}
- if (mDivider != null) size = mDivider.intrinsicHeight
}
} \ No newline at end of file