Update conditions for PIN megaphone.

Handles additional corner cases.
- Shows megaphone when you register with a v1 pin.
- Show fullscreen when you fail to set a PIN during registration.
This commit is contained in:
Greyson Parrelli
2020-02-03 12:35:39 -05:00
parent 40383f3733
commit 2d24c8c525
3 changed files with 42 additions and 6 deletions

View File

@@ -2,8 +2,10 @@ package org.thoughtcrime.securesms.megaphone;
import androidx.annotation.VisibleForTesting;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import java.util.concurrent.TimeUnit;
@@ -19,6 +21,10 @@ class PinsForAllSchedule implements MegaphoneSchedule {
private final MegaphoneSchedule schedule = new RecurringSchedule(TimeUnit.DAYS.toMillis(2));
static boolean shouldDisplayFullScreen(long firstVisible, long currentTime) {
if (pinCreationFailedDuringRegistration()) {
return true;
}
if (firstVisible == 0L) {
return false;
} else {
@@ -46,10 +52,33 @@ class PinsForAllSchedule implements MegaphoneSchedule {
}
private static boolean isEnabled() {
if (FeatureFlags.pinsForAllMegaphoneKillSwitch() || SignalStore.registrationValues().pinWasRequiredAtRegistration()) {
if (FeatureFlags.pinsForAllMegaphoneKillSwitch()) {
return false;
}
if (pinCreationFailedDuringRegistration()) {
return true;
}
if (newlyRegisteredV1PinUser()) {
return true;
}
if (SignalStore.registrationValues().pinWasRequiredAtRegistration()) {
return false;
}
return FeatureFlags.pinsForAll();
}
private static boolean pinCreationFailedDuringRegistration() {
return SignalStore.registrationValues().pinWasRequiredAtRegistration() &&
!SignalStore.kbsValues().isV2RegistrationLockEnabled() &&
!TextSecurePreferences.isV1RegistrationLockEnabled(ApplicationDependencies.getApplication());
}
private static final boolean newlyRegisteredV1PinUser() {
return SignalStore.registrationValues().pinWasRequiredAtRegistration() && TextSecurePreferences.isV1RegistrationLockEnabled(ApplicationDependencies.getApplication());
}
}

View File

@@ -250,10 +250,6 @@ public final class CodeVerificationRequest {
TextSecurePreferences.setDeprecatedRegistrationLockPin(context, pin);
//noinspection deprecation Only acceptable place to write the old pin enabled state.
TextSecurePreferences.setV1RegistrationLockEnabled(context, pin != null);
if (pin != null) {
Log.i(TAG, "Pin V1 successfully entered during registration, scheduling a migration to Pin V2");
ApplicationDependencies.getJobManager().add(new RegistrationPinV2MigrationJob());
}
} else {
SignalStore.kbsValues().setRegistrationLockMasterKey(kbsData, PinHashing.localPinHash(pin));
repostPinToResetTries(context, pin, kbsData);