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