package eu.kanade.tachiyomi.widget

import android.animation.ObjectAnimator
import android.animation.StateListAnimator
import android.content.Context
import android.os.Build
import com.google.android.material.R
import com.google.android.material.appbar.AppBarLayout
import android.util.AttributeSet

class ElevationAppBarLayout @JvmOverloads constructor(
        context: Context,
        attrs: AttributeSet? = null
) : AppBarLayout(context, attrs) {

    private var origStateAnimator: StateListAnimator? = null

    init {
        if (Build.VERSION.SDK_INT >= 21) {
            origStateAnimator = stateListAnimator
        }
    }

    fun enableElevation() {
        if (Build.VERSION.SDK_INT >= 21) {
            stateListAnimator = origStateAnimator
        }
    }

    fun disableElevation() {
        if (Build.VERSION.SDK_INT >= 21) {
            stateListAnimator = StateListAnimator().apply {
                val objAnimator = ObjectAnimator.ofFloat(this, "elevation", 0f)

                // Enabled and collapsible, but not collapsed means not elevated
                addState(intArrayOf(android.R.attr.enabled, R.attr.state_collapsible, -R.attr.state_collapsed),
                        objAnimator)

                // Default enabled state
                addState(intArrayOf(android.R.attr.enabled), objAnimator)

                // Disabled state
                addState(IntArray(0), objAnimator)
            }
        }
    }

}
