Clean up system for blessed sticker packs.

This commit is contained in:
Greyson Parrelli
2026-02-05 21:16:08 -05:00
parent 5c415139fd
commit 00b72c9263
3 changed files with 116 additions and 84 deletions

View File

@@ -41,11 +41,7 @@ public final class AppInitialization {
TextSecurePreferences.setTypingIndicatorsEnabled(context, true); TextSecurePreferences.setTypingIndicatorsEnabled(context, true);
AppDependencies.getMegaphoneRepository().onFirstEverAppLaunch(); AppDependencies.getMegaphoneRepository().onFirstEverAppLaunch();
SignalStore.onFirstEverAppLaunch(); SignalStore.onFirstEverAppLaunch();
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.ZOZO.getPackId(), BlessedPacks.ZOZO.getPackKey(), false)); AppDependencies.getJobManager().addAll(BlessedPacks.getFirstInstallJobs());
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.BANDIT.getPackId(), BlessedPacks.BANDIT.getPackKey(), false));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.DAY_BY_DAY.getPackId(), BlessedPacks.DAY_BY_DAY.getPackKey(), false));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_HANDS.getPackId(), BlessedPacks.SWOON_HANDS.getPackKey()));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_FACES.getPackId(), BlessedPacks.SWOON_FACES.getPackKey()));
} }
public static void onPostBackupRestore(@NonNull Context context) { public static void onPostBackupRestore(@NonNull Context context) {
@@ -59,11 +55,7 @@ public final class AppInitialization {
SignalStore.notificationProfile().setHasSeenTooltip(true); SignalStore.notificationProfile().setHasSeenTooltip(true);
TextSecurePreferences.onPostBackupRestore(context); TextSecurePreferences.onPostBackupRestore(context);
SignalStore.settings().setPassphraseDisabled(true); SignalStore.settings().setPassphraseDisabled(true);
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.ZOZO.getPackId(), BlessedPacks.ZOZO.getPackKey(), false)); AppDependencies.getJobManager().addAll(BlessedPacks.getFirstInstallJobs());
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.BANDIT.getPackId(), BlessedPacks.BANDIT.getPackKey(), false));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.DAY_BY_DAY.getPackId(), BlessedPacks.DAY_BY_DAY.getPackKey(), false));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_HANDS.getPackId(), BlessedPacks.SWOON_HANDS.getPackKey()));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_FACES.getPackId(), BlessedPacks.SWOON_FACES.getPackKey()));
EmojiSearchIndexDownloadJob.scheduleImmediately(); EmojiSearchIndexDownloadJob.scheduleImmediately();
DeleteAbandonedAttachmentsJob.enqueue(); DeleteAbandonedAttachmentsJob.enqueue();
@@ -87,10 +79,6 @@ public final class AppInitialization {
SignalStore.settings().setPassphraseDisabled(true); SignalStore.settings().setPassphraseDisabled(true);
AppDependencies.getMegaphoneRepository().onFirstEverAppLaunch(); AppDependencies.getMegaphoneRepository().onFirstEverAppLaunch();
SignalStore.onFirstEverAppLaunch(); SignalStore.onFirstEverAppLaunch();
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.ZOZO.getPackId(), BlessedPacks.ZOZO.getPackKey(), false)); AppDependencies.getJobManager().addAll(BlessedPacks.getFirstInstallJobs());
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.BANDIT.getPackId(), BlessedPacks.BANDIT.getPackKey(), false));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.DAY_BY_DAY.getPackId(), BlessedPacks.DAY_BY_DAY.getPackKey(), false));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_HANDS.getPackId(), BlessedPacks.SWOON_HANDS.getPackKey()));
AppDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_FACES.getPackId(), BlessedPacks.SWOON_FACES.getPackKey()));
} }
} }

View File

@@ -1,69 +0,0 @@
package org.thoughtcrime.securesms.stickers;
import androidx.annotation.NonNull;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.whispersystems.signalservice.internal.util.JsonUtil;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
/**
* Maintains a list of "blessed" sticker packs that essentially serve as defaults.
*/
public final class BlessedPacks {
public static final Pack ZOZO = new Pack("fb535407d2f6497ec074df8b9c51dd1d", "17e971c134035622781d2ee249e6473b774583750b68c11bb82b7509c68b6dfd");
public static final Pack BANDIT = new Pack("9acc9e8aba563d26a4994e69263e3b25", "5a6dff3948c28efb9b7aaf93ecc375c69fc316e78077ed26867a14d10a0f6a12");
public static final Pack SWOON_HANDS = new Pack("e61fa0867031597467ccc036cc65d403", "13ae7b1a7407318280e9b38c1261ded38e0e7138b9f964a6ccbb73e40f737a9b");
public static final Pack SWOON_FACES = new Pack("cca32f5b905208b7d0f1e17f23fdc185", "8bf8e95f7a45bdeafe0c8f5b002ef01ab95b8f1b5baac4019ccd6b6be0b1837a");
public static final Pack DAY_BY_DAY = new Pack("cfc50156556893ef9838069d3890fe49", "5f5beab7d382443cb00a1e48eb95297b6b8cadfd0631e5d0d9dc949e6999ff4b");
public static final Pack MY_DAILY_LIFE = new Pack("ccc89a05dc077856b57351e90697976c", "45730e60f09d5566115223744537a6b7d9ea99ceeacb77a1fbd6801b9607fbcf");
private static final Set<String> BLESSED_PACK_IDS = new HashSet<String>() {{
add(ZOZO.getPackId());
add(BANDIT.getPackId());
add(SWOON_HANDS.getPackId());
add(SWOON_FACES.getPackId());
add(DAY_BY_DAY.getPackId());
add(MY_DAILY_LIFE.getPackId());
}};
public static boolean contains(@NonNull String packId) {
return BLESSED_PACK_IDS.contains(packId);
}
public static class Pack {
@JsonProperty private final String packId;
@JsonProperty private final String packKey;
public Pack(@NonNull @JsonProperty("packId") String packId,
@NonNull @JsonProperty("packKey") String packKey)
{
this.packId = packId;
this.packKey = packKey;
}
public @NonNull String getPackId() {
return packId;
}
public @NonNull String getPackKey() {
return packKey;
}
public @NonNull String toJson() {
return JsonUtil.toJson(this);
}
public static @NonNull Pack fromJson(@NonNull String json) {
try {
return JsonUtil.fromJson(json, Pack.class);
} catch (IOException e) {
throw new AssertionError(e);
}
}
}
}

