ActionBarAdapter.java revision 0b51a8d4539cc516dc2c02948335347d1df8769b
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;
2608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.content.Context;
2708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.os.Bundle;
2815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport android.text.TextUtils;
2915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport android.view.LayoutInflater;
3008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.view.View;
311a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView;
321a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView.OnCloseListener;
331a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikovimport android.widget.SearchView.OnQueryChangeListener;
3415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport android.widget.TextView;
3592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
3608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov/**
37fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Adapter for the action bar at the top of the Contacts activity.
3808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov */
39bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikovpublic class ActionBarAdapter
40bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        implements OnQueryChangeListener, OnCloseListener, ContactListFilterListener {
4108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
4208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    public interface Listener {
43fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov        void onAction();
4408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
4508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
4615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private static final String EXTRA_KEY_SEARCH_MODE = "navBar.searchMode";
4708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    private static final String EXTRA_KEY_QUERY = "navBar.query";
4808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
4915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private static final String KEY_MODE_DEFAULT = "mode_default";
5092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    private static final String KEY_MODE_SEARCH = "mode_search";
5192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
5215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private boolean mSearchMode;
5308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    private String mQueryString;
5415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private Bundle mSavedStateForSearchMode;
5515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private Bundle mSavedStateForDefaultMode;
5615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov
5715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private View mNavigationBar;
5815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private TextView mSearchLabel;
5915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private SearchView mSearchView;
6092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
6108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    private final Context mContext;
6208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
6308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    private Listener mListener;
64251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov    private ContactListFilterView mFilterView;
65bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    private View mFilterIndicator;
66bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    private ContactListFilterController mFilterController;
67bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    private View mFilterContainer;
6808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
69fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    public ActionBarAdapter(Context context) {
7008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        mContext = context;
7108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
7208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
731a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar) {
7408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        mQueryString = null;
7508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        if (savedState != null) {
7615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
7708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov            mQueryString = savedState.getString(EXTRA_KEY_QUERY);
7815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSavedStateForDefaultMode = savedState.getParcelable(KEY_MODE_DEFAULT);
7915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSavedStateForSearchMode = savedState.getParcelable(KEY_MODE_SEARCH);
8015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        } else {
8115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchMode = request.isSearchMode();
8208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov            mQueryString = request.getQueryString();
8308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
8408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
8515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mNavigationBar = LayoutInflater.from(mContext).inflate(R.layout.navigation_bar, null);
8615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        actionBar.setCustomNavigationMode(mNavigationBar);
871a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov
88bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterContainer = mNavigationBar.findViewById(R.id.filter_container);
89251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov        mFilterView = (ContactListFilterView) mNavigationBar.findViewById(R.id.filter_view);
9015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchLabel = (TextView) mNavigationBar.findViewById(R.id.search_label);
91bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterIndicator = mNavigationBar.findViewById(R.id.filter_indicator);
9215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView = (SearchView) mNavigationBar.findViewById(R.id.search_view);
93bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov
9415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView.setIconifiedByDefault(false);
9515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView.setOnQueryChangeListener(this);
9615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView.setOnCloseListener(this);
9715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView.setQuery(mQueryString, false);
981a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov
99bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        update();
1001a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    }
10108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
1021a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public void setListener(Listener listener) {
1031a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        mListener = listener;
10408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
10508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
10615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setContactListFilterController(ContactListFilterController controller) {
107bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterController = controller;
108bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterController.setAnchor(mFilterContainer);
109bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterController.addListener(this);
11015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    }
11115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov
11215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public boolean isSearchMode() {
11315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return mSearchMode;
11408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
11508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
11615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setSearchMode(boolean flag) {
11715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSearchMode != flag) {
11815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchMode = flag;
119bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            update();
1200b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov            if (mSearchMode) {
1210b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov                mSearchView.requestFocus();
1220b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov            }
1231a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov            if (mListener != null) {
1241a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov                mListener.onAction();
1251a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov            }
12608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
12708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
12808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
12908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    public String getQueryString() {
13008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        return mQueryString;
13108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
13208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
13308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    public void setQueryString(String query) {
13408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        mQueryString = query;
1351a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        mSearchView.setQuery(query, false);
13608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
13708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
138bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void update() {
13915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSearchMode) {
14015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchLabel.setVisibility(View.VISIBLE);
141251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov            mFilterView.setVisibility(View.GONE);
142bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            mFilterIndicator.setVisibility(View.INVISIBLE);
143c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov            if (mFilterController != null) {
144c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov                mFilterController.setEnabled(false);
145c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov            }
14615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        } else {
14715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchLabel.setVisibility(View.GONE);
148251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov            mFilterView.setVisibility(View.VISIBLE);
149bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            boolean showIndicator = false;
150c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov            if (mFilterController != null){
151c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov                mFilterController.setEnabled(true);
152c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov                if (mFilterController.isLoaded()) {
153c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov                    mFilterView.setContactListFilter(mFilterController.getFilter());
154c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov                    mFilterView.bindView(false);
155c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov                    showIndicator = mFilterController.getFilterList().size() > 1;
156c9916d303cc48b4a4ff94ef9c56d7ca5da72c4deDmitri Plotnikov                }
157bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            }
158bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            mFilterIndicator.setVisibility(showIndicator ? View.VISIBLE : View.INVISIBLE);
15908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
16008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
16108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
16208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    @Override
1631a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public boolean onQueryTextChanged(String queryString) {
16408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        mQueryString = queryString;
1650b51a8d4539cc516dc2c02948335347d1df8769bDmitri Plotnikov        setSearchMode(!TextUtils.isEmpty(queryString));
1661a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        return true;
1671a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    }
1681a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov
1691a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    @Override
1701a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public boolean onSubmitQuery(String query) {
1711a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        return true;
17208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
17308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
17408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    @Override
1751a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public boolean onClose() {
17615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        setSearchMode(false);
17715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return false;
17808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
17908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
18015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public Bundle getSavedStateForSearchMode() {
18115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return mSavedStateForSearchMode;
18292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
18392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
18415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setSavedStateForSearchMode(Bundle state) {
18515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSavedStateForSearchMode = state;
1862eb26aacc35a624607187418d61c78258eee8b2cDmitri Plotnikov    }
1872eb26aacc35a624607187418d61c78258eee8b2cDmitri Plotnikov
18815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public Bundle getSavedStateForDefaultMode() {
18915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return mSavedStateForDefaultMode;
19092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
19192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
19215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setSavedStateForDefaultMode(Bundle state) {
19315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSavedStateForDefaultMode = state;
19492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
19592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
19615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void onSaveInstanceState(Bundle outState) {
19715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
19815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        outState.putString(EXTRA_KEY_QUERY, mQueryString);
19915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSavedStateForDefaultMode != null) {
20015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            outState.putParcelable(KEY_MODE_DEFAULT, mSavedStateForDefaultMode);
20192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
20215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSavedStateForSearchMode != null) {
20315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            outState.putParcelable(KEY_MODE_SEARCH, mSavedStateForSearchMode);
20492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
20508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
206bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov
207bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    @Override
208bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void onContactListFiltersLoaded() {
209bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        update();
210bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    }
211bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov
212bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    @Override
213bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void onContactListFilterChanged() {
214bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        update();
215bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    }
216bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov
217bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    @Override
218bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void onContactListFilterCustomizationRequest() {
219bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    }
22008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov}
221