Fix illegal argument navigation exceptions.

This commit is contained in:
Cody Henthorne
2021-12-15 16:07:54 -05:00
committed by Greyson Parrelli
parent ba54051f8c
commit a4f44a96fd
70 changed files with 337 additions and 207 deletions

View File

@@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.documents.Document;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.util.BackupUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
public class ChooseBackupFragment extends LoggingFragment {
@@ -57,7 +58,7 @@ public class ChooseBackupFragment extends LoggingFragment {
restore.setUri(data.getData());
Navigation.findNavController(requireView()).navigate(restore);
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), restore);
}
}

View File

@@ -1,10 +1,5 @@
package org.thoughtcrime.securesms.registration.fragments;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.showConfirmNumberDialogIfTranslated;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
@@ -43,7 +38,6 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.LoggingFragment;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.LabeledEditText;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.registration.VerifyAccountRepository.Mode;
import org.thoughtcrime.securesms.registration.util.RegistrationNumberInputController;
@@ -54,12 +48,17 @@ import org.thoughtcrime.securesms.util.Dialogs;
import org.thoughtcrime.securesms.util.LifecycleDisposable;
import org.thoughtcrime.securesms.util.PlayServicesUtil;
import org.thoughtcrime.securesms.util.SupportEmailUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.disposables.Disposable;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.showConfirmNumberDialogIfTranslated;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
public final class EnterPhoneNumberFragment extends LoggingFragment implements RegistrationNumberInputController.Callbacks {
private static final String TAG = Log.tag(EnterPhoneNumberFragment.class);
@@ -136,7 +135,7 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.phone_menu_use_proxy) {
Navigation.findNavController(requireView()).navigate(EnterPhoneNumberFragmentDirections.actionEditProxy());
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), EnterPhoneNumberFragmentDirections.actionEditProxy());
return true;
} else {
return false;
@@ -226,13 +225,13 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
.observeOn(AndroidSchedulers.mainThread())
.subscribe(processor -> {
if (processor.hasResult()) {
navController.navigate(EnterPhoneNumberFragmentDirections.actionEnterVerificationCode());
SafeNavigation.safeNavigate(navController, EnterPhoneNumberFragmentDirections.actionEnterVerificationCode());
} else if (processor.localRateLimit()) {
Log.i(TAG, "Unable to request sms code due to local rate limit");
navController.navigate(EnterPhoneNumberFragmentDirections.actionEnterVerificationCode());
SafeNavigation.safeNavigate(navController, EnterPhoneNumberFragmentDirections.actionEnterVerificationCode());
} else if (processor.captchaRequired()) {
Log.i(TAG, "Unable to request sms code due to captcha required");
navController.navigate(EnterPhoneNumberFragmentDirections.actionRequestCaptcha());
SafeNavigation.safeNavigate(navController, EnterPhoneNumberFragmentDirections.actionRequestCaptcha());
} else if (processor.rateLimit()) {
Log.i(TAG, "Unable to request sms code due to rate limit");
Toast.makeText(register.getContext(), R.string.RegistrationActivity_rate_limited_to_service, Toast.LENGTH_LONG).show();
@@ -273,7 +272,7 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
@Override
public void onPickCountry(@NonNull View view) {
Navigation.findNavController(view).navigate(R.id.action_pickCountry);
SafeNavigation.safeNavigate(Navigation.findNavController(view), R.id.action_pickCountry);
}
@Override

View File

@@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import java.io.IOException;
@@ -37,22 +38,22 @@ public final class EnterSmsCodeFragment extends BaseEnterSmsCodeFragment<Registr
Log.w(TAG, "Failed to refresh flags after " + (System.currentTimeMillis() - startTime) + " ms.", e);
}
return null;
}, none -> displaySuccess(() -> Navigation.findNavController(requireView()).navigate(EnterSmsCodeFragmentDirections.actionSuccessfulRegistration())));
}, none -> displaySuccess(() -> SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), EnterSmsCodeFragmentDirections.actionSuccessfulRegistration())));
}
@Override
protected void navigateToRegistrationLock(long timeRemaining) {
Navigation.findNavController(requireView())
.navigate(EnterSmsCodeFragmentDirections.actionRequireKbsLockPin(timeRemaining));
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()),
EnterSmsCodeFragmentDirections.actionRequireKbsLockPin(timeRemaining));
}
@Override
protected void navigateToCaptcha() {
NavHostFragment.findNavController(this).navigate(EnterSmsCodeFragmentDirections.actionRequestCaptcha());
SafeNavigation.safeNavigate(NavHostFragment.findNavController(this), EnterSmsCodeFragmentDirections.actionRequestCaptcha());
}
@Override
protected void navigateToKbsAccountLocked() {
Navigation.findNavController(requireView()).navigate(RegistrationLockFragmentDirections.actionAccountLocked());
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), RegistrationLockFragmentDirections.actionAccountLocked());
}
}

View File

@@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.Stopwatch;
import org.thoughtcrime.securesms.util.SupportEmailUtil;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
@@ -38,7 +39,7 @@ public final class RegistrationLockFragment extends BaseRegistrationLockFragment
@Override
protected void navigateToAccountLocked() {
Navigation.findNavController(requireView()).navigate(RegistrationLockFragmentDirections.actionAccountLocked());
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), RegistrationLockFragmentDirections.actionAccountLocked());
}
@Override
@@ -68,7 +69,7 @@ public final class RegistrationLockFragment extends BaseRegistrationLockFragment
return null;
}, none -> {
cancelSpinning(pinButton);
Navigation.findNavController(requireView()).navigate(RegistrationLockFragmentDirections.actionSuccessfulRegistration());
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), RegistrationLockFragmentDirections.actionSuccessfulRegistration());
});
}

