Switched to the official SearchWidget.

This commit is contained in:
Karim Abou Zeid 2016-02-27 23:46:41 +01:00
commit e80a1317f1
4 changed files with 65 additions and 106 deletions

View file

@ -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();
}
}
}

View file

@ -7,10 +7,7 @@
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
style="@style/Toolbar">
<include layout="@layout/search_bar" />
</android.support.v7.widget.Toolbar>
style="@style/Toolbar" />
<FrameLayout
android:layout_width="match_parent"

View file

@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<EditText
android:id="@+id/search_src_text"
android:layout_width="0dp"
android:layout_height="36dip"
android:layout_gravity="bottom"
android:layout_weight="1"
android:background="@null"
android:ellipsize="end"
android:imeOptions="actionSearch"
android:inputType="text|textAutoComplete|textNoSuggestions"
android:minWidth="@dimen/abc_search_view_text_min_width"
android:paddingLeft="@dimen/abc_dropdownitem_text_padding_left"
android:paddingRight="@dimen/abc_dropdownitem_text_padding_right"
android:singleLine="true"
android:textCursorDrawable="@null"
tools:ignore="RtlHardcoded" />
<ImageView
android:id="@+id/search_close_btn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/abc_searchview_description_clear"
android:focusable="true"
android:paddingLeft="8dip"
android:paddingRight="8dip"
android:src="@drawable/ic_close_white_24dp" />
</LinearLayout>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
android:title="@string/action_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>