Update compact editor photo selection logic

* Look for non-empty super primary
* Look for any non-empty photo
* Use empty super primary (or the fallback ValuesDelta)

Bug 19124091

Change-Id: I2e397600802598d8ef820b0beb9cf85538c6b7a1
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index cad75b9..81d475e 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -276,27 +276,64 @@
     private void addPhotoView(RawContactDeltaList rawContactDeltas,
             ViewIdGenerator viewIdGenerator) {
         for (RawContactDelta rawContactDelta : rawContactDeltas) {
-            if (!rawContactDelta.isVisible()) {
-                continue;
-            }
+            if (!rawContactDelta.isVisible()) continue;
             final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
 
             // Make sure we have a photo
             RawContactModifier.ensureKindExists(
                     rawContactDelta, accountType, Photo.CONTENT_ITEM_TYPE);
 
+            // Look for a non-empty super primary photo
             final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
             if (dataKind != null) {
-                if (Photo.CONTENT_ITEM_TYPE.equals(dataKind.mimeType)) {
+                final ValuesDelta valuesDelta = getNonEmptySuperPrimaryValuesDeltas(
+                        rawContactDelta, Photo.CONTENT_ITEM_TYPE, dataKind);
+                if (valuesDelta != null) {
                     mPhotoRawContactId = rawContactDelta.getRawContactId();
-                    final ValuesDelta valuesDelta = rawContactDelta.getSuperPrimaryEntry(
-                            dataKind.mimeType, /* forceSelection =*/ true);
                     mPhoto.setValues(dataKind, valuesDelta, rawContactDelta,
-                            /* readOnly =*/ !dataKind.editable, mMaterialPalette, viewIdGenerator);
+                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            viewIdGenerator);
                     return;
                 }
             }
         }
+        // We didn't find a non-empty super primary photo, use the first non-empty one
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+            final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
+            if (dataKind != null) {
+                final List<ValuesDelta> valuesDeltas = getNonEmptyValuesDeltas(
+                        rawContactDelta, Photo.CONTENT_ITEM_TYPE, dataKind);
+                if (valuesDeltas != null && !valuesDeltas.isEmpty()) {
+                    mPhotoRawContactId = rawContactDelta.getRawContactId();
+                    mPhoto.setValues(dataKind, valuesDeltas.get(0), rawContactDelta,
+                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            viewIdGenerator);
+                    return;
+                }
+            }
+        }
+        // No suitable non-empty photo
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+            final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
+            if (dataKind != null) {
+                final ValuesDelta valuesDelta = rawContactDelta.getSuperPrimaryEntry(
+                        dataKind.mimeType, /* forceSelection =*/ true);
+                if (valuesDelta != null) {
+                    mPhotoRawContactId = rawContactDelta.getRawContactId();
+                    mPhoto.setValues(dataKind, valuesDelta, rawContactDelta,
+                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            viewIdGenerator);
+                    return;
+                }
+            }
+        }
+        // Should not happen since we ensure the kind exists but if we unexpectedly get here
+        // we must remove the photo section so that it does not take up the entire view
+        mPhoto.setVisibility(View.GONE);
     }
 
     private void addStructuredNameView(RawContactDeltaList rawContactDeltas) {