AccountFilterActivity.java revision b7ae952816e330e4e1f7e148df1b6dbb52f28f5a
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.contacts.list; 18 19import com.android.contacts.ContactsActivity; 20import com.android.contacts.ContactsSearchManager; 21import com.android.contacts.R; 22import com.android.contacts.activities.PeopleActivity; 23import com.android.contacts.model.AccountType; 24import com.android.contacts.model.AccountTypeManager; 25 26import android.accounts.Account; 27import android.app.ActionBar; 28import android.app.Activity; 29import android.content.Context; 30import android.content.Intent; 31import android.graphics.drawable.Drawable; 32import android.os.Bundle; 33import android.view.LayoutInflater; 34import android.view.MenuItem; 35import android.view.View; 36import android.view.ViewGroup; 37import android.widget.AdapterView; 38import android.widget.AdapterView.OnItemClickListener; 39import android.widget.BaseAdapter; 40import android.widget.ListView; 41 42import java.util.ArrayList; 43import java.util.List; 44 45/** 46 * Shows a list of all available accounts, letting the user select under which account to view 47 * contacts. 48 */ 49public class AccountFilterActivity extends ContactsActivity 50 implements AdapterView.OnItemClickListener { 51 52 private static final String TAG = AccountFilterActivity.class.getSimpleName(); 53 54 public static final String KEY_EXTRA_CONTACT_LIST_FILTER = "contactListFilter"; 55 56 private ListView mListView; 57 58 private List<ContactListFilter> mFilters = new ArrayList<ContactListFilter>(); 59 60 @Override 61 protected void onCreate(Bundle icicle) { 62 super.onCreate(icicle); 63 setContentView(R.layout.contact_list_filter); 64 65 mListView = (ListView) findViewById(com.android.internal.R.id.list); 66 mListView.setOnItemClickListener(new OnItemClickListener() { 67 @Override 68 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 69 finishAndSetResult(mFilters.get(position)); 70 } 71 }); 72 73 ActionBar actionBar = getActionBar(); 74 if (actionBar != null) { 75 actionBar.setDisplayHomeAsUpEnabled(true); 76 } 77 78 loadAccountFilters(); 79 } 80 81 private void loadAccountFilters() { 82 ArrayList<ContactListFilter> accountFilters = new ArrayList<ContactListFilter>(); 83 final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this); 84 ArrayList<Account> accounts = accountTypes.getAccounts(false); 85 for (Account account : accounts) { 86 AccountType accountType = accountTypes.getAccountType(account.type); 87 Drawable icon = accountType != null ? accountType.getDisplayIcon(this) : null; 88 accountFilters.add(ContactListFilter.createAccountFilter(account.type, account.name, 89 icon, account.name)); 90 } 91 int count = accountFilters.size(); 92 93 if (count >= 1) { 94 // If we only have one account, don't show it as "account", instead show it as "all" 95 mFilters.add(ContactListFilter.createFilterWithType( 96 ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS)); 97 if (count > 1) { 98 mFilters.addAll(accountFilters); 99 mFilters.add(ContactListFilter.createFilterWithType( 100 ContactListFilter.FILTER_TYPE_CUSTOM)); 101 } 102 } 103 104 mListView.setAdapter(new FilterListAdapter(this)); 105 } 106 107 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 108 finishAndSetResult(mFilters.get(position)); 109 } 110 111 private void finishAndSetResult(ContactListFilter filter) { 112 final Intent intent = new Intent(); 113 intent.putExtra(KEY_EXTRA_CONTACT_LIST_FILTER, filter); 114 setResult(Activity.RESULT_OK, intent); 115 finish(); 116 } 117 118 @Override 119 public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, 120 boolean globalSearch) { 121 if (globalSearch) { 122 super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch); 123 } else { 124 ContactsSearchManager.startSearch(this, initialQuery); 125 } 126 } 127 128 private class FilterListAdapter extends BaseAdapter { 129 private LayoutInflater mLayoutInflater; 130 131 public FilterListAdapter(Context context) { 132 mLayoutInflater = (LayoutInflater) context.getSystemService 133 (Context.LAYOUT_INFLATER_SERVICE); 134 } 135 136 @Override 137 public int getCount() { 138 return mFilters.size(); 139 } 140 141 @Override 142 public long getItemId(int position) { 143 return position; 144 } 145 146 @Override 147 public ContactListFilter getItem(int position) { 148 return mFilters.get(position); 149 } 150 151 public View getView(int position, View convertView, ViewGroup parent) { 152 ContactListFilterView view; 153 if (convertView != null) { 154 view = (ContactListFilterView) convertView; 155 } else { 156 view = (ContactListFilterView) mLayoutInflater.inflate( 157 R.layout.filter_spinner_item, parent, false); 158 } 159 view.setSingleAccount(mFilters.size() == 1); 160 ContactListFilter filter = mFilters.get(position); 161 view.setContactListFilter(filter); 162 view.bindView(true); 163 return view; 164 } 165 } 166 167 @Override 168 public boolean onOptionsItemSelected(MenuItem item) { 169 switch (item.getItemId()) { 170 case android.R.id.home: 171 Intent intent = new Intent(this, PeopleActivity.class); 172 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 173 startActivity(intent); 174 finish(); 175 return true; 176 default: 177 break; 178 } 179 return super.onOptionsItemSelected(item); 180 } 181} 182