package com.doumee.lib_coremodel.binding.viewadapter.view; 
 | 
  
 | 
  
 | 
import android.view.View; 
 | 
  
 | 
import androidx.databinding.BindingAdapter; 
 | 
  
 | 
import com.doumee.lib_coremodel.binding.command.BindingCommand; 
 | 
import com.jakewharton.rxbinding2.view.RxView; 
 | 
  
 | 
import java.util.concurrent.TimeUnit; 
 | 
  
 | 
import io.reactivex.functions.Consumer; 
 | 
  
 | 
/** 
 | 
 * Created by goldze on 2017/6/16. 
 | 
 */ 
 | 
  
 | 
public class ViewAdapter { 
 | 
    //防重复点击间隔(秒) 
 | 
    public static final int CLICK_INTERVAL = 1; 
 | 
  
 | 
    /** 
 | 
     * requireAll 是意思是是否需要绑定全部参数, false为否 
 | 
     * View的onClick事件绑定 
 | 
     * onClickCommand 绑定的命令, 
 | 
     * isThrottleFirst 是否开启防止过快点击 
 | 
     */ 
 | 
    @BindingAdapter(value = {"onClickCommand", "isThrottleFirst","commandType"}, requireAll = false) 
 | 
    public static void onClickCommand(View view, final BindingCommand clickCommand, final boolean isThrottleFirst,int commandType) { 
 | 
        if (isThrottleFirst) { 
 | 
            RxView.clicks(view) 
 | 
                    .subscribe(new Consumer<Object>() { 
 | 
                        @Override 
 | 
                        public void accept(Object object) throws Exception { 
 | 
                            if (clickCommand != null) { 
 | 
                                if(commandType!=0){ 
 | 
                                    clickCommand.execute(commandType); 
 | 
                                }else { 
 | 
                                    clickCommand.execute(); 
 | 
                                } 
 | 
                            } 
 | 
                        } 
 | 
                    }); 
 | 
        } else { 
 | 
            RxView.clicks(view) 
 | 
                    .throttleFirst(CLICK_INTERVAL, TimeUnit.SECONDS)//1秒钟内只允许点击1次 
 | 
                    .subscribe(new Consumer<Object>() { 
 | 
                        @Override 
 | 
                        public void accept(Object object) throws Exception { 
 | 
                            if (clickCommand != null) { 
 | 
                                if(commandType!=0){ 
 | 
                                    clickCommand.execute(commandType); 
 | 
                                }else { 
 | 
                                    clickCommand.execute(); 
 | 
                                } 
 | 
                            } 
 | 
                        } 
 | 
                    }); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * view的onLongClick事件绑定 
 | 
     */ 
 | 
    @BindingAdapter(value = {"onLongClickCommand"}, requireAll = false) 
 | 
    public static void onLongClickCommand(View view, final BindingCommand clickCommand) { 
 | 
        RxView.longClicks(view) 
 | 
                .subscribe(new Consumer<Object>() { 
 | 
                    @Override 
 | 
                    public void accept(Object object) throws Exception { 
 | 
                        if (clickCommand != null) { 
 | 
                            clickCommand.execute(); 
 | 
                        } 
 | 
                    } 
 | 
                }); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 回调控件本身 
 | 
     * 
 | 
     * @param currentView 
 | 
     * @param bindingCommand 
 | 
     */ 
 | 
    @BindingAdapter(value = {"currentView"}, requireAll = false) 
 | 
    public static void replyCurrentView(View currentView, BindingCommand bindingCommand) { 
 | 
        if (bindingCommand != null) { 
 | 
            bindingCommand.execute(currentView); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * view是否需要获取焦点 
 | 
     */ 
 | 
    @BindingAdapter({"requestFocus"}) 
 | 
    public static void requestFocusCommand(View view, final Boolean needRequestFocus) { 
 | 
        if (needRequestFocus) { 
 | 
            view.setFocusableInTouchMode(true); 
 | 
            view.requestFocus(); 
 | 
        } else { 
 | 
            view.clearFocus(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * view的焦点发生变化的事件绑定 
 | 
     */ 
 | 
    @BindingAdapter({"onFocusChangeCommand"}) 
 | 
    public static void onFocusChangeCommand(View view, final BindingCommand<Boolean> onFocusChangeCommand) { 
 | 
        view.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
 | 
            @Override 
 | 
            public void onFocusChange(View v, boolean hasFocus) { 
 | 
                if (onFocusChangeCommand != null) { 
 | 
                    onFocusChangeCommand.execute(hasFocus); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * view的显示隐藏 
 | 
     */ 
 | 
    @BindingAdapter(value = {"isVisible"}, requireAll = false) 
 | 
    public static void isVisible(View view, final Boolean visibility) { 
 | 
        if (visibility) { 
 | 
            view.setVisibility(View.VISIBLE); 
 | 
        } else { 
 | 
            view.setVisibility(View.GONE); 
 | 
        } 
 | 
    } 
 | 
//    @BindingAdapter({"onTouchCommand"}) 
 | 
//    public static void onTouchCommand(View view, final ResponseCommand<MotionEvent, Boolean> onTouchCommand) { 
 | 
//        view.setOnTouchListener(new View.OnTouchListener() { 
 | 
//            @Override 
 | 
//            public boolean onTouch(View v, MotionEvent event) { 
 | 
//                if (onTouchCommand != null) { 
 | 
//                    return onTouchCommand.execute(event); 
 | 
//                } 
 | 
//                return false; 
 | 
//            } 
 | 
//        }); 
 | 
//    } 
 | 
} 
 |