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