From ce09e9a2174b651f7f140c625a6096e4e9430531 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 7 Feb 2024 15:14:04 -0500 Subject: [PATCH] Update UI for PNP launch megaphone. --- .../securesms/megaphone/Megaphones.java | 26 ++++++++++++++-- .../NewWaysToConnectDialogFragment.kt | 30 +++++++++++-------- app/src/main/res/values/strings.xml | 11 ++++++- 3 files changed, 51 insertions(+), 16 deletions(-) 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 3a9612a63a..142a619946 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -4,6 +4,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.Build; +import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -103,7 +104,7 @@ public final class Megaphones { * This is also when you would hide certain megaphones based on things like {@link FeatureFlags}. */ private static Map buildDisplayOrder(@NonNull Context context, @NonNull Map records) { - return new LinkedHashMap() {{ + return new LinkedHashMap<>() {{ put(Event.PINS_FOR_ALL, new PinsForAllSchedule()); put(Event.CLIENT_DEPRECATED, SignalStore.misc().isClientDeprecated() ? ALWAYS : NEVER); put(Event.NOTIFICATIONS, shouldShowNotificationsMegaphone(context) ? RecurringSchedule.every(TimeUnit.DAYS.toMillis(30)) : NEVER); @@ -117,6 +118,7 @@ public final class Megaphones { // Feature-introduction megaphones should *probably* be added below this divider put(Event.ADD_A_PROFILE_PHOTO, shouldShowAddAProfilePhotoMegaphone(context) ? ALWAYS : NEVER); + put(Event.PNP_LAUNCH, shouldShowPnpLaunchMegaphone() ? ALWAYS : NEVER); }}; } @@ -144,7 +146,8 @@ public final class Megaphones { return buildSetUpYourUsernameMegaphone(context); case GRANT_FULL_SCREEN_INTENT: return buildGrantFullScreenIntentPermission(context); - + case PNP_LAUNCH: + return buildPnpLaunchMegaphone(); default: throw new IllegalArgumentException("Event not handled!"); } @@ -332,6 +335,20 @@ public final class Megaphones { .build(); } + public static @NonNull Megaphone buildPnpLaunchMegaphone() { + return new Megaphone.Builder(Event.PNP_LAUNCH, Megaphone.Style.BASIC) + .setTitle(R.string.PnpLaunchMegaphone_title) + .setBody(R.string.PnpLaunchMegaphone_body) + .setImage(R.drawable.usernames_megaphone) + .setActionButton(R.string.PnpLaunchMegaphone_learn_more, (megaphone, controller) -> { + controller.onMegaphoneDialogFragmentRequested(new NewWaysToConnectDialogFragment()); + }) + .setSecondaryButton(R.string.PnpLaunchMegaphone_dismiss, (megaphone, controller) -> { + controller.onMegaphoneCompleted(Event.PNP_LAUNCH); + }) + .build(); + } + public static @NonNull Megaphone buildGrantFullScreenIntentPermission(@NonNull Context context) { return new Megaphone.Builder(Event.GRANT_FULL_SCREEN_INTENT, Megaphone.Style.BASIC) .setTitle(R.string.GrantFullScreenIntentPermission_megaphone_title) @@ -405,6 +422,10 @@ public final class Megaphones { (System.currentTimeMillis() - phoneNumberDiscoveryDisabledAt) >= TimeUnit.DAYS.toMillis(3); } + private static boolean shouldShowPnpLaunchMegaphone() { + return TextUtils.isEmpty(SignalStore.account().getUsername()); + } + private static boolean shouldShowGrantFullScreenIntentPermission(@NonNull Context context) { return Build.VERSION.SDK_INT >= 34 && !NotificationManagerCompat.from(context).canUseFullScreenIntent(); } @@ -450,6 +471,7 @@ public final class Megaphones { REMOTE_MEGAPHONE("remote_megaphone"), BACKUP_SCHEDULE_PERMISSION("backup_schedule_permission"), SET_UP_YOUR_USERNAME("set_up_your_username"), + PNP_LAUNCH("pnp_launch"), GRANT_FULL_SCREEN_INTENT("grant_full_screen_intent"); private final String key; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/username/NewWaysToConnectDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/profiles/username/NewWaysToConnectDialogFragment.kt index ee5ed6c157..857402ee90 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/username/NewWaysToConnectDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/username/NewWaysToConnectDialogFragment.kt @@ -80,17 +80,19 @@ private fun NewWaysToConnectDialogContent( navigationIconPainter = painterResource(id = R.drawable.symbol_x_24) ) { Column(modifier = Modifier.padding(it)) { - Text( - text = stringResource(id = R.string.NewWaysToConnectDialogFragment__new_ways_to_connect), - style = MaterialTheme.typography.headlineMedium, - textAlign = TextAlign.Center, - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter)) - .padding(top = 16.dp, bottom = 36.dp) - ) - LazyColumn(modifier = Modifier.weight(1f)) { + item { + Text( + text = stringResource(id = R.string.NewWaysToConnectDialogFragment__new_ways_to_connect), + style = MaterialTheme.typography.headlineMedium, + textAlign = TextAlign.Center, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter)) + .padding(top = 4.dp, bottom = 36.dp) + ) + } + item { NewWaysToConnectRowItem( title = stringResource(id = R.string.NewWaysToConnectDialogFragment__phone_number_privacy), @@ -120,7 +122,7 @@ private fun NewWaysToConnectDialogContent( onClick = onSetUpUsernameClick, modifier = Modifier .padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter)) - .padding(top = 36.dp) + .padding(top = 16.dp) .defaultMinSize(minWidth = 221.dp) .align(alignment = Alignment.CenterHorizontally) ) { @@ -133,8 +135,10 @@ private fun NewWaysToConnectDialogContent( onClick = onNotNowClick, modifier = Modifier .padding( - horizontal = dimensionResource(id = R.dimen.core_ui__gutter), - vertical = 36.dp + start = dimensionResource(id = R.dimen.core_ui__gutter), + end = dimensionResource(id = R.dimen.core_ui__gutter), + top = 8.dp, + bottom = 16.dp ) .defaultMinSize(minWidth = 221.dp) .align(alignment = Alignment.CenterHorizontally) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b3f59c619a..98547810ea 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2522,7 +2522,7 @@ Not now - Set up your username + Set up username Play video @@ -6176,6 +6176,15 @@ Learn more + + New ways to connect + + Introducing phone number privacy, optional usernames and links. + + Dismiss + + Learn more + Bold