mirror of
https://github.com/deltachat/deltachat-android.git
synced 2025-10-03 17:59:39 +02:00
display vcard view type and allow to import/export contacts as vcard (#3043)
* implement Rpc API for parse_vcard * allow to create Recipient from VcardContact * display vcard view-type in incoming/outgoing messages * fix linter warnings in Recipient class * properly show vcard view-type in quoted messages * display fallback avatar in quotes * allow to attach vcard * implement basic click listener * timestamp type got changed from float to int * set stick translation for "contact" * share contact as vcard using the new Rpc.makeVcard API * allow to import contact when clicking vcard
This commit is contained in:
parent
1884f9bc4f
commit
c705790d26
23 changed files with 565 additions and 96 deletions
|
@ -7,6 +7,7 @@ import android.net.Uri;
|
|||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
@ -20,11 +21,14 @@ import androidx.annotation.RequiresApi;
|
|||
import com.annimon.stream.Stream;
|
||||
import com.b44t.messenger.DcContact;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
import com.b44t.messenger.rpc.VcardContact;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
|
@ -185,7 +189,7 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver {
|
|||
}
|
||||
|
||||
private void setQuoteAttachment(@NonNull GlideRequests glideRequests, @NonNull SlideDeck slideDeck) {
|
||||
List<Slide> thumbnailSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasImage() || s.hasVideo() || s.hasSticker() || s.isWebxdcDocument()).limit(1).toList();
|
||||
List<Slide> thumbnailSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasImage() || s.hasVideo() || s.hasSticker() || s.isWebxdcDocument() || s.isVcard()).limit(1).toList();
|
||||
List<Slide> audioSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasAudio()).limit(1).toList();
|
||||
List<Slide> documentSlides = Stream.of(attachments.getSlides()).filter(Slide::hasDocument).limit(1).toList();
|
||||
|
||||
|
@ -206,7 +210,22 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver {
|
|||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
.into(thumbnailView);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Log.e(TAG, "failed to get webxdc icon", e);
|
||||
thumbnailView.setVisibility(GONE);
|
||||
}
|
||||
} else if (thumbnailSlides.get(0).isVcard()) {
|
||||
try {
|
||||
VcardContact vcardContact = DcHelper.getRpc(getContext()).parseVcard(quotedMsg.getFile()).get(0);
|
||||
Recipient recipient = new Recipient(getContext(), vcardContact);
|
||||
glideRequests.load(recipient.getContactPhoto(getContext()))
|
||||
.error(recipient.getFallbackAvatarDrawable(getContext(), false))
|
||||
.centerCrop()
|
||||
.override(getContext().getResources().getDimensionPixelSize(R.dimen.quote_thumb_size))
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.into(thumbnailView);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "failed to parse vCard", e);
|
||||
thumbnailView.setVisibility(GONE);
|
||||
}
|
||||
} else {
|
||||
Uri thumbnailUri = thumbnailSlides.get(0).getUri();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue