Merge "Don't allow read-only photos to be changed in compact editor" into mnc-dev
diff --git a/src/com/android/contacts/editor/CompactPhotoEditorView.java b/src/com/android/contacts/editor/CompactPhotoEditorView.java
index 0b1cbe8..0aa5af3 100644
--- a/src/com/android/contacts/editor/CompactPhotoEditorView.java
+++ b/src/com/android/contacts/editor/CompactPhotoEditorView.java
@@ -73,7 +73,9 @@
     private MaterialPalette mMaterialPalette;
 
     private QuickContactImageView mPhotoImageView;
+    private View mPhotoIcon;
     private View mPhotoIconOverlay;
+    private View mPhotoTouchInterceptOverlay;
 
     public CompactPhotoEditorView(Context context) {
         this(context, null);
@@ -107,8 +109,9 @@
         mContactPhotoManager = ContactPhotoManager.getInstance(getContext());
 
         mPhotoImageView = (QuickContactImageView) findViewById(R.id.photo);
+        mPhotoIcon = findViewById(R.id.photo_icon);
         mPhotoIconOverlay = findViewById(R.id.photo_icon_overlay);
-        findViewById(R.id.photo_touch_intercept_overlay).setOnClickListener(this);
+        mPhotoTouchInterceptOverlay = findViewById(R.id.photo_touch_intercept_overlay);
     }
 
     public void setValues(DataKind dataKind, ValuesDelta valuesDelta,
@@ -118,6 +121,13 @@
         mReadOnly = readOnly;
         mMaterialPalette = materialPalette;
 
+        if (mReadOnly) {
+            mPhotoIcon.setVisibility(View.GONE);
+            mPhotoIconOverlay.setVisibility(View.GONE);
+        } else {
+            mPhotoTouchInterceptOverlay.setOnClickListener(this);
+        }
+
         setId(viewIdGenerator.getId(rawContactDelta, dataKind, valuesDelta, /* viewIndex =*/ 0));
 
         if (valuesDelta == null) {
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 3a567fb..669e400 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -293,15 +293,15 @@
                     rawContactDelta, accountType, Photo.CONTENT_ITEM_TYPE);
 
             final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
-            if (dataKind != null) {
+            if (dataKind != null && dataKind.editable) {
                 for (ValuesDelta valuesDelta
                         : rawContactDelta.getMimeEntries(Photo.CONTENT_ITEM_TYPE)) {
                     if (valuesDelta != null && valuesDelta.getId() != null
                             && valuesDelta.getId().equals(photoId)) {
                         mPhotoRawContactId = rawContactDelta.getRawContactId();
                         mPhoto.setValues(dataKind, valuesDelta, rawContactDelta,
-                                /* readOnly =*/ !dataKind.editable, mMaterialPalette,
-                                viewIdGenerator);
+                                !accountType.areContactsWritable(),
+                                mMaterialPalette, viewIdGenerator);
                         return;
                     }
                 }
@@ -313,13 +313,13 @@
             if (!rawContactDelta.isVisible()) continue;
             final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
             final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
-            if (dataKind != null) {
+            if (dataKind != null && dataKind.editable) {
                 final ValuesDelta valuesDelta = getNonEmptySuperPrimaryValuesDeltas(
                         rawContactDelta, Photo.CONTENT_ITEM_TYPE, dataKind);
                 if (valuesDelta != null) {
                     mPhotoRawContactId = rawContactDelta.getRawContactId();
                     mPhoto.setValues(dataKind, valuesDelta, rawContactDelta,
-                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            !accountType.areContactsWritable(), mMaterialPalette,
                             viewIdGenerator);
                     return;
                 }
@@ -330,13 +330,13 @@
             if (!rawContactDelta.isVisible()) continue;
             final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
             final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
-            if (dataKind != null) {
+            if (dataKind != null && dataKind.editable) {
                 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,
+                            !accountType.areContactsWritable(), mMaterialPalette,
                             viewIdGenerator);
                     return;
                 }
@@ -347,13 +347,13 @@
             if (!rawContactDelta.isVisible()) continue;
             final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
             final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
-            if (dataKind != null) {
+            if (dataKind != null && dataKind.editable) {
                 final ValuesDelta valuesDelta = rawContactDelta.getSuperPrimaryEntry(
                         dataKind.mimeType, /* forceSelection =*/ true);
                 if (valuesDelta != null) {
                     mPhotoRawContactId = rawContactDelta.getRawContactId();
                     mPhoto.setValues(dataKind, valuesDelta, rawContactDelta,
-                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            !accountType.areContactsWritable(), mMaterialPalette,
                             viewIdGenerator);
                     return;
                 }
@@ -461,15 +461,12 @@
 
     private void addEditorViews(RawContactDeltaList rawContactDeltas) {
         for (RawContactDelta rawContactDelta : rawContactDeltas) {
-            if (!rawContactDelta.isVisible()) {
-                continue;
-            }
+            if (!rawContactDelta.isVisible()) continue;
             final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
 
             for (DataKind dataKind : accountType.getSortedDataKinds()) {
-                if (!dataKind.editable) {
-                    continue;
-                }
+                if (!dataKind.editable) continue;
+
                 final String mimeType = dataKind.mimeType;
                 vlog(mimeType + " " + dataKind.fieldList.size() + " field(s)");
                 if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)