ActionBarAdapter.java revision 59dc2751d64f60f743b8a9e78186aa5b79dcaf83
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"; 5259dc2751d64f60f743b8a9e78186aa5b79dcaf83Isaac Katzenelson private static final String EXTRA_KEY_SELECTED_TAB = "navBar.selectedTab"; 5308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 5415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private boolean mSearchMode; 5508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private String mQueryString; 5615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 57b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private String mSearchLabelText; 5815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private SearchView mSearchView; 5992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 6008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private final Context mContext; 6108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 6208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private Listener mListener; 63bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov private ContactListFilterController mFilterController; 6408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 65b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private ActionBar mActionBar; 668b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 671ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan private View mCustomSearchView; 681ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan private LayoutParams mLayoutParams; 691ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan private boolean mIsSearchInOverflowMenu; 701ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan 711ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan public ActionBarAdapter(Context context, Listener listener) { 7208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContext = context; 731ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mListener = listener; 74b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mSearchLabelText = mContext.getString(R.string.search_label); 7508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 7608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 771ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar, 781ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan boolean searchInOverflowMenu) { 79b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar = actionBar; 8008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = null; 811ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mIsSearchInOverflowMenu = searchInOverflowMenu; 82b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 8308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (savedState != null) { 8415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 8508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 8615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 8715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = request.isSearchMode(); 8808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = request.getQueryString(); 8908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 9008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 91b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mSearchView != null) { 92b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mSearchView.setQuery(mQueryString, false); 931173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 941a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 95b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan update(); 96b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 97bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 98b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void setSearchView(SearchView searchView) { 99b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mSearchView = searchView; 100c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell mSearchView.setOnQueryTextListener(this); 10115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setOnCloseListener(this); 10215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setQuery(mQueryString, false); 1038b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 1048b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1051a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public void setListener(Listener listener) { 1061a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mListener = listener; 10708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 10808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 10915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setContactListFilterController(ContactListFilterController controller) { 110bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController = controller; 111bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController.addListener(this); 11215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } 11315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 1141ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan public boolean isSearchInOverflowMenu() { 1151ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan return mIsSearchInOverflowMenu; 1161ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 1171ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan 11815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public boolean isSearchMode() { 11915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return mSearchMode; 12008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 12108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 12215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setSearchMode(boolean flag) { 12315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov if (mSearchMode != flag) { 12415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = flag; 125bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 126f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan if (mSearchView == null) { 127f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan return; 128f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan } 1290b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov if (mSearchMode) { 1300b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov mSearchView.requestFocus(); 131ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else { 132ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mSearchView.setQuery(null, false); 1330b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov } 13408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 13708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public String getQueryString() { 13808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mQueryString; 13908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 14108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setQueryString(String query) { 14208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = query; 143f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan if (mSearchView != null) { 144f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan mSearchView.setQuery(query, false); 145f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan } 14608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 148bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void update() { 149b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mSearchMode) { 1501ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan // If the search icon was in the overflow menu, then inflate a custom view containing 1511ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan // a search view for the action bar (and hide the tabs). 1521ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan if (mIsSearchInOverflowMenu) { 1531ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan if (mCustomSearchView == null) { 1541ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mCustomSearchView = LayoutInflater.from(mContext).inflate( 1551ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan R.layout.custom_action_bar, null); 1561ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, 1571ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan LayoutParams.WRAP_CONTENT); 1581ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan SearchView searchView = (SearchView) mCustomSearchView. 1591ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan findViewById(R.id.search_view); 1601ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan searchView.setQueryHint(mContext.getString(R.string.hint_findContacts)); 1611ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan setSearchView(searchView); 1621ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 1631ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setDisplayShowCustomEnabled(true); 1641ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setCustomView(mCustomSearchView, mLayoutParams); 1651ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mSearchView.requestFocus(); 1661ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } else { 1671ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setTitle(mSearchLabelText); 1681ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 169b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 170b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mListener != null) { 171b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.START_SEARCH_MODE); 172c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov } 17315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 1741ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setDisplayShowCustomEnabled(false); 175b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 176b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setTitle(null); 177b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mListener != null) { 178b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.STOP_SEARCH_MODE); 179bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 18008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 18308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 184c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextChange(String queryString) { 185b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // TODO: Clean up SearchView code because it keeps setting the SearchView query, 186b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // invoking onQueryChanged, setting up the fragment again, invalidating the options menu, 187b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // storing the SearchView again, and etc... unless we add in the early return statements. 188b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (queryString.equals(mQueryString)) { 189b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return false; 190b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 19108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = queryString; 192ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!mSearchMode) { 193ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!TextUtils.isEmpty(queryString)) { 194ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov setSearchMode(true); 1959806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 196ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else if (mListener != null) { 197b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.CHANGE_SEARCH_QUERY); 1989806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 199ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 2001a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 2011a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 2021a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 2031a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov @Override 204c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextSubmit(String query) { 2051a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 20608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 20708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 20808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 2091a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onClose() { 21015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov setSearchMode(false); 21115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return false; 21208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 21415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void onSaveInstanceState(Bundle outState) { 21515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode); 21615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putString(EXTRA_KEY_QUERY, mQueryString); 21759dc2751d64f60f743b8a9e78186aa5b79dcaf83Isaac Katzenelson outState.putInt(EXTRA_KEY_SELECTED_TAB, mActionBar.getSelectedNavigationIndex()); 21808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 219bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 220fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov public void onRestoreInstanceState(Bundle savedState) { 221fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 222fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 22359dc2751d64f60f743b8a9e78186aa5b79dcaf83Isaac Katzenelson mActionBar.setSelectedNavigationItem(savedState.getInt(EXTRA_KEY_SELECTED_TAB)); 224fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 225fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 226bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 227bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFiltersLoaded() { 228bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 229bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 230bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 231bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 232bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterChanged() { 233bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 234bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 235bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 236bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 237bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterCustomizationRequest() { 238bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 23908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov} 240