View File

@@ -55,6 +55,7 @@ import org.thoughtcrime.securesms.util.BackupUtil;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import java.io.IOException;
import java.util.Locale;
@@ -97,16 +98,16 @@ public final class RestoreBackupFragment extends LoggingFragment {
skipRestoreButton.setOnClickListener((v) -> {
Log.i(TAG, "User skipped backup restore.");
Navigation.findNavController(view)
.navigate(RestoreBackupFragmentDirections.actionSkip());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
RestoreBackupFragmentDirections.actionSkip());
});
viewModel = new ViewModelProvider(requireActivity()).get(RegistrationViewModel.class);
if (viewModel.isReregister()) {
Log.i(TAG, "Skipping backup restore during re-register.");
Navigation.findNavController(view)
.navigate(RestoreBackupFragmentDirections.actionSkipNoReturn());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
RestoreBackupFragmentDirections.actionSkipNoReturn());
return;
}
@@ -117,8 +118,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
if (SignalStore.settings().isBackupEnabled()) {
Log.i(TAG, "Backups enabled, so a backup must have been previously restored.");
Navigation.findNavController(view)
.navigate(RestoreBackupFragmentDirections.actionSkipNoReturn());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
RestoreBackupFragmentDirections.actionSkipNoReturn());
return;
}
@@ -134,8 +135,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
initializeBackupDetection(view);
} else {
Log.i(TAG, "Skipping backup detection. We don't have the permission.");
Navigation.findNavController(view)
.navigate(RestoreBackupFragmentDirections.actionSkipNoReturn());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
RestoreBackupFragmentDirections.actionSkipNoReturn());
}
}
@@ -152,8 +153,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
enableBackups(requireContext());
Navigation.findNavController(requireView())
.navigate(RestoreBackupFragmentDirections.actionBackupRestored());
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()),
RestoreBackupFragmentDirections.actionBackupRestored());
}
}
@@ -175,8 +176,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
if (backup == null) {
Log.i(TAG, "Skipping backup detection. No backup found, or permission revoked since.");
Navigation.findNavController(view)
.navigate(RestoreBackupFragmentDirections.actionNoBackupFound());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
RestoreBackupFragmentDirections.actionNoBackupFound());
} else {
restoreBackupSize.setText(getString(R.string.RegistrationActivity_backup_size_s, Util.getPrettyFileSize(backup.getSize())));
restoreBackupTime.setText(getString(R.string.RegistrationActivity_backup_timestamp_s, DateUtils.getExtendedRelativeTimeSpanString(requireContext(), Locale.getDefault(), backup.getTimestamp())));
@@ -348,8 +349,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
if (BackupUtil.isUserSelectionRequired(requireContext()) && !BackupUtil.canUserAccessBackupDirectory(requireContext())) {
displayConfirmationDialog(requireContext());
} else {
Navigation.findNavController(requireView())
.navigate(RestoreBackupFragmentDirections.actionBackupRestored());
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()),
RestoreBackupFragmentDirections.actionBackupRestored());
}
}
@@ -379,8 +380,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
BackupPassphrase.set(context, null);
dialog.dismiss();
Navigation.findNavController(requireView())
.navigate(RestoreBackupFragmentDirections.actionBackupRestored());
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()),
RestoreBackupFragmentDirections.actionBackupRestored());
})
.setCancelable(false)
.show();

View File

@@ -1,9 +1,5 @@
package org.thoughtcrime.securesms.registration.fragments;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
@@ -43,8 +39,13 @@ import org.thoughtcrime.securesms.util.BackupUtil;
import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import org.whispersystems.libsignal.util.guava.Optional;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
public final class WelcomeFragment extends LoggingFragment {
private static final String TAG = Log.tag(WelcomeFragment.class);
@@ -101,8 +102,8 @@ public final class WelcomeFragment extends LoggingFragment {
Log.i(TAG, "Skipping restore because this is a reregistration.");
viewModel.setWelcomeSkippedOnRestore();
Navigation.findNavController(view)
.navigate(WelcomeFragmentDirections.actionSkipRestore());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
WelcomeFragmentDirections.actionSkipRestore());
} else {
setDebugLogSubmitMultiTapView(view.findViewById(R.id.image));
@@ -133,7 +134,7 @@ public final class WelcomeFragment extends LoggingFragment {
super.onResume();
if (EventBus.getDefault().getStickyEvent(TransferStatus.class) != null) {
Log.i(TAG, "Found existing transferStatus, redirect to transfer flow");
NavHostFragment.findNavController(this).navigate(R.id.action_welcomeFragment_to_deviceTransferSetup);
SafeNavigation.safeNavigate(NavHostFragment.findNavController(this), R.id.action_welcomeFragment_to_deviceTransferSetup);
} else {
DeviceToDeviceTransferService.stop(requireContext());
}
@@ -179,11 +180,11 @@ public final class WelcomeFragment extends LoggingFragment {
if (backup == null) {
Log.i(TAG, "Skipping backup. No backup found, or no permission to look.");
Navigation.findNavController(view)
.navigate(WelcomeFragmentDirections.actionSkipRestore());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
WelcomeFragmentDirections.actionSkipRestore());
} else {
Navigation.findNavController(view)
.navigate(WelcomeFragmentDirections.actionRestore());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
WelcomeFragmentDirections.actionRestore());
}
});
}
@@ -193,8 +194,8 @@ public final class WelcomeFragment extends LoggingFragment {
initializeNumber();
Navigation.findNavController(view)
.navigate(WelcomeFragmentDirections.actionTransferOrRestore());
SafeNavigation.safeNavigate(Navigation.findNavController(view),
WelcomeFragmentDirections.actionTransferOrRestore());
}
@SuppressLint("MissingPermission")