From ee9acf2687f30837f1fd8e41c39a0c8f1bc9f661 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 26 Sep 2019 16:37:09 -0400 Subject: [PATCH] Show tooltip for swipe-to-reply. --- res/values/strings.xml | 2 ++ .../conversation/ConversationFragment.java | 16 ++++++++++++++++ .../securesms/util/TextSecurePreferences.java | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index dc2eaca03e..37bcaa2e93 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -258,6 +258,8 @@ Original message not found Original message no longer available Failed to open message + You can swipe to the right on any message to quickly reply + You can swipe to the left on any message to quickly reply There is no browser installed on your device. diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/src/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 0ef94dfe49..22fc4f25f1 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -63,6 +63,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.ShareActivity; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.components.ConversationTypingView; +import org.thoughtcrime.securesms.components.TooltipPopup; import org.thoughtcrime.securesms.components.recyclerview.SmoothScrollingLinearLayoutManager; import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.contactshare.ContactUtil; @@ -836,6 +837,20 @@ public class ConversationFragment extends Fragment } } + private void maybeShowSwipeToReplyTooltip() { + if (!TextSecurePreferences.hasSeenSwipeToReplyTooltip(requireContext())) { + int text = getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_LTR ? R.string.ConversationFragment_you_can_swipe_to_the_right_reply + : R.string.ConversationFragment_you_can_swipe_to_the_left_reply; + TooltipPopup.forTarget(requireActivity().findViewById(R.id.menu_context_reply)) + .setText(text) + .setTextColor(getResources().getColor(R.color.core_white)) + .setBackgroundTint(getResources().getColor(R.color.core_blue)) + .show(TooltipPopup.POSITION_BELOW); + + TextSecurePreferences.setHasSeenSwipeToReplyTooltip(requireContext(), true); + } + } + public interface ConversationFragmentListener { void setThreadId(long threadId); void handleReplyMessage(MessageRecord messageRecord); @@ -1150,6 +1165,7 @@ public class ConversationFragment extends Fragment actionMode.finish(); return true; case R.id.menu_context_reply: + maybeShowSwipeToReplyTooltip(); handleReplyMessage(getSelectedMessageRecord()); actionMode.finish(); return true; diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java index dd823c315d..2843590818 100644 --- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -193,6 +193,8 @@ public class TextSecurePreferences { private static final String FIRST_INSTALL_VERSION = "pref_first_install_version"; + private static final String HAS_SEEN_SWIPE_TO_REPLY = "pref_has_seen_swipe_to_reply"; + public static boolean isScreenLockEnabled(@NonNull Context context) { return getBooleanPreference(context, SCREEN_LOCK, false); } @@ -1148,6 +1150,13 @@ public class TextSecurePreferences { return getIntegerPreference(context, FIRST_INSTALL_VERSION, -1); } + public static boolean hasSeenSwipeToReplyTooltip(Context context) { + return getBooleanPreference(context, HAS_SEEN_SWIPE_TO_REPLY, false); + } + + public static void setHasSeenSwipeToReplyTooltip(Context context, boolean value) { + setBooleanPreference(context, HAS_SEEN_SWIPE_TO_REPLY, value); + } public static void setBooleanPreference(Context context, String key, boolean value) { PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).apply();