package org.thoughtcrime.securesms.registration.fragments; import androidx.annotation.NonNull; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.StorageAccountRestoreJob; import org.thoughtcrime.securesms.jobs.StorageSyncJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.registration.viewmodel.BaseRegistrationViewModel; import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel; import org.thoughtcrime.securesms.util.CommunicationActions; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.SupportEmailUtil; import org.signal.core.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.navigation.SafeNavigation; import java.io.IOException; import java.util.concurrent.TimeUnit; import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning; public final class RegistrationLockFragment extends BaseRegistrationLockFragment { private static final String TAG = Log.tag(RegistrationLockFragment.class); public RegistrationLockFragment() { super(R.layout.fragment_registration_lock); } @Override protected BaseRegistrationViewModel getViewModel() { return new ViewModelProvider(requireActivity()).get(RegistrationViewModel.class); } @Override protected void navigateToAccountLocked() { SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), RegistrationLockFragmentDirections.actionAccountLocked()); } @Override protected void handleSuccessfulPinEntry(@NonNull String pin) { SignalStore.pinValues().setKeyboardType(getPinEntryKeyboardType()); SimpleTask.run(() -> { SignalStore.onboarding().clearAll(); Stopwatch stopwatch = new Stopwatch("RegistrationLockRestore"); ApplicationDependencies.getJobManager().runSynchronously(new StorageAccountRestoreJob(), StorageAccountRestoreJob.LIFESPAN); stopwatch.split("AccountRestore"); ApplicationDependencies.getJobManager().runSynchronously(new StorageSyncJob(), TimeUnit.SECONDS.toMillis(10)); stopwatch.split("ContactRestore"); try { FeatureFlags.refreshSync(); } catch (IOException e) { Log.w(TAG, "Failed to refresh flags.", e); } stopwatch.split("FeatureFlags"); stopwatch.stop(TAG); return null; }, none -> { cancelSpinning(pinButton); SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), RegistrationLockFragmentDirections.actionSuccessfulRegistration()); }); } @Override protected void sendEmailToSupport() { int subject = R.string.RegistrationLockFragment__signal_registration_need_help_with_pin_for_android_v2_pin; String body = SupportEmailUtil.generateSupportEmailBody(requireContext(), subject, null, null); CommunicationActions.openEmail(requireContext(), SupportEmailUtil.getSupportEmailAddress(requireContext()), getString(subject), body); } }