package com.dozuki.ifixit.ui;
import android.app.SearchManager;
import android.database.Cursor;
import android.graphics.Color;
import android.support.v4.widget.CursorAdapter;
import android.util.TypedValue;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.widget.SearchView;
import com.dozuki.ifixit.App;
import com.dozuki.ifixit.R;
import com.dozuki.ifixit.util.CheatSheet;
import com.google.analytics.tracking.android.MapBuilder;
public class BaseSearchMenuDrawerActivity extends BaseMenuDrawerActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.search_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
String hint = getString(R.string.search_site_hint, App.get().getSite().mTitle);
((EditText) item.getActionView().findViewById(R.id.abs__search_src_text)).setHint(hint);
App.sendEvent("ui_action", "search", "action_bar_search", null);
// Returns true to expand the menu item
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Returns true to collapse the menu item
return true;
}
});
final SearchView searchView = (SearchView) searchItem.getActionView();
if (searchView != null) {
applyThemeToSearchView(searchView);
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionSelect(int position) {
return false;
}
@Override
public boolean onSuggestionClick(int position) {
CursorAdapter cursorAdapter = searchView.getSuggestionsAdapter();
Cursor cursor = cursorAdapter.getCursor();
int suggestionIndex = cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_QUERY);
searchView.setQuery(cursor.getString(suggestionIndex), false);
searchView.clearFocus();
return false;
}
});
}
// Trigger onOptionsItemSelected for the custom menu item because it doesn't
// happen automatically.
final MenuItem barcodeItem = menu.findItem(R.id.action_scan_barcode);
barcodeItem.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
onOptionsItemSelected(barcodeItem);
}
});
CheatSheet.setup(barcodeItem.getActionView(), R.string.slide_menu_barcode_scanner);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_scan_barcode:
launchBarcodeScanner();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// Only display barcode scanner menu item if it's enabled.
menu.findItem(R.id.action_scan_barcode).setVisible(
App.get().getSite().barcodeScanningEnabled());
return super.onPrepareOptionsMenu(menu);
}
/**
* SearchView's AutoCompleteTextView and other elements are not styleable via XML,
* so we have to find the view by its ID and apply the style programmatically.
*
* Changes the color of the underline of the search edit text field.
* @param searchView
*/
private void applyThemeToSearchView(SearchView searchView) {
View searchPlate = searchView.findViewById(R.id.abs__search_src_text);
searchView.findViewById(R.id.abs__search_plate).setBackgroundColor(Color.TRANSPARENT);
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.doz__editTextBackground, typedValue, true);
searchPlate.setBackgroundResource(typedValue.resourceId);
}
}