|
|
@ -20,13 +20,14 @@ package eu.faircode.email;
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
import android.Manifest;
|
|
|
|
import android.Manifest;
|
|
|
|
|
|
|
|
import android.content.ContentResolver;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.res.ColorStateList;
|
|
|
|
import android.content.res.ColorStateList;
|
|
|
|
|
|
|
|
import android.graphics.BitmapFactory;
|
|
|
|
import android.graphics.Typeface;
|
|
|
|
import android.graphics.Typeface;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.ParcelFileDescriptor;
|
|
|
|
|
|
|
|
import android.provider.ContactsContract;
|
|
|
|
import android.provider.ContactsContract;
|
|
|
|
import android.text.SpannableString;
|
|
|
|
import android.text.SpannableString;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import android.text.TextUtils;
|
|
|
@ -53,6 +54,7 @@ import androidx.recyclerview.widget.DiffUtil;
|
|
|
|
import androidx.recyclerview.widget.ListUpdateCallback;
|
|
|
|
import androidx.recyclerview.widget.ListUpdateCallback;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.text.NumberFormat;
|
|
|
|
import java.text.NumberFormat;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
@ -124,36 +126,16 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
|
|
|
|
|
|
|
|
|
|
|
|
if (contact.avatar == null || !contacts)
|
|
|
|
if (contact.avatar == null || !contacts)
|
|
|
|
ivAvatar.setImageDrawable(null);
|
|
|
|
ivAvatar.setImageDrawable(null);
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
try {
|
|
|
|
ContentResolver resolver = context.getContentResolver();
|
|
|
|
Uri uri = Uri.parse(contact.avatar + "/photo");
|
|
|
|
Uri lookupUri = Uri.parse(contact.avatar);
|
|
|
|
|
|
|
|
try (InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(
|
|
|
|
/*
|
|
|
|
resolver, lookupUri, false)) {
|
|
|
|
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileDescriptor android.content.res.AssetFileDescriptor.getFileDescriptor()' on a null object reference
|
|
|
|
ivAvatar.setImageBitmap(BitmapFactory.decodeStream(is));
|
|
|
|
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileDescriptor android.content.res.AssetFileDescriptor.getFileDescriptor()' on a null object reference
|
|
|
|
|
|
|
|
at android.graphics.ImageDecoder$ContentResolverSource.createImageDecoder(ImageDecoder.java:286)
|
|
|
|
|
|
|
|
at android.graphics.ImageDecoder.decodeDrawableImpl(ImageDecoder.java:1652)
|
|
|
|
|
|
|
|
at android.graphics.ImageDecoder.decodeDrawable(ImageDecoder.java:1645)
|
|
|
|
|
|
|
|
at android.widget.ImageView.getDrawableFromUri(ImageView.java:952)
|
|
|
|
|
|
|
|
at android.widget.ImageView.resolveUri(ImageView.java:921)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at android.widget.ImageView.setImageURI(ImageView.java:532)
|
|
|
|
|
|
|
|
at androidx.appcompat.widget.AppCompatImageView.setImageURI(SourceFile:116)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at android.widget.ImageView.onMeasure(ImageView.java:1056)
|
|
|
|
|
|
|
|
at android.view.View.measure(View.java:23188)
|
|
|
|
|
|
|
|
at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(SourceFile:806)
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
|
|
|
|
|
|
|
|
if (pfd == null)
|
|
|
|
|
|
|
|
throw new IllegalArgumentException("Contact inaccessible");
|
|
|
|
|
|
|
|
pfd.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ivAvatar.setImageURI(uri);
|
|
|
|
|
|
|
|
} catch (Throwable ex) {
|
|
|
|
} catch (Throwable ex) {
|
|
|
|
Log.e(ex);
|
|
|
|
Log.e(ex);
|
|
|
|
ivAvatar.setImageResource(R.drawable.baseline_broken_image_24);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
tvName.setText(contact.name == null ? contact.email : contact.name);
|
|
|
|
tvName.setText(contact.name == null ? contact.email : contact.name);
|
|
|
|
tvEmail.setText(contact.accountName + "/" + contact.email);
|
|
|
|
tvEmail.setText(contact.accountName + "/" + contact.email);
|
|
|
|