From 252aa3714e03e1fffa51f6da3c455585c7d6e539 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 9 Feb 2024 15:40:59 -0500 Subject: [PATCH] Sync the 'hasCompletedUsernameOnboarding' flag. --- .../app/internal/InternalSettingsFragment.kt | 7 ------- .../securesms/keyvalue/UiHints.java | 17 ++++++----------- .../securesms/megaphone/Megaphones.java | 14 +++++++++++++- .../storage/AccountRecordProcessor.java | 4 ++++ .../securesms/storage/StorageSyncHelper.java | 4 +++- .../api/storage/SignalAccountRecord.java | 13 +++++++++++++ 6 files changed, 39 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index e57e429c83..a30ccc0d86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -716,13 +716,6 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter } ) - clickPref( - title = DSLSettingsText.from("Clear Username education ui hint"), - onClick = { - SignalStore.uiHints().clearHasSeenUsernameEducation() - } - ) - clickPref( title = DSLSettingsText.from("Corrupt username"), summary = DSLSettingsText.from("Changes our local username without telling the server so it falls out of sync. Refresh profile afterwards to trigger corruption."), diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHints.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHints.java index bbd8a70b18..86b1b9d0f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHints.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHints.java @@ -14,7 +14,6 @@ public class UiHints extends SignalStoreValues { private static final String HAS_SET_OR_SKIPPED_USERNAME_CREATION = "uihints.has_set_or_skipped_username_creation"; private static final String NEVER_DISPLAY_PULL_TO_FILTER_TIP = "uihints.never_display_pull_to_filter_tip"; private static final String HAS_SEEN_SCHEDULED_MESSAGES_INFO_ONCE = "uihints.has_seen_scheduled_messages_info_once"; - private static final String HAS_SEEN_USERNAME_EDUCATION = "uihints.has_seen_username_education"; private static final String HAS_SEEN_TEXT_FORMATTING_ALERT = "uihints.text_formatting.has_seen_alert"; private static final String HAS_NOT_SEEN_EDIT_MESSAGE_BETA_ALERT = "uihints.edit_message.has_not_seen_beta_alert"; private static final String HAS_SEEN_SAFETY_NUMBER_NUX = "uihints.has_seen_safety_number_nux"; @@ -23,6 +22,7 @@ public class UiHints extends SignalStoreValues { private static final String DISMISSED_BATTERY_SAVER_PROMPT = "uihints.declined_battery_saver_prompt"; private static final String LAST_BATTERY_SAVER_PROMPT = "uihints.last_battery_saver_prompt"; private static final String LAST_CRASH_PROMPT = "uihints.last_crash_prompt"; + private static final String HAS_COMPLETED_USERNAME_ONBOARDING = "uihints.has_completed_username_onboarding"; UiHints(@NonNull KeyValueStore store) { super(store); @@ -35,7 +35,7 @@ public class UiHints extends SignalStoreValues { @Override @NonNull List getKeysToIncludeInBackup() { - return Arrays.asList(NEVER_DISPLAY_PULL_TO_FILTER_TIP, HAS_SEEN_USERNAME_EDUCATION, HAS_SEEN_TEXT_FORMATTING_ALERT); + return Arrays.asList(NEVER_DISPLAY_PULL_TO_FILTER_TIP, HAS_COMPLETED_USERNAME_ONBOARDING, HAS_SEEN_TEXT_FORMATTING_ALERT); } public void markHasSeenGroupSettingsMenuToast() { @@ -70,19 +70,14 @@ public class UiHints extends SignalStoreValues { putBoolean(HAS_SET_OR_SKIPPED_USERNAME_CREATION, true); } - public void markHasSeenUsernameEducation() { - putBoolean(HAS_SEEN_USERNAME_EDUCATION, true); + public void setHasCompletedUsernameOnboarding(boolean value) { + putBoolean(HAS_COMPLETED_USERNAME_ONBOARDING, value); } - public boolean hasSeenUsernameEducation() { - return getBoolean(HAS_SEEN_USERNAME_EDUCATION, false); + public boolean hasCompletedUsernameOnboarding() { + return getBoolean(HAS_COMPLETED_USERNAME_ONBOARDING, false); } - public void clearHasSeenUsernameEducation() { - putBoolean(HAS_SEEN_USERNAME_EDUCATION, false); - } - - public void resetNeverDisplayPullToRefreshCount() { putInteger(NEVER_DISPLAY_PULL_TO_FILTER_TIP, 0); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java index 142a619946..85fe1c19fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -14,12 +14,14 @@ import androidx.core.app.NotificationManagerCompat; import com.annimon.stream.Stream; import com.bumptech.glide.Glide; +import org.checkerframework.checker.units.qual.A; import org.signal.core.util.MapUtil; import org.signal.core.util.SetUtil; import org.signal.core.util.TranslationDetection; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity; +import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MegaphoneRecord; import org.thoughtcrime.securesms.database.model.RemoteMegaphoneRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -37,6 +39,7 @@ import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.profiles.manage.EditProfileActivity; import org.thoughtcrime.securesms.profiles.username.NewWaysToConnectDialogFragment; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.storage.StorageSyncHelper; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; @@ -342,9 +345,18 @@ public final class Megaphones { .setImage(R.drawable.usernames_megaphone) .setActionButton(R.string.PnpLaunchMegaphone_learn_more, (megaphone, controller) -> { controller.onMegaphoneDialogFragmentRequested(new NewWaysToConnectDialogFragment()); + controller.onMegaphoneCompleted(Event.PNP_LAUNCH); + + SignalStore.uiHints().setHasCompletedUsernameOnboarding(true); + SignalDatabase.recipients().markNeedsSync(Recipient.self().getId()); + StorageSyncHelper.scheduleSyncForDataChange(); }) .setSecondaryButton(R.string.PnpLaunchMegaphone_dismiss, (megaphone, controller) -> { controller.onMegaphoneCompleted(Event.PNP_LAUNCH); + + SignalStore.uiHints().setHasCompletedUsernameOnboarding(true); + SignalDatabase.recipients().markNeedsSync(Recipient.self().getId()); + StorageSyncHelper.scheduleSyncForDataChange(); }) .build(); } @@ -423,7 +435,7 @@ public final class Megaphones { } private static boolean shouldShowPnpLaunchMegaphone() { - return TextUtils.isEmpty(SignalStore.account().getUsername()); + return TextUtils.isEmpty(SignalStore.account().getUsername()) && !SignalStore.uiHints().hasCompletedUsernameOnboarding(); } private static boolean shouldShowGrantFullScreenIntentPermission(@NonNull Context context) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java index dd380187b0..df9583c924 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java @@ -125,6 +125,7 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor