package com.machiav3lli.fdroid.widget

import android.content.Context
import android.util.AttributeSet
import android.view.KeyEvent
import androidx.appcompat.widget.SearchView
import com.machiav3lli.fdroid.R

class FocusSearchView : SearchView {
    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    )

    var allowFocus = true

    init {
        maxWidth = Int.MAX_VALUE
        queryHint = context.getString(R.string.search)
    }

    override fun dispatchKeyEventPreIme(event: KeyEvent): Boolean {
        // Always clear focus on back press
        return if (hasFocus() && event.keyCode == KeyEvent.KEYCODE_BACK) {
            if (event.action == KeyEvent.ACTION_UP) {
                clearFocus()
            }
            true
        } else {
            super.dispatchKeyEventPreIme(event)
        }
    }

    override fun setIconified(iconify: Boolean) {
        super.setIconified(iconify)

        // Don't focus view and raise keyboard unless allowed
        if (!iconify && !allowFocus) {
            clearFocus()
        }
    }
}
