From 3ea1492d672409d6018568b2f8b81d886ced1448 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 6 Feb 2020 17:01:26 -0400 Subject: [PATCH] Add profile names megaphone. --- .../securesms/megaphone/Megaphones.java | 41 ++++++++++++++++-- .../profiles/edit/EditProfileActivity.java | 10 +++-- .../profiles/edit/EditProfileFragment.java | 4 ++ .../securesms/util/FeatureFlags.java | 24 ++++++---- .../res/drawable-mdpi/profile_megaphone.png | Bin 0 -> 2324 bytes .../res/drawable-xhdpi/profile_megaphone.png | Bin 0 -> 4344 bytes .../res/drawable-xxhdpi/profile_megaphone.png | Bin 0 -> 6839 bytes .../drawable-xxxhdpi/profile_megaphone.png | Bin 0 -> 8492 bytes app/src/main/res/values/strings.xml | 8 ++++ 9 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/drawable-mdpi/profile_megaphone.png create mode 100644 app/src/main/res/drawable-xhdpi/profile_megaphone.png create mode 100644 app/src/main/res/drawable-xxhdpi/profile_megaphone.png create mode 100644 app/src/main/res/drawable-xxxhdpi/profile_megaphone.png 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 9aa1487688..2cdea81343 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -19,12 +19,16 @@ import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity; import org.thoughtcrime.securesms.lock.v2.KbsMigrationActivity; import org.thoughtcrime.securesms.lock.v2.PinUtil; import org.thoughtcrime.securesms.logging.Log; +import org.thoughtcrime.securesms.profiles.ProfileName; +import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity; import org.thoughtcrime.securesms.util.FeatureFlags; +import org.thoughtcrime.securesms.util.TextSecurePreferences; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; /** * Creating a new megaphone: @@ -43,6 +47,10 @@ public final class Megaphones { private static final String TAG = Log.tag(Megaphones.class); + private static final MegaphoneSchedule ALWAYS = new ForeverSchedule(true); + private static final MegaphoneSchedule NEVER = new ForeverSchedule(false); + private static final MegaphoneSchedule EVERY_TWO_DAYS = new RecurringSchedule(TimeUnit.DAYS.toMillis(2)); + private Megaphones() {} static @Nullable Megaphone getNextMegaphone(@NonNull Context context, @NonNull Map records) { @@ -80,8 +88,9 @@ public final class Megaphones { */ private static Map buildDisplayOrder() { return new LinkedHashMap() {{ - put(Event.REACTIONS, new ForeverSchedule(true)); + put(Event.REACTIONS, ALWAYS); put(Event.PINS_FOR_ALL, new PinsForAllSchedule()); + put(Event.PROFILE_NAMES_FOR_ALL, FeatureFlags.profileNamesMegaphoneEnabled() ? EVERY_TWO_DAYS : NEVER); put(Event.PIN_REMINDER, new SignalPinReminderSchedule()); }}; } @@ -94,6 +103,8 @@ public final class Megaphones { return buildPinsForAllMegaphone(record); case PIN_REMINDER: return buildPinReminderMegaphone(context); + case PROFILE_NAMES_FOR_ALL: + return buildProfileNamesMegaphone(context); default: throw new IllegalArgumentException("Event not handled!"); } @@ -121,8 +132,6 @@ public final class Megaphones { .setMandatory(true) .setImage(R.drawable.kbs_pin_megaphone); - long daysRemaining = PinsForAllSchedule.getDaysRemaining(record.getFirstVisible(), System.currentTimeMillis()); - if (PinUtil.userHasPin(ApplicationDependencies.getApplication())) { return buildPinsForAllMegaphoneForUserWithPin(builder.enableSnooze(null)); } else { @@ -185,10 +194,34 @@ public final class Megaphones { .build(); } + private static @NonNull Megaphone buildProfileNamesMegaphone(@NonNull Context context) { + Megaphone.Builder builder = new Megaphone.Builder(Event.PROFILE_NAMES_FOR_ALL, Megaphone.Style.BASIC) + .enableSnooze(null) + .setImage(R.drawable.profile_megaphone); + + Megaphone.EventListener eventListener = (megaphone, listener) -> { + listener.onMegaphoneSnooze(Event.PROFILE_NAMES_FOR_ALL); + listener.onMegaphoneNavigationRequested(new Intent(context, EditProfileActivity.class)); + }; + + if (TextSecurePreferences.getProfileName(ApplicationDependencies.getApplication()) == ProfileName.EMPTY) { + return builder.setTitle(R.string.ProfileNamesMegaphone__add_a_profile_name) + .setBody(R.string.ProfileNamesMegaphone__this_will_be_displayed_when_you_start) + .setActionButton(R.string.ProfileNamesMegaphone__add_profile_name, eventListener) + .build(); + } else { + return builder.setTitle(R.string.ProfileNamesMegaphone__confirm_your_profile_name) + .setBody(R.string.ProfileNamesMegaphone__your_profile_can_now_include) + .setActionButton(R.string.ProfileNamesMegaphone__confirm_name, eventListener) + .build(); + } + } + public enum Event { REACTIONS("reactions"), PINS_FOR_ALL("pins_for_all"), - PIN_REMINDER("pin_reminder"); + PIN_REMINDER("pin_reminder"), + PROFILE_NAMES_FOR_ALL("profile_names"); private final String key; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java index a76b46a7e8..b2398fd3c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java @@ -19,9 +19,9 @@ public class EditProfileActivity extends BaseActionBarActivity implements EditPr public static final String EXCLUDE_SYSTEM = "exclude_system"; public static final String DISPLAY_USERNAME = "display_username"; public static final String NEXT_BUTTON_TEXT = "next_button_text"; - public static final String SHOW_TOOLBAR = "show_back_arrow"; + public static final String SHOW_TOOLBAR = "show_back_arrow"; - private final DynamicTheme dynamicTheme = new DynamicRegistrationTheme(); + private final DynamicTheme dynamicTheme = new DynamicRegistrationTheme(); @Override public void onCreate(Bundle bundle) { @@ -32,8 +32,10 @@ public class EditProfileActivity extends BaseActionBarActivity implements EditPr setContentView(R.layout.profile_create_activity); if (bundle == null) { - NavGraph graph = Navigation.findNavController(this, R.id.nav_host_fragment).getGraph(); - Navigation.findNavController(this, R.id.nav_host_fragment).setGraph(graph, getIntent().getExtras()); + Bundle extras = getIntent().getExtras(); + NavGraph graph = Navigation.findNavController(this, R.id.nav_host_fragment).getGraph(); + + Navigation.findNavController(this, R.id.nav_host_fragment).setGraph(graph, extras != null ? extras : new Bundle()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java index 8067527d67..8edec4a81d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java @@ -35,9 +35,11 @@ import com.dd.CircularProgressButton; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.avatar.AvatarSelection; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.lock.v2.PinUtil; import org.thoughtcrime.securesms.logging.Log; +import org.thoughtcrime.securesms.megaphone.Megaphones; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints; @@ -328,6 +330,8 @@ public class EditProfileFragment extends Fragment { SignalStore.registrationValues().setRegistrationComplete(); } + ApplicationDependencies.getMegaphoneRepository().markFinished(Megaphones.Event.PROFILE_NAMES_FOR_ALL); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) handleFinishedLollipop(); else handleFinishedLegacy(); } else { 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 d82d552a58..4f6c3b2153 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -46,13 +46,14 @@ public final class FeatureFlags { private static final String PREFIX = "android."; private static final long FETCH_INTERVAL = TimeUnit.HOURS.toMillis(2); - private static final String UUIDS = generateKey("uuids"); - private static final String PROFILE_DISPLAY = generateKey("profileDisplay"); - private static final String MESSAGE_REQUESTS = generateKey("messageRequests"); - private static final String USERNAMES = generateKey("usernames"); - private static final String STORAGE_SERVICE = generateKey("storageService"); - private static final String PINS_FOR_ALL = generateKey("pinsForAll"); - private static final String PINS_MEGAPHONE_KILL_SWITCH = generateKey("pinsMegaphoneKillSwitch"); + private static final String UUIDS = generateKey("uuids"); + private static final String PROFILE_DISPLAY = generateKey("profileDisplay"); + private static final String MESSAGE_REQUESTS = generateKey("messageRequests"); + private static final String USERNAMES = generateKey("usernames"); + private static final String STORAGE_SERVICE = generateKey("storageService"); + private static final String PINS_FOR_ALL = generateKey("pinsForAll"); + private static final String PINS_MEGAPHONE_KILL_SWITCH = generateKey("pinsMegaphoneKillSwitch"); + private static final String PROFILE_NAMES_MEGAPHONE_ENABLED = generateKey("profileNamesMegaphoneEnabled"); /** * We will only store remote values for flags in this set. If you want a flag to be controllable @@ -61,7 +62,8 @@ public final class FeatureFlags { private static final Set REMOTE_CAPABLE = Sets.newHashSet( PINS_FOR_ALL, - PINS_MEGAPHONE_KILL_SWITCH + PINS_MEGAPHONE_KILL_SWITCH, + PROFILE_NAMES_MEGAPHONE_ENABLED ); /** @@ -166,6 +168,12 @@ public final class FeatureFlags { return getValue(PINS_MEGAPHONE_KILL_SWITCH, false); } + /** Safety switch for disabling profile names megaphone */ + public static boolean profileNamesMegaphoneEnabled() { + return getValue(PROFILE_NAMES_MEGAPHONE_ENABLED, false) && + TextSecurePreferences.getFirstInstallVersion(ApplicationDependencies.getApplication()) < 600; + } + /** Only for rendering debug info. */ public static synchronized @NonNull Map getMemoryValues() { return new TreeMap<>(REMOTE_VALUES); diff --git a/app/src/main/res/drawable-mdpi/profile_megaphone.png b/app/src/main/res/drawable-mdpi/profile_megaphone.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d9b3133ec9fe2bea6bf522eb792c5bc17af668 GIT binary patch literal 2324 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\'ll remind you later. Creating a PIN will become mandatory in %1$d days. We\'ll remind you later. Confirming your PIN will become mandatory in %1$d days. + + Add a profile name + This will be displayed when you start a new conversation or share it. + Add Profile Name + Confirm your Profile Name + Your profile can now include an optional last name. + Confirm Name + Transport icon Loading…