| 
					
				 | 
			
			
				@@ -0,0 +1,129 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.cooleshow.base.widgets; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import android.content.Context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import android.graphics.drawable.Drawable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import android.text.Editable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import android.text.TextWatcher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import android.util.AttributeSet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import android.view.MotionEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import android.view.View; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.cooleshow.base.R; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.cooleshow.base.utils.SizeUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import androidx.appcompat.widget.AppCompatEditText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import androidx.core.content.ContextCompat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import androidx.core.graphics.drawable.DrawableCompat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Author by pq, Date on 2023/2/15. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class ClearEditText extends AppCompatEditText implements View.OnTouchListener, View.OnFocusChangeListener, TextWatcher { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Drawable mClearTextIcon; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private OnFocusChangeListener mOnFocusChangeListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private OnTouchListener mOnTouchListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ClearEditText(final Context context) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super(context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        init(context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ClearEditText(final Context context, final AttributeSet attrs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super(context, attrs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        init(context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ClearEditText(final Context context, final AttributeSet attrs, final int defStyleAttr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super(context, attrs, defStyleAttr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        init(context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void init(final Context context) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        final Drawable drawable = ContextCompat.getDrawable(context, R.drawable.icon_clear_edit_content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        final Drawable wrappedDrawable = DrawableCompat.wrap(drawable); //Wrap the drawable so that it can be tinted pre Lollipop 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DrawableCompat.setTint(wrappedDrawable, getCurrentHintTextColor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mClearTextIcon = wrappedDrawable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mClearTextIcon.setBounds(0, 0, mClearTextIcon.getIntrinsicWidth(), mClearTextIcon.getIntrinsicHeight()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setClearIconVisible(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super.setOnTouchListener(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super.setOnFocusChangeListener(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        addTextChangedListener(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setCompoundDrawablePadding(SizeUtils.dp2px(5)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setPadding(getPaddingLeft(),getPaddingTop(),getPaddingRight()+SizeUtils.dp2px(5),getPaddingBottom()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setOnFocusChangeListener(OnFocusChangeListener l) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mOnFocusChangeListener = l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setOnTouchListener(OnTouchListener l) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mOnTouchListener = l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void onFocusChange(View v, boolean hasFocus) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (hasFocus) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClearIconVisible(getText().length() > 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClearIconVisible(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (mOnFocusChangeListener != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mOnFocusChangeListener.onFocusChange(v, hasFocus); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean onTouch(View view, MotionEvent motionEvent) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        final int x = (int) motionEvent.getX(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (mClearTextIcon.isVisible() && x > getWidth() - getPaddingRight() - mClearTextIcon.getIntrinsicWidth()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (motionEvent.getAction() == MotionEvent.ACTION_UP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setError(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setText(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return mOnTouchListener != null && mOnTouchListener.onTouch(view, motionEvent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public final void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (isFocused()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClearIconVisible(text.length() > 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void afterTextChanged(Editable s) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (mTextWatchListener != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mTextWatchListener.afterTextChanged(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void setClearIconVisible(final boolean visible) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mClearTextIcon.setVisible(visible, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        final Drawable[] compoundDrawables = getCompoundDrawables(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setCompoundDrawables( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                compoundDrawables[0], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                compoundDrawables[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                visible ? mClearTextIcon : null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                compoundDrawables[3]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private OnTextWatchListener mTextWatchListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setTextWatchListener(OnTextWatchListener textWatchListener) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mTextWatchListener = textWatchListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public interface OnTextWatchListener{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        void afterTextChanged(Editable s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |