ActionBarAdapter.java revision fa49a66979567894c85fe2489d1375216d67597e
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 ContactListFilterController mFilterController; 6308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 648b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private boolean mEnabled; 658b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 66fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov public ActionBarAdapter(Context context) { 6708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContext = context; 6808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 6908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 701a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar) { 7108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = null; 7208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (savedState != null) { 7315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 7408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 7515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 7615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = request.isSearchMode(); 7708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = request.getQueryString(); 7808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 7908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 801173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov if (actionBar != null) { 811173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov actionBar.setDisplayOptions( 821173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM); 831173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 843bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov 8515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mNavigationBar = LayoutInflater.from(mContext).inflate(R.layout.navigation_bar, null); 863bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov LayoutParams layoutParams = new LayoutParams( 873bfccddd6f61f6196a7f0af426c9e3f742de37f3Dmitri Plotnikov LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 881173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov if (actionBar != null) { 891173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov actionBar.setCustomView(mNavigationBar, layoutParams); 901173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 911a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 92251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov mFilterView = (ContactListFilterView) mNavigationBar.findViewById(R.id.filter_view); 9315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchLabel = (TextView) mNavigationBar.findViewById(R.id.search_label); 9415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView = (SearchView) mNavigationBar.findViewById(R.id.search_view); 95bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 9615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setOnQueryChangeListener(this); 9715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setOnCloseListener(this); 98ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mSearchView.setOnQueryTextFocusChangeListener(this); 9915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setQuery(mQueryString, false); 1003e076bb53d39eb3757b376a003c412e4f44b0e3dDmitri Plotnikov mSearchView.setQueryHint(mContext.getString(R.string.hint_findContacts)); 1011a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 102bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 1031a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 10408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 1058b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void setEnabled(boolean enabled) { 1068b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mEnabled = enabled; 1078b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov update(); 1088b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 1098b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1101a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public void setListener(Listener listener) { 1111a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mListener = listener; 11208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 11308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 11415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setContactListFilterController(ContactListFilterController controller) { 115bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController = controller; 11611cbbf445e4724246836f006f06ad16cc82ca439Dmitri Plotnikov mFilterController.setAnchor(mFilterView); 117bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController.addListener(this); 11815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } 11915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 120ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov @Override 121ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov public void onFocusChange(View v, boolean hasFocus) { 122174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov if (v != mSearchView) { 123174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov return; 124ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 125174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 126174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // When we switch search mode on/off, the activity may need to change 127174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // fragments, which may lead to focus temporarily leaving the search 128174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // view or coming back to it, which could lead to an infinite loop. 129174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov // Postponing the change breaks that loop. 130174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov mNavigationBar.post(new Runnable() { 131174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 132174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov @Override 133174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov public void run() { 134174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov setSearchMode(mSearchView.hasFocus()); 135174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 136174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov }); 137ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 138ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 13915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public boolean isSearchMode() { 14015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return mSearchMode; 14108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 14315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setSearchMode(boolean flag) { 14415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov if (mSearchMode != flag) { 14515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = flag; 146bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 1470b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov if (mSearchMode) { 1480b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov mSearchView.requestFocus(); 149ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else { 150ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mSearchView.setQuery(null, false); 1510b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov } 1521a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov if (mListener != null) { 1531a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mListener.onAction(); 1541a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 15508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 15608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 15708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 15808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public String getQueryString() { 15908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mQueryString; 16008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 16108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 16208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setQueryString(String query) { 16308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = query; 1641a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mSearchView.setQuery(query, false); 16508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 16608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 167bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void update() { 1688b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!mEnabled) { 1698b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mNavigationBar.setVisibility(View.GONE); 1708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else if (mSearchMode) { 1718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mNavigationBar.setVisibility(View.VISIBLE); 17215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchLabel.setVisibility(View.VISIBLE); 173251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov mFilterView.setVisibility(View.GONE); 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); 181c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov if (mFilterController != null){ 182c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov mFilterController.setEnabled(true); 183c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov if (mFilterController.isLoaded()) { 184c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov mFilterView.setContactListFilter(mFilterController.getFilter()); 185a31fe548862fef70d3244dc3414a478f91b098f6Dmitri Plotnikov mFilterView.setSingleAccount(mFilterController.getAccountCount() == 1); 186c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov mFilterView.bindView(false); 187c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov } 188bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 18908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 19008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 19108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 19208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 1931a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onQueryTextChanged(String queryString) { 19408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = queryString; 195ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!mSearchMode) { 196ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!TextUtils.isEmpty(queryString)) { 197ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov setSearchMode(true); 1989806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 199ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else if (mListener != null) { 200ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mListener.onAction(); 2019806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 202ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 2031a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 2041a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 2051a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 2061a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov @Override 2071a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onSubmitQuery(String query) { 2081a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 20908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 21108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 2121a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onClose() { 21315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov setSearchMode(false); 21415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return false; 21508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 21715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void onSaveInstanceState(Bundle outState) { 21815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode); 21915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putString(EXTRA_KEY_QUERY, mQueryString); 22008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 221bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 222fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov public void onRestoreInstanceState(Bundle savedState) { 223fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 224fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 225fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 226fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 227bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 228bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFiltersLoaded() { 229bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 230bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 231bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 232bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 233bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterChanged() { 234bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 235bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 236bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 237bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 238bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterCustomizationRequest() { 239bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 24008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov} 241