ActionBarAdapter.java revision 8b8264620f9362e089322d1e3a7cc5620900e6f9
108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov/* 2fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * 408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * you may not use this file except in compliance with the License. 608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * You may obtain a copy of the License at 708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * 808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * 1008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 1108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 1208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * See the License for the specific language governing permissions and 1408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * limitations under the License. 1508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov */ 1608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 1708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovpackage com.android.contacts.activities; 1808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 1908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.R; 2015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport com.android.contacts.list.ContactListFilterController; 21bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikovimport com.android.contacts.list.ContactListFilterController.ContactListFilterListener; 22251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikovimport com.android.contacts.list.ContactListFilterView; 2308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactsRequest; 2408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 251a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.app.ActionBar; 263bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikovimport android.app.ActionBar.LayoutParams; 2708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.content.Context; 2808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.os.Bundle; 2915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport android.text.TextUtils; 3015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport android.view.LayoutInflater; 3108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.view.View; 32ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikovimport android.view.View.OnFocusChangeListener; 331a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView; 341a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView.OnCloseListener; 351a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView.OnQueryChangeListener; 3615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport android.widget.TextView; 3792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 3808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov/** 39fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Adapter for the action bar at the top of the Contacts activity. 4008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov */ 41ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikovpublic class ActionBarAdapter implements OnQueryChangeListener, OnCloseListener, 42ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov ContactListFilterListener, OnFocusChangeListener { 4308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 4408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public interface Listener { 45fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov void onAction(); 4608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 4708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 4815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private static final String EXTRA_KEY_SEARCH_MODE = "navBar.searchMode"; 4908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private static final String EXTRA_KEY_QUERY = "navBar.query"; 5008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 5115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private boolean mSearchMode; 5208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private String mQueryString; 5315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 5415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private View mNavigationBar; 5515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private TextView mSearchLabel; 5615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private SearchView mSearchView; 5792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 5808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private final Context mContext; 5908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 6008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private Listener mListener; 61251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov private ContactListFilterView mFilterView; 62bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov private View mFilterIndicator; 63bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov private ContactListFilterController mFilterController; 64bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov private View mFilterContainer; 6508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 668b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private boolean mEnabled; 678b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 68fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov public ActionBarAdapter(Context context) { 6908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContext = context; 7008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 7108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 721a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar) { 7308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = null; 7408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (savedState != null) { 7515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 7608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 7715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 7815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = request.isSearchMode(); 7908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = request.getQueryString(); 8008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 8108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 823bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM); 833bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov 8415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mNavigationBar = LayoutInflater.from(mContext).inflate(R.layout.navigation_bar, null); 853bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov LayoutParams layoutParams = new LayoutParams( 863bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 873bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov actionBar.setCustomView(mNavigationBar, layoutParams); 881a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 89bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterContainer = mNavigationBar.findViewById(R.id.filter_container); 90251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov mFilterView = (ContactListFilterView) mNavigationBar.findViewById(R.id.filter_view); 9115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchLabel = (TextView) mNavigationBar.findViewById(R.id.search_label); 92bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterIndicator = mNavigationBar.findViewById(R.id.filter_indicator); 9315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView = (SearchView) mNavigationBar.findViewById(R.id.search_view); 94bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 9515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setIconifiedByDefault(false); 9615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setOnQueryChangeListener(this); 9715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setOnCloseListener(this); 98ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mSearchView.setOnQueryTextFocusChangeListener(this); 9915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setQuery(mQueryString, false); 1001a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 101bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 1021a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 10308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 1048b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void setEnabled(boolean enabled) { 1058b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mEnabled = enabled; 1068b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov update(); 1078b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 1088b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1091a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public void setListener(Listener listener) { 1101a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mListener = listener; 11108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 11208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 11315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setContactListFilterController(ContactListFilterController controller) { 114bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController = controller; 115bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController.setAnchor(mFilterContainer); 116bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController.addListener(this); 11715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } 11815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 119ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov @Override 120ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov public void onFocusChange(View v, boolean hasFocus) { 121174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov if (v != mSearchView) { 122174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov return; 123ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 124174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 125174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // When we switch search mode on/off, the activity may need to change 126174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // fragments, which may lead to focus temporarily leaving the search 127174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // view or coming back to it, which could lead to an infinite loop. 128174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // Postponing the change breaks that loop. 129174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov mNavigationBar.post(new Runnable() { 130174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 131174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov @Override 132174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov public void run() { 133174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov setSearchMode(mSearchView.hasFocus()); 134174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 135174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov }); 136ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 137ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 13815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public boolean isSearchMode() { 13915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return mSearchMode; 14008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 14215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setSearchMode(boolean flag) { 14315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov if (mSearchMode != flag) { 14415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = flag; 145bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 1460b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov if (mSearchMode) { 1470b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov mSearchView.requestFocus(); 148ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else { 149ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mSearchView.setQuery(null, false); 1500b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov } 1511a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov if (mListener != null) { 1521a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mListener.onAction(); 1531a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 15408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 15508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 15608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 15708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public String getQueryString() { 15808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mQueryString; 15908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 16008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 16108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setQueryString(String query) { 16208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = query; 1631a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mSearchView.setQuery(query, false); 16408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 16508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 166bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void update() { 1678b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!mEnabled) { 1688b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mNavigationBar.setVisibility(View.GONE); 1698b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else if (mSearchMode) { 1708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mNavigationBar.setVisibility(View.VISIBLE); 17115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchLabel.setVisibility(View.VISIBLE); 172251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov mFilterView.setVisibility(View.GONE); 173bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterIndicator.setVisibility(View.INVISIBLE); 174c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov if (mFilterController != null) { 175c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov mFilterController.setEnabled(false); 176c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov } 17715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 1788b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mNavigationBar.setVisibility(View.VISIBLE); 17915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchLabel.setVisibility(View.GONE); 180251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov mFilterView.setVisibility(View.VISIBLE); 181bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov boolean showIndicator = false; 182c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov if (mFilterController != null){ 183c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov mFilterController.setEnabled(true); 184c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov if (mFilterController.isLoaded()) { 185c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov mFilterView.setContactListFilter(mFilterController.getFilter()); 186a31fe548862fef70d3244dc3414a478f91b098f6Dmitri Plotnikov mFilterView.setSingleAccount(mFilterController.getAccountCount() == 1); 187c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov mFilterView.bindView(false); 188a31fe548862fef70d3244dc3414a478f91b098f6Dmitri Plotnikov showIndicator = mFilterController.getFilterCount() > 1; 189c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov } 190bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 191bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterIndicator.setVisibility(showIndicator ? View.VISIBLE : View.INVISIBLE); 19208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 19308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 19408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 19508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 1961a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onQueryTextChanged(String queryString) { 19708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = queryString; 198ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!mSearchMode) { 199ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!TextUtils.isEmpty(queryString)) { 200ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov setSearchMode(true); 2019806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 202ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else if (mListener != null) { 203ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mListener.onAction(); 2049806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 205ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 2061a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 2071a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 2081a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 2091a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov @Override 2101a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onSubmitQuery(String query) { 2111a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 21208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 21408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 2151a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onClose() { 21615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov setSearchMode(false); 21715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return false; 21808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 22015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void onSaveInstanceState(Bundle outState) { 22115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode); 22215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putString(EXTRA_KEY_QUERY, mQueryString); 22308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 224bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 225bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 226bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFiltersLoaded() { 227bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 228bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 229bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 230bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 231bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterChanged() { 232bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 233bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 234bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 235bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 236bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterCustomizationRequest() { 237bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 23808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov} 239