ActionBarAdapter.java revision 4ba903cdf132a6be2e5efa33187b18ca8446e503
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; 614ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki private final boolean mAlwaysShowSearchView; 6208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 6308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private Listener mListener; 64bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov private ContactListFilterController mFilterController; 6508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 66b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private ActionBar mActionBar; 678b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 681ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan 691ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan public ActionBarAdapter(Context context, Listener listener) { 7008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContext = context; 711ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mListener = listener; 72b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mSearchLabelText = mContext.getString(R.string.search_label); 734ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mAlwaysShowSearchView = mContext.getResources().getBoolean(R.bool.always_show_search_view); 7408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 7508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 764ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar) { 77b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar = actionBar; 7808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = null; 79b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 8008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (savedState != null) { 8115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 8208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 8315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 8415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = request.isSearchMode(); 8508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = request.getQueryString(); 8608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 8708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 884ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki // Set up search view. 894ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki View customSearchView = LayoutInflater.from(mContext).inflate(R.layout.custom_action_bar, 904ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki null); 914ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki int searchViewWidth = mContext.getResources().getDimensionPixelSize( 924ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki R.dimen.search_view_width); 934ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki if (searchViewWidth == 0) { 944ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki searchViewWidth = LayoutParams.MATCH_PARENT; 951173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 964ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki LayoutParams layoutParams = new LayoutParams(searchViewWidth, LayoutParams.WRAP_CONTENT); 974ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mSearchView = (SearchView) customSearchView.findViewById(R.id.search_view); 984ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mSearchView.setQueryHint(mContext.getString(R.string.hint_findContacts)); 99c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell mSearchView.setOnQueryTextListener(this); 10015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setOnCloseListener(this); 10115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchView.setQuery(mQueryString, false); 1024ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mActionBar.setCustomView(customSearchView, layoutParams); 1034ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki 1044ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki update(); 1058b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 1068b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1071a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public void setListener(Listener listener) { 1081a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov mListener = listener; 10908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 11008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 11115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setContactListFilterController(ContactListFilterController controller) { 112bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController = controller; 113bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov mFilterController.addListener(this); 11415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } 11515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 11615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public boolean isSearchMode() { 11715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return mSearchMode; 11808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 11908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 12015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void setSearchMode(boolean flag) { 12115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov if (mSearchMode != flag) { 12215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mSearchMode = flag; 123bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 124f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan if (mSearchView == null) { 125f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan return; 126f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan } 1270b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov if (mSearchMode) { 1284ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki setFocusOnSearchView(); 129ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else { 130ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mSearchView.setQuery(null, false); 1310b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov } 13208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 13508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public String getQueryString() { 13608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mQueryString; 13708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 13908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setQueryString(String query) { 14008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = query; 141f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan if (mSearchView != null) { 142f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan mSearchView.setQuery(query, false); 143f3f933a798c9cfffb1c1c0cc770187b5b0b763ebKatherine Kuan } 14408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 146bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void update() { 147b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mSearchMode) { 1484ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mActionBar.setDisplayShowCustomEnabled(true); 1494ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki if (mAlwaysShowSearchView) { 1504ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki // Tablet -- change the app title for the search mode 1511ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBar.setTitle(mSearchLabelText); 1524ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki } else { 1534ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki // Phone -- search view gets focus 1544ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki setFocusOnSearchView(); 1551ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 156b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 157b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mListener != null) { 158b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.START_SEARCH_MODE); 159c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov } 16015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov } else { 1614ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mActionBar.setDisplayShowCustomEnabled(mAlwaysShowSearchView); 162b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 163b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBar.setTitle(null); 164b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mListener != null) { 165b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.STOP_SEARCH_MODE); 166bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 16708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 16808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 16908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 17008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 171c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextChange(String queryString) { 172b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // TODO: Clean up SearchView code because it keeps setting the SearchView query, 173b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // invoking onQueryChanged, setting up the fragment again, invalidating the options menu, 174b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // storing the SearchView again, and etc... unless we add in the early return statements. 175b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (queryString.equals(mQueryString)) { 176b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return false; 177b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 17808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = queryString; 179ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!mSearchMode) { 180ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (!TextUtils.isEmpty(queryString)) { 181ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov setSearchMode(true); 1829806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 183ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else if (mListener != null) { 184b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListener.onAction(Action.CHANGE_SEARCH_QUERY); 1859806ed099226a19e92c29d9efa791cd187fd2a53Dmitri Plotnikov } 186ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 1871a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 1881a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov } 1891a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov 1901a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov @Override 191c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextSubmit(String query) { 1921a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov return true; 19308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 19408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 19508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 1961a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov public boolean onClose() { 19715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov setSearchMode(false); 19815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov return false; 19908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 20008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 20115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov public void onSaveInstanceState(Bundle outState) { 20215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode); 20315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putString(EXTRA_KEY_QUERY, mQueryString); 20459dc2751d64f60f743b8a9e78186aa5b79dcaf83Isaac Katzenelson outState.putInt(EXTRA_KEY_SELECTED_TAB, mActionBar.getSelectedNavigationIndex()); 20508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 206bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 207fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov public void onRestoreInstanceState(Bundle savedState) { 208fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE); 209fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 21059dc2751d64f60f743b8a9e78186aa5b79dcaf83Isaac Katzenelson mActionBar.setSelectedNavigationItem(savedState.getInt(EXTRA_KEY_SELECTED_TAB)); 211fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 212fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 213bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 214bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFiltersLoaded() { 215bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 216bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 217bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 218bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 219bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterChanged() { 220bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov update(); 221bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 222bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov 223bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov @Override 224bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov public void onContactListFilterCustomizationRequest() { 225bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov } 2264ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki 2274ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki private void setFocusOnSearchView() { 2284ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mSearchView.requestFocus(); 2294ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki mSearchView.setIconified(false); // Workaround for the "IME not popping up" issue. 2304ba903cdf132a6be2e5efa33187b18ca8446e503Makoto Onuki } 23108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov} 232