package com.yidian.bcommon.mvvm.binding

import android.view.View
import androidx.databinding.BindingAdapter
import timber.log.Timber

/**
 * 捕获所有android:onClickListener方式的点击事件，添加防抖
 */
@BindingAdapter("android:onClickListener")
fun setViewOnClickListener(view: View, callback: View.OnClickListener) {
  view.setOnClickListener(ThrottleOnClickListener(callback))
}

/**
 * 捕获所有android:onClickListener方式的点击事件，添加防抖
 */
@BindingAdapter("android:onClick")
fun setViewOnClick(view: View, callback: View.OnClickListener) {
  view.setOnClickListener(ThrottleOnClickListener(callback))
}

/**
 * 原始OnClickListener的包装
 */
class ThrottleOnClickListener(private val callback: View.OnClickListener) : View.OnClickListener {

  // 上次点击时间
  private var mLastTime = 0L

  override fun onClick(v: View?) {
    val currentTime = System.currentTimeMillis()
    if (currentTime - mLastTime >= CLICK_THRESHOLD) {
      mLastTime = currentTime
      // 调用点击方法
      callback.onClick(v)
    } else {
      // 过滤多余的点击
      Timber.e("[ThrottleOnClickListener] [onClick] throttle")
    }
  }

  companion object {
    // 点击过滤时间间隔
    private const val CLICK_THRESHOLD = 500
  }
}
