diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java index 561b239e53..f132e2e0a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java @@ -57,6 +57,7 @@ public class MegaphoneRepository { database.markFinished(Event.RESEARCH); database.markFinished(Event.GROUP_CALLING); database.markFinished(Event.CHAT_COLORS); + database.markFinished(Event.ADD_A_PROFILE_PHOTO); resetDatabaseCache(); }); } 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 6baffd5d84..a4529178cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -25,7 +25,9 @@ import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity; import org.thoughtcrime.securesms.lock.v2.KbsMigrationActivity; import org.thoughtcrime.securesms.messagerequests.MessageRequestMegaphoneActivity; import org.thoughtcrime.securesms.notifications.NotificationChannels; +import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.profiles.ProfileName; +import org.thoughtcrime.securesms.profiles.manage.ManageProfileActivity; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.CommunicationActions; import org.thoughtcrime.securesms.util.FeatureFlags; @@ -105,6 +107,7 @@ public final class Megaphones { put(Event.ONBOARDING, shouldShowOnboardingMegaphone(context) ? ALWAYS : NEVER); put(Event.NOTIFICATIONS, shouldShowNotificationsMegaphone(context) ? RecurringSchedule.every(TimeUnit.DAYS.toMillis(30)) : NEVER); put(Event.CHAT_COLORS, ALWAYS); + put(Event.ADD_A_PROFILE_PHOTO, shouldShowAddAProfileMegaphone(context) ? ALWAYS : NEVER); }}; } @@ -134,6 +137,8 @@ public final class Megaphones { return buildNotificationsMegaphone(context); case CHAT_COLORS: return buildChatColorsMegaphone(context); + case ADD_A_PROFILE_PHOTO: + return buildAddAProfilePhotoMegaphone(context); default: throw new IllegalArgumentException("Event not handled!"); } @@ -320,6 +325,21 @@ public final class Megaphones { .build(); } + private static @NonNull Megaphone buildAddAProfilePhotoMegaphone(@NonNull Context context) { + return new Megaphone.Builder(Event.ADD_A_PROFILE_PHOTO, Megaphone.Style.BASIC) + .setTitle(R.string.AddAProfilePhotoMegaphone__add_a_profile_photo) + .setImage(R.drawable.ic_add_a_profile_megaphone_image) + .setBody(R.string.AddAProfilePhotoMegaphone__choose_a_look_and_color) + .setActionButton(R.string.AddAProfilePhotoMegaphone__add_photo, (megaphone, listener) -> { + listener.onMegaphoneNavigationRequested(ManageProfileActivity.getIntentForAvatarEdit(context)); + listener.onMegaphoneCompleted(Event.ADD_A_PROFILE_PHOTO); + }) + .setSecondaryButton(R.string.AddAProfilePhotoMegaphone__not_now, (megaphone, listener) -> { + listener.onMegaphoneCompleted(Event.ADD_A_PROFILE_PHOTO); + }) + .build(); + } + private static boolean shouldShowMessageRequestsMegaphone() { return Recipient.self().getProfileName() == ProfileName.EMPTY; } @@ -363,6 +383,10 @@ public final class Megaphones { return shouldShow; } + private static boolean shouldShowAddAProfileMegaphone(@NonNull Context context) { + return !AvatarHelper.hasAvatar(context, Recipient.self().getId()); + } + public enum Event { REACTIONS("reactions"), PINS_FOR_ALL("pins_for_all"), @@ -375,7 +399,8 @@ public final class Megaphones { GROUP_CALLING("group_calling"), ONBOARDING("onboarding"), NOTIFICATIONS("notifications"), - CHAT_COLORS("chat_colors"); + CHAT_COLORS("chat_colors"), + ADD_A_PROFILE_PHOTO("add_a_profile_photo"); private final String key; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java index 12139b4348..c4cd90b4c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java @@ -25,6 +25,7 @@ public class ManageProfileActivity extends PassphraseRequiredActivity implements private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); public static final String START_AT_USERNAME = "start_at_username"; + public static final String START_AT_AVATAR = "start_at_avatar"; public static @NonNull Intent getIntent(@NonNull Context context) { return new Intent(context, ManageProfileActivity.class); @@ -36,6 +37,12 @@ public class ManageProfileActivity extends PassphraseRequiredActivity implements return intent; } + public static @NonNull Intent getIntentForAvatarEdit(@NonNull Context context) { + Intent intent = new Intent(context, ManageProfileActivity.class); + intent.putExtra(START_AT_AVATAR, true); + return intent; + } + @Override public void onCreate(Bundle bundle, boolean ready) { dynamicTheme.onCreate(this); @@ -52,6 +59,11 @@ public class ManageProfileActivity extends PassphraseRequiredActivity implements NavDirections action = ManageProfileFragmentDirections.actionManageUsername(); Navigation.findNavController(this, R.id.nav_host_fragment).navigate(action); } + + if (extras != null && extras.getBoolean(START_AT_AVATAR, false)) { + NavDirections action = ManageProfileFragmentDirections.actionManageProfileFragmentToAvatarPicker(null, null); + Navigation.findNavController(this, R.id.nav_host_fragment).navigate(action); + } } } diff --git a/app/src/main/res/drawable/ic_add_a_profile_megaphone_image.xml b/app/src/main/res/drawable/ic_add_a_profile_megaphone_image.xml new file mode 100644 index 0000000000..f65a4a5630 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_a_profile_megaphone_image.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c38ed5118f..d691d72604 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3533,6 +3533,12 @@ Appearance Not now + + Add a profile photo + Choose a look and color or customize your initials. + Not now + Add photo + Emoji Open emoji search