From e80a1317f145eb1f4beaae79c7a0bfcfcaa33c4d Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sat, 27 Feb 2016 23:46:41 +0100 Subject: [PATCH] Switched to the official SearchWidget. --- .../ui/activities/SearchActivity.java | 123 ++++++++---------- app/src/main/res/layout/activity_search.xml | 5 +- app/src/main/res/layout/search_bar.xml | 37 ------ app/src/main/res/menu/menu_search.xml | 10 ++ 4 files changed, 67 insertions(+), 108 deletions(-) delete mode 100644 app/src/main/res/layout/search_bar.xml create mode 100644 app/src/main/res/menu/menu_search.xml diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java index df10a4a9..9cc8a149 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java @@ -1,25 +1,19 @@ package com.kabouzeid.gramophone.ui.activities; -import android.annotation.SuppressLint; -import android.graphics.PorterDuff; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; -import android.text.Editable; -import android.text.TextWatcher; -import android.view.KeyEvent; +import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; -import android.widget.ImageView; import android.widget.TextView; import com.kabouzeid.appthemehelper.ThemeStore; -import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.SearchAdapter; import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity; @@ -28,24 +22,22 @@ import com.kabouzeid.gramophone.util.Util; import butterknife.Bind; import butterknife.ButterKnife; -public class SearchActivity extends AbsMusicServiceActivity { +public class SearchActivity extends AbsMusicServiceActivity implements SearchView.OnQueryTextListener { public static final String TAG = SearchActivity.class.getSimpleName(); @Bind(R.id.recycler_view) RecyclerView recyclerView; @Bind(R.id.toolbar) Toolbar toolbar; - @Bind(R.id.search_src_text) - EditText searchSrcText; - @Bind(R.id.search_close_btn) - ImageView searchCloseBtn; - @SuppressWarnings("ButterKnifeNoViewWithId") @Bind(android.R.id.empty) TextView empty; + SearchView searchView; + private SearchAdapter searchAdapter; - @SuppressLint("NewApi") + private String lastQuery = ""; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -70,7 +62,6 @@ public class SearchActivity extends AbsMusicServiceActivity { }); setUpToolBar(); - setUpSearchBar(); } private void setUpToolBar() { @@ -80,54 +71,6 @@ public class SearchActivity extends AbsMusicServiceActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - private void setUpSearchBar() { - searchCloseBtn.setColorFilter(ToolbarContentTintHelper.toolbarContentColor(this, ThemeStore.primaryColor(this)), PorterDuff.Mode.SRC_IN); - searchCloseBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - searchSrcText.setText(""); - } - }); - - searchSrcText.setTextColor(ToolbarContentTintHelper.toolbarTitleColor(this, ThemeStore.primaryColor(this))); - searchSrcText.setHintTextColor(ToolbarContentTintHelper.toolbarSubtitleColor(this, ThemeStore.primaryColor(this))); - searchSrcText.setHint(R.string.search_hint); - - searchSrcText.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable s) { - search(searchSrcText.getText().toString()); - } - }); - - searchSrcText.setOnEditorActionListener(new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_SEARCH) { - search(searchSrcText.getText().toString()); - hideSoftKeyboard(); - return true; - } - return false; - } - }); - } - - private void hideSoftKeyboard() { - Util.hideSoftKeyboard(SearchActivity.this); - searchSrcText.clearFocus(); - } - @Override public void enableViews() { super.enableViews(); @@ -140,15 +83,42 @@ public class SearchActivity extends AbsMusicServiceActivity { recyclerView.setEnabled(false); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_search, menu); + + final MenuItem searchItem = menu.findItem(R.id.search); + searchView = (SearchView) MenuItemCompat.getActionView(searchItem); + searchView.setQueryHint(getString(R.string.search_hint)); + searchView.setOnQueryTextListener(this); + + MenuItemCompat.expandActionView(searchItem); + MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + onBackPressed(); + return false; + } + }); + + return super.onCreateOptionsMenu(menu); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { - super.onBackPressed(); + onBackPressed(); } return super.onOptionsItemSelected(item); } private void search(@NonNull String query) { + lastQuery = query; if (searchAdapter != null) { searchAdapter.search(query); empty.setVisibility(searchAdapter.getItemCount() < 1 ? View.VISIBLE : View.GONE); @@ -158,6 +128,25 @@ public class SearchActivity extends AbsMusicServiceActivity { @Override public void onMediaStoreChanged() { super.onMediaStoreChanged(); - search(searchSrcText.getText().toString()); + search(lastQuery); + } + + @Override + public boolean onQueryTextSubmit(String query) { + hideSoftKeyboard(); + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + search(newText); + return false; + } + + private void hideSoftKeyboard() { + Util.hideSoftKeyboard(SearchActivity.this); + if (searchView != null) { + searchView.clearFocus(); + } } } diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 10424356..5bb2ee0a 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -7,10 +7,7 @@ - - - + style="@style/Toolbar" /> - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_search.xml b/app/src/main/res/menu/menu_search.xml new file mode 100644 index 00000000..07f484c6 --- /dev/null +++ b/app/src/main/res/menu/menu_search.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file