package com.nuscomputing.ivle; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import android.annotation.TargetApi; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.widget.SearchView; /** * The main universal search activity. * @author yjwong */ public class SearchableActivity extends IVLESherlockFragmentActivity { // {{{ properties /** TAG for logging */ public static final String TAG = "SearchableActivity"; /** The search view */ private SearchView mSearchView; /** The search query */ private String mSearchQuery; /** The fragment manager */ private FragmentManager mFragmentManager; /** The search fragment */ private Fragment mFragment; // }}} // {{{ methods @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.searchable_activity); // Set the up button. ActionBar bar = getSupportActionBar(); bar.setDisplayHomeAsUpEnabled(true); // Handle the search intent. this.handleIntent(getIntent()); // Display the query for Android < HONEYCOMB. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { bar.setTitle(getString(R.string.searchable_activity_results_for, mSearchQuery)); } // Get the fragment manager. mFragmentManager = getSupportFragmentManager(); if (savedInstanceState == null) { // Define fragment arguments. Bundle args = new Bundle(); args.putString(SearchManager.QUERY, mSearchQuery); // Add the fragment. FragmentTransaction transaction = mFragmentManager.beginTransaction(); mFragment = new SearchableFragment(); mFragment.setArguments(args); transaction.add(R.id.searchable_activity_fragment_container, mFragment, "SEARCH_FRAGMENT"); transaction.commit(); } else { mFragment = mFragmentManager.findFragmentByTag("SEARCH_FRAGMENT"); } } @Override public void onNewIntent(Intent intent) { setIntent(intent); this.handleIntent(intent); // Remove the old fragment. FragmentTransaction transaction = mFragmentManager.beginTransaction(); transaction.remove(mFragment); // Add the new fragment. // Define fragment arguments. Bundle args = new Bundle(); args.putString(SearchManager.QUERY, mSearchQuery); // Add the fragment. mFragment = new SearchableFragment(); mFragment.setArguments(args); transaction.add(R.id.searchable_activity_fragment_container, mFragment, "SEARCH_FRAGMENT"); transaction.commit(); } private void handleIntent(Intent intent) { // Get the intent, verify the action and get the query. if (Intent.ACTION_SEARCH.equals(intent.getAction())) { mSearchQuery = intent.getStringExtra(SearchManager.QUERY); } } @TargetApi(11) @Override public boolean onCreateOptionsMenu(Menu menu) { // Create the global menu. super.onCreateOptionsMenu(menu); // Create the searchable activity menu. MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.searchable_activity_menu, menu); // Get the SearchView and set the searchable configuration if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); mSearchView = (SearchView) menu.findItem(R.id.main_menu_search).getActionView(); mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); mSearchView.setQueryHint(getString(R.string.searchable_hint)); mSearchView.setQuery(mSearchQuery, false); mSearchView.setIconifiedByDefault(false); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection. switch (item.getItemId()) { case R.id.main_menu_search: onSearchRequested(); return true; default: return super.onOptionsItemSelected(item); } } // }}} }