2017-08-16 06:03:31 +02:00
|
|
|
package org.thoughtcrime.securesms.profiles;
|
|
|
|
|
|
|
|
|
|
|
|
import android.content.Context;
|
2020-02-11 00:40:22 +01:00
|
|
|
|
2019-06-05 21:47:14 +02:00
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.Nullable;
|
2017-08-16 06:03:31 +02:00
|
|
|
|
2018-03-19 22:10:21 +01:00
|
|
|
import com.annimon.stream.Stream;
|
|
|
|
|
2020-02-11 00:40:22 +01:00
|
|
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
2019-09-23 17:37:01 +02:00
|
|
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
2020-02-11 00:40:22 +01:00
|
|
|
import org.thoughtcrime.securesms.util.MediaUtil;
|
|
|
|
import org.whispersystems.signalservice.api.util.StreamDetails;
|
2017-08-16 06:03:31 +02:00
|
|
|
|
2020-02-11 00:40:22 +01:00
|
|
|
import java.io.ByteArrayInputStream;
|
2017-08-16 06:03:31 +02:00
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileInputStream;
|
2020-02-11 00:40:22 +01:00
|
|
|
import java.io.FileNotFoundException;
|
2017-08-16 06:03:31 +02:00
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
2018-03-19 22:10:21 +01:00
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.List;
|
2017-08-16 06:03:31 +02:00
|
|
|
|
|
|
|
public class AvatarHelper {
|
|
|
|
|
|
|
|
private static final String AVATAR_DIRECTORY = "avatars";
|
|
|
|
|
2019-09-07 05:40:06 +02:00
|
|
|
public static InputStream getInputStreamFor(@NonNull Context context, @NonNull RecipientId recipientId)
|
2017-08-16 06:03:31 +02:00
|
|
|
throws IOException
|
|
|
|
{
|
2019-09-07 05:40:06 +02:00
|
|
|
return new FileInputStream(getAvatarFile(context, recipientId));
|
2017-08-16 06:03:31 +02:00
|
|
|
}
|
|
|
|
|
2018-03-19 22:10:21 +01:00
|
|
|
public static List<File> getAvatarFiles(@NonNull Context context) {
|
|
|
|
File avatarDirectory = new File(context.getFilesDir(), AVATAR_DIRECTORY);
|
|
|
|
File[] results = avatarDirectory.listFiles();
|
|
|
|
|
|
|
|
if (results == null) return new LinkedList<>();
|
|
|
|
else return Stream.of(results).toList();
|
|
|
|
}
|
|
|
|
|
2019-09-23 17:37:01 +02:00
|
|
|
public static void delete(@NonNull Context context, @NonNull RecipientId recipientId) {
|
|
|
|
getAvatarFile(context, recipientId).delete();
|
2017-08-16 06:03:31 +02:00
|
|
|
}
|
|
|
|
|
2019-09-23 17:37:01 +02:00
|
|
|
public static @NonNull File getAvatarFile(@NonNull Context context, @NonNull RecipientId recipientId) {
|
2017-08-16 06:03:31 +02:00
|
|
|
File avatarDirectory = new File(context.getFilesDir(), AVATAR_DIRECTORY);
|
|
|
|
avatarDirectory.mkdirs();
|
|
|
|
|
2019-09-23 17:37:01 +02:00
|
|
|
return new File(avatarDirectory, new File(recipientId.serialize()).getName());
|
2017-08-16 06:03:31 +02:00
|
|
|
}
|
|
|
|
|
2019-09-23 17:37:01 +02:00
|
|
|
public static void setAvatar(@NonNull Context context, @NonNull RecipientId recipientId, @Nullable byte[] data)
|
2017-08-16 06:03:31 +02:00
|
|
|
throws IOException
|
|
|
|
{
|
|
|
|
if (data == null) {
|
2019-09-23 17:37:01 +02:00
|
|
|
delete(context, recipientId);
|
2017-08-16 06:03:31 +02:00
|
|
|
} else {
|
2019-09-23 17:37:01 +02:00
|
|
|
FileOutputStream out = new FileOutputStream(getAvatarFile(context, recipientId));
|
2017-08-16 06:03:31 +02:00
|
|
|
out.write(data);
|
|
|
|
out.close();
|
|
|
|
}
|
|
|
|
}
|
2020-02-11 00:40:22 +01:00
|
|
|
|
|
|
|
public static @NonNull StreamDetails avatarStream(@NonNull byte[] data) {
|
|
|
|
return new StreamDetails(new ByteArrayInputStream(data), MediaUtil.IMAGE_JPEG, data.length);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static @Nullable StreamDetails getSelfProfileAvatarStream(@NonNull Context context) {
|
|
|
|
File avatarFile = getAvatarFile(context, Recipient.self().getId());
|
|
|
|
|
|
|
|
if (avatarFile.exists() && avatarFile.length() > 0) {
|
|
|
|
try {
|
|
|
|
FileInputStream stream = new FileInputStream(avatarFile);
|
|
|
|
|
|
|
|
return new StreamDetails(stream, MediaUtil.IMAGE_JPEG, avatarFile.length());
|
|
|
|
} catch (FileNotFoundException e) {
|
|
|
|
throw new AssertionError(e);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
2017-08-16 06:03:31 +02:00
|
|
|
}
|