diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-11-04 19:59:20 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-11-04 19:59:20 +0300 |
commit | 27a07f62966fbd22aa828acb3c386e9a8cbfcfbd (patch) | |
tree | 6610631324f70032be6a4c313e4941570c465c48 /app/src/main/java/it/niedermann/nextcloud/deck | |
parent | a78b0f8935d90870527b3e75ed27c4f35349972f (diff) |
Provide fallback initials for contacts wtihout avatars
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactItemViewHolder.java | 30 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/util/VCardUtil.java | 14 |
2 files changed, 38 insertions, 6 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactItemViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactItemViewHolder.java index 272fcdca3..3a3eee3f9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactItemViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactItemViewHolder.java @@ -1,7 +1,9 @@ package it.niedermann.nextcloud.deck.ui.card.attachments.picker; import android.graphics.Bitmap; +import android.graphics.drawable.ColorDrawable; import android.net.Uri; +import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -15,6 +17,10 @@ import java.util.function.Consumer; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ItemPickerUserBinding; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; +import static it.niedermann.nextcloud.deck.util.VCardUtil.getColorBasedOnDisplayName; + public class ContactItemViewHolder extends RecyclerView.ViewHolder { private final ItemPickerUserBinding binding; @@ -27,11 +33,25 @@ public class ContactItemViewHolder extends RecyclerView.ViewHolder { public void bind(@NonNull Uri uri, @Nullable Bitmap image, @NonNull String displayName, @NonNull Consumer<Uri> onSelect) { itemView.setOnClickListener((v) -> onSelect.accept(uri)); binding.displayName.setText(displayName); - Glide.with(itemView.getContext()) - .load(image) - .placeholder(R.drawable.ic_person_grey600_24dp) - .apply(RequestOptions.circleCropTransform()) - .into(binding.avatar); + if (image == null) { + binding.initials.setVisibility(VISIBLE); + binding.initials.setText(TextUtils.isEmpty(displayName) + ? null + : String.valueOf(displayName.charAt(0)) + ); + Glide.with(itemView.getContext()) + .load(new ColorDrawable(getColorBasedOnDisplayName(itemView.getContext(), displayName))) + .apply(RequestOptions.circleCropTransform()) + .into(binding.avatar); + } else { + binding.initials.setVisibility(GONE); + binding.initials.setText(null); + Glide.with(itemView.getContext()) + .load(image) + .placeholder(R.drawable.ic_person_grey600_24dp) + .apply(RequestOptions.circleCropTransform()) + .into(binding.avatar); + } } public void bindError() { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/VCardUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/VCardUtil.java index b0e971082..274af332d 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/util/VCardUtil.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/VCardUtil.java @@ -3,12 +3,17 @@ package it.niedermann.nextcloud.deck.util; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; +import android.graphics.Color; import android.net.Uri; import android.provider.ContactsContract; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import java.util.NoSuchElementException; +import java.util.Objects; + +import it.niedermann.nextcloud.deck.R; public class VCardUtil { @@ -19,7 +24,7 @@ public class VCardUtil { public static Uri getVCardContentUri(@NonNull Context context, @NonNull Uri contactUri) throws NoSuchElementException { final ContentResolver cr = context.getContentResolver(); try (final Cursor cursor = cr.query(contactUri, null, null, null, null)) { - if (cursor.moveToFirst()) { + if (cursor != null && cursor.moveToFirst()) { final String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); } else { @@ -27,4 +32,11 @@ public class VCardUtil { } } } + + @ColorInt + public static int getColorBasedOnDisplayName(@NonNull Context context, @NonNull String displayName) { + final String[] colors = context.getResources().getStringArray(R.array.board_default_colors); + final int hashCode = Objects.hashCode(displayName); + return Color.parseColor(colors[(hashCode < 0 ? hashCode * -1 : hashCode) % colors.length]); + } } |