mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 02:10:44 +01:00
Update registration to allow PIN entry.
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package org.thoughtcrime.securesms.registration;
|
||||
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.storage.StorageSyncHelper;
|
||||
|
||||
public final class RegistrationUtil {
|
||||
|
||||
private static final String TAG = Log.tag(RegistrationUtil.class);
|
||||
|
||||
private RegistrationUtil() {}
|
||||
|
||||
/**
|
||||
* There's several events where a registration may or may not be considered complete based on what
|
||||
* path a user has taken. This will only truly mark registration as complete if all of the
|
||||
* requirements are met.
|
||||
*/
|
||||
public static void markRegistrationPossiblyComplete() {
|
||||
if (SignalStore.kbsValues().hasPin() && !Recipient.self().getProfileName().isEmpty()) {
|
||||
Log.i(TAG, "Marking registration completed.", new Throwable());
|
||||
SignalStore.registrationValues().setRegistrationComplete();
|
||||
StorageSyncHelper.scheduleSyncForDataChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.registration.service.CodeVerificationRequest;
|
||||
import org.thoughtcrime.securesms.registration.service.RegistrationCodeRequest;
|
||||
import org.thoughtcrime.securesms.registration.service.RegistrationService;
|
||||
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
|
||||
import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse;
|
||||
|
||||
@@ -305,16 +306,14 @@ public final class EnterCodeFragment extends BaseRegistrationFragment {
|
||||
}
|
||||
|
||||
private void sendEmailToSupport() {
|
||||
Intent intent = new Intent(Intent.ACTION_SENDTO);
|
||||
intent.setData(Uri.parse("mailto:"));
|
||||
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ getString(R.string.RegistrationActivity_support_email) });
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.RegistrationActivity_code_support_subject));
|
||||
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.RegistrationActivity_code_support_body,
|
||||
getDevice(),
|
||||
getAndroidVersion(),
|
||||
BuildConfig.VERSION_NAME,
|
||||
Locale.getDefault()));
|
||||
startActivity(intent);
|
||||
CommunicationActions.openEmail(requireContext(),
|
||||
getString(R.string.RegistrationActivity_support_email),
|
||||
getString(R.string.RegistrationActivity_code_support_subject),
|
||||
getString(R.string.RegistrationActivity_code_support_body,
|
||||
getDevice(),
|
||||
getAndroidVersion(),
|
||||
BuildConfig.VERSION_NAME,
|
||||
Locale.getDefault()));
|
||||
}
|
||||
|
||||
private static String getDevice() {
|
||||
|
||||
@@ -13,7 +13,9 @@ import androidx.navigation.ActivityNavigator;
|
||||
|
||||
import org.thoughtcrime.securesms.MainActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity;
|
||||
import org.thoughtcrime.securesms.pin.PinRestoreActivity;
|
||||
import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity;
|
||||
|
||||
public final class RegistrationCompleteFragment extends BaseRegistrationFragment {
|
||||
@@ -30,12 +32,11 @@ public final class RegistrationCompleteFragment extends BaseRegistrationFragment
|
||||
|
||||
FragmentActivity activity = requireActivity();
|
||||
|
||||
|
||||
if (!isReregister()) {
|
||||
if (SignalStore.storageServiceValues().needsAccountRestore()) {
|
||||
activity.startActivity(new Intent(activity, PinRestoreActivity.class));
|
||||
} else if (!isReregister()) {
|
||||
final Intent main = new Intent(activity, MainActivity.class);
|
||||
final Intent profile = new Intent(activity, EditProfileActivity.class);
|
||||
|
||||
profile.putExtra(EditProfileActivity.SHOW_TOOLBAR, false);
|
||||
final Intent profile = EditProfileActivity.getIntent(activity, false);
|
||||
|
||||
Intent kbs = CreateKbsPinActivity.getIntentForPinCreate(requireContext());
|
||||
activity.startActivity(chainIntents(chainIntents(profile, kbs), main));
|
||||
|
||||
@@ -39,8 +39,10 @@ import org.whispersystems.signalservice.api.KbsPinData;
|
||||
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
|
||||
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
|
||||
import org.whispersystems.signalservice.api.push.exceptions.RateLimitException;
|
||||
import org.whispersystems.signalservice.api.util.UuidUtil;
|
||||
import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse;
|
||||
import org.whispersystems.signalservice.internal.push.LockedException;
|
||||
import org.whispersystems.signalservice.internal.push.VerifyAccountResponse;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@@ -210,16 +212,18 @@ public final class CodeVerificationRequest {
|
||||
|
||||
Log.i(TAG, "Calling verifyAccountWithCode(): reglockV1? " + !TextUtils.isEmpty(registrationLockV1) + ", reglockV2? " + !TextUtils.isEmpty(registrationLockV2));
|
||||
|
||||
UUID uuid = accountManager.verifyAccountWithCode(code,
|
||||
null,
|
||||
registrationId,
|
||||
!hasFcm,
|
||||
registrationLockV1,
|
||||
registrationLockV2,
|
||||
unidentifiedAccessKey,
|
||||
universalUnidentifiedAccess,
|
||||
AppCapabilities.getCapabilities(isV2RegistrationLock));
|
||||
// TODO [greyson] [pins] ^^ This needs to be updated. It's not just for reglock, but also if they needed to enter a PIN at all
|
||||
VerifyAccountResponse response = accountManager.verifyAccountWithCode(code,
|
||||
null,
|
||||
registrationId,
|
||||
!hasFcm,
|
||||
registrationLockV1,
|
||||
registrationLockV2,
|
||||
unidentifiedAccessKey,
|
||||
universalUnidentifiedAccess,
|
||||
AppCapabilities.getCapabilities(true));
|
||||
|
||||
UUID uuid = UuidUtil.parseOrThrow(response.getUuid());
|
||||
boolean hasPin = response.isStorageCapable();
|
||||
|
||||
IdentityKeyPair identityKey = IdentityKeyUtil.getIdentityKeyPair(context);
|
||||
List<PreKeyRecord> records = PreKeyUtil.generatePreKeys(context);
|
||||
@@ -259,7 +263,7 @@ public final class CodeVerificationRequest {
|
||||
TextSecurePreferences.setPromptedPushRegistration(context, true);
|
||||
TextSecurePreferences.setUnauthorizedReceived(context, false);
|
||||
|
||||
PinState.onRegistration(context, kbsData, pin);
|
||||
PinState.onRegistration(context, kbsData, pin, hasPin);
|
||||
}
|
||||
|
||||
private static @Nullable ProfileKey findExistingProfileKey(@NonNull Context context, @NonNull String e164number) {
|
||||
|
||||
@@ -12,7 +12,7 @@ public final class KeyBackupSystemWrongPinException extends Exception {
|
||||
this.tokenResponse = tokenResponse;
|
||||
}
|
||||
|
||||
@NonNull TokenResponse getTokenResponse() {
|
||||
public @NonNull TokenResponse getTokenResponse() {
|
||||
return tokenResponse;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user