Merge "Fix bug: Google Talk update title not found anymore"
diff --git a/res/layout-sw580dp/contact_detail_fragment.xml b/res/layout-sw580dp/contact_detail_fragment.xml
index c9dad2a..f05dc56 100644
--- a/res/layout-sw580dp/contact_detail_fragment.xml
+++ b/res/layout-sw580dp/contact_detail_fragment.xml
@@ -30,8 +30,9 @@
<!-- Real list -->
<ListView android:id="@android:id/list"
+ android:layout_weight="1"
android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_height="0dip"
android:cacheColorHint="#00000000"
android:divider="@null"
/>
diff --git a/src/com/android/contacts/editor/ExternalRawContactEditorView.java b/src/com/android/contacts/editor/ExternalRawContactEditorView.java
index cabf639..eb496f2 100644
--- a/src/com/android/contacts/editor/ExternalRawContactEditorView.java
+++ b/src/com/android/contacts/editor/ExternalRawContactEditorView.java
@@ -168,7 +168,8 @@
// Name
primary = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
- mName.setText(primary.getAsString(StructuredName.DISPLAY_NAME));
+ mName.setText(primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
+ mContext.getString(R.string.missing_name));
if (type.readOnly) {
mAccountContainer.setOnClickListener(new OnClickListener() {
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
index 60a7357..2d821e6 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -338,6 +338,17 @@
// Skip external account types that couldn't be initialized.
continue;
}
+ if (!accountType.hasContactsMetadata()) {
+ Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+ + " it doesn't have the CONTACTS_STRUCTURE metadata");
+ continue;
+ }
+ if (TextUtils.isEmpty(accountType.accountType)) {
+ Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+ + " the CONTACTS_STRUCTURE metadata doesn't have the accountType"
+ + " attribute");
+ continue;
+ }
Log.d(TAG, "Registering extension package account type="
+ accountType.accountType + ", dataSet=" + accountType.dataSet
+ ", packageName=" + extensionPackage);
diff --git a/src/com/android/contacts/model/ExternalAccountType.java b/src/com/android/contacts/model/ExternalAccountType.java
index 791f0ae..b6649c9 100644
--- a/src/com/android/contacts/model/ExternalAccountType.java
+++ b/src/com/android/contacts/model/ExternalAccountType.java
@@ -22,11 +22,9 @@
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
-import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -46,7 +44,6 @@
public class ExternalAccountType extends BaseAccountType {
private static final String TAG = "ExternalAccountType";
- private static final String ACTION_SYNC_ADAPTER = "android.content.SyncAdapter";
private static final String METADATA_CONTACTS = "android.provider.CONTACTS_STRUCTURE";
private static final String TAG_CONTACTS_SOURCE_LEGACY = "ContactsSource";
@@ -85,6 +82,7 @@
private String mAccountTypeLabelAttribute;
private String mAccountTypeIconAttribute;
private boolean mInitSuccessful;
+ private boolean mHasContactsMetadata;
public ExternalAccountType(Context context, String resPackageName) {
this.resPackageName = resPackageName;
@@ -137,6 +135,13 @@
return mInitSuccessful;
}
+ /**
+ * Whether this account type has the android.provider.CONTACTS_STRUCTURE metadata xml.
+ */
+ public boolean hasContactsMetadata() {
+ return mHasContactsMetadata;
+ }
+
@Override
public String getEditContactActivityClassName() {
return mEditContactActivityClassName;
@@ -207,6 +212,8 @@
+ TAG_CONTACTS_ACCOUNT_TYPE + ", not " + rootTag);
}
+ mHasContactsMetadata = true;
+
int attributeCount = parser.getAttributeCount();
for (int i = 0; i < attributeCount; i++) {
String attr = parser.getAttributeName(i);