Replace search field with a SearchView

Julien LepillerSun Jul 18 20:39:33+0200 2021

40612e9

Replace search field with a SearchView

app/src/main/java/eu/lepiller/nani/MainActivity.java

1414
import android.view.Menu;
1515
import android.view.MenuItem;
1616
import android.widget.Button;
17-
import android.widget.EditText;
1817
import android.widget.LinearLayout;
18+
import android.widget.SearchView;
1919
import android.widget.TextView;
2020
2121
import com.moji4j.MojiConverter;
2222
import com.moji4j.MojiDetector;
2323
2424
import java.util.ArrayList;
25-
import java.util.List;
2625
2726
import eu.lepiller.nani.dictionary.DictionaryException;
2827
import eu.lepiller.nani.dictionary.DictionaryFactory;

3433
3534
public class MainActivity extends AppCompatActivity implements OnTaskCompleted<SearchResult>, SharedPreferences.OnSharedPreferenceChangeListener {
3635
    private LinearLayout result_view, result_layout;
37-
    private Button search_button;
3836
    private TextView feedback_text;
39-
    private EditText search_form;
37+
    private SearchView search_form;
4038
    private static ArrayList<Result> savedResults;
4139
    private RadicalSelectorView radical_selector;
4240

4947
        Toolbar toolbar = findViewById(R.id.toolbar);
5048
        setSupportActionBar(toolbar);
5149
52-
        search_button = findViewById(R.id.search_button);
5350
        result_view = findViewById(R.id.results_view);
5451
        result_layout = findViewById(R.id.result_layout);
5552
        feedback_text = findViewById(R.id.feedback);

7269
            e.printStackTrace();
7370
        }
7471
75-
        search_button.setOnClickListener(new View.OnClickListener() {
72+
        search_form.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
7673
            @Override
77-
            public void onClick(View v) {
74+
            public boolean onQueryTextSubmit(String query) {
7875
                radical_selector.setVisibility(View.INVISIBLE);
7976
                result_layout.setVisibility(View.VISIBLE);
8077
81-
                String text = search_form.getText().toString();
78+
                String text = search_form.getQuery().toString();
8279
                if (text.isEmpty()) {
8380
                    Snackbar.make(findViewById(R.id.search_form), getString(R.string.no_search), Snackbar.LENGTH_LONG).show();
84-
                    return;
81+
                    return false;
8582
                }
8683
8784
                result_view.removeAllViews();
88-
                search_button.setEnabled(false);
85+
                search_form.setEnabled(false);
8986
                feedback_text.setText(R.string.feedback_progress);
9087
9188
                DictionaryFactory.prepare(getApplicationContext());
9289
                new SearchTask(MainActivity.this).execute(text);
90+
                return true;
91+
            }
92+
93+
            @Override
94+
            public boolean onQueryTextChange(String newText) {
95+
                return false;
9396
            }
9497
        });
9598

118121
            @Override
119122
            public void onClick(View v) {
120123
                String k = ((Button)v).getText().toString();
121-
                search_form.append(k);
124+
                search_form.setQuery(search_form.getQuery() + k, false);
122125
            }
123126
        });
124127

197200
198201
    @Override
199202
    public void onTaskCompleted(SearchResult r) {
200-
        search_button.setEnabled(true);
203+
        search_form.setEnabled(true);
201204
        if(r.isException()) {
202205
            DictionaryException e = r.getException();
203206
            if (e instanceof NoDictionaryException) {

239242
            feedback_text.setOnClickListener(new View.OnClickListener() {
240243
                @Override
241244
                public void onClick(View v) {
242-
                    search_form.setText(moji);
245+
                    search_form.setQuery(moji, true);
243246
                    feedback_text.setOnClickListener(null);
244-
                    search_button.callOnClick();
245247
                }
246248
            });
247249
        }

app/src/main/res/layout/content_main.xml

99
    tools:context=".MainActivity"
1010
    tools:showIn="@layout/activity_main">
1111
12-
    <LinearLayout
13-
        android:id="@+id/linearLayout4"
12+
    <SearchView
13+
        android:id="@+id/search_form"
1414
        android:layout_width="match_parent"
1515
        android:layout_height="wrap_content"
16-
        android:layout_marginTop="8dp"
17-
        android:orientation="horizontal">
18-
19-
        <EditText
20-
            android:id="@+id/search_form"
21-
            android:layout_width="0dp"
22-
            android:layout_height="wrap_content"
23-
            android:layout_marginStart="16dp"
24-
            android:layout_marginLeft="16dp"
25-
            android:layout_marginTop="32dp"
26-
            android:layout_weight="1"
27-
            android:ems="10"
28-
            android:hint="@string/search_hint"
29-
            android:importantForAutofill="no"
30-
            android:inputType="text" />
31-
32-
        <Button
33-
            android:id="@+id/search_button"
34-
            android:layout_width="wrap_content"
35-
            android:layout_height="wrap_content"
36-
            android:layout_marginStart="8dp"
37-
            android:layout_marginLeft="8dp"
38-
            android:layout_marginTop="32dp"
39-
            android:layout_marginEnd="16dp"
40-
            android:layout_marginRight="16dp"
41-
            android:text="@string/search_button" />
42-
43-
    </LinearLayout>
16+
        android:layout_marginStart="16dp"
17+
        android:layout_marginLeft="16dp"
18+
        android:layout_marginEnd="16dp"
19+
        android:layout_marginRight="16dp"
20+
        android:layout_marginTop="32dp"
21+
        android:ems="10"
22+
        android:hint="@string/search_hint"
23+
        android:importantForAutofill="no"
24+
        android:inputType="text"
25+
        android:iconifiedByDefault="false" />
4426
4527
    <FrameLayout
4628
        android:layout_width="match_parent"