Show check mark when none is primary in photo picker
If there is a photo in photo picker that is marked as primary,
we will use check that photo in photo picker.
Otherwise, with this CL, we compare the photo URI passed from
QuickContact to editor with the photo URIs in photo picker to
decide where to add a check mark.
Bug: 25092609
Change-Id: I0ae77f9874a60f45dcfb305d058ade9de4fef4a4
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
index dc16049..d10684b 100644
--- a/src/com/android/contacts/activities/CompactContactEditorActivity.java
+++ b/src/com/android/contacts/activities/CompactContactEditorActivity.java
@@ -22,6 +22,7 @@
import com.android.contacts.detail.PhotoSelectionHandler;
import com.android.contacts.editor.CompactContactEditorFragment;
import com.android.contacts.editor.CompactPhotoSelectionFragment;
+import com.android.contacts.editor.ContactEditorBaseFragment;
import com.android.contacts.editor.PhotoSourceDialogFragment;
import android.app.FragmentTransaction;
@@ -138,6 +139,7 @@
// Create the editor and photo selection fragments
mFragment = new CompactContactEditorFragment();
mPhotoSelectionFragment = new CompactPhotoSelectionFragment();
+ mPhotoSelectionFragment.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction()
.add(R.id.fragment_container, getEditorFragment(), TAG_COMPACT_EDITOR)
.add(R.id.fragment_container, mPhotoSelectionFragment, TAG_PHOTO_SELECTION)
@@ -155,6 +157,10 @@
.findFragmentByTag(TAG_COMPACT_EDITOR);
mPhotoSelectionFragment = (CompactPhotoSelectionFragment) getFragmentManager()
.findFragmentByTag(TAG_PHOTO_SELECTION);
+ final Bundle bundle = mPhotoSelectionFragment.getArguments();
+ bundle.putString(ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_URI,
+ getIntent().getExtras().getString(
+ ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_URI));
final FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
if (mIsPhotoSelection) {
fragmentTransaction.hide(getEditorFragment()).show(mPhotoSelectionFragment);
diff --git a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
index bc9435b..f6d5f8d 100644
--- a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
+++ b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
@@ -50,6 +50,8 @@
private static final String STATE_PHOTOS = "photos";
private static final String STATE_PHOTO_MODE = "photoMode";
+ private static final String STATE_HAS_PRIMARY = "hasPrimary";
+ private static final String STATE_PHOTO_URI = "photoUri";
private final int VIEW_TYPE_TAKE_PHOTO = 0;
private final int VIEW_TYPE_ALL_PHOTOS = 1;
private final int VIEW_TYPE_IMAGE = 2;
@@ -223,16 +225,18 @@
}
final Photo photo = mPhotos.get(position);
+ Uri photoUri = Uri.EMPTY;
// Bind the photo
final ImageView imageView = (ImageView) photoItemView.findViewById(R.id.image);
if (photo.updatedPhotoUri != null) {
+ photoUri = photo.updatedPhotoUri;
EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(mContext),
- imageView, photo.updatedPhotoUri);
+ imageView, photoUri);
} else {
final Long photoFileId = EditorUiUtils.getPhotoFileId(photo.valuesDelta);
if (photoFileId != null) {
- final Uri photoUri = ContactsContract.DisplayPhoto.CONTENT_URI.buildUpon()
+ photoUri = ContactsContract.DisplayPhoto.CONTENT_URI.buildUpon()
.appendPath(photoFileId.toString()).build();
EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(mContext),
imageView, photoUri);
@@ -249,7 +253,9 @@
// Display a check icon over the primary photo
final ImageView checkImageView = (ImageView) photoItemView.findViewById(R.id.check);
- checkImageView.setVisibility(photo.primary ? View.VISIBLE : View.GONE);
+ checkImageView.setVisibility(
+ photo.primary || photoUri.toString().equals(mEditorPhotoUri)
+ ? View.VISIBLE : View.GONE);
photoItemView.setContentDescription(photo.contentDescription);
@@ -261,6 +267,8 @@
private int mPhotoMode;
private Listener mListener;
private GridView mGridView;
+ private String mEditorPhotoUri;
+ private boolean mHasPrimary;
public void setListener(Listener listener) {
mListener = listener;
@@ -270,6 +278,13 @@
mPhotos = photos;
mPhotoMode = photoMode;
mGridView.setAccessibilityDelegate(new View.AccessibilityDelegate() {});
+ mHasPrimary = false;
+ for (Photo photo : mPhotos) {
+ if (photo.primary) {
+ mHasPrimary = true;
+ break;
+ }
+ }
}
@Override
@@ -278,6 +293,12 @@
if (savedInstanceState != null) {
mPhotos = savedInstanceState.getParcelableArrayList(STATE_PHOTOS);
mPhotoMode = savedInstanceState.getInt(STATE_PHOTO_MODE, 0);
+ mEditorPhotoUri = savedInstanceState.getString(STATE_PHOTO_URI);
+ mHasPrimary = savedInstanceState.getBoolean(STATE_HAS_PRIMARY);
+ }
+ if (TextUtils.isEmpty(mEditorPhotoUri)) {
+ mEditorPhotoUri = getArguments().getString(
+ ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_URI);
}
}
@@ -315,8 +336,8 @@
display.getMetrics(outMetrics);
// portrait -- 3 columns; landscape -- 5 columns.
- mNumberOfColumns = outMetrics.heightPixels > outMetrics.widthPixels ?
- NUMBER_OF_COLUMNS_PORTRAIT : NUMBER_OF_COLUMNS_LANDSCAPE;
+ mNumberOfColumns = outMetrics.heightPixels > outMetrics.widthPixels
+ ? NUMBER_OF_COLUMNS_PORTRAIT : NUMBER_OF_COLUMNS_LANDSCAPE;
final int paddingWidth = (int) getResources().getDimension(R.dimen
.photo_picker_column_padding_width);
float density = getResources().getDisplayMetrics().density;
@@ -347,6 +368,8 @@
public void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList(STATE_PHOTOS, mPhotos);
outState.putInt(STATE_PHOTO_MODE, mPhotoMode);
+ outState.putString(STATE_PHOTO_URI, mEditorPhotoUri);
+ outState.putBoolean(STATE_HAS_PRIMARY, mHasPrimary);
super.onSaveInstanceState(outState);
}
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index 181bc44..9e2efed 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -191,6 +191,11 @@
public static final String INTENT_EXTRA_PHOTO_ID = "photo_id";
/**
+ * Intent key to pass the URI of the photo to display on the editor.
+ */
+ public static final String INTENT_EXTRA_PHOTO_URI = "photo_uri";
+
+ /**
* Intent key to pass the ID of the raw contact id that should be displayed in the full editor
* by itself.
*/
diff --git a/src/com/android/contacts/editor/EditorIntents.java b/src/com/android/contacts/editor/EditorIntents.java
index d87a726..c135d06 100644
--- a/src/com/android/contacts/editor/EditorIntents.java
+++ b/src/com/android/contacts/editor/EditorIntents.java
@@ -46,10 +46,11 @@
* existing contact.
*/
public static Intent createCompactEditContactIntent(Uri contactLookupUri,
- MaterialPalette materialPalette, long photoId) {
+ MaterialPalette materialPalette, long photoId, String photoUri) {
final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
putMaterialPalette(intent, materialPalette);
putPhotoId(intent, photoId);
+ putPhotoUri(intent, photoUri);
return intent;
}
@@ -159,6 +160,12 @@
}
}
+ private static void putPhotoUri(Intent intent, String photoUri) {
+ if (!Uri.EMPTY.toString().equals(photoUri)) {
+ intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_URI, photoUri);
+ }
+ }
+
private static void putRawContactDeltaValues(Intent intent,
RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName) {
// Pass on all the data that has been entered so far
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 734eb73..d4f961b 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -2638,7 +2638,8 @@
mContactData.getLookupUri(),
mHasComputedThemeColor
? new MaterialPalette(mColorFilterColor, mStatusBarColor) : null,
- mContactData.getPhotoId());
+ mContactData.getPhotoId(),
+ mContactData.getPhotoUri());
}
private void editContact() {