diff --git a/app/src/main/java/org/thoughtcrime/securesms/AppCapabilities.java b/app/src/main/java/org/thoughtcrime/securesms/AppCapabilities.java index c44f5481ad..cf78973beb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/AppCapabilities.java +++ b/app/src/main/java/org/thoughtcrime/securesms/AppCapabilities.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.whispersystems.signalservice.api.account.AccountAttributes; public final class AppCapabilities { @@ -13,12 +12,13 @@ public final class AppCapabilities { private static final boolean GV1_MIGRATION = true; private static final boolean ANNOUNCEMENT_GROUPS = true; private static final boolean SENDER_KEY = true; + private static final boolean CHANGE_NUMBER = true; /** * @param storageCapable Whether or not the user can use storage service. This is another way of * asking if the user has set a Signal PIN or not. */ public static AccountAttributes.Capabilities getCapabilities(boolean storageCapable) { - return new AccountAttributes.Capabilities(UUID_CAPABLE, GV2_CAPABLE, storageCapable, GV1_MIGRATION, SENDER_KEY, ANNOUNCEMENT_GROUPS, FeatureFlags.changeNumber()); + return new AccountAttributes.Capabilities(UUID_CAPABLE, GV2_CAPABLE, storageCapable, GV1_MIGRATION, SENDER_KEY, ANNOUNCEMENT_GROUPS, CHANGE_NUMBER); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt index 81d8da17ff..426b87c4b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt @@ -4,6 +4,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle import androidx.navigation.NavDirections +import com.google.android.material.dialog.MaterialAlertDialogBuilder import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.Subject import org.thoughtcrime.securesms.MainActivity @@ -15,6 +16,8 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.DonationP import org.thoughtcrime.securesms.help.HelpFragment import org.thoughtcrime.securesms.keyvalue.SettingsValues import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter +import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.service.KeyCachingService import org.thoughtcrime.securesms.util.CachedInflater import org.thoughtcrime.securesms.util.DynamicTheme @@ -24,6 +27,7 @@ private const val START_LOCATION = "app.settings.start.location" private const val START_ARGUMENTS = "app.settings.start.arguments" private const val NOTIFICATION_CATEGORY = "android.intent.category.NOTIFICATION_PREFERENCES" private const val STATE_WAS_CONFIGURATION_UPDATED = "app.settings.state.configuration.updated" +private const val EXTRA_PERFORM_ACTION_ON_CREATE = "extra_perform_action_on_create" class AppSettingsActivity : DSLSettingsActivity(), DonationPaymentComponent { @@ -82,6 +86,17 @@ class AppSettingsActivity : DSLSettingsActivity(), DonationPaymentComponent { startService(intent) } } + + if (savedInstanceState == null) { + when (intent.getStringExtra(EXTRA_PERFORM_ACTION_ON_CREATE)) { + ACTION_CHANGE_NUMBER_SUCCESS -> { + MaterialAlertDialogBuilder(this) + .setMessage(getString(R.string.ChangeNumber__your_phone_number_has_changed_to_s, PhoneNumberFormatter.prettyPrint(Recipient.self().requireE164()))) + .setPositiveButton(R.string.ChangeNumber__okay, null) + .show() + } + } + } } override fun onNewIntent(intent: Intent?) { @@ -109,8 +124,14 @@ class AppSettingsActivity : DSLSettingsActivity(), DonationPaymentComponent { } companion object { + const val ACTION_CHANGE_NUMBER_SUCCESS = "action_change_number_success" + @JvmStatic - fun home(context: Context): Intent = getIntentForStartLocation(context, StartLocation.HOME) + @JvmOverloads + fun home(context: Context, action: String? = null): Intent { + return getIntentForStartLocation(context, StartLocation.HOME) + .putExtra(EXTRA_PERFORM_ACTION_ON_CREATE, action) + } @JvmStatic fun backups(context: Context): Intent = getIntentForStartLocation(context, StartLocation.BACKUPS) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberUtil.kt index c39781df8e..6e3bb010f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberUtil.kt @@ -1,15 +1,13 @@ package org.thoughtcrime.securesms.components.settings.app.changenumber import android.os.Bundle -import android.widget.Toast import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.NavHostFragment -import androidx.navigation.fragment.findNavController import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity import org.thoughtcrime.securesms.registration.fragments.CaptchaFragment import org.thoughtcrime.securesms.registration.viewmodel.BaseRegistrationViewModel -import org.thoughtcrime.securesms.util.navigation.safeNavigate /** * Helpers for various aspects of the change number flow. @@ -36,7 +34,7 @@ object ChangeNumberUtil { } fun Fragment.changeNumberSuccess() { - findNavController().safeNavigate(R.id.action_pop_app_settings_change_number) - Toast.makeText(requireContext(), R.string.ChangeNumber__your_phone_number_has_been_changed, Toast.LENGTH_SHORT).show() + requireActivity().finish() + requireActivity().startActivity(AppSettingsActivity.home(requireContext(), AppSettingsActivity.ACTION_CHANGE_NUMBER_SUCCESS)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java index c375469a89..eb6b33817f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -95,9 +95,10 @@ public class ApplicationMigrations { static final int FIX_DEPRECATION = 51; // Only used to trigger clearing the 'client deprecated' flag static final int JUMBOMOJI_DOWNLOAD = 52; static final int FIX_EMOJI_QUALITY = 53; + static final int CHANGE_NUMBER_CAPABILITY_4 = 54; } - public static final int CURRENT_VERSION = 53; + public static final int CURRENT_VERSION = 54; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -411,6 +412,10 @@ public class ApplicationMigrations { jobs.put(Version.FIX_EMOJI_QUALITY, new EmojiDownloadMigrationJob()); } + if (lastSeenVersion < Version.CHANGE_NUMBER_CAPABILITY_4) { + jobs.put(Version.CHANGE_NUMBER_CAPABILITY_4, new AttributesMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 1ca33efb4a..672a88d285 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -84,7 +84,7 @@ public final class FeatureFlags { private static final String SUGGEST_SMS_BLACKLIST = "android.suggestSmsBlacklist"; private static final String MAX_GROUP_CALL_RING_SIZE = "global.calling.maxGroupCallRingSize"; private static final String GROUP_CALL_RINGING = "android.calling.groupCallRinging"; - private static final String CHANGE_NUMBER_ENABLED = "android.changeNumber"; + private static final String CHANGE_NUMBER_ENABLED = "android.changeNumber.2"; private static final String DONOR_BADGES = "android.donorBadges.6"; private static final String DONOR_BADGES_DISPLAY = "android.donorBadges.display.4"; private static final String CDSH = "android.cdsh"; @@ -218,7 +218,6 @@ public final class FeatureFlags { private static final Map FLAG_CHANGE_LISTENERS = new HashMap() {{ put(MESSAGE_PROCESSOR_ALARM_INTERVAL, change -> MessageProcessReceiver.startOrUpdateAlarm(ApplicationDependencies.getApplication())); put(SENDER_KEY, change -> ApplicationDependencies.getJobManager().add(new RefreshAttributesJob())); - put(CHANGE_NUMBER_ENABLED, change -> ApplicationDependencies.getJobManager().add(new RefreshAttributesJob())); }}; private static final Map REMOTE_VALUES = new TreeMap<>(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a0f24fa60..73364c188c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3603,7 +3603,10 @@ Use this to change your current phone number to a new phone number. You can’t undo this change.\n\nBefore continuing, make sure your new number can receive SMS or calls. Continue - Your phone number has been changed. + + Your phone number has been changed to %1$s + + Okay Change Number @@ -3638,12 +3641,19 @@ Keep old pin? + It looks like you tried to change your number but we were unable to determine if it was successful.\n\nRechecking now… + Change status confirmed + Your number has been confirmed as %1$s. If this is not your new number, please restart the change number process. + Change status unconfirmed + We could not determine the status of your change number request.\n\n(Error: %1$s) + Retry + Leave Submit debug log