Add support for backing up wallpapers.

This commit is contained in:
Greyson Parrelli
2024-09-20 12:24:57 -04:00
committed by GitHub
parent e14078d2ec
commit a7bdfb6d76
30 changed files with 907 additions and 410 deletions

View File

@@ -9,7 +9,6 @@ import org.signal.core.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.conversation.colors.ChatColors;
import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
@@ -50,7 +49,7 @@ class ChatWallpaperRepository {
EXECUTOR.execute(() -> {
List<ChatWallpaper> wallpapers = new ArrayList<>(ChatWallpaper.BuiltIns.INSTANCE.getAllBuiltIns());
wallpapers.addAll(WallpaperStorage.getAll(AppDependencies.getApplication()));
wallpapers.addAll(WallpaperStorage.getAll());
consumer.accept(wallpapers);
});
}
@@ -59,17 +58,17 @@ class ChatWallpaperRepository {
if (recipientId != null) {
//noinspection CodeBlock2Expr
EXECUTOR.execute(() -> {
SignalDatabase.recipients().setWallpaper(recipientId, chatWallpaper);
SignalDatabase.recipients().setWallpaper(recipientId, chatWallpaper, true);
onWallpaperSaved.run();
});
} else {
SignalStore.wallpaper().setWallpaper(AppDependencies.getApplication(), chatWallpaper);
SignalStore.wallpaper().setWallpaper(chatWallpaper);
onWallpaperSaved.run();
}
}
void resetAllWallpaper(@NonNull Runnable onWallpaperReset) {
SignalStore.wallpaper().setWallpaper(AppDependencies.getApplication(), null);
SignalStore.wallpaper().setWallpaper(null);
EXECUTOR.execute(() -> {
SignalDatabase.recipients().resetAllWallpaper();
onWallpaperReset.run();
@@ -95,7 +94,8 @@ class ChatWallpaperRepository {
.setWallpaper(recipientId,
ChatWallpaperFactory.updateWithDimming(recipient.getWallpaper(),
dimInDarkTheme ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME
: 0f));
: 0f),
false);
} else {
throw new IllegalStateException("Unexpected call to setDimInDarkTheme, no wallpaper has been set on the given recipient or globally.");
}

View File

@@ -17,42 +17,42 @@ import java.util.Objects;
public final class GradientChatWallpaper implements ChatWallpaper, Parcelable {
public static final ChatWallpaper SUNSET = new GradientChatWallpaper(168f,
new int[] { 0xFFF3DC47, 0xFFF3DA47, 0xFFF2D546, 0xFFF2CC46, 0xFFF1C146, 0xFFEFB445, 0xFFEEA544, 0xFFEC9644, 0xFFEB8743, 0xFFE97743, 0xFFE86942, 0xFFE65C41, 0xFFE55041, 0xFFE54841, 0xFFE44240, 0xFFE44040 },
new float[] { 0.0f, 0.0807f, 0.1554f, 0.225f, 0.2904f, 0.3526f, 0.4125f, 0.471f, 0.529f, 0.5875f, 0.6474f, 0.7096f, 0.775f, 0.8446f, 0.9193f, 1f },
0f);
public static final ChatWallpaper NOIR = new GradientChatWallpaper(180f,
new int[] { 0xFF16161D, 0xFF17171E, 0xFF1A1A22, 0xFF1F1F28, 0xFF26262F, 0xFF2D2D38, 0xFF353542, 0xFF3E3E4C, 0xFF474757, 0xFF4F4F61, 0xFF57576B, 0xFF5F5F74, 0xFF65657C, 0xFF6A6A82, 0xFF6D6D85, 0xFF6E6E87 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final ChatWallpaper HEATMAP = new GradientChatWallpaper(192f,
new int[] { 0xFFF53844, 0xFFF33845, 0xFFEC3848, 0xFFE2384C, 0xFFD63851, 0xFFC73857, 0xFFB6385E, 0xFFA43866, 0xFF93376D, 0xFF813775, 0xFF70377C, 0xFF613782, 0xFF553787, 0xFF4B378B, 0xFF44378E, 0xFF42378F },
new float[] { 0.0000f, 0.0075f, 0.0292f, 0.0637f, 0.1097f, 0.1659f, 0.2310f, 0.3037f, 0.3827f, 0.4666f, 0.5541f, 0.6439f, 0.7347f, 0.8252f, 0.9141f, 1.0000f },
0f);
public static final ChatWallpaper AQUA = new GradientChatWallpaper(180f,
new int[] { 0xFF0093E9, 0xFF0294E9, 0xFF0696E7, 0xFF0D99E5, 0xFF169EE3, 0xFF21A3E0, 0xFF2DA8DD, 0xFF3AAEDA, 0xFF46B5D6, 0xFF53BBD3, 0xFF5FC0D0, 0xFF6AC5CD, 0xFF73CACB, 0xFF7ACDC9, 0xFF7ECFC7, 0xFF80D0C7 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final ChatWallpaper IRIDESCENT = new GradientChatWallpaper(192f,
new int[] { 0xFFF04CE6, 0xFFEE4BE6, 0xFFE54AE5, 0xFFD949E5, 0xFFC946E4, 0xFFB644E3, 0xFFA141E3, 0xFF8B3FE2, 0xFF743CE1, 0xFF5E39E0, 0xFF4936DF, 0xFF3634DE, 0xFF2632DD, 0xFF1930DD, 0xFF112FDD, 0xFF0E2FDD },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final ChatWallpaper MONSTERA = new GradientChatWallpaper(180f,
new int[] { 0xFF65CDAC, 0xFF64CDAB, 0xFF60CBA8, 0xFF5BC8A3, 0xFF55C49D, 0xFF4DC096, 0xFF45BB8F, 0xFF3CB687, 0xFF33B17F, 0xFF2AAC76, 0xFF21A76F, 0xFF1AA268, 0xFF139F62, 0xFF0E9C5E, 0xFF0B9A5B, 0xFF0A995A },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final ChatWallpaper BLISS = new GradientChatWallpaper(180f,
new int[] { 0xFFD8E1FA, 0xFFD8E0F9, 0xFFD8DEF7, 0xFFD8DBF3, 0xFFD8D6EE, 0xFFD7D1E8, 0xFFD7CCE2, 0xFFD7C6DB, 0xFFD7BFD4, 0xFFD7B9CD, 0xFFD6B4C7, 0xFFD6AFC1, 0xFFD6AABC, 0xFFD6A7B8, 0xFFD6A5B6, 0xFFD6A4B5 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final ChatWallpaper SKY = new GradientChatWallpaper(180f,
new int[] { 0xFFD8EBFD, 0xFFD7EAFD, 0xFFD5E9FD, 0xFFD2E7FD, 0xFFCDE5FD, 0xFFC8E3FD, 0xFFC3E0FD, 0xFFBDDDFC, 0xFFB7DAFC, 0xFFB2D7FC, 0xFFACD4FC, 0xFFA7D1FC, 0xFFA3CFFB, 0xFFA0CDFB, 0xFF9ECCFB, 0xFF9DCCFB },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final ChatWallpaper PEACH = new GradientChatWallpaper(192f,
new int[] { 0xFFFFE5C2, 0xFFFFE4C1, 0xFFFFE2BF, 0xFFFFDFBD, 0xFFFEDBB9, 0xFFFED6B5, 0xFFFED1B1, 0xFFFDCCAC, 0xFFFDC6A8, 0xFFFDC0A3, 0xFFFCBB9F, 0xFFFCB69B, 0xFFFCB297, 0xFFFCAF95, 0xFFFCAD93, 0xFFFCAC92 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final GradientChatWallpaper SUNSET = new GradientChatWallpaper(168f,
new int[] { 0xFFF3DC47, 0xFFF3DA47, 0xFFF2D546, 0xFFF2CC46, 0xFFF1C146, 0xFFEFB445, 0xFFEEA544, 0xFFEC9644, 0xFFEB8743, 0xFFE97743, 0xFFE86942, 0xFFE65C41, 0xFFE55041, 0xFFE54841, 0xFFE44240, 0xFFE44040 },
new float[] { 0.0f, 0.0807f, 0.1554f, 0.225f, 0.2904f, 0.3526f, 0.4125f, 0.471f, 0.529f, 0.5875f, 0.6474f, 0.7096f, 0.775f, 0.8446f, 0.9193f, 1f },
0f);
public static final GradientChatWallpaper NOIR = new GradientChatWallpaper(180f,
new int[] { 0xFF16161D, 0xFF17171E, 0xFF1A1A22, 0xFF1F1F28, 0xFF26262F, 0xFF2D2D38, 0xFF353542, 0xFF3E3E4C, 0xFF474757, 0xFF4F4F61, 0xFF57576B, 0xFF5F5F74, 0xFF65657C, 0xFF6A6A82, 0xFF6D6D85, 0xFF6E6E87 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final GradientChatWallpaper HEATMAP = new GradientChatWallpaper(192f,
new int[] { 0xFFF53844, 0xFFF33845, 0xFFEC3848, 0xFFE2384C, 0xFFD63851, 0xFFC73857, 0xFFB6385E, 0xFFA43866, 0xFF93376D, 0xFF813775, 0xFF70377C, 0xFF613782, 0xFF553787, 0xFF4B378B, 0xFF44378E, 0xFF42378F },
new float[] { 0.0000f, 0.0075f, 0.0292f, 0.0637f, 0.1097f, 0.1659f, 0.2310f, 0.3037f, 0.3827f, 0.4666f, 0.5541f, 0.6439f, 0.7347f, 0.8252f, 0.9141f, 1.0000f },
0f);
public static final GradientChatWallpaper AQUA = new GradientChatWallpaper(180f,
new int[] { 0xFF0093E9, 0xFF0294E9, 0xFF0696E7, 0xFF0D99E5, 0xFF169EE3, 0xFF21A3E0, 0xFF2DA8DD, 0xFF3AAEDA, 0xFF46B5D6, 0xFF53BBD3, 0xFF5FC0D0, 0xFF6AC5CD, 0xFF73CACB, 0xFF7ACDC9, 0xFF7ECFC7, 0xFF80D0C7 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final GradientChatWallpaper IRIDESCENT = new GradientChatWallpaper(192f,
new int[] { 0xFFF04CE6, 0xFFEE4BE6, 0xFFE54AE5, 0xFFD949E5, 0xFFC946E4, 0xFFB644E3, 0xFFA141E3, 0xFF8B3FE2, 0xFF743CE1, 0xFF5E39E0, 0xFF4936DF, 0xFF3634DE, 0xFF2632DD, 0xFF1930DD, 0xFF112FDD, 0xFF0E2FDD },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final GradientChatWallpaper MONSTERA = new GradientChatWallpaper(180f,
new int[] { 0xFF65CDAC, 0xFF64CDAB, 0xFF60CBA8, 0xFF5BC8A3, 0xFF55C49D, 0xFF4DC096, 0xFF45BB8F, 0xFF3CB687, 0xFF33B17F, 0xFF2AAC76, 0xFF21A76F, 0xFF1AA268, 0xFF139F62, 0xFF0E9C5E, 0xFF0B9A5B, 0xFF0A995A },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final GradientChatWallpaper BLISS = new GradientChatWallpaper(180f,
new int[] { 0xFFD8E1FA, 0xFFD8E0F9, 0xFFD8DEF7, 0xFFD8DBF3, 0xFFD8D6EE, 0xFFD7D1E8, 0xFFD7CCE2, 0xFFD7C6DB, 0xFFD7BFD4, 0xFFD7B9CD, 0xFFD6B4C7, 0xFFD6AFC1, 0xFFD6AABC, 0xFFD6A7B8, 0xFFD6A5B6, 0xFFD6A4B5 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final GradientChatWallpaper SKY = new GradientChatWallpaper(180f,
new int[] { 0xFFD8EBFD, 0xFFD7EAFD, 0xFFD5E9FD, 0xFFD2E7FD, 0xFFCDE5FD, 0xFFC8E3FD, 0xFFC3E0FD, 0xFFBDDDFC, 0xFFB7DAFC, 0xFFB2D7FC, 0xFFACD4FC, 0xFFA7D1FC, 0xFFA3CFFB, 0xFFA0CDFB, 0xFF9ECCFB, 0xFF9DCCFB },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
public static final GradientChatWallpaper PEACH = new GradientChatWallpaper(192f,
new int[] { 0xFFFFE5C2, 0xFFFFE4C1, 0xFFFFE2BF, 0xFFFFDFBD, 0xFFFEDBB9, 0xFFFED6B5, 0xFFFED1B1, 0xFFFDCCAC, 0xFFFDC6A8, 0xFFFDC0A3, 0xFFFCBB9F, 0xFFFCB69B, 0xFFFCB297, 0xFFFCAF95, 0xFFFCAD93, 0xFFFCAC92 },
new float[] { 0.0000f, 0.0807f, 0.1554f, 0.2250f, 0.2904f, 0.3526f, 0.4125f, 0.4710f, 0.5290f, 0.5875f, 0.6474f, 0.7096f, 0.7750f, 0.8446f, 0.9193f, 1.0000f },
0f);
private final float degrees;
@@ -155,6 +155,10 @@ public final class GradientChatWallpaper implements ChatWallpaper, Parcelable {
return result;
}
public int[] getColors() {
return colors;
}
public static final Creator<GradientChatWallpaper> CREATOR = new Creator<GradientChatWallpaper>() {
@Override
public GradientChatWallpaper createFromParcel(Parcel in) {

View File

@@ -14,18 +14,18 @@ import java.util.Objects;
public final class SingleColorChatWallpaper implements ChatWallpaper, Parcelable {
public static final ChatWallpaper BLUSH = new SingleColorChatWallpaper(0xFFE26983, 0f);
public static final ChatWallpaper COPPER = new SingleColorChatWallpaper(0xFFDF9171, 0f);
public static final ChatWallpaper DUST = new SingleColorChatWallpaper(0xFF9E9887, 0f);
public static final ChatWallpaper CELADON = new SingleColorChatWallpaper(0xFF89AE8F, 0f);
public static final ChatWallpaper RAINFOREST = new SingleColorChatWallpaper(0xFF146148, 0f);
public static final ChatWallpaper PACIFIC = new SingleColorChatWallpaper(0xFF32C7E2, 0f);
public static final ChatWallpaper FROST = new SingleColorChatWallpaper(0xFF7C99B6, 0f);
public static final ChatWallpaper NAVY = new SingleColorChatWallpaper(0xFF403B91, 0f);
public static final ChatWallpaper LILAC = new SingleColorChatWallpaper(0xFFC988E7, 0f);
public static final ChatWallpaper PINK = new SingleColorChatWallpaper(0xFFE297C3, 0f);
public static final ChatWallpaper EGGPLANT = new SingleColorChatWallpaper(0xFF624249, 0f);
public static final ChatWallpaper SILVER = new SingleColorChatWallpaper(0xFFA2A2AA, 0f);
public static final SingleColorChatWallpaper BLUSH = new SingleColorChatWallpaper(0xFFE26983, 0f);
public static final SingleColorChatWallpaper COPPER = new SingleColorChatWallpaper(0xFFDF9171, 0f);
public static final SingleColorChatWallpaper DUST = new SingleColorChatWallpaper(0xFF9E9887, 0f);
public static final SingleColorChatWallpaper CELADON = new SingleColorChatWallpaper(0xFF89AE8F, 0f);
public static final SingleColorChatWallpaper RAINFOREST = new SingleColorChatWallpaper(0xFF146148, 0f);
public static final SingleColorChatWallpaper PACIFIC = new SingleColorChatWallpaper(0xFF32C7E2, 0f);
public static final SingleColorChatWallpaper FROST = new SingleColorChatWallpaper(0xFF7C99B6, 0f);
public static final SingleColorChatWallpaper NAVY = new SingleColorChatWallpaper(0xFF403B91, 0f);
public static final SingleColorChatWallpaper LILAC = new SingleColorChatWallpaper(0xFFC988E7, 0f);
public static final SingleColorChatWallpaper PINK = new SingleColorChatWallpaper(0xFFE297C3, 0f);
public static final SingleColorChatWallpaper EGGPLANT = new SingleColorChatWallpaper(0xFF624249, 0f);
public static final SingleColorChatWallpaper SILVER = new SingleColorChatWallpaper(0xFFA2A2AA, 0f);
private final @ColorInt int color;
private final float dimLevelInDarkTheme;
@@ -95,6 +95,10 @@ public final class SingleColorChatWallpaper implements ChatWallpaper, Parcelable
return Objects.hash(color, dimLevelInDarkTheme);
}
public int getColor() {
return color;
}
public static final Creator<SingleColorChatWallpaper> CREATOR = new Creator<SingleColorChatWallpaper>() {
@Override
public SingleColorChatWallpaper createFromParcel(Parcel in) {

View File

@@ -27,7 +27,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
final class UriChatWallpaper implements ChatWallpaper, Parcelable {
public final class UriChatWallpaper implements ChatWallpaper, Parcelable {
private static final LruCache<Uri, Bitmap> CACHE = new LruCache<Uri, Bitmap>((int) Runtime.getRuntime().maxMemory() / 8) {
@Override
@@ -118,6 +118,10 @@ final class UriChatWallpaper implements ChatWallpaper, Parcelable {
return false;
}
public @NonNull Uri getUri() {
return uri;
}
@Override
public @NonNull Wallpaper serialize() {
return new Wallpaper.Builder()

View File

@@ -1,18 +1,19 @@
package org.thoughtcrime.securesms.wallpaper;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.attachments.AttachmentId;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.jobs.UploadAttachmentToArchiveJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.util.storage.FileStorage;
import org.thoughtcrime.securesms.mms.PartUriParser;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@@ -26,31 +27,28 @@ public final class WallpaperStorage {
private static final String TAG = Log.tag(WallpaperStorage.class);
private static final String DIRECTORY = "wallpapers";
private static final String FILENAME_BASE = "wallpaper";
/**
* Saves the provided input stream as a new wallpaper file.
*/
@WorkerThread
public static @NonNull ChatWallpaper save(@NonNull Context context, @NonNull InputStream wallpaperStream, @NonNull String extension) throws IOException {
String name = FileStorage.save(context, wallpaperStream, DIRECTORY, FILENAME_BASE, extension);
public static @NonNull ChatWallpaper save(@NonNull InputStream wallpaperStream) throws IOException {
AttachmentId attachmentId = SignalDatabase.attachments().insertWallpaper(wallpaperStream);
return ChatWallpaperFactory.create(PartAuthority.getWallpaperUri(name));
if (SignalStore.backup().backsUpMedia()) {
AppDependencies.getJobManager().add(new UploadAttachmentToArchiveJob(attachmentId));
}
return ChatWallpaperFactory.create(PartAuthority.getAttachmentDataUri(attachmentId));
}
@WorkerThread
public static @NonNull InputStream read(@NonNull Context context, String filename) throws IOException {
return FileStorage.read(context, DIRECTORY, filename);
}
@WorkerThread
public static @NonNull List<ChatWallpaper> getAll(@NonNull Context context) {
return FileStorage.getAll(context, DIRECTORY, FILENAME_BASE)
.stream()
.map(PartAuthority::getWallpaperUri)
.map(ChatWallpaperFactory::create)
.collect(Collectors.toList());
public static @NonNull List<ChatWallpaper> getAll() {
return SignalDatabase.attachments()
.getAllWallpapers()
.stream()
.map(PartAuthority::getAttachmentDataUri)
.map(ChatWallpaperFactory::create)
.collect(Collectors.toList());
}
/**
@@ -58,7 +56,7 @@ public final class WallpaperStorage {
* if we discover it's unused, we'll delete the file.
*/
@WorkerThread
public static void onWallpaperDeselected(@NonNull Context context, @NonNull Uri uri) {
public static void onWallpaperDeselected(@NonNull Uri uri) {
Uri globalUri = SignalStore.wallpaper().getWallpaperUri();
if (Objects.equals(uri, globalUri)) {
return;
@@ -69,12 +67,7 @@ public final class WallpaperStorage {
return;
}
String filename = PartAuthority.getWallpaperFilename(uri);
File directory = context.getDir(DIRECTORY, Context.MODE_PRIVATE);
File wallpaperFile = new File(directory, filename);
if (!wallpaperFile.delete()) {
Log.w(TAG, "Failed to delete " + filename + "!");
}
AttachmentId attachmentId = new PartUriParser(uri).getPartId();
SignalDatabase.attachments().deleteAttachment(attachmentId);
}
}

View File

@@ -33,14 +33,14 @@ final class WallpaperCropRepository {
@WorkerThread
@NonNull ChatWallpaper setWallPaper(byte[] bytes) throws IOException {
try (InputStream inputStream = new ByteArrayInputStream(bytes)) {
ChatWallpaper wallpaper = WallpaperStorage.save(context, inputStream, "webp");
ChatWallpaper wallpaper = WallpaperStorage.save(inputStream);
if (recipientId != null) {
Log.i(TAG, "Setting image wallpaper for " + recipientId);
SignalDatabase.recipients().setWallpaper(recipientId, wallpaper);
SignalDatabase.recipients().setWallpaper(recipientId, wallpaper, true);
} else {
Log.i(TAG, "Setting image wallpaper for default");
SignalStore.wallpaper().setWallpaper(context, wallpaper);
SignalStore.wallpaper().setWallpaper(wallpaper);
}
return wallpaper;