ActionBarAdapter.java revision 1ee9df6facd2340416d6a33aeb739707643d2fc3
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; 20b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.activities.ActionBarAdapter.Listener.Action; 2115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport com.android.contacts.list.ContactListFilterController; 22bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikovimport com.android.contacts.list.ContactListFilterController.ContactListFilterListener; 2308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactsRequest; 2408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 251a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.app.ActionBar; 261ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuanimport android.app.ActionBar.LayoutParams; 2708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.content.Context; 2808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.os.Bundle; 2915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport android.text.TextUtils; 301ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuanimport android.view.LayoutInflater; 311ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuanimport android.view.View; 321a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView; 331a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView.OnCloseListener; 34c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powellimport android.widget.SearchView.OnQueryTextListener; 3592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 3608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov/** 37fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Adapter for the action bar at the top of the Contacts activity. 3808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov */ 39eb5c3228af1e86db5552bc8baf6bf62c77612f3eDmitri Plotnikovpublic class ActionBarAdapter 40eb5c3228af1e86db5552bc8baf6bf62c77612f3eDmitri Plotnikov implements OnQueryTextListener, OnCloseListener, ContactListFilterListener { 4108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 4208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public interface Listener { 43b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public enum Action { 44b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan CHANGE_SEARCH_QUERY, START_SEARCH_MODE, STOP_SEARCH_MODE 45b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 46b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 47b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan void onAction(Action action); 4808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 4908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 5015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private static final String EXTRA_KEY_SEARCH_MODE = "navBar.searchMode"; 5108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private static final String EXTRA_KEY_QUERY = "navBar.query"; 5208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 5315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private boolean mSearchMode; 5408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private String mQueryString; 5515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 56b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private String mSearchLabelText; 5715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private SearchView mSearchView; 5892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 5908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private final Context mContext; 6008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 6108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private Listener mListener; 62bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov private ContactListFilterController mFilterController; 6308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 64b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private ActionBar mActionBar; 658b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 661ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan private View mCustomSearchView; 671ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan private LayoutParams mLayoutParams; 681ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan private boolean mIsSearchInOverflowMenu; 691ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan 701ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan public ActionBarAdapter(Context context, Listener listener) { 7108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContext = context; 721ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mListener = listener; 73b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mSearchLabelText = mContext.getString(R.string.search_label); 7408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 7508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 761ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar, 771ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan boolean searchInOverflowMenu) { 78b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar = actionBar; 7908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = null; 801ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mIsSearchInOverflowMenu = searchInOverflowMenu; 81b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 8208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (savedState != null) { 8315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 8408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 8515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 8615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = request.isSearchMode(); 8708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = request.getQueryString(); 8808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 8908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 90b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mSearchView != null) { 91b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mSearchView.setQuery(mQueryString, false); 921173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 931a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 94b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan update(); 95b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 96bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 97b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void setSearchView(SearchView searchView) { 98b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mSearchView = searchView; 99c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell mSearchView.setOnQueryTextListener(this); 10015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setOnCloseListener(this); 10115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setQuery(mQueryString, false); 1028b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 1038b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1041a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public void setListener(Listener listener) { 1051a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mListener = listener; 10608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 10708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 10815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setContactListFilterController(ContactListFilterController controller) { 109bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController = controller; 110bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController.addListener(this); 11115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } 11215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 1131ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan public boolean isSearchInOverflowMenu() { 1141ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan return mIsSearchInOverflowMenu; 1151ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 1161ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan 11715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public boolean isSearchMode() { 11815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return mSearchMode; 11908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 12008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 12115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setSearchMode(boolean flag) { 12215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov if (mSearchMode != flag) { 12315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = flag; 124bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 125f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan if (mSearchView == null) { 126f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan return; 127f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan } 1280b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov if (mSearchMode) { 1290b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov mSearchView.requestFocus(); 130ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else { 131ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mSearchView.setQuery(null, false); 1320b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov } 13308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 13608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public String getQueryString() { 13708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mQueryString; 13808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 14008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setQueryString(String query) { 14108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = query; 142f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan if (mSearchView != null) { 143f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan mSearchView.setQuery(query, false); 144f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan } 14508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 147bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void update() { 148b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mSearchMode) { 1491ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan // If the search icon was in the overflow menu, then inflate a custom view containing 1501ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan // a search view for the action bar (and hide the tabs). 1511ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan if (mIsSearchInOverflowMenu) { 1521ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan if (mCustomSearchView == null) { 1531ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mCustomSearchView = LayoutInflater.from(mContext).inflate( 1541ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan R.layout.custom_action_bar, null); 1551ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, 1561ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan LayoutParams.WRAP_CONTENT); 1571ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan SearchView searchView = (SearchView) mCustomSearchView. 1581ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan findViewById(R.id.search_view); 1591ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan searchView.setQueryHint(mContext.getString(R.string.hint_findContacts)); 1601ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan setSearchView(searchView); 1611ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 1621ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setDisplayShowCustomEnabled(true); 1631ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setCustomView(mCustomSearchView, mLayoutParams); 1641ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mSearchView.requestFocus(); 1651ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } else { 1661ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setTitle(mSearchLabelText); 1671ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 168b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 169b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mListener != null) { 170b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.START_SEARCH_MODE); 171c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov } 17215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 1731ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setDisplayShowCustomEnabled(false); 174b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 175b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setTitle(null); 176b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mListener != null) { 177b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.STOP_SEARCH_MODE); 178bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 17908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 18208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 183c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextChange(String queryString) { 184b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // TODO: Clean up SearchView code because it keeps setting the SearchView query, 185b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // invoking onQueryChanged, setting up the fragment again, invalidating the options menu, 186b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // storing the SearchView again, and etc... unless we add in the early return statements. 187b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (queryString.equals(mQueryString)) { 188b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return false; 189b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 19008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = queryString; 191ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!mSearchMode) { 192ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!TextUtils.isEmpty(queryString)) { 193ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov setSearchMode(true); 1949806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 195ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else if (mListener != null) { 196b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.CHANGE_SEARCH_QUERY); 1979806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 198ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 1991a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 2001a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 2011a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 2021a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov @Override 203c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextSubmit(String query) { 2041a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 20508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 20608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 20708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 2081a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onClose() { 20915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov setSearchMode(false); 21015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return false; 21108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 21315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void onSaveInstanceState(Bundle outState) { 21415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode); 21515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putString(EXTRA_KEY_QUERY, mQueryString); 21608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 217bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 218fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov public void onRestoreInstanceState(Bundle savedState) { 219fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 220fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 221fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 222fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 223bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 224bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFiltersLoaded() { 225bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 226bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 227bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 228bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 229bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterChanged() { 230bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 231bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 232bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 233bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 234bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterCustomizationRequest() { 235bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 23608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov} 237