1 /* 2 * Copyright (C) 2012 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 17 package com.android.contacts.list; 18 19 import android.content.Context; 20 import android.text.TextUtils; 21 import android.util.AttributeSet; 22 import android.util.Log; 23 import android.view.View; 24 import android.widget.ImageView; 25 import android.widget.LinearLayout; 26 import android.widget.RadioButton; 27 import android.widget.TextView; 28 29 import com.android.contacts.R; 30 import com.android.contacts.model.AccountTypeManager; 31 import com.android.contacts.model.account.AccountType; 32 33 /** 34 * Contact list filter parameters. 35 */ 36 public class ContactListFilterView extends LinearLayout { 37 38 private static final String TAG = ContactListFilterView.class.getSimpleName(); 39 40 private ImageView mIcon; 41 private TextView mAccountType; 42 private TextView mAccountUserName; 43 private RadioButton mRadioButton; 44 private ContactListFilter mFilter; 45 private boolean mSingleAccount; 46 ContactListFilterView(Context context)47 public ContactListFilterView(Context context) { 48 super(context); 49 } 50 ContactListFilterView(Context context, AttributeSet attrs)51 public ContactListFilterView(Context context, AttributeSet attrs) { 52 super(context, attrs); 53 } 54 setContactListFilter(ContactListFilter filter)55 public void setContactListFilter(ContactListFilter filter) { 56 mFilter = filter; 57 } 58 getContactListFilter()59 public ContactListFilter getContactListFilter() { 60 return mFilter; 61 } 62 setSingleAccount(boolean flag)63 public void setSingleAccount(boolean flag) { 64 this.mSingleAccount = flag; 65 } 66 67 @Override setActivated(boolean activated)68 public void setActivated(boolean activated) { 69 super.setActivated(activated); 70 if (mRadioButton != null) { 71 mRadioButton.setChecked(activated); 72 } else { 73 // We're guarding against null-pointer exceptions, 74 // but otherwise this code is not expected to work 75 // properly if the button hasn't been initialized. 76 Log.wtf(TAG, "radio-button cannot be activated because it is null"); 77 } 78 setContentDescription(generateContentDescription()); 79 } 80 isChecked()81 public boolean isChecked() { 82 return mRadioButton.isChecked(); 83 } 84 bindView(AccountTypeManager accountTypes)85 public void bindView(AccountTypeManager accountTypes) { 86 if (mAccountType == null) { 87 mIcon = (ImageView) findViewById(R.id.icon); 88 mAccountType = (TextView) findViewById(R.id.accountType); 89 mAccountUserName = (TextView) findViewById(R.id.accountUserName); 90 mRadioButton = (RadioButton) findViewById(R.id.radioButton); 91 mRadioButton.setChecked(isActivated()); 92 } 93 94 if (mFilter == null) { 95 mAccountType.setText(R.string.contactsList); 96 return; 97 } 98 99 mAccountUserName.setVisibility(View.GONE); 100 switch (mFilter.filterType) { 101 case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: { 102 bindView(0, R.string.list_filter_all_accounts); 103 break; 104 } 105 case ContactListFilter.FILTER_TYPE_STARRED: { 106 bindView(R.drawable.quantum_ic_star_vd_theme_24, R.string.list_filter_all_starred); 107 break; 108 } 109 case ContactListFilter.FILTER_TYPE_CUSTOM: { 110 bindView(0, R.string.list_filter_customize); 111 break; 112 } 113 case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: { 114 bindView(0, R.string.list_filter_phones); 115 break; 116 } 117 case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: { 118 bindView(0, R.string.list_filter_single); 119 break; 120 } 121 case ContactListFilter.FILTER_TYPE_ACCOUNT: { 122 mAccountUserName.setVisibility(View.VISIBLE); 123 mIcon.setVisibility(View.VISIBLE); 124 if (mFilter.icon != null) { 125 mIcon.setImageDrawable(mFilter.icon); 126 } else { 127 mIcon.setImageResource(R.drawable.unknown_source); 128 } 129 final AccountType accountType = 130 accountTypes.getAccountType(mFilter.accountType, mFilter.dataSet); 131 mAccountUserName.setText(mFilter.accountName); 132 mAccountType.setText(accountType.getDisplayLabel(getContext())); 133 break; 134 } 135 } 136 setContentDescription(generateContentDescription()); 137 } 138 bindView(int iconResource, int textResource)139 private void bindView(int iconResource, int textResource) { 140 if (iconResource != 0) { 141 mIcon.setVisibility(View.VISIBLE); 142 mIcon.setImageResource(iconResource); 143 } else { 144 mIcon.setVisibility(View.GONE); 145 } 146 147 mAccountType.setText(textResource); 148 } 149 generateContentDescription()150 String generateContentDescription() { 151 final StringBuilder sb = new StringBuilder(); 152 if (!TextUtils.isEmpty(mAccountType.getText())) { 153 sb.append(mAccountType.getText()); 154 } 155 if (!TextUtils.isEmpty(mAccountUserName.getText())) { 156 if (sb.length() > 0) { 157 sb.append(" "); 158 } 159 sb.append(mAccountUserName.getText()); 160 } 161 return getContext().getString(isActivated() ? R.string.account_filter_view_checked : 162 R.string.account_filter_view_not_checked, sb.toString()); 163 } 164 } 165