package com.ratebeer.android.gui.components.helpers; import android.annotation.TargetApi; import android.app.Activity; import android.app.SearchManager; import android.content.Context; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.widget.SearchView; import com.ratebeer.android.R; public class SearchUiHelper { private Activity context; private SearchManager searchManager; public SearchUiHelper(Activity context) { this.context = context; this.searchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE); } @TargetApi(8) public void addSearchToActionBar(ActionBar actionBar) { if (!shouldShowInMenu()) { // Set up a SearchView SearchView searchView = new SearchView(context); searchView.setSearchableInfo(searchManager.getSearchableInfo(context.getComponentName())); searchView.setQueryRefinementEnabled(true); searchView.setIconifiedByDefault(false); searchView.setFocusable(false); searchView.setFocusableInTouchMode(false); actionBar.setCustomView(searchView); actionBar.setDisplayShowCustomEnabled(true); } } @TargetApi(8) public void enhanceSearchInMenu(Menu menu) { // For phones, the dashboard & search fragments show a search icon in the action bar // Note that tablets always show an search input in the action bar through the HomeTablet activity directly MenuItem item = menu.findItem(R.id.menu_search); if (shouldShowInMenu() && item != null && android.os.Build.VERSION.SDK_INT >= 8) { final SearchView searchView = new SearchView(context); searchView.setSearchableInfo(searchManager.getSearchableInfo(context.getComponentName())); searchView.setQueryRefinementEnabled(true); item.setActionView(searchView); } } @TargetApi(13) private boolean shouldShowInMenu() { if (android.os.Build.VERSION.SDK_INT >= 13) { if (context.getResources().getConfiguration().screenWidthDp >= 800) { return false; // Already shown as SearchView } } return true; } }