Also use Glide for contacts' avatar
This commit is contained in:
parent
25d4c1b430
commit
fadcdf0825
2 changed files with 46 additions and 87 deletions
|
@ -32,65 +32,14 @@ import android.provider.MediaStore;
|
|||
import android.util.DisplayMetrics;
|
||||
import android.util.TypedValue;
|
||||
import android.widget.ImageView;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import com.bumptech.glide.Glide;
|
||||
import org.linphone.R;
|
||||
import org.linphone.contacts.ContactsManager;
|
||||
import org.linphone.core.tools.Log;
|
||||
|
||||
public class ImageUtils {
|
||||
|
||||
public static Bitmap downloadBitmap(Uri uri) {
|
||||
URL url;
|
||||
InputStream is = null;
|
||||
try {
|
||||
url = new URL(uri.toString());
|
||||
is = url.openStream();
|
||||
return BitmapFactory.decodeStream(is);
|
||||
} catch (IOException e) {
|
||||
Log.e(e, e.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException x) {
|
||||
Log.e(x);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void setImagePictureFromUri(
|
||||
Context c, ImageView view, Uri pictureUri, Uri thumbnailUri) {
|
||||
if (pictureUri == null && thumbnailUri == null) {
|
||||
view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
||||
return;
|
||||
}
|
||||
if (pictureUri.getScheme().startsWith("http")) {
|
||||
Bitmap bm = downloadBitmap(pictureUri);
|
||||
if (bm == null) view.setImageResource(R.drawable.avatar);
|
||||
view.setImageBitmap(bm);
|
||||
} else {
|
||||
Bitmap bm = null;
|
||||
try {
|
||||
bm = MediaStore.Images.Media.getBitmap(c.getContentResolver(), pictureUri);
|
||||
} catch (IOException e) {
|
||||
if (thumbnailUri != null) {
|
||||
try {
|
||||
bm =
|
||||
MediaStore.Images.Media.getBitmap(
|
||||
c.getContentResolver(), thumbnailUri);
|
||||
} catch (IOException ie) {
|
||||
Log.e(ie);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bm != null) {
|
||||
view.setImageBitmap(bm);
|
||||
} else {
|
||||
view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
||||
}
|
||||
}
|
||||
Glide.with(c).load(pictureUri).thumbnail(Glide.with(c).load(thumbnailUri)).into(view);
|
||||
}
|
||||
|
||||
public static Bitmap getRoundBitmapFromUri(Context context, Uri fromPictureUri) {
|
||||
|
|
|
@ -19,20 +19,23 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.provider.MediaStore;
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import java.io.IOException;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
import org.linphone.LinphoneService;
|
||||
import org.linphone.R;
|
||||
import org.linphone.contacts.LinphoneContact;
|
||||
import org.linphone.core.ChatRoomSecurityLevel;
|
||||
import org.linphone.core.tools.Log;
|
||||
import org.linphone.utils.ImageUtils;
|
||||
|
||||
class ContactAvatarHolder {
|
||||
class ContactAvatarHolder implements RequestListener<Drawable> {
|
||||
public final ImageView contactPicture;
|
||||
public final ImageView avatarMask;
|
||||
public final ImageView securityLevel;
|
||||
|
@ -50,6 +53,27 @@ class ContactAvatarHolder {
|
|||
generatedAvatar.setVisibility(View.VISIBLE);
|
||||
securityLevel.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLoadFailed(
|
||||
@Nullable GlideException e,
|
||||
Object model,
|
||||
Target<Drawable> target,
|
||||
boolean isFirstResource) {
|
||||
generatedAvatar.setVisibility(View.VISIBLE);
|
||||
contactPicture.setVisibility(View.GONE);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(
|
||||
Drawable resource,
|
||||
Object model,
|
||||
Target<Drawable> target,
|
||||
DataSource dataSource,
|
||||
boolean isFirstResource) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public class ContactAvatar {
|
||||
|
@ -126,38 +150,24 @@ public class ContactAvatar {
|
|||
public static void displayAvatar(LinphoneContact contact, View v) {
|
||||
if (contact == null || v == null) return;
|
||||
|
||||
Bitmap bm = null;
|
||||
ContactAvatarHolder holder = new ContactAvatarHolder(v);
|
||||
holder.init();
|
||||
|
||||
if (contact.getThumbnailUri() != null
|
||||
&& contact.getThumbnailUri().getScheme().startsWith("http")) {
|
||||
bm = ImageUtils.downloadBitmap(contact.getThumbnailUri());
|
||||
} else {
|
||||
if (contact.getThumbnailUri() != null) {
|
||||
try {
|
||||
bm =
|
||||
MediaStore.Images.Media.getBitmap(
|
||||
LinphoneService.instance().getContentResolver(),
|
||||
contact.getThumbnailUri());
|
||||
} catch (IOException e) {
|
||||
Log.e(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bm != null) {
|
||||
holder.contactPicture.setImageBitmap(bm);
|
||||
holder.contactPicture.setVisibility(View.VISIBLE);
|
||||
holder.generatedAvatar.setVisibility(View.GONE);
|
||||
} else {
|
||||
// Kepp the generated avatar ready in case of failure while loading picture
|
||||
holder.generatedAvatar.setText(
|
||||
generateAvatar(
|
||||
contact.getFullName() == null
|
||||
? contact.getFirstName() + " " + contact.getLastName()
|
||||
: contact.getFullName()));
|
||||
holder.generatedAvatar.setVisibility(View.VISIBLE);
|
||||
}
|
||||
holder.generatedAvatar.setVisibility(View.GONE);
|
||||
|
||||
Context c = LinphoneService.instance().getApplicationContext();
|
||||
holder.contactPicture.setVisibility(View.VISIBLE);
|
||||
Glide.with(c)
|
||||
.load(contact.getPhotoUri())
|
||||
.thumbnail(Glide.with(c).load(contact.getThumbnailUri()))
|
||||
.listener(holder)
|
||||
.into(holder.contactPicture);
|
||||
holder.securityLevel.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue