ActionBarAdapter.java revision fcfdffb439ccf1ddef971109b82e782c47161572
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; 2008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactsRequest; 2108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.widget.SearchEditText; 2208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.widget.SearchEditText.OnFilterTextListener; 2308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 2408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.content.Context; 2508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.os.Bundle; 2608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.view.LayoutInflater; 2708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.view.View; 2808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.view.View.OnClickListener; 2908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.view.inputmethod.InputMethodManager; 3008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.widget.ImageView; 3108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport android.widget.ToggleButton; 3208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 3392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikovimport java.util.HashMap; 3492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 3508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov/** 36fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Adapter for the action bar at the top of the Contacts activity. 3708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov */ 38fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikovpublic class ActionBarAdapter implements OnFilterTextListener, OnClickListener { 3908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 4008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public interface Listener { 41fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov void onAction(); 4208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 4308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 4408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private static final String EXTRA_KEY_DEFAULT_MODE = "navBar.defaultMode"; 4508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private static final String EXTRA_KEY_MODE = "navBar.mode"; 4608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private static final String EXTRA_KEY_QUERY = "navBar.query"; 4708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 4892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private static final String KEY_MODE_CONTACTS = "mode_contacts"; 4992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private static final String KEY_MODE_FAVORITES = "mode_favorites"; 5092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private static final String KEY_MODE_SEARCH = "mode_search"; 5192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 52fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private int mMode = ContactBrowserMode.MODE_CONTACTS; 53fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private int mDefaultMode = ContactBrowserMode.MODE_CONTACTS; 5408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private String mQueryString; 5592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private HashMap<Integer, Bundle> mSavedStateByMode = new HashMap<Integer, Bundle>(); 5692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 5792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 5808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private SearchEditText mSearchEditText; 5908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private View mNavigationBar; 6008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 6108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private final Context mContext; 6208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 6308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private Listener mListener; 6408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 6508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private ToggleButton mContactsButton; 6608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private ToggleButton mFavoritesButton; 6708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private ToggleButton mSearchButton; 6808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private ImageView mCancelSearchButton; 6908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 70fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov public ActionBarAdapter(Context context) { 7108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContext = context; 7208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 7308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 7408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void onCreate(Bundle savedState, ContactsRequest request) { 7508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mDefaultMode = -1; 7608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mMode = -1; 7708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = null; 7808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (savedState != null) { 7908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mDefaultMode = savedState.getInt(EXTRA_KEY_DEFAULT_MODE, -1); 8008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mMode = savedState.getInt(EXTRA_KEY_MODE, -1); 8108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = savedState.getString(EXTRA_KEY_QUERY); 82fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov restoreSavedState(savedState, ContactBrowserMode.MODE_CONTACTS, KEY_MODE_CONTACTS); 83fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov restoreSavedState(savedState, ContactBrowserMode.MODE_FAVORITES, KEY_MODE_FAVORITES); 84fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov restoreSavedState(savedState, ContactBrowserMode.MODE_SEARCH, KEY_MODE_SEARCH); 8508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 8608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 8708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov int actionCode = request.getActionCode(); 8808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (mDefaultMode == -1) { 8908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mDefaultMode = actionCode == ContactsRequest.ACTION_DEFAULT 90fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov ? ContactBrowserMode.MODE_CONTACTS 91fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov : ContactBrowserMode.MODE_FAVORITES; 9208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 9308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (mMode == -1) { 94fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mMode = request.isSearchMode() ? ContactBrowserMode.MODE_SEARCH : mDefaultMode; 9508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 9608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (mQueryString == null) { 9708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = request.getQueryString(); 9808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 9908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 10008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 10108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setListener(Listener listener) { 10208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mListener = listener; 10308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 10408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 10508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public View onCreateView(LayoutInflater inflater) { 10608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mNavigationBar = inflater.inflate(R.layout.navigation_bar, null); 10708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText = (SearchEditText)mNavigationBar.findViewById(R.id.search_src_text); 10808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.setMaginfyingGlassEnabled(false); 10908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.setOnFilterTextListener(this); 11008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.setText(mQueryString); 11108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContactsButton = (ToggleButton)mNavigationBar.findViewById(R.id.nav_contacts); 11208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContactsButton.setOnClickListener(this); 11308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mFavoritesButton = (ToggleButton)mNavigationBar.findViewById(R.id.nav_favorites); 11408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mFavoritesButton.setOnClickListener(this); 11508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchButton = (ToggleButton)mNavigationBar.findViewById(R.id.nav_search); 11608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchButton.setOnClickListener(this); 11708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mCancelSearchButton = (ImageView)mNavigationBar.findViewById(R.id.nav_cancel_search); 11808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mCancelSearchButton.setOnClickListener(this); 11908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov update(); 12008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 12108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mNavigationBar; 12208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 12308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 12408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public int getMode() { 12508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mMode; 12608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 12708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 12808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setMode(int mode) { 12908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mMode = mode; 13008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov update(); 13108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (mListener != null) { 132fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mListener.onAction(); 13308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 13608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public int getDefaultMode() { 13708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mDefaultMode; 13808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 13908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 14008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setDefaultMode(int defaultMode) { 14108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mDefaultMode = defaultMode; 14208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 14408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public String getQueryString() { 14508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return mQueryString; 14608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 14708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 14808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void setQueryString(String query) { 14908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = query; 15008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.setText(query); 15108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 15208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 15308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void update() { 15408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov switch(mMode) { 155fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov case ContactBrowserMode.MODE_CONTACTS: 15608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContactsButton.setChecked(true); 15708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mFavoritesButton.setChecked(false); 15808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchButton.setChecked(false); 15908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchButton.setVisibility(View.VISIBLE); 16008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.setVisibility(View.GONE); 16108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mCancelSearchButton.setVisibility(View.GONE); 16208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov break; 163fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov case ContactBrowserMode.MODE_FAVORITES: 16408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContactsButton.setChecked(false); 16508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mFavoritesButton.setChecked(true); 16608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchButton.setChecked(false); 16708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchButton.setVisibility(View.VISIBLE); 16808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.setVisibility(View.GONE); 16908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mCancelSearchButton.setVisibility(View.GONE); 17008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov break; 171fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov case ContactBrowserMode.MODE_SEARCH: 17208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mContactsButton.setChecked(false); 17308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mFavoritesButton.setChecked(false); 17408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchButton.setVisibility(View.GONE); 17508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.setVisibility(View.VISIBLE); 17608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mSearchEditText.requestFocus(); 17708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov InputMethodManager inputMethodManager = 17808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE); 17908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov inputMethodManager.showSoftInput(mSearchEditText, 0); 18008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mCancelSearchButton.setVisibility(View.VISIBLE); 18108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov break; 18208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 18508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void toggleSearchMode() { 186fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov setMode(mMode == ContactBrowserMode.MODE_SEARCH 187fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov ? mDefaultMode 188fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov : ContactBrowserMode.MODE_SEARCH); 18908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 19008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 19108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 19208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void onClick(View view) { 19308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (view == mSearchButton) { 194fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov setMode(ContactBrowserMode.MODE_SEARCH); 19508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } else if (view == mContactsButton) { 196fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov setMode(ContactBrowserMode.MODE_CONTACTS); 197fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov setDefaultMode(ContactBrowserMode.MODE_CONTACTS); 19808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } else if (view == mFavoritesButton) { 199fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov setMode(ContactBrowserMode.MODE_FAVORITES); 200fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov setDefaultMode(ContactBrowserMode.MODE_FAVORITES); 20108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } else { // mCancelSearchButton 20208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov setMode(mDefaultMode); 20308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 20408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 20508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 20608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 20708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void onFilterChange(String queryString) { 20808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mQueryString = queryString; 20908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov if (mListener != null) { 210fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mListener.onAction(); 21108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 21408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 21508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void onCancelSearch() { 21608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov setMode(mDefaultMode); 21708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 21992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov public void saveStateForMode(int mode, Bundle state) { 22092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mSavedStateByMode.put(mode, state); 22192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 22292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 22392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov public Bundle getSavedStateForMode(int mode) { 22492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov return mSavedStateByMode.get(mode); 22592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 22692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 22708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov public void onSaveInstanceState(Bundle outState) { 22808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov outState.putInt(EXTRA_KEY_DEFAULT_MODE, mDefaultMode); 22908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov outState.putInt(EXTRA_KEY_MODE, mMode); 23008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov outState.putString(EXTRA_KEY_QUERY, mQueryString); 231fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov saveInstanceState(outState, ContactBrowserMode.MODE_CONTACTS, KEY_MODE_CONTACTS); 232fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov saveInstanceState(outState, ContactBrowserMode.MODE_FAVORITES, KEY_MODE_FAVORITES); 233fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov saveInstanceState(outState, ContactBrowserMode.MODE_SEARCH, KEY_MODE_SEARCH); 23492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 23592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 23692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private void saveInstanceState(Bundle outState, int mode, String key) { 23792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov Bundle state = mSavedStateByMode.get(mode); 23892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov if (state != null) { 23992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov outState.putParcelable(key, state); 24092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 24192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 24292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 24392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private void restoreSavedState(Bundle savedState, int mode, String key) { 24492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov Bundle bundle = savedState.getParcelable(key); 24592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov if (bundle == null) { 24692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mSavedStateByMode.remove(mode); 24792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } else { 24892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mSavedStateByMode.put(mode, bundle); 24992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 25008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 25108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov} 252