Signal-Android/app/src/main/java/org/thoughtcrime/securesms/megaphone/PinsForAllSchedule.java

80 lines
2.5 KiB
Java

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.logging.Log;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
class PinsForAllSchedule implements MegaphoneSchedule {
private static final String TAG = Log.tag(PinsForAllSchedule.class);
@VisibleForTesting
static final long DAYS_UNTIL_FULLSCREEN = 4L;
private final MegaphoneSchedule schedule = new RecurringSchedule(TimeUnit.HOURS.toMillis(2));
static boolean shouldDisplayFullScreen(long firstVisible, long currentTime) {
if (firstVisible == 0L) {
return false;
}
return currentTime - firstVisible >= TimeUnit.DAYS.toMillis(DAYS_UNTIL_FULLSCREEN);
}
@Override
public boolean shouldDisplay(int seenCount, long lastSeen, long firstVisible, long currentTime) {
if (!isEnabled()) {
return false;
}
if (shouldDisplayFullScreen(firstVisible, currentTime)) {
return true;
} else {
boolean shouldDisplay = schedule.shouldDisplay(seenCount, lastSeen, firstVisible, currentTime);
Log.i(TAG, String.format(Locale.ENGLISH, "seenCount: %d, lastSeen: %d, firstVisible: %d, currentTime: %d, result: %b", seenCount, lastSeen, firstVisible, currentTime, shouldDisplay));
return shouldDisplay;
}
}
private static boolean isEnabled() {
if (SignalStore.kbsValues().hasOptedOut()) {
return false;
}
if (SignalStore.kbsValues().hasPin()) {
return false;
}
if (pinCreationFailedDuringRegistration()) {
return true;
}
if (newlyRegisteredRegistrationLockV1User()) {
return true;
}
if (SignalStore.registrationValues().pinWasRequiredAtRegistration()) {
return false;
}
return true;
}
private static boolean pinCreationFailedDuringRegistration() {
return SignalStore.registrationValues().pinWasRequiredAtRegistration() &&
!SignalStore.kbsValues().hasPin() &&
!TextSecurePreferences.isV1RegistrationLockEnabled(ApplicationDependencies.getApplication());
}
private static boolean newlyRegisteredRegistrationLockV1User() {
return SignalStore.registrationValues().pinWasRequiredAtRegistration() && TextSecurePreferences.isV1RegistrationLockEnabled(ApplicationDependencies.getApplication());
}
}