From 6bc5b19b1e9adaa600897dde4fdea6032c447ccd Mon Sep 17 00:00:00 2001 From: Nicholas Date: Mon, 27 Feb 2023 10:06:35 -0500 Subject: [PATCH] Convert RegistrationCompleteFragment to Kotlin. --- .../securesms/ApplicationContext.java | 2 +- .../contacts/sync/ContactDiscovery.kt | 2 +- .../securesms/lock/v2/BaseKbsPinFragment.java | 2 +- .../lock/v2/ConfirmKbsPinFragment.kt | 4 +- .../pin/PinRestoreEntryFragment.java | 2 +- .../edit/EditSelfProfileRepository.java | 2 +- .../registration/RegistrationUtil.java | 2 +- .../RegistrationCompleteFragment.java | 91 ------------------- .../fragments/RegistrationCompleteFragment.kt | 87 ++++++++++++++++++ 9 files changed, 95 insertions(+), 99 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java create mode 100644 app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 95e419ee4..c8b4fe289 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -162,7 +162,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr .addBlocking("app-dependencies", this::initializeAppDependencies) .addBlocking("first-launch", this::initializeFirstEverAppLaunch) .addBlocking("app-migrations", this::initializeApplicationMigrations) - .addBlocking("mark-registration", () -> RegistrationUtil.maybeMarkRegistrationComplete(this)) + .addBlocking("mark-registration", () -> RegistrationUtil.maybeMarkRegistrationComplete()) .addBlocking("lifecycle-observer", () -> ApplicationDependencies.getAppForegroundObserver().addListener(this)) .addBlocking("message-retriever", this::initializeMessageRetrieval) .addBlocking("dynamic-theme", () -> DynamicTheme.setDefaultDayNightMode(this)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt index 180c54949..579323a08 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt @@ -58,7 +58,7 @@ object ContactDiscovery { if (!SignalStore.registrationValues().isRegistrationComplete) { Log.w(TAG, "Registration is not yet complete. Skipping, but running a routine to possibly mark it complete.") - RegistrationUtil.maybeMarkRegistrationComplete(context) + RegistrationUtil.maybeMarkRegistrationComplete() return } diff --git a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java index 41a410c12..b3e258519 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java @@ -203,7 +203,7 @@ public abstract class BaseKbsPinFragment private void onPinSkipped() { PinOptOutDialog.show(requireContext(), () -> { - RegistrationUtil.maybeMarkRegistrationComplete(requireContext()); + RegistrationUtil.maybeMarkRegistrationComplete(); closeNavGraphBranch(); }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/ConfirmKbsPinFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/ConfirmKbsPinFragment.kt index 92172b779..81626a66f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/ConfirmKbsPinFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/ConfirmKbsPinFragment.kt @@ -85,12 +85,12 @@ internal class ConfirmKbsPinFragment : BaseKbsPinFragment { confirm.cancelSpinning() - RegistrationUtil.maybeMarkRegistrationComplete(requireContext()) + RegistrationUtil.maybeMarkRegistrationComplete() displayFailedDialog() } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java index f0659492f..a1af3fb44 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java @@ -242,7 +242,7 @@ public class PinRestoreEntryFragment extends LoggingFragment { profile.putExtra("next_intent", main); startActivity(profile); } else { - RegistrationUtil.maybeMarkRegistrationComplete(requireContext()); + RegistrationUtil.maybeMarkRegistrationComplete(); ApplicationDependencies.getJobManager().add(new ProfileUploadJob()); startActivity(MainActivity.clearTop(activity)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java index ed8f121ce..2509c3264 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java @@ -145,7 +145,7 @@ public class EditSelfProfileRepository implements EditProfileRepository { .then(Arrays.asList(new MultiDeviceProfileKeyUpdateJob(), new MultiDeviceProfileContentUpdateJob())) .enqueue(); - RegistrationUtil.maybeMarkRegistrationComplete(context); + RegistrationUtil.maybeMarkRegistrationComplete(); if (avatar != null) { SignalStore.misc().markHasEverHadAnAvatar(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java index 56b044a86..975333e69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java @@ -22,7 +22,7 @@ public final class RegistrationUtil { * path a user has taken. This will only truly mark registration as complete if all of the * requirements are met. */ - public static void maybeMarkRegistrationComplete(@NonNull Context context) { + public static void maybeMarkRegistrationComplete() { if (!SignalStore.registrationValues().isRegistrationComplete() && SignalStore.account().isRegistered() && !Recipient.self().getProfileName().isEmpty() && diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java deleted file mode 100644 index bd7c87d05..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.thoughtcrime.securesms.registration.fragments; - -import android.content.Intent; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentActivity; -import androidx.lifecycle.ViewModelProvider; -import androidx.navigation.ActivityNavigator; - -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.LoggingFragment; -import org.thoughtcrime.securesms.MainActivity; -import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobs.MultiDeviceProfileContentUpdateJob; -import org.thoughtcrime.securesms.jobs.MultiDeviceProfileKeyUpdateJob; -import org.thoughtcrime.securesms.jobs.ProfileUploadJob; -import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity; -import org.thoughtcrime.securesms.pin.PinRestoreActivity; -import org.thoughtcrime.securesms.profiles.AvatarHelper; -import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity; -import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.registration.RegistrationUtil; -import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel; - -import java.util.Arrays; - -public final class RegistrationCompleteFragment extends LoggingFragment { - - private static final String TAG = Log.tag(RegistrationCompleteFragment.class); - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_registration_blank, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - FragmentActivity activity = requireActivity(); - RegistrationViewModel viewModel = new ViewModelProvider(activity).get(RegistrationViewModel.class); - - if (SignalStore.storageService().needsAccountRestore()) { - Log.i(TAG, "Performing pin restore"); - activity.startActivity(new Intent(activity, PinRestoreActivity.class)); - } else { - boolean needsPin = !SignalStore.kbsValues().hasPin() && !viewModel.isReregister(); - boolean needsProfile = Recipient.self().getProfileName().isEmpty() || !AvatarHelper.hasAvatar(activity, Recipient.self().getId()); - - Log.i(TAG, "Pin restore flow not required." + - " profile name: " + Recipient.self().getProfileName().isEmpty() + - " profile avatar: " + !AvatarHelper.hasAvatar(activity, Recipient.self().getId()) + - " needsPin:" + needsPin); - - Intent startIntent = MainActivity.clearTop(activity); - - if (!needsProfile && !needsPin) { - ApplicationDependencies.getJobManager() - .startChain(new ProfileUploadJob()) - .then(Arrays.asList(new MultiDeviceProfileKeyUpdateJob(), new MultiDeviceProfileContentUpdateJob())) - .enqueue(); - - RegistrationUtil.maybeMarkRegistrationComplete(requireContext()); - } else { - if (needsPin) { - startIntent = chainIntents(CreateKbsPinActivity.getIntentForPinCreate(requireContext()), startIntent); - } - - if (needsProfile) { - startIntent = chainIntents(EditProfileActivity.getIntentForUserProfile(activity), startIntent); - } - } - - activity.startActivity(startIntent); - } - activity.finish(); - ActivityNavigator.applyPopAnimationsToPendingTransition(activity); - } - - private static @NonNull Intent chainIntents(@NonNull Intent sourceIntent, @NonNull Intent nextIntent) { - sourceIntent.putExtra("next_intent", nextIntent); - return sourceIntent; - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.kt new file mode 100644 index 000000000..7ccc97f66 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.kt @@ -0,0 +1,87 @@ +package org.thoughtcrime.securesms.registration.fragments + +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.viewModels +import androidx.navigation.ActivityNavigator +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.LoggingFragment +import org.thoughtcrime.securesms.MainActivity +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.jobs.MultiDeviceProfileContentUpdateJob +import org.thoughtcrime.securesms.jobs.MultiDeviceProfileKeyUpdateJob +import org.thoughtcrime.securesms.jobs.ProfileUploadJob +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity +import org.thoughtcrime.securesms.pin.PinRestoreActivity +import org.thoughtcrime.securesms.profiles.AvatarHelper +import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity +import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.registration.RegistrationUtil +import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel + +/** + * [RegistrationCompleteFragment] is not visible to the user, but functions as basically a redirect towards one of: + * - [PIN Restore flow activity](org.thoughtcrime.securesms.pin.PinRestoreActivity) + * - [Profile](org.thoughtcrime.securesms.profiles.edit.EditProfileActivity) / [PIN creation](org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity) flow activities (this class chains the necessary activities together as an intent) + * - Exit registration flow and progress to conversation list + */ +class RegistrationCompleteFragment : LoggingFragment() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_registration_blank, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val activity = requireActivity() + if (SignalStore.storageService().needsAccountRestore()) { + Log.i(TAG, "Performing pin restore.") + activity.startActivity(Intent(activity, PinRestoreActivity::class.java)) + } else { + val viewModel: RegistrationViewModel by viewModels() + + val isProfileNameEmpty = Recipient.self().profileName.isEmpty + val isAvatarEmpty = !AvatarHelper.hasAvatar(activity, Recipient.self().id) + val needsProfile = isProfileNameEmpty || isAvatarEmpty + val needsPin = !SignalStore.kbsValues().hasPin() && !viewModel.isReregister + + Log.i(TAG, "Pin restore flow not required. Profile name: $isProfileNameEmpty | Profile avatar: $isAvatarEmpty | Needs PIN: $needsPin") + + if (!needsProfile && !needsPin) { + ApplicationDependencies.getJobManager() + .startChain(ProfileUploadJob()) + .then(listOf(MultiDeviceProfileKeyUpdateJob(), MultiDeviceProfileContentUpdateJob())) + .enqueue() + RegistrationUtil.maybeMarkRegistrationComplete() + } + + var startIntent = MainActivity.clearTop(activity) + + if (needsPin) { + startIntent = chainIntents(CreateKbsPinActivity.getIntentForPinCreate(activity), startIntent) + } + + if (needsProfile) { + startIntent = chainIntents(EditProfileActivity.getIntentForUserProfile(activity), startIntent) + } + + activity.startActivity(startIntent) + } + + activity.finish() + ActivityNavigator.applyPopAnimationsToPendingTransition(activity) + } + + private fun chainIntents(sourceIntent: Intent, nextIntent: Intent): Intent { + sourceIntent.putExtra("next_intent", nextIntent) + return sourceIntent + } + + companion object { + private val TAG = Log.tag(RegistrationCompleteFragment::class.java) + } +}