diff --git a/res/values/strings.xml b/res/values/strings.xml
index dc2eaca03..37bcaa2e9 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 0ef94dfe4..22fc4f25f 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 dd823c315..284359081 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();