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