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 8c86189..9757a7d 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;
                 }
@@ -459,15 +459,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)
