Add support for persisting wallpaper selection.

This commit is contained in:
Greyson Parrelli
2021-01-20 09:03:21 -05:00
parent 80651d2425
commit 6bcb0de43d
13 changed files with 447 additions and 37 deletions

View File

@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.keyvalue;
import androidx.annotation.NonNull;
import androidx.preference.PreferenceDataStore;
import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.util.SignalUncaughtExceptionHandler;
@@ -28,6 +29,7 @@ public final class SignalStore {
private final CertificateValues certificateValues;
private final PhoneNumberPrivacyValues phoneNumberPrivacyValues;
private final OnboardingValues onboardingValues;
private final WallpaperValues wallpaperValues;
private SignalStore() {
this.store = new KeyValueStore(ApplicationDependencies.getApplication());
@@ -45,6 +47,7 @@ public final class SignalStore {
this.certificateValues = new CertificateValues(store);
this.phoneNumberPrivacyValues = new PhoneNumberPrivacyValues(store);
this.onboardingValues = new OnboardingValues(store);
this.wallpaperValues = new WallpaperValues(store);
}
public static void onFirstEverAppLaunch() {
@@ -61,6 +64,7 @@ public final class SignalStore {
certificateValues().onFirstEverAppLaunch();
phoneNumberPrivacy().onFirstEverAppLaunch();
onboarding().onFirstEverAppLaunch();
wallpaper().onFirstEverAppLaunch();
}
public static @NonNull KbsValues kbsValues() {
@@ -119,6 +123,10 @@ public final class SignalStore {
return INSTANCE.onboardingValues;
}
public static @NonNull WallpaperValues wallpaper() {
return INSTANCE.wallpaperValues;
}
public static @NonNull GroupsV2AuthorizationSignalStoreCache groupsV2AuthorizationCache() {
return new GroupsV2AuthorizationSignalStoreCache(getStore());
}

View File

@@ -0,0 +1,84 @@
package org.thoughtcrime.securesms.keyvalue;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.protobuf.InvalidProtocolBufferException;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper;
import org.thoughtcrime.securesms.wallpaper.ChatWallpaperFactory;
import org.thoughtcrime.securesms.wallpaper.WallpaperStorage;
public final class WallpaperValues extends SignalStoreValues {
private static final String TAG = Log.tag(WallpaperValues.class);
private static final String KEY_WALLPAPER = "wallpaper.wallpaper";
WallpaperValues(@NonNull KeyValueStore store) {
super(store);
}
@Override
void onFirstEverAppLaunch() {
}
public void setWallpaper(@NonNull Context context, @Nullable ChatWallpaper wallpaper) {
Wallpaper currentWallpaper = getCurrentWallpaper();
Uri currentUri = null;
if (currentWallpaper != null && currentWallpaper.hasFile()) {
currentUri = Uri.parse(currentWallpaper.getFile().getUri());
}
if (wallpaper != null) {
putBlob(KEY_WALLPAPER, wallpaper.serialize().toByteArray());
} else {
getStore().beginWrite().remove(KEY_WALLPAPER).apply();
}
WallpaperStorage.onWallpaperDeselected(context, currentUri);
}
public @Nullable ChatWallpaper getWallpaper() {
Wallpaper currentWallpaper = getCurrentWallpaper();
if (currentWallpaper != null) {
return ChatWallpaperFactory.create(currentWallpaper);
} else {
return null;
}
}
public @Nullable Uri getCurrentWallpaperUri() {
Wallpaper currentWallpaper = getCurrentWallpaper();
if (currentWallpaper != null && currentWallpaper.hasFile()) {
return Uri.parse(currentWallpaper.getFile().getUri());
} else {
return null;
}
}
private @Nullable Wallpaper getCurrentWallpaper() {
byte[] serialized = getBlob(KEY_WALLPAPER, null);
if (serialized != null) {
try {
return Wallpaper.parseFrom(serialized);
} catch (InvalidProtocolBufferException e) {
Log.w(TAG, "Invalid proto stored for wallpaper!");
return null;
}
} else {
return null;
}
}
}