From 649d49f1e8a33b5e87181f16854f4c37ddf828b2 Mon Sep 17 00:00:00 2001
From: Thibault Wittemberg <thibault.wittemberg@savoirfairelinux.com>
Date: Mon, 24 Oct 2016 16:19:38 -0400
Subject: [PATCH] vcard: prevent NPE when vcard has an empty photo

Change-Id: If7d0206eef39a4d309ccaf9a37625feaad008c84
Tuleap: #1143
---
 .../java/cx/ring/adapters/ContactDetailsTask.java    | 10 +++++++++-
 .../main/java/cx/ring/adapters/SmartListAdapter.java | 12 ++++++++----
 .../main/java/cx/ring/fragments/CallFragment.java    |  7 ++++++-
 .../src/main/java/cx/ring/utils/CropImageUtils.java  |  6 +++++-
 4 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/ring-android/app/src/main/java/cx/ring/adapters/ContactDetailsTask.java b/ring-android/app/src/main/java/cx/ring/adapters/ContactDetailsTask.java
index 392ec8707..9e6d5f48f 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/ContactDetailsTask.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/ContactDetailsTask.java
@@ -153,7 +153,15 @@ public class ContactDetailsTask implements Runnable {
 
         if (vcard != null && !vcard.getPhotos().isEmpty()) {
             Photo tmp = vcard.getPhotos().get(0);
-            externalBMP = CropImageUtils.cropImageToCircle(tmp.getData());
+            Bitmap croppedBitmap;
+            if (tmp != null && tmp.getData() != null) {
+                croppedBitmap = CropImageUtils.cropImageToCircle(tmp.getData());
+            } else {
+                croppedBitmap = decodeSampledBitmapFromResource(mContext.getResources(), R.drawable.ic_contact_picture, mViewWidth, mViewHeight);
+            }
+
+            externalBMP = croppedBitmap != null ? croppedBitmap : decodeSampledBitmapFromResource(mContext.getResources(), R.drawable.ic_contact_picture, mViewWidth, mViewHeight);
+
         } else {
             Bitmap photoBmp;
             try {
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java b/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java
index 66804fd04..2247cea3f 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java
@@ -138,10 +138,14 @@ public class SmartListAdapter extends BaseAdapter {
     }
 
     public class ViewHolder {
-        @BindView(R.id.conv_participant) TextView convParticipants;
-        @BindView(R.id.conv_last_item) TextView convStatus;
-        @BindView(R.id.conv_last_time) TextView convTime;
-        @BindView(R.id.photo) ImageView photo;
+        @BindView(R.id.conv_participant)
+        TextView convParticipants;
+        @BindView(R.id.conv_last_item)
+        TextView convStatus;
+        @BindView(R.id.conv_last_time)
+        TextView convTime;
+        @BindView(R.id.photo)
+        ImageView photo;
         int position;
         public Conversation conv;
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
index f7de4e6e6..7f4ee62c7 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
@@ -949,7 +949,12 @@ public class CallFragment extends Fragment implements CallInterface, ContactDeta
 
         if (!vcard.getPhotos().isEmpty()) {
             Photo tmp = vcard.getPhotos().get(0);
-            contactBubbleView.setImageBitmap(CropImageUtils.cropImageToCircle(tmp.getData()));
+            if(tmp.getData() != null) {
+                contactBubbleView.setImageBitmap(CropImageUtils.cropImageToCircle(tmp.getData()));
+            }
+            else{
+                setDefaultPhoto();
+            }
         } else {
             setDefaultPhoto();
         }
diff --git a/ring-android/app/src/main/java/cx/ring/utils/CropImageUtils.java b/ring-android/app/src/main/java/cx/ring/utils/CropImageUtils.java
index 98d2bc09d..4fb8bc3a8 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/CropImageUtils.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/CropImageUtils.java
@@ -36,7 +36,11 @@ public class CropImageUtils {
     @Nullable
     public static Bitmap cropImageToCircle(@NonNull byte[] bArray) {
         Bitmap bitmap = BitmapFactory.decodeByteArray(bArray, 0, bArray.length);
-        return cropImageToCircle(bitmap);
+        if (bitmap != null) {
+            return cropImageToCircle(bitmap);
+        }
+
+        return null;
     }
 
     @Nullable
-- 
GitLab