ActionBarAdapter.java revision bee8d3bd37edf44c535c0cc401e8d03f095b8328
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.setEnabled(false);
9615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView.setOnQueryChangeListener(this);
9715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView.setOnCloseListener(this);
9815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchView.setQuery(mQueryString, false);
991a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov
100bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        update();
1011a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    }
10208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
1031a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public void setListener(Listener listener) {
1041a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        mListener = listener;
10508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
10608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
10715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setContactListFilterController(ContactListFilterController controller) {
108bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterController = controller;
109bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterController.setAnchor(mFilterContainer);
110bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        mFilterController.addListener(this);
11115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    }
11215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov
11315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public boolean isSearchMode() {
11415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return mSearchMode;
11508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
11608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
11715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setSearchMode(boolean flag) {
11815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSearchMode != flag) {
11915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchMode = flag;
120bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            update();
1211a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov            if (mListener != null) {
1221a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov                mListener.onAction();
1231a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov            }
12408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
12508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
12608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
12708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    public String getQueryString() {
12808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        return mQueryString;
12908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
13008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
13108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    public void setQueryString(String query) {
13208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        mQueryString = query;
1331a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        mSearchView.setQuery(query, false);
13408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
13508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
136bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void update() {
13715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSearchMode) {
13815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchLabel.setVisibility(View.VISIBLE);
139251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov            mFilterView.setVisibility(View.GONE);
140bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            mFilterIndicator.setVisibility(View.INVISIBLE);
14115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        } else {
14215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            mSearchLabel.setVisibility(View.GONE);
143251e4f7dc45928053133fe15fd456da00b7cbe8cDmitri Plotnikov            mFilterView.setVisibility(View.VISIBLE);
144bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            boolean showIndicator = false;
145bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            if (mFilterController != null && mFilterController.isLoaded()) {
146bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov                mFilterView.setContactListFilter(mFilterController.getFilter());
147bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov                mFilterView.bindView(false);
148bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov                showIndicator = mFilterController.getFilterList().size() > 1;
149bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            }
150bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov            mFilterIndicator.setVisibility(showIndicator ? View.VISIBLE : View.INVISIBLE);
15108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
15208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
15308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
15408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    @Override
1551a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public boolean onQueryTextChanged(String queryString) {
15608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        mQueryString = queryString;
15715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSearchMode = !TextUtils.isEmpty(queryString);
158bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        update();
15908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        if (mListener != null) {
160fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mListener.onAction();
16108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
1621a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        return true;
1631a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    }
1641a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov
1651a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    @Override
1661a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public boolean onSubmitQuery(String query) {
1671a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov        return true;
16808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
16908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
17008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    @Override
1711a59cffd839069ce91a9febb8a136442340ab4c8Dmitri Plotnikov    public boolean onClose() {
17215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        setSearchMode(false);
17315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return false;
17408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
17508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
17615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public Bundle getSavedStateForSearchMode() {
17715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return mSavedStateForSearchMode;
17892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
17992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
18015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setSavedStateForSearchMode(Bundle state) {
18115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSavedStateForSearchMode = state;
1822eb26aacc35a624607187418d61c78258eee8b2cDmitri Plotnikov    }
1832eb26aacc35a624607187418d61c78258eee8b2cDmitri Plotnikov
18415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public Bundle getSavedStateForDefaultMode() {
18515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        return mSavedStateForDefaultMode;
18692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
18792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
18815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void setSavedStateForDefaultMode(Bundle state) {
18915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mSavedStateForDefaultMode = state;
19092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
19192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
19215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    public void onSaveInstanceState(Bundle outState) {
19315ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
19415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        outState.putString(EXTRA_KEY_QUERY, mQueryString);
19515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSavedStateForDefaultMode != null) {
19615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            outState.putParcelable(KEY_MODE_DEFAULT, mSavedStateForDefaultMode);
19792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
19815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        if (mSavedStateForSearchMode != null) {
19915ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov            outState.putParcelable(KEY_MODE_SEARCH, mSavedStateForSearchMode);
20092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
20108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
202bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov
203bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    @Override
204bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void onContactListFiltersLoaded() {
205bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        update();
206bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    }
207bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov
208bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    @Override
209bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void onContactListFilterChanged() {
210bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov        update();
211bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    }
212bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov
213bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    @Override
214bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    public void onContactListFilterCustomizationRequest() {
215bee8d3bd37edf44c535c0cc401e8d03f095b8328Dmitri Plotnikov    }
21608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov}
217