64 lines
2.2 KiB
Java
Raw Normal View History

package org.thoughtcrime.securesms.contacts.avatars;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.provider.ContactsContract;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
import org.thoughtcrime.securesms.util.BitmapUtil;
import java.io.InputStream;
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);
2015-06-23 15:10:50 -07:00
else return new GeneratedContactPhoto("#");
}
public static ContactPhoto getDefaultGroupPhoto() {
2015-06-23 15:10:50 -07:00
return new ResourceContactPhoto(R.drawable.ic_group_white_24dp);
}
public static ContactPhoto getContactPhoto(Context context, Uri uri, String name) {
try {
InputStream inputStream = getContactPhotoStream(context, uri);
int targetSize = context.getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size);
if (inputStream != null) {
return new BitmapContactPhoto(BitmapUtil.createScaledBitmap(inputStream, getContactPhotoStream(context, uri), targetSize, targetSize));
}
} catch (BitmapDecodingException e) {
Log.w(TAG, e);
}
return getDefaultContactPhoto(name);
}
public static ContactPhoto getGroupContactPhoto(@Nullable byte[] avatar) {
if (avatar == null) return getDefaultGroupPhoto();
return new BitmapContactPhoto(BitmapFactory.decodeByteArray(avatar, 0, avatar.length));
}
private static InputStream getContactPhotoStream(Context context, Uri uri) {
if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) {
return ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), uri, true);
} else {
return ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), uri);
}
}
}