1495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan/* 2495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * Copyright (C) 2011 The Android Open Source Project 3495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * 4495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * Licensed under the Apache License, Version 2.0 (the "License"); 5495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * you may not use this file except in compliance with the License. 6495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * You may obtain a copy of the License at 7495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * 8495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * http://www.apache.org/licenses/LICENSE-2.0 9495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * 10495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * Unless required by applicable law or agreed to in writing, software 11495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * distributed under the License is distributed on an "AS IS" BASIS, 12495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * See the License for the specific language governing permissions and 14495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * limitations under the License. 15495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan */ 16495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 17495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanpackage com.android.contacts.list; 18495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 19495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport com.android.contacts.ContactsActivity; 20495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport com.android.contacts.R; 21495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport com.android.contacts.model.AccountType; 22495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport com.android.contacts.model.AccountTypeManager; 232b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoroimport com.android.contacts.model.AccountWithDataSet; 24b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport com.google.android.collect.Lists; 25495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 26495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.app.ActionBar; 27495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.app.Activity; 28b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.app.LoaderManager.LoaderCallbacks; 29b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.content.AsyncTaskLoader; 30495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.content.Context; 31495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.content.Intent; 32b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.content.Loader; 33495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.graphics.drawable.Drawable; 34495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.os.Bundle; 35b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.util.Log; 36495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.LayoutInflater; 37495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.MenuItem; 38495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.View; 39495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.ViewGroup; 40495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.widget.AdapterView; 41495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.widget.BaseAdapter; 42495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.widget.ListView; 43495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 44495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport java.util.ArrayList; 45495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport java.util.List; 46495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 47495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan/** 48495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * Shows a list of all available accounts, letting the user select under which account to view 49495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan * contacts. 50495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan */ 51495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanpublic class AccountFilterActivity extends ContactsActivity 52495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan implements AdapterView.OnItemClickListener { 53495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 54495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan private static final String TAG = AccountFilterActivity.class.getSimpleName(); 55495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 568f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 0; 578f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa 58495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public static final String KEY_EXTRA_CONTACT_LIST_FILTER = "contactListFilter"; 59495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 60b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static final int FILTER_LOADER_ID = 0; 61b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 62495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan private ListView mListView; 63495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 64495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 65495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan protected void onCreate(Bundle icicle) { 66495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan super.onCreate(icicle); 67495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan setContentView(R.layout.contact_list_filter); 68495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 69495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan mListView = (ListView) findViewById(com.android.internal.R.id.list); 708f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa mListView.setOnItemClickListener(this); 71495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 728f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa ActionBar actionBar = getActionBar(); 73495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (actionBar != null) { 74495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan actionBar.setDisplayHomeAsUpEnabled(true); 75495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 76495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 77b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki getLoaderManager().initLoader(FILTER_LOADER_ID, null, new MyLoaderCallbacks()); 78495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 79495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 80b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static class FilterLoader extends AsyncTaskLoader<List<ContactListFilter>> { 81b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private Context mContext; 82b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 83b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public FilterLoader(Context context) { 84b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki super(context); 85b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki mContext = context; 86b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 87b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 88b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 89b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public List<ContactListFilter> loadInBackground() { 90b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return loadAccountFilters(mContext); 91b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 92b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 93b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 94b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki protected void onStartLoading() { 95b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki forceLoad(); 96b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 97b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 98b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 99b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki protected void onStopLoading() { 100b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki cancelLoad(); 101b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 102b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 103b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 104b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki protected void onReset() { 105b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki onStopLoading(); 106b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 107b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 108b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 109b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static List<ContactListFilter> loadAccountFilters(Context context) { 110b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ArrayList<ContactListFilter> result = Lists.newArrayList(); 111b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ArrayList<ContactListFilter> accountFilters = Lists.newArrayList(); 112b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final AccountTypeManager accountTypes = AccountTypeManager.getInstance(context); 1132b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro List<AccountWithDataSet> accounts = accountTypes.getAccounts(false); 1142b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro for (AccountWithDataSet account : accounts) { 1152b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro AccountType accountType = accountTypes.getAccountType(account.type, account.dataSet); 1163ae114e72617f2faea281d82f7f4ee026d8c5674Makoto Onuki if (accountType.isExtension() && !account.hasData(context)) { 117b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki // Hide extensions with no raw_contacts. 118b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki continue; 119b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 120b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null; 1210647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa accountFilters.add(ContactListFilter.createAccountFilter( 1220647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa account.type, account.name, account.dataSet, icon)); 123495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 124495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 125b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki // Always show "All", even when there's no accounts. (We may have local contacts) 126b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki result.add(ContactListFilter.createFilterWithType( 127b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS)); 128b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 129b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final int count = accountFilters.size(); 130495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (count >= 1) { 13152760a1350ff6621b1d02560d59e8995958f1fd4Daisuke Miyakawa // If we only have one account, don't show it as "account", instead show it as "all" 132495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (count > 1) { 133b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki result.addAll(accountFilters); 134495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 135b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki result.add(ContactListFilter.createFilterWithType( 13652760a1350ff6621b1d02560d59e8995958f1fd4Daisuke Miyakawa ContactListFilter.FILTER_TYPE_CUSTOM)); 137495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 138b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return result; 139b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 140b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 141b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private class MyLoaderCallbacks implements LoaderCallbacks<List<ContactListFilter>> { 142b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 143b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public Loader<List<ContactListFilter>> onCreateLoader(int id, Bundle args) { 144b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return new FilterLoader(AccountFilterActivity.this); 145b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 146495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 147b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 148b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public void onLoadFinished( 149b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki Loader<List<ContactListFilter>> loader, List<ContactListFilter> data) { 150b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki if (data == null) { // Just in case... 151b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki Log.e(TAG, "Failed to load filters"); 152b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return; 153b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 154b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki mListView.setAdapter(new FilterListAdapter(AccountFilterActivity.this, data)); 155b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 156b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 157b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 158b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public void onLoaderReset(Loader<List<ContactListFilter>> loader) { 159b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 160495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 161495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 1628f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa @Override 163495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 164b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ContactListFilter filter = (ContactListFilter) view.getTag(); 165b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki if (filter == null) return; // Just in case 1668f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) { 1678f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa final Intent intent = new Intent(this, 1688f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa CustomContactListFilterActivity.class); 1698f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER); 1708f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } else { 1718f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa final Intent intent = new Intent(); 1728f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa intent.putExtra(KEY_EXTRA_CONTACT_LIST_FILTER, filter); 1738f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa setResult(Activity.RESULT_OK, intent); 1748f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa finish(); 1758f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 176495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 177495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 1788f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa @Override 1798f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa protected void onActivityResult(int requestCode, int resultCode, Intent data) { 1808f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa if (resultCode != Activity.RESULT_OK) { 1818f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa return; 1828f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 1838f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa 1848f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa switch (requestCode) { 1858f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa case SUBACTIVITY_CUSTOMIZE_FILTER: { 1868f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa final Intent intent = new Intent(); 1878f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa ContactListFilter filter = ContactListFilter.createFilterWithType( 1888f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa ContactListFilter.FILTER_TYPE_CUSTOM); 1898f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa intent.putExtra(KEY_EXTRA_CONTACT_LIST_FILTER, filter); 1908f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa setResult(Activity.RESULT_OK, intent); 1918f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa finish(); 1928f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa break; 1938f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 1948f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 195495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 196495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 197b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static class FilterListAdapter extends BaseAdapter { 198b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private final List<ContactListFilter> mFilters; 199b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private final LayoutInflater mLayoutInflater; 200495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 201b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public FilterListAdapter(Context context, List<ContactListFilter> filters) { 202495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan mLayoutInflater = (LayoutInflater) context.getSystemService 203495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan (Context.LAYOUT_INFLATER_SERVICE); 204b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki mFilters = filters; 205495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 206495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 207495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 208495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public int getCount() { 209495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return mFilters.size(); 210495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 211495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 212495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 213495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public long getItemId(int position) { 214495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return position; 215495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 216495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 217495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 218495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public ContactListFilter getItem(int position) { 219495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return mFilters.get(position); 220495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 221495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 222495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public View getView(int position, View convertView, ViewGroup parent) { 223b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ContactListFilterView view; 224495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (convertView != null) { 225495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view = (ContactListFilterView) convertView; 226495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } else { 227495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view = (ContactListFilterView) mLayoutInflater.inflate( 2288f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa R.layout.contact_list_filter_item, parent, false); 229495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 230495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view.setSingleAccount(mFilters.size() == 1); 231b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ContactListFilter filter = mFilters.get(position); 232495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view.setContactListFilter(filter); 233495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view.bindView(true); 234b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki view.setTag(filter); 235495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return view; 236495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 237495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 238495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 239495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 240495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public boolean onOptionsItemSelected(MenuItem item) { 241495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan switch (item.getItemId()) { 242495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan case android.R.id.home: 2438f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa // We have two logical "up" Activities: People and Phone. 2448f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa // Instead of having one static "up" direction, behave like back as an 2458f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa // exceptional case. 2468f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa onBackPressed(); 247495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return true; 248495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan default: 249495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan break; 250495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 251495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return super.onOptionsItemSelected(item); 252495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 253495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan} 254