Signal-Android/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java

72 lines
2.5 KiB
Java

package org.thoughtcrime.securesms.contacts.avatars;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.ContactPhotoUriLoader.ContactPhotoUri;
import java.util.concurrent.ExecutionException;
public class ContactPhotoFactory {
private static final String TAG = ContactPhotoFactory.class.getSimpleName();
public static ContactPhoto getLoadingPhoto() {
return new TransparentContactPhoto();
}
public static ContactPhoto getDefaultContactPhoto(@Nullable String name) {
if (!TextUtils.isEmpty(name)) return new GeneratedContactPhoto(name);
else return new GeneratedContactPhoto("#");
}
public static ContactPhoto getResourceContactPhoto(@DrawableRes int resourceId) {
return new ResourceContactPhoto(resourceId);
}
public static ContactPhoto getDefaultGroupPhoto() {
return new ResourceContactPhoto(R.drawable.ic_group_white_24dp);
}
public static ContactPhoto getContactPhoto(Context context, Uri uri, String name) {
int targetSize = context.getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size);
return getContactPhoto(context, uri, name, targetSize);
}
public static ContactPhoto getContactPhoto(@NonNull Context context,
@Nullable Uri uri,
@Nullable String name,
int targetSize)
{
if (uri == null) return getDefaultContactPhoto(name);
try {
Bitmap bitmap = Glide.with(context)
.load(new ContactPhotoUri(uri)).asBitmap()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.centerCrop().into(targetSize, targetSize).get();
return new BitmapContactPhoto(bitmap);
} catch (ExecutionException e) {
return getDefaultContactPhoto(name);
} catch (InterruptedException e) {
throw new AssertionError(e);
}
}
public static ContactPhoto getGroupContactPhoto(@Nullable byte[] avatar) {
if (avatar == null) return getDefaultGroupPhoto();
return new BitmapContactPhoto(BitmapFactory.decodeByteArray(avatar, 0, avatar.length));
}
}