# PercentageWidthLinearLayoutManager.kt

    /*
     * The MIT License
     *
     * Original work sponsored and donated by The Danish Health Data Authority (http://www.sundhedsdatastyrelsen.dk)
     *
     * Copyright (C) 2021 The Danish Health Data Authority (http://www.sundhedsdatastyrelsen.dk)
     *
     *
     * Permission is hereby granted, free of charge, to any person obtaining a copy of
     * this software and associated documentation files (the "Software"), to deal in
     * the Software without restriction, including without limitation the rights to
     * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
     * of the Software, and to permit persons to whom the Software is furnished to do
     * so, subject to the following conditions:
     *
     *
     * The above copyright notice and this permission notice shall be included in all
     * copies or substantial portions of the Software.
     *
     *
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     * SOFTWARE.
     */

    package dk.nsp.mingraviditet.util.android

    import android.content.Context
    import android.util.AttributeSet
    import android.view.ViewGroup
    import androidx.recyclerview.widget.LinearLayoutManager
    import androidx.recyclerview.widget.RecyclerView

    class PercentageWidthLinearLayoutManager : LinearLayoutManager {
        @Suppress("Unused")
        @JvmOverloads
        constructor(
            context: Context?,
            @RecyclerView.Orientation orientation: Int = RecyclerView.VERTICAL,
            reverseLayout: Boolean = false
        ) : super(context, orientation, reverseLayout)

        @Suppress("Unused")
        constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(
            context,
            attrs,
            defStyleAttr,
            defStyleRes
        )

        @Suppress("Unused")
        constructor(
            context: Context?,
            @RecyclerView.Orientation orientation: Int = RecyclerView.VERTICAL,
            reverseLayout: Boolean = false,
            ratio: Float
        ) : super(context, orientation, reverseLayout) {
            this.ratio = ratio
        }

        override fun generateDefaultLayoutParams() =
            scaledLayoutParams(super.generateDefaultLayoutParams())

        override fun generateLayoutParams(lp: ViewGroup.LayoutParams?) =
            scaledLayoutParams(super.generateLayoutParams(lp))

        override fun generateLayoutParams(c: Context?, attrs: AttributeSet?) =
            scaledLayoutParams(super.generateLayoutParams(c, attrs))

        private fun scaledLayoutParams(layoutParams: RecyclerView.LayoutParams) =
            layoutParams.apply {
                when (orientation) {
                    RecyclerView.HORIZONTAL -> width = (horizontalSpace * ratio).toInt()
                    RecyclerView.VERTICAL -> height = (verticalSpace * ratio).toInt()
                }
            }

        private val horizontalSpace get() = width - paddingStart - paddingEnd

        private val verticalSpace get() = height - paddingTop - paddingBottom

        // Default ratio, cam be set with constructor
        private var ratio = 0.8f
    }