package ca.grocerygo.android; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.widget.ListView; import ca.grocerygo.android.fragment.GlobalSearchFragment; import ca.grocerygo.android.utils.GroceryGoUtils; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.widget.SearchView; import com.actionbarsherlock.widget.SearchView.OnQueryTextListener; public class GlobalSearchFragmentActivity extends SherlockFragmentActivity { public static final String GLOBAL_SEARCH = "global_search"; private DrawerLayout mDrawerLayout; private ListView mDrawerList; private String mQuery = ""; private SearchView mSearchView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_activity); GroceryGoUtils.NavigationDrawerBundle drawerBundle = GroceryGoUtils.configNavigationDrawer(this, false, R.string.title_search); this.mDrawerLayout = drawerBundle.getDrawerLayout(); this.mDrawerList = drawerBundle.getDrawerList(); // Does the actual search handleIntent(getIntent()); } @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); handleIntent(intent); refreshQuery(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (mDrawerLayout.isDrawerOpen(mDrawerList)) mDrawerLayout.closeDrawer(mDrawerList); else { Intent parentActivityIntent = new Intent(this, CategoryTopFragmentActivity.class); parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(parentActivityIntent); finish(); } return true; } return super.onOptionsItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.search_activity_menu, menu); // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); mSearchView = (SearchView) menu.findItem(R.id.search).getActionView(); mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); mSearchView.setIconifiedByDefault(false); mSearchView.clearFocus(); mSearchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { if (mQuery.equals(query)) return true; // Only refresh if the query has changed mQuery = query; refreshQuery(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); refreshQuery(); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { if (this.mDrawerLayout != null && this.mDrawerList != null) { for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); item.setVisible(!mDrawerLayout.isDrawerOpen(mDrawerList)); } } return super.onPrepareOptionsMenu(menu); } private void refreshQuery() { if (mSearchView != null) { mSearchView.setQuery(mQuery, false); mSearchView.clearFocus(); GlobalSearchFragment frag = (GlobalSearchFragment) getSupportFragmentManager().findFragmentById(R.id.search_activity_content_fragment); frag.setQuery(mQuery); } } public void handleIntent(Intent intent) { setIntent(intent); if (intent.getExtras().containsKey(GlobalSearchFragmentActivity.GLOBAL_SEARCH) || Intent.ACTION_SEARCH.equals(intent.getAction()) ) { // Update the query - this is used by the loader when fetching results from database mQuery = intent.getStringExtra(SearchManager.QUERY).trim(); } } }