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 android.app.ActionBar; 20495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.app.Activity; 21b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.app.LoaderManager.LoaderCallbacks; 22b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.content.AsyncTaskLoader; 23495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.content.Context; 24495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.content.Intent; 25b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.content.Loader; 26495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.graphics.drawable.Drawable; 27495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.os.Bundle; 28b5e4419f4ba06d630331669a08613936889f34dfMakoto Onukiimport android.util.Log; 29495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.LayoutInflater; 30495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.MenuItem; 31495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.View; 32495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.view.ViewGroup; 33495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.widget.AdapterView; 34495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.widget.BaseAdapter; 35495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuanimport android.widget.ListView; 36495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 37e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.ContactsActivity; 38e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 39e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.model.AccountTypeManager; 40851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.model.account.AccountType; 41851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.model.account.AccountWithDataSet; 42e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.google.common.collect.Lists; 43e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 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"; 59b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus public static final String KEY_EXTRA_CURRENT_FILTER = "currentFilter"; 60495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 61b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static final int FILTER_LOADER_ID = 0; 62b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 63495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan private ListView mListView; 64495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 65b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus private ContactListFilter mCurrentFilter; 66b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus 67495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 68495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan protected void onCreate(Bundle icicle) { 69495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan super.onCreate(icicle); 70495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan setContentView(R.layout.contact_list_filter); 71495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 728c5dfdadcad391647226fa1615d1d7ef679d2493Chiao Cheng mListView = (ListView) findViewById(android.R.id.list); 738f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa mListView.setOnItemClickListener(this); 74495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 758f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa ActionBar actionBar = getActionBar(); 76495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (actionBar != null) { 77495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan actionBar.setDisplayHomeAsUpEnabled(true); 78495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 79495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 80b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus mCurrentFilter = getIntent().getParcelableExtra(KEY_EXTRA_CURRENT_FILTER); 81b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus 82b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki getLoaderManager().initLoader(FILTER_LOADER_ID, null, new MyLoaderCallbacks()); 83495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 84495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 85b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static class FilterLoader extends AsyncTaskLoader<List<ContactListFilter>> { 86b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private Context mContext; 87b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 88b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public FilterLoader(Context context) { 89b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki super(context); 90b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki mContext = context; 91b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 92b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 93b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 94b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public List<ContactListFilter> loadInBackground() { 95b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return loadAccountFilters(mContext); 96b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 97b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 98b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 99b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki protected void onStartLoading() { 100b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki forceLoad(); 101b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 102b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 103b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 104b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki protected void onStopLoading() { 105b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki cancelLoad(); 106b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 107b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 108b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 109b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki protected void onReset() { 110b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki onStopLoading(); 111b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 112b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 113b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 114b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static List<ContactListFilter> loadAccountFilters(Context context) { 115b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ArrayList<ContactListFilter> result = Lists.newArrayList(); 116b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ArrayList<ContactListFilter> accountFilters = Lists.newArrayList(); 117b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final AccountTypeManager accountTypes = AccountTypeManager.getInstance(context); 1182b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro List<AccountWithDataSet> accounts = accountTypes.getAccounts(false); 1192b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro for (AccountWithDataSet account : accounts) { 1202b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro AccountType accountType = accountTypes.getAccountType(account.type, account.dataSet); 1213ae114e72617f2faea281d82f7f4ee026d8c5674Makoto Onuki if (accountType.isExtension() && !account.hasData(context)) { 122b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki // Hide extensions with no raw_contacts. 123b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki continue; 124b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 125b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null; 1260647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa accountFilters.add(ContactListFilter.createAccountFilter( 1270647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa account.type, account.name, account.dataSet, icon)); 128495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 129495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 130b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki // Always show "All", even when there's no accounts. (We may have local contacts) 131b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki result.add(ContactListFilter.createFilterWithType( 132b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS)); 133b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 134b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final int count = accountFilters.size(); 135495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (count >= 1) { 13652760a1350ff6621b1d02560d59e8995958f1fd4Daisuke Miyakawa // If we only have one account, don't show it as "account", instead show it as "all" 137495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (count > 1) { 138b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki result.addAll(accountFilters); 139495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 140b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki result.add(ContactListFilter.createFilterWithType( 14152760a1350ff6621b1d02560d59e8995958f1fd4Daisuke Miyakawa ContactListFilter.FILTER_TYPE_CUSTOM)); 142495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 143b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return result; 144b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 145b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 146b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private class MyLoaderCallbacks implements LoaderCallbacks<List<ContactListFilter>> { 147b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 148b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public Loader<List<ContactListFilter>> onCreateLoader(int id, Bundle args) { 149b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return new FilterLoader(AccountFilterActivity.this); 150b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 151495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 152b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 153b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public void onLoadFinished( 154b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki Loader<List<ContactListFilter>> loader, List<ContactListFilter> data) { 155b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki if (data == null) { // Just in case... 156b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki Log.e(TAG, "Failed to load filters"); 157b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki return; 158b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 159b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus mListView.setAdapter( 160b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus new FilterListAdapter(AccountFilterActivity.this, data, mCurrentFilter)); 161b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 162b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki 163b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki @Override 164b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki public void onLoaderReset(Loader<List<ContactListFilter>> loader) { 165b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki } 166495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 167495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 1688f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa @Override 169495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 170b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ContactListFilter filter = (ContactListFilter) view.getTag(); 171b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki if (filter == null) return; // Just in case 1728f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) { 1738f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa final Intent intent = new Intent(this, 1748f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa CustomContactListFilterActivity.class); 1758f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER); 1768f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } else { 1778f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa final Intent intent = new Intent(); 1788f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa intent.putExtra(KEY_EXTRA_CONTACT_LIST_FILTER, filter); 1798f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa setResult(Activity.RESULT_OK, intent); 1808f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa finish(); 1818f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 182495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 183495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 1848f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa @Override 1858f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa protected void onActivityResult(int requestCode, int resultCode, Intent data) { 1868f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa if (resultCode != Activity.RESULT_OK) { 1878f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa return; 1888f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 1898f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa 1908f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa switch (requestCode) { 1918f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa case SUBACTIVITY_CUSTOMIZE_FILTER: { 1928f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa final Intent intent = new Intent(); 1938f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa ContactListFilter filter = ContactListFilter.createFilterWithType( 1948f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa ContactListFilter.FILTER_TYPE_CUSTOM); 1958f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa intent.putExtra(KEY_EXTRA_CONTACT_LIST_FILTER, filter); 1968f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa setResult(Activity.RESULT_OK, intent); 1978f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa finish(); 1988f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa break; 1998f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 2008f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa } 201495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 202495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 203b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private static class FilterListAdapter extends BaseAdapter { 204b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private final List<ContactListFilter> mFilters; 205b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki private final LayoutInflater mLayoutInflater; 20668c161e0a5b1722aaef62fa251015042e2193aa7Josh Gargus private final AccountTypeManager mAccountTypes; 207b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus private final ContactListFilter mCurrentFilter; 208495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 209b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus public FilterListAdapter( 210b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus Context context, List<ContactListFilter> filters, ContactListFilter current) { 211495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan mLayoutInflater = (LayoutInflater) context.getSystemService 212495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan (Context.LAYOUT_INFLATER_SERVICE); 213b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki mFilters = filters; 214b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus mCurrentFilter = current; 21568c161e0a5b1722aaef62fa251015042e2193aa7Josh Gargus mAccountTypes = AccountTypeManager.getInstance(context); 216495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 217495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 218495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 219495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public int getCount() { 220495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return mFilters.size(); 221495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 222495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 223495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 224495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public long getItemId(int position) { 225495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return position; 226495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 227495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 228495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 229495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public ContactListFilter getItem(int position) { 230495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return mFilters.get(position); 231495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 232495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 233495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public View getView(int position, View convertView, ViewGroup parent) { 234b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ContactListFilterView view; 235495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan if (convertView != null) { 236495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view = (ContactListFilterView) convertView; 237495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } else { 238495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view = (ContactListFilterView) mLayoutInflater.inflate( 2398f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa R.layout.contact_list_filter_item, parent, false); 240495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 241495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view.setSingleAccount(mFilters.size() == 1); 242b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki final ContactListFilter filter = mFilters.get(position); 243495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan view.setContactListFilter(filter); 24468c161e0a5b1722aaef62fa251015042e2193aa7Josh Gargus view.bindView(mAccountTypes); 245b5e4419f4ba06d630331669a08613936889f34dfMakoto Onuki view.setTag(filter); 246b6553457d0c3e84eefa0a853090b680090a7b2f9Josh Gargus view.setActivated(filter.equals(mCurrentFilter)); 247495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return view; 248495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 249495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 250495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan 251495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan @Override 252495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan public boolean onOptionsItemSelected(MenuItem item) { 253495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan switch (item.getItemId()) { 254495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan case android.R.id.home: 2558f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa // We have two logical "up" Activities: People and Phone. 2568f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa // Instead of having one static "up" direction, behave like back as an 2578f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa // exceptional case. 2588f59c2b18b73df6af3c808802620839f0a6a61d4Daisuke Miyakawa onBackPressed(); 259495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return true; 260495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan default: 261495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan break; 262495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 263495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan return super.onOptionsItemSelected(item); 264495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan } 265495db43f0a08bd71ba28a42f89b80d38af15afecKatherine Kuan} 266