Merge "Don't hide types when associated label is empty" into ub-contactsdialer-a-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 20c4419..5416672 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -271,7 +271,10 @@
     <string name="savingContact">Saving contact\u2026</string>
 
     <!-- Toast displayed when a contact is saved [CHAR LIMIT=NONE] -->
-    <string name="contactSavedToast">Contact saved.</string>
+    <string name="contactSavedToast">Contact saved</string>
+
+    <!-- Toast displayed when linked contacts get unlinked [CHAR LIMIT=NONE] -->
+    <string name="contactUnlinkedToast">Contacts unlinked</string>
 
     <!-- Toast displayed when saving a contact failed. [CHAR LIMIT=NONE] -->
     <string name="contactSavedErrorToast">Couldn\'t save contact changes.</string>
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index b091249..91fc81f 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -123,7 +123,6 @@
 
     private static final String KEY_HAS_NEW_CONTACT = "hasNewContact";
     private static final String KEY_NEW_CONTACT_READY = "newContactDataReady";
-    private static final String KEY_NEW_CONTACT_ACCOUNT_CHANGED = "newContactAccountChanged";
 
     private static final String KEY_IS_EDIT = "isEdit";
     private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
@@ -497,7 +496,6 @@
 
             mHasNewContact = savedState.getBoolean(KEY_HAS_NEW_CONTACT);
             mNewContactDataReady = savedState.getBoolean(KEY_NEW_CONTACT_READY);
-            mNewContactAccountChanged = savedState.getBoolean(KEY_NEW_CONTACT_ACCOUNT_CHANGED);
 
             mIsEdit = savedState.getBoolean(KEY_IS_EDIT);
             mExistingContactDataReady = savedState.getBoolean(KEY_EXISTING_CONTACT_READY);
@@ -615,7 +613,6 @@
         outState.putInt(KEY_STATUS, mStatus);
         outState.putBoolean(KEY_HAS_NEW_CONTACT, mHasNewContact);
         outState.putBoolean(KEY_NEW_CONTACT_READY, mNewContactDataReady);
-        outState.putBoolean(KEY_NEW_CONTACT_ACCOUNT_CHANGED, mNewContactAccountChanged);
         outState.putBoolean(KEY_IS_EDIT, mIsEdit);
         outState.putBoolean(KEY_EXISTING_CONTACT_READY, mExistingContactDataReady);
         outState.putBoolean(KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
@@ -917,10 +914,7 @@
 
         mStatus = Status.SAVING;
 
-        // If the user did nothing else expect change the account type, we must still
-        // consider this as an unsaved change so the new rawcontact is passed back to the
-        // compact editor on inserts.
-        if (!mNewContactAccountChanged && !hasPendingChanges()) {
+        if (!hasPendingChanges()) {
             if (mLookupUri == null && saveMode == SaveMode.RELOAD) {
                 // We don't have anything to save and there isn't even an existing contact yet.
                 // Nothing to do, simply go back to editing mode
@@ -1405,9 +1399,18 @@
             Uri contactLookupUri) {
         if (hadChanges) {
             if (saveSucceeded) {
-                if (saveMode != SaveMode.JOIN) {
-                    Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT).show();
+                switch (saveMode) {
+                    case SaveMode.JOIN:
+                        break;
+                    case SaveMode.SPLIT:
+                        Toast.makeText(mContext, R.string.contactUnlinkedToast, Toast.LENGTH_SHORT)
+                                .show();
+                        break;
+                    default:
+                        Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT)
+                                .show();
                 }
+
             } else {
                 Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
             }
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index a3830ef..c17099c 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -411,7 +411,6 @@
                         UiClosables.closeQuietly(popup);
                         AccountWithDataSet newAccount = adapter.getItem(position);
                         if (!newAccount.equals(currentAccount)) {
-                            mNewContactAccountChanged = true;
                             rebindEditorsForNewContact(currentState, currentAccount, newAccount);
                         }
                     }
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 272bc27..5daf25a 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -497,6 +497,10 @@
         mExpandSuggestionCardView.setVisibility(View.GONE);
         mSuggestionList.removeAllViews();
 
+        if (mContactData == null) {
+            return;
+        }
+
         final String suggestionForName = mContactData.getDisplayName();
         final int suggestionNumber = mSuggestions.size();
 
@@ -527,9 +531,13 @@
         mSuggestionForName.setText(suggestionForName);
         final int linkedContactsNumber = mContactData.getRawContacts().size();
         final String contactsInfo;
-        if (linkedContactsNumber == 1) {
+        final String accountName = mContactData.getRawContacts().get(0).getAccountName();
+        if (linkedContactsNumber == 1 && accountName == null) {
+            mSuggestionContactsNumber.setVisibility(View.INVISIBLE);
+        }
+        if (linkedContactsNumber == 1 && accountName != null) {
             contactsInfo = getResources().getString(R.string.contact_from_account_name,
-                    mContactData.getRawContacts().get(0).getAccountName());
+                    accountName);
         } else {
             contactsInfo = getResources().getString(
                     R.string.quickcontact_contacts_number, linkedContactsNumber);
@@ -552,6 +560,9 @@
         final Set<Long> selectedSuggestionIds = com.google.common.collect.Sets.intersection(
                 mSelectedAggregationIds, suggestionContactIds);
         mSelectedAggregationIds = new TreeSet<>(selectedSuggestionIds);
+        if (!mSelectedAggregationIds.isEmpty()) {
+            enableLinkButton();
+        }
     }
 
     private void collapseSuggestionList() {
@@ -594,7 +605,7 @@
             accountNameView.setText(
                     getResources().getString(R.string.contact_from_account_name, accountName));
         } else {
-            accountNameView.setVisibility(View.GONE);
+            accountNameView.setVisibility(View.INVISIBLE);
         }
 
         final CheckBox checkbox = (CheckBox) suggestionView.findViewById(R.id.suggestion_checkbox);