Merge "Use selected photo ID as the "photo to display" lookup parameter" into ub-contactsdialer-a-dev
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 8b4e260..cd7f0ab 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -215,6 +215,9 @@
 
     public void setPrimaryPhoto(CompactPhotoSelectionFragment.Photo photo) {
         getContent().setPrimaryPhoto(photo);
+
+        // Update the photo ID we will try to match when selecting the photo to display
+        mPhotoId = photo.photoId;
     }
 
     @Override
diff --git a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
index 930475e..bd6444f 100644
--- a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
+++ b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
@@ -108,8 +108,6 @@
          */
         public boolean primary;
 
-        public long rawContactId;
-
         /**
          * Pointer back to the KindSectionDataList this photo came from.
          * See {@link CompactRawContactsEditorView#getPhotos}
@@ -121,6 +119,8 @@
         /** Newly taken or selected photo that has not yet been saved to CP2. */
         public Uri updatedPhotoUri;
 
+        public long photoId;
+
         @Override
         public int describeContents() {
             return 0;
@@ -136,6 +136,7 @@
             dest.writeInt(kindSectionDataListIndex);
             dest.writeInt(valuesDeltaListIndex);
             dest.writeParcelable(updatedPhotoUri, flags);
+            dest.writeLong(photoId);
         }
 
         private void readFromParcel(Parcel source) {
@@ -148,6 +149,7 @@
             kindSectionDataListIndex = source.readInt();
             valuesDeltaListIndex = source.readInt();
             updatedPhotoUri = source.readParcelable(classLoader);
+            photoId = source.readLong();
         }
     }
 
@@ -197,18 +199,14 @@
                 if (convertView == null || convertView.findViewById(R.id.account_type) != null) {
                     return mLayoutInflater.inflate(R.layout.take_a_photo_button, /* root =*/ null);
                 }
-                else{
-                    return convertView;
-                }
+                return convertView;
             }
 
             if (getItemViewType(position) == 1) {
                 if (convertView == null || convertView.findViewById(R.id.account_type) != null) {
                     return mLayoutInflater.inflate(R.layout.all_photos_button, /* root =*/ null);
                 }
-                else {
-                    return convertView;
-                }
+                return convertView;
             }
 
             // when position greater than 1, we should make sure account_type *is* in convertView
@@ -298,8 +296,8 @@
         mGridView.setAdapter(photoAdapter);
         mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                final PhotoSourceDialogFragment.Listener listener = (PhotoSourceDialogFragment.Listener)
-                        getActivity();
+                final PhotoSourceDialogFragment.Listener listener =
+                        (PhotoSourceDialogFragment.Listener) getActivity();
                 if (position == 0){
                     listener.onTakePhotoChosen();
                 } else if (position == 1) {
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 0ccc2a7..43f39bf 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -549,6 +549,7 @@
                 photo.valuesDeltaListIndex = j;
                 photo.accountType = accountType.getDisplayLabel(getContext()).toString();
                 photo.accountName = kindSectionData.getRawContactDelta().getAccountName();
+                photo.photoId = valuesDelta.getId();
 
                 if (updatedPhotos != null) {
                     photo.updatedPhotoUri = (Uri) updatedPhotos.get(String.valueOf(
@@ -582,12 +583,13 @@
             wlog("Invalid values delta list index");
             return;
         }
+
+        // Update values delta
         final ValuesDelta valuesDelta = valuesDeltaList.get(photo.valuesDeltaListIndex);
         valuesDelta.setFromTemplate(false);
-        // Unset primary for all photos
         unsetSuperPrimaryFromAllPhotos();
-        // Mark the currently displayed photo as primary
         valuesDelta.setSuperPrimary(true);
+
         // Update the UI
         mPhotoView.setPhoto(valuesDelta, mMaterialPalette);
     }
@@ -944,15 +946,15 @@
         mPhotoView.setPhoto(photoToDisplay.second, mMaterialPalette);
 
         // Find the raw contact ID and values delta that will be written when the photo is edited
-        final Pair<KindSectionData, ValuesDelta> pair = kindSectionDataList.getEntryToWrite(
+        final Pair<KindSectionData, ValuesDelta> photoToWrite = kindSectionDataList.getEntryToWrite(
                 mPhotoId, mPrimaryAccount, mIsUserProfile);
-        if (pair == null) {
+        if (photoToWrite == null) {
             mPhotoView.setReadOnly(true);
             return;
         }
         mPhotoView.setReadOnly(false);
-        mPhotoRawContactId = pair.first.getRawContactDelta().getRawContactId();
-        mPhotoValuesDelta = pair.second;
+        mPhotoRawContactId = photoToWrite.first.getRawContactDelta().getRawContactId();
+        mPhotoValuesDelta = photoToWrite.second;
     }
 
     private void addKindSectionViews() {
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index e17b2cd..0d9b3a9 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -1398,7 +1398,10 @@
                         mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR),
                         mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR));
             }
-            mPhotoId = mIntentExtras.getLong(INTENT_EXTRA_PHOTO_ID);
+            // If the user selected a different photo, don't restore the one from the Intent
+            if (mPhotoId < 0) {
+                mPhotoId = mIntentExtras.getLong(INTENT_EXTRA_PHOTO_ID);
+            }
             mRawContactIdToDisplayAlone = mIntentExtras.getLong(
                     INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
             mRawContactDisplayAloneIsReadOnly = mIntentExtras.getBoolean(