package org.thoughtcrime.securesms.components; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatImageView; import android.util.AttributeSet; import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.thoughtcrime.securesms.ProfileActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.ThemeUtil; public class AvatarImageView extends AppCompatImageView { private static final String TAG = AvatarImageView.class.getSimpleName(); private OnClickListener listener = null; public AvatarImageView(Context context) { super(context); setScaleType(ScaleType.CENTER_CROP); } public AvatarImageView(Context context, AttributeSet attrs) { super(context, attrs); setScaleType(ScaleType.CENTER_CROP); if (attrs != null) { TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AvatarImageView, 0, 0); typedArray.recycle(); } } @Override public void setOnClickListener(OnClickListener listener) { this.listener = listener; super.setOnClickListener(listener); } public void setAvatar(@NonNull GlideRequests requestManager, @Nullable Recipient recipient, boolean quickContactEnabled) { if (recipient != null) { ContactPhoto contactPhoto = recipient.getContactPhoto(getContext()); requestManager.load(contactPhoto) .fallback(recipient.getFallbackAvatarDrawable(getContext())) .error(recipient.getFallbackAvatarDrawable(getContext())) .diskCacheStrategy(DiskCacheStrategy.NONE) .circleCrop() .into(this); if(quickContactEnabled) { setAvatarClickHandler(recipient, quickContactEnabled); } } else { setImageDrawable(new GeneratedContactPhoto("+").asDrawable(getContext(), ThemeUtil.getDummyContactColor(getContext()))); super.setOnClickListener(listener); } } public void clear(@NonNull GlideRequests glideRequests) { glideRequests.clear(this); } private void setAvatarClickHandler(final Recipient recipient, boolean quickContactEnabled) { if (!recipient.isGroupRecipient() && quickContactEnabled) { super.setOnClickListener(v -> { if(recipient.getAddress().isDcContact()) { Intent intent = new Intent(getContext(), ProfileActivity.class); intent.putExtra(ProfileActivity.CONTACT_ID_EXTRA, recipient.getAddress().getDcContactId()); getContext().startActivity(intent); } }); } else { super.setOnClickListener(listener); } } }