Add Pins for All Megaphone Kill Switch.

This commit is contained in:
Alex Hart 2020-01-31 10:50:43 -04:00 committed by Greyson Parrelli
parent 5e83206e6e
commit e1b75c78ab
3 changed files with 25 additions and 11 deletions

View File

@ -32,7 +32,7 @@ public final class RegistrationValues {
} }
@CheckResult @CheckResult
public synchronized boolean isPinRequired() { public synchronized boolean pinWasRequiredAtRegistration() {
return store.getBoolean(PIN_REQUIRED, false); return store.getBoolean(PIN_REQUIRED, false);
} }

View File

@ -17,7 +17,6 @@ class PinsForAllSchedule implements MegaphoneSchedule {
static final long DAYS_REMAINING_MAX = DAYS_UNTIL_FULLSCREEN - 1; static final long DAYS_REMAINING_MAX = DAYS_UNTIL_FULLSCREEN - 1;
private final MegaphoneSchedule schedule = new RecurringSchedule(TimeUnit.DAYS.toMillis(2)); private final MegaphoneSchedule schedule = new RecurringSchedule(TimeUnit.DAYS.toMillis(2));
private final boolean enabled = !SignalStore.registrationValues().isPinRequired() || FeatureFlags.pinsForAll();
static boolean shouldDisplayFullScreen(long firstVisible, long currentTime) { static boolean shouldDisplayFullScreen(long firstVisible, long currentTime) {
if (firstVisible == 0L) { if (firstVisible == 0L) {
@ -37,7 +36,7 @@ class PinsForAllSchedule implements MegaphoneSchedule {
@Override @Override
public boolean shouldDisplay(int seenCount, long lastSeen, long firstVisible, long currentTime) { public boolean shouldDisplay(int seenCount, long lastSeen, long firstVisible, long currentTime) {
if (!enabled) return false; if (!isEnabled()) return false;
if (shouldDisplayFullScreen(firstVisible, currentTime)) { if (shouldDisplayFullScreen(firstVisible, currentTime)) {
return true; return true;
@ -45,4 +44,12 @@ class PinsForAllSchedule implements MegaphoneSchedule {
return schedule.shouldDisplay(seenCount, lastSeen, firstVisible, currentTime); return schedule.shouldDisplay(seenCount, lastSeen, firstVisible, currentTime);
} }
} }
private static boolean isEnabled() {
if (FeatureFlags.pinsForAllMegaphoneKillSwitch() || SignalStore.registrationValues().pinWasRequiredAtRegistration()) {
return false;
}
return FeatureFlags.pinsForAll();
}
} }

View File

@ -53,6 +53,7 @@ public final class FeatureFlags {
private static final String KBS = generateKey("kbs"); private static final String KBS = generateKey("kbs");
private static final String STORAGE_SERVICE = generateKey("storageService"); private static final String STORAGE_SERVICE = generateKey("storageService");
private static final String PINS_FOR_ALL = generateKey("beta.pinsForAll"); // TODO [alex] remove beta prefix private static final String PINS_FOR_ALL = generateKey("beta.pinsForAll"); // TODO [alex] remove beta prefix
private static final String PINS_MEGAPHONE_KILL_SWITCH = generateKey("pinsMegaphoneKillSwitch");
/** /**
* Values in this map will take precedence over any value. If you do not wish to have any sort of * Values in this map will take precedence over any value. If you do not wish to have any sort of
@ -75,7 +76,8 @@ public final class FeatureFlags {
* more burden on the reader to ensure that the app experience remains consistent. * more burden on the reader to ensure that the app experience remains consistent.
*/ */
private static final Set<String> HOT_SWAPPABLE = Sets.newHashSet( private static final Set<String> HOT_SWAPPABLE = Sets.newHashSet(
KBS KBS,
PINS_MEGAPHONE_KILL_SWITCH
); );
/** /**
@ -159,6 +161,11 @@ public final class FeatureFlags {
return SignalStore.registrationValues().pinWasRequiredAtRegistration() || getValue(PINS_FOR_ALL, false); return SignalStore.registrationValues().pinWasRequiredAtRegistration() || getValue(PINS_FOR_ALL, false);
} }
/** Safety flag to disable Pins for All Megaphone */
public static boolean pinsForAllMegaphoneKillSwitch() {
return getValue(PINS_MEGAPHONE_KILL_SWITCH, false);
}
/** Only for rendering debug info. */ /** Only for rendering debug info. */
public static synchronized @NonNull Map<String, Boolean> getRemoteValues() { public static synchronized @NonNull Map<String, Boolean> getRemoteValues() {
return new TreeMap<>(REMOTE_VALUES); return new TreeMap<>(REMOTE_VALUES);