View File

@@ -0,0 +1,113 @@
package org.thoughtcrime.securesms.stickers
import com.fasterxml.jackson.annotation.JsonProperty
import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob
import org.whispersystems.signalservice.internal.util.JsonUtil
/**
* Maintains a list of "blessed" sticker packs that essentially serve as defaults.
*/
object BlessedPacks {
@JvmField
val ZOZO = Pack("fb535407d2f6497ec074df8b9c51dd1d", "17e971c134035622781d2ee249e6473b774583750b68c11bb82b7509c68b6dfd")
@JvmField
val BANDIT = Pack("9acc9e8aba563d26a4994e69263e3b25", "5a6dff3948c28efb9b7aaf93ecc375c69fc316e78077ed26867a14d10a0f6a12")
@JvmField
val SWOON_HANDS = Pack("e61fa0867031597467ccc036cc65d403", "13ae7b1a7407318280e9b38c1261ded38e0e7138b9f964a6ccbb73e40f737a9b")
@JvmField
val SWOON_FACES = Pack("cca32f5b905208b7d0f1e17f23fdc185", "8bf8e95f7a45bdeafe0c8f5b002ef01ab95b8f1b5baac4019ccd6b6be0b1837a")
@JvmField
val DAY_BY_DAY = Pack("cfc50156556893ef9838069d3890fe49", "5f5beab7d382443cb00a1e48eb95297b6b8cadfd0631e5d0d9dc949e6999ff4b")
@JvmField
val MY_DAILY_LIFE = Pack("ccc89a05dc077856b57351e90697976c", "45730e60f09d5566115223744537a6b7d9ea99ceeacb77a1fbd6801b9607fbcf")
private val packs = listOf(
BlessedPackInfo(
pack = ZOZO,
installMode = BlessedPackInfo.InstallMode.InstallByDefault
),
BlessedPackInfo(
pack = BANDIT,
installMode = BlessedPackInfo.InstallMode.InstallByDefault
),
BlessedPackInfo(
pack = DAY_BY_DAY,
installMode = BlessedPackInfo.InstallMode.InstallByDefault
),
BlessedPackInfo(
pack = MY_DAILY_LIFE,
installMode = BlessedPackInfo.InstallMode.InstallByDefault
),
BlessedPackInfo(
pack = SWOON_HANDS,
installMode = BlessedPackInfo.InstallMode.AvailableAsReference
),
BlessedPackInfo(
pack = SWOON_FACES,
installMode = BlessedPackInfo.InstallMode.AvailableAsReference
)
)
private val packIds: Set<String> by lazy {
packs.map { it.pack.packId }.toSet()
}
/**
* A list of [Job]s you should run on first app launch to install all of the required packs.
*/
@JvmStatic
fun getFirstInstallJobs(): List<Job> {
val installedByDefault = packs
.filter { it.installMode == BlessedPackInfo.InstallMode.InstallByDefault }
.map { it.pack }
.map { StickerPackDownloadJob.forInstall(it.packId, it.packKey, false) }
val availableForReference = packs
.filter { it.installMode == BlessedPackInfo.InstallMode.AvailableAsReference }
.map { it.pack }
.map { StickerPackDownloadJob.forReference(it.packId, it.packKey) }
return installedByDefault + availableForReference
}
@JvmStatic
fun contains(packId: String): Boolean {
return packIds.contains(packId)
}
private data class BlessedPackInfo(
val pack: Pack,
val installMode: InstallMode
) {
enum class InstallMode {
/** Install the pack on initial app launch. */
InstallByDefault,
/** Do not fully install the pack. Instead, have it show up as an "available" pack in the sticker manager. */
AvailableAsReference
}
}
class Pack(
@field:JsonProperty val packId: String,
@field:JsonProperty val packKey: String
) {
fun toJson(): String {
return JsonUtil.toJson(this)
}
companion object {
@JvmStatic
fun fromJson(json: String): Pack {
return JsonUtil.fromJson(json, Pack::class.java)
}
}
}
}