Fix http://b/issue?id=2085793
-Also fixes problems with the call button divider not disappearing when
the call button was gone.
-Also populates the typeList for the "fallback" source, for phone,
email, and postal DataKinds. The type lists are the unions of the focus
and exchange typeLists.
Change-Id: Idd68760d852e4accdcf3043007253e122bd5534b
diff --git a/res/layout-finger/contacts_list_item.xml b/res/layout-finger/contacts_list_item.xml
index 938f3aa..f2c3204 100644
--- a/res/layout-finger/contacts_list_item.xml
+++ b/res/layout-finger/contacts_list_item.xml
@@ -22,12 +22,9 @@
android:layout_height="wrap_content"
android:orientation="vertical"
>
- <TextView android:id="@+id/header"
- style="?android:attr/listSeparatorTextViewStyle"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="#444444"
- android:gravity="center_horizontal"
+ <include
+ android:id="@+id/header"
+ layout="@layout/list_separator"
/>
<View android:id="@+id/list_divider"
@@ -97,27 +94,31 @@
android:textAppearance="?android:attr/textAppearanceLarge"
/>
- <ImageView android:id="@+id/call_button"
+ <LinearLayout android:id="@+id/call_view"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
- android:paddingLeft="14dip"
- android:paddingRight="14dip"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
-
- android:gravity="center"
- android:src="@android:drawable/sym_action_call"
- android:background="@android:drawable/list_selector_background"
- />
-
- <View android:id="@+id/divider"
- android:layout_width="1dip"
- android:layout_height="fill_parent"
- android:layout_toLeftOf="@id/call_button"
+ android:orientation="horizontal"
android:layout_marginLeft="11dip"
+ android:layout_alignParentRight="true">
- android:background="@drawable/divider_vertical_dark"
- />
+ <View android:id="@+id/divider"
+ android:layout_width="1dip"
+ android:layout_height="fill_parent"
+ android:background="@drawable/divider_vertical_dark"
+ />
+
+ <ImageView android:id="@+id/call_button"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingLeft="14dip"
+ android:paddingRight="14dip"
+ android:layout_centerVertical="true"
+ android:gravity="center"
+ android:src="@android:drawable/sym_action_call"
+ android:background="@android:drawable/list_selector_background"
+ />
+
+ </LinearLayout>
</RelativeLayout>
</LinearLayout>
diff --git a/res/layout-finger/contacts_list_item_photo.xml b/res/layout-finger/contacts_list_item_photo.xml
index 974411f..6b17ef6 100644
--- a/res/layout-finger/contacts_list_item_photo.xml
+++ b/res/layout-finger/contacts_list_item_photo.xml
@@ -22,8 +22,8 @@
android:layout_height="wrap_content"
android:orientation="vertical"
>
- <include
- android:id="@+id/header"
+ <include
+ android:id="@+id/header"
layout="@layout/list_separator"
/>
@@ -101,27 +101,30 @@
android:textAppearance="?android:attr/textAppearanceLarge"
/>
- <ImageView android:id="@+id/call_button"
+ <LinearLayout android:id="@+id/call_view"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
- android:paddingLeft="14dip"
- android:paddingRight="14dip"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
-
- android:gravity="center"
- android:src="@android:drawable/sym_action_call"
- android:background="@android:drawable/list_selector_background"
- />
-
- <View android:id="@+id/divider"
- android:layout_width="1dip"
- android:layout_height="fill_parent"
- android:layout_toLeftOf="@id/call_button"
+ android:orientation="horizontal"
android:layout_marginLeft="11dip"
+ android:layout_alignParentRight="true">
- android:background="@drawable/divider_vertical_dark"
- />
+ <View android:id="@+id/divider"
+ android:layout_width="1dip"
+ android:layout_height="fill_parent"
+ android:background="@drawable/divider_vertical_dark"
+ />
+ <ImageView android:id="@+id/call_button"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingLeft="14dip"
+ android:paddingRight="14dip"
+ android:layout_centerVertical="true"
+ android:gravity="center"
+ android:src="@android:drawable/sym_action_call"
+ android:background="@android:drawable/list_selector_background"
+ />
+
+ </LinearLayout>
</RelativeLayout>
</LinearLayout>
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index e39a7fc..733ee89 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -16,6 +16,11 @@
package com.android.contacts;
+import com.android.contacts.model.ContactsSource;
+import com.android.contacts.model.EntityModifier;
+import com.android.contacts.model.Sources;
+import com.android.contacts.model.ContactsSource.DataKind;
+import com.android.contacts.model.ContactsSource.EditType;
import com.android.contacts.ui.DisplayGroupsActivity;
import com.android.contacts.ui.DisplayGroupsActivity.Prefs;
import com.android.contacts.util.Constants;
@@ -92,6 +97,7 @@
import android.widget.FasttrackBadgeWidget;
import android.widget.Filter;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ResourceCursorAdapter;
import android.widget.SectionIndexer;
@@ -1792,7 +1798,8 @@
public TextView header;
public View divider;
public TextView nameView;
- public ImageView callView;
+ public View callView;
+ public ImageView callButton;
public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);
public TextView labelView;
public CharArrayBuffer labelBuffer = new CharArrayBuffer(128);
@@ -1819,7 +1826,7 @@
private String mAlphabet;
private boolean mLoading = true;
private CharSequence mUnknownNameText;
- private CharSequence[] mLocalizedLabels;
+ private SparseArray<Integer> mLocalizedLabels;
private boolean mDisplayPhotos = false;
private boolean mDisplayCallButton = false;
private boolean mDisplayAdditionalData = true;
@@ -1840,24 +1847,24 @@
mAlphabet = context.getString(com.android.internal.R.string.fast_scroll_alphabet);
mUnknownNameText = context.getText(android.R.string.unknownName);
- // TODO: use a different method of finding labels
-// switch (mMode) {
-// case MODE_PICK_POSTAL:
-// mLocalizedLabels = EditContactActivity.getLabelsForMimetype(mContext,
-// CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
-// mDisplaySectionHeaders = false;
-// break;
-// case MODE_PICK_PHONE:
-// mLocalizedLabels = EditContactActivity.getLabelsForMimetype(mContext,
-// CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
-// mDisplaySectionHeaders = false;
-// break;
-// default:
- mLocalizedLabels = context.getResources().getStringArray(android.R.array.phoneTypes);
-// EditContactActivity.getLabelsForMimetype(mContext,
-// CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
-// break;
-// }
+ switch (mMode) {
+ case MODE_LEGACY_PICK_POSTAL:
+ case MODE_PICK_POSTAL:
+ mLocalizedLabels = inflateLocalizedLabels(
+ CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
+ mDisplaySectionHeaders = false;
+ break;
+ case MODE_LEGACY_PICK_PHONE:
+ case MODE_PICK_PHONE:
+ mDisplaySectionHeaders = false;
+ mLocalizedLabels = inflateLocalizedLabels(
+ CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+ break;
+ default:
+ mLocalizedLabels = inflateLocalizedLabels(
+ CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+ break;
+ }
// Do not display the second line of text if in a specific SEARCH query mode, usually for
// matching a specific E-mail or phone number. Any contact details
@@ -1887,6 +1894,29 @@
}
}
+ private SparseArray<Integer> inflateLocalizedLabels(String mimetype) {
+ SparseArray<Integer> localizedLabels = new SparseArray<Integer>();
+
+ Sources sources = Sources.getInstance(ContactsListActivity.this);
+
+ ContactsSource contactsSource = sources.getInflatedSource(null /*get fallback type*/,
+ ContactsSource.LEVEL_MIMETYPES);
+ if (contactsSource == null) {
+ return localizedLabels;
+ }
+
+ DataKind kind = contactsSource.getKindForMimetype(mimetype);
+ if (kind == null) {
+ return localizedLabels;
+ }
+
+ for (EditType type : kind.typeList) {
+ localizedLabels.put(type.rawValue, type.labelRes);
+ }
+
+ return localizedLabels;
+ }
+
private class ImageFetchHandler extends Handler {
@Override
@@ -2065,9 +2095,10 @@
cache.header = (TextView) view.findViewById(R.id.header);
cache.divider = view.findViewById(R.id.list_divider);
cache.nameView = (TextView) view.findViewById(R.id.name);
- cache.callView = (ImageView) view.findViewById(R.id.call_button);
- if (cache.callView != null) {
- cache.callView.setOnClickListener(ContactsListActivity.this);
+ cache.callView = view.findViewById(R.id.call_view);
+ cache.callButton = (ImageView) view.findViewById(R.id.call_button);
+ if (cache.callButton != null) {
+ cache.callButton.setOnClickListener(ContactsListActivity.this);
}
cache.labelView = (TextView) view.findViewById(R.id.label);
cache.dataView = (TextView) view.findViewById(R.id.data);
@@ -2132,7 +2163,7 @@
if (mDisplayCallButton) {
int pos = cursor.getPosition();
cache.callView.setVisibility(View.VISIBLE);
- cache.callView.setTag(pos);
+ cache.callButton.setTag(pos);
} else {
cache.callView.setVisibility(View.GONE);
}
@@ -2212,9 +2243,9 @@
if (type != CommonDataKinds.BaseTypes.TYPE_CUSTOM) {
try {
- labelView.setText(mLocalizedLabels[type - 1]);
+ labelView.setText(mLocalizedLabels.get(type));
} catch (ArrayIndexOutOfBoundsException e) {
- labelView.setText(mLocalizedLabels[defaultType - 1]);
+ labelView.setText(mLocalizedLabels.get(defaultType));
}
} else {
cursor.copyStringToBuffer(labelColumnIndex, cache.labelBuffer);
diff --git a/src/com/android/contacts/model/HardCodedSources.java b/src/com/android/contacts/model/HardCodedSources.java
index 2883aa2..b2c0c00 100644
--- a/src/com/android/contacts/model/HardCodedSources.java
+++ b/src/com/android/contacts/model/HardCodedSources.java
@@ -104,6 +104,34 @@
kind.actionAltHeader = new ActionAltInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Phone.NUMBER);
+ kind.typeColumn = Phone.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(new EditType(Phone.TYPE_HOME, R.string.type_home, R.string.call_home,
+ R.string.sms_home));
+ kind.typeList.add(new EditType(Phone.TYPE_MOBILE, R.string.type_mobile,
+ R.string.call_mobile, R.string.sms_mobile));
+ kind.typeList.add(new EditType(Phone.TYPE_WORK, R.string.type_work, R.string.call_work,
+ R.string.sms_work));
+ kind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, R.string.type_fax_work,
+ R.string.call_fax_work, R.string.sms_fax_work).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_FAX_HOME, R.string.type_fax_home,
+ R.string.call_fax_home, R.string.sms_fax_home).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_PAGER, R.string.type_pager,
+ R.string.call_pager, R.string.sms_pager).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_OTHER, R.string.type_other,
+ R.string.call_other, R.string.sms_other));
+ kind.typeList.add(new EditType(Phone.TYPE_CUSTOM, R.string.type_custom,
+ R.string.call_custom, R.string.sms_custom).setSecondary(true).setCustomColumn(
+ Phone.LABEL));
+ kind.typeList.add(new EditType(Phone.TYPE_CAR, R.string.type_car, R.string.call_car,
+ R.string.sms_car).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_COMPANY_MAIN, R.string.type_company_main,
+ R.string.call_company_main, R.string.sms_company_main).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_MMS, R.string.type_mms, R.string.call_mms,
+ R.string.sms_mms).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_RADIO, R.string.type_radio, R.string.call_radio,
+ R.string.sms_radio).setSecondary(true));
+
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
@@ -111,13 +139,65 @@
}
{
- // GOOGLE: EMAIL
+ // FALLBACK: POSTAL
+ DataKind kind = new DataKind(StructuredPostal.CONTENT_ITEM_TYPE,
+ R.string.postalLabelsGroup, R.drawable.sym_action_map, 25, true);
+
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
+ // TODO: build body from various structured fields
+ kind.actionBody = new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS);
+
+ kind.typeColumn = StructuredPostal.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(new EditType(StructuredPostal.TYPE_HOME, R.string.type_home,
+ R.string.map_home));
+ kind.typeList.add(new EditType(StructuredPostal.TYPE_WORK, R.string.type_work,
+ R.string.map_work));
+ kind.typeList.add(new EditType(StructuredPostal.TYPE_OTHER, R.string.type_other,
+ R.string.map_other));
+ kind.typeList
+ .add(new EditType(StructuredPostal.TYPE_CUSTOM, R.string.type_custom,
+ R.string.map_custom).setSecondary(true).setCustomColumn(
+ StructuredPostal.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(StructuredPostal.STREET, R.string.postal_street,
+ FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POBOX, R.string.postal_pobox,
+ FLAGS_POSTAL, true));
+ kind.fieldList.add(new EditField(StructuredPostal.NEIGHBORHOOD,
+ R.string.postal_neighborhood, FLAGS_POSTAL, true));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY, R.string.postal_city,
+ FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION, R.string.postal_region,
+ FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE, R.string.postal_postcode,
+ FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY, R.string.postal_country,
+ FLAGS_POSTAL, true));
+
+ list.add(kind);
+ }
+
+ {
+ // FALLBACK: EMAIL
DataKind kind = new DataKind(Email.CONTENT_ITEM_TYPE,
R.string.emailLabelsGroup, android.R.drawable.sym_action_email, 15, true);
kind.actionHeader = new ActionInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Email.DATA);
+ kind.typeColumn = Email.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList
+ .add(new EditType(Email.TYPE_HOME, R.string.type_home, R.string.email_home));
+ kind.typeList
+ .add(new EditType(Email.TYPE_WORK, R.string.type_work, R.string.email_work));
+ kind.typeList.add(new EditType(Email.TYPE_OTHER, R.string.type_other,
+ R.string.email_other));
+ kind.typeList.add(new EditType(Email.TYPE_CUSTOM, R.string.type_custom,
+ R.string.email_home).setSecondary(true).setCustomColumn(Email.LABEL));
+
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));