package edu.mit.mitmobile2; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; public class SearchBar extends LinearLayout { ImageButton mSearchBox; ImageButton mSearchButton; TextView mSearchHintTV; private static final String NAMESPACE = "http://schemas.android.com/apk/res/android"; public SearchBar(Context context, AttributeSet attributeSet) { super(context, attributeSet); LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflator.inflate(R.layout.search_bar, this); mSearchBox = (ImageButton) findViewById(R.id.searchBox); mSearchBox.setFocusableInTouchMode(true); mSearchButton = (ImageButton) findViewById(R.id.searchButton); mSearchHintTV = (TextView) findViewById(R.id.searchBoxHint); if(attributeSet != null) { String hintText = attributeSet.getAttributeValue(NAMESPACE, "hint"); setSearchHint(hintText); } } public static interface OnInitiateSearchListener { public void onInitiateSearch(String searchQuery); } public void setSearchHint(String searchHint) { mSearchHintTV.setText(searchHint); } public void setSystemSearchInvoker(final Activity activity) { mSearchBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mSearchBox.isFocused()) { activity.onSearchRequested(); } else { mSearchBox.requestFocus(); } } }); mSearchBox.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(event.getUnicodeChar() != 0) { String initialSearch = new String(new int[] { event.getUnicodeChar() }, 0, 1); activity.startSearch(initialSearch, false, null, false); return true; } return false; } }); mSearchBox.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { activity.onSearchRequested(); return true; } }); mSearchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { activity.onSearchRequested(); } }); } }