package org.mtransit.android.ui.view; import java.lang.ref.WeakReference; import org.mtransit.android.R; import org.mtransit.android.commons.KeyboardUtils; import org.mtransit.android.commons.MTLog; import org.mtransit.android.ui.MainActivity; import android.annotation.SuppressLint; import android.content.Context; import android.view.View; import android.widget.SearchView; @SuppressLint("ViewConstructor") public class MTSearchView extends SearchView implements MTLog.Loggable, View.OnFocusChangeListener, SearchView.OnCloseListener, SearchView.OnQueryTextListener { private static final String TAG = MTSearchView.class.getSimpleName(); @Override public String getLogTag() { return TAG; } public MTSearchView(MainActivity mainActivity, Context context) { super(context); init(mainActivity); } private WeakReference<MainActivity> mainActivityWR; private void init(MainActivity mainActivity) { this.mainActivityWR = new WeakReference<MainActivity>(mainActivity); setQueryHint(getContext().getString(R.string.search_hint)); setIconifiedByDefault(true); setOnQueryTextListener(this); setOnQueryTextFocusChangeListener(this); setOnCloseListener(this); setIconified(false); } @Override public boolean onQueryTextChange(String newText) { MainActivity mainActivity = this.mainActivityWR == null ? null : this.mainActivityWR.get(); if (mainActivity != null) { mainActivity.onSearchQueryRequested(newText); } return true; // handled } @Override public boolean onQueryTextSubmit(String query) { MainActivity mainActivity = this.mainActivityWR == null ? null : this.mainActivityWR.get(); if (mainActivity != null) { mainActivity.onSearchQueryRequested(query); KeyboardUtils.hideKeyboard(mainActivity, this); } return true; // handled } @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { MainActivity mainActivity = this.mainActivityWR == null ? null : this.mainActivityWR.get(); if (mainActivity != null) { KeyboardUtils.hideKeyboard(mainActivity, this); } } } @Override public boolean onClose() { return true; // do not close } }