Convert RegistrationCompleteFragment to Kotlin.

This commit is contained in:
Nicholas 2023-02-27 10:06:35 -05:00 committed by Nicholas Tinsley
parent 4990243a91
commit 6bc5b19b1e
9 changed files with 95 additions and 99 deletions

View file

@ -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))

View file

@ -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
}

View file

@ -203,7 +203,7 @@ public abstract class BaseKbsPinFragment<ViewModel extends BaseKbsPinViewModel>
private void onPinSkipped() {
PinOptOutDialog.show(requireContext(), () -> {
RegistrationUtil.maybeMarkRegistrationComplete(requireContext());
RegistrationUtil.maybeMarkRegistrationComplete();
closeNavGraphBranch();
});
}

View file

@ -85,12 +85,12 @@ internal class ConfirmKbsPinFragment : BaseKbsPinFragment<ConfirmKbsPinViewModel
confirm.cancelSpinning()
requireActivity().setResult(Activity.RESULT_OK)
closeNavGraphBranch()
RegistrationUtil.maybeMarkRegistrationComplete(requireContext())
RegistrationUtil.maybeMarkRegistrationComplete()
StorageSyncHelper.scheduleSyncForDataChange()
}
SaveAnimation.FAILURE -> {
confirm.cancelSpinning()
RegistrationUtil.maybeMarkRegistrationComplete(requireContext())
RegistrationUtil.maybeMarkRegistrationComplete()
displayFailedDialog()
}
}

View file

@ -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));
}

View file

@ -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();

View file

@ -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() &&

View file

@ -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;
}
}

View file

@ -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)
}
}