From bdd8dad04d0c5b8b06e80891c3a10245b00c1c47 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 1 Jul 2021 12:20:46 +0200 Subject: [PATCH] Refactoring --- .../faircode/email/FragmentDialogSearch.java | 11 ++++- ...e.java => TextViewAutoCompleteAction.java} | 44 ++++++++++++++----- app/src/main/res/layout/dialog_search.xml | 5 ++- app/src/main/res/values/attrs.xml | 3 ++ 4 files changed, 47 insertions(+), 16 deletions(-) rename app/src/main/java/eu/faircode/email/{TextViewAutoCompleteClearable.java => TextViewAutoCompleteAction.java} (62%) diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java b/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java index ba496d4edf..f005bdeee9 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java @@ -34,7 +34,6 @@ import android.view.View; import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; -import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; @@ -83,7 +82,7 @@ public class FragmentDialogSearch extends FragmentDialogBase { View dview = LayoutInflater.from(context).inflate(R.layout.dialog_search, null); - final AutoCompleteTextView etQuery = dview.findViewById(R.id.etQuery); + final TextViewAutoCompleteAction etQuery = dview.findViewById(R.id.etQuery); final TextView tvSearch1 = dview.findViewById(R.id.tvSearch1); final TextView tvSearch2 = dview.findViewById(R.id.tvSearch2); final TextView tvSearch3 = dview.findViewById(R.id.tvSearch3); @@ -171,6 +170,14 @@ public class FragmentDialogSearch extends FragmentDialogBase { } }); + etQuery.setActionRunnable(new Runnable() { + @Override + public void run() { + etQuery.setText(null); + } + }); + etQuery.setActionEnabled(true); + etQuery.setAdapter(adapter); View.OnClickListener onSearch = new View.OnClickListener() { diff --git a/app/src/main/java/eu/faircode/email/TextViewAutoCompleteClearable.java b/app/src/main/java/eu/faircode/email/TextViewAutoCompleteAction.java similarity index 62% rename from app/src/main/java/eu/faircode/email/TextViewAutoCompleteClearable.java rename to app/src/main/java/eu/faircode/email/TextViewAutoCompleteAction.java index 533fb57dac..d33580bfba 100644 --- a/app/src/main/java/eu/faircode/email/TextViewAutoCompleteClearable.java +++ b/app/src/main/java/eu/faircode/email/TextViewAutoCompleteAction.java @@ -20,6 +20,7 @@ package eu.faircode.email; */ import android.content.Context; +import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextWatcher; @@ -31,39 +32,48 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatAutoCompleteTextView; -public class TextViewAutoCompleteClearable extends AppCompatAutoCompleteTextView { +public class TextViewAutoCompleteAction extends AppCompatAutoCompleteTextView { private Drawable drawable = null; + private Runnable action = null; + private boolean enabled = false; - public TextViewAutoCompleteClearable(@NonNull Context context) { + public TextViewAutoCompleteAction(@NonNull Context context) { super(context); - init(); + init(context, null); } - public TextViewAutoCompleteClearable(@NonNull Context context, @Nullable AttributeSet attrs) { + public TextViewAutoCompleteAction(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); - init(); + init(context, attrs); } - public TextViewAutoCompleteClearable(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + public TextViewAutoCompleteAction(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - init(); + init(context, attrs); } - public void init() { - drawable = getContext().getDrawable(R.drawable.twotone_close_24); + public void init(Context context, AttributeSet attrs) { + if (attrs == null) + drawable = getContext().getDrawable(R.drawable.twotone_warning_24); + else { + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextViewAutoCompleteAction, 0, 0); + drawable = a.getDrawable(R.styleable.TextViewAutoCompleteAction_end_drawable); + } drawable.setTint(getCurrentTextColor()); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { + if (!enabled) + return false; if (getCompoundDrawables()[2] == null) return false; if (event.getAction() != MotionEvent.ACTION_UP) return false; if (event.getX() > getWidth() - getPaddingRight() - drawable.getIntrinsicWidth()) { - setText(""); - setCompoundDrawables(null, null, null, null); + if (action != null) + action.run(); } return false; } @@ -77,7 +87,7 @@ public class TextViewAutoCompleteClearable extends AppCompatAutoCompleteTextView @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - setCompoundDrawablesRelative(null, null, s.length() > 0 ? drawable : null, null); + setActionEnabled(enabled); } @Override @@ -86,4 +96,14 @@ public class TextViewAutoCompleteClearable extends AppCompatAutoCompleteTextView } }); } + + public void setActionRunnable(Runnable action) { + this.action = action; + } + + public void setActionEnabled(boolean enabled) { + this.enabled = enabled; + Drawable d = (enabled && getText().length() > 0 ? drawable : null); + setCompoundDrawablesRelative(null, null, d, null); + } } diff --git a/app/src/main/res/layout/dialog_search.xml b/app/src/main/res/layout/dialog_search.xml index 79401ab34a..bea6812096 100644 --- a/app/src/main/res/layout/dialog_search.xml +++ b/app/src/main/res/layout/dialog_search.xml @@ -110,7 +110,7 @@ app:srcCompat="@drawable/twotone_sticky_note_2_24" tools:ignore="MissingConstraints" /> - - + + + +