diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt
index 20d3298cb..7e803a7a7 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt
+++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt
@@ -111,7 +111,7 @@ class MainActivity : BaseActivity(), ActionBarProvider {
if (intent.hasExtra(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL)) {
if (!router!!.hasRootController()) {
router!!.setRoot(
- RouterTransaction.with(ConversationsListController())
+ RouterTransaction.with(ConversationsListController(Bundle()))
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
)
@@ -121,7 +121,7 @@ class MainActivity : BaseActivity(), ActionBarProvider {
if (hasDb) {
if (userUtils.anyUserExists()) {
router!!.setRoot(
- RouterTransaction.with(ConversationsListController())
+ RouterTransaction.with(ConversationsListController(Bundle()))
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
)
@@ -174,7 +174,7 @@ class MainActivity : BaseActivity(), ActionBarProvider {
fun resetConversationsList() {
if (userUtils.anyUserExists()) {
router!!.setRoot(
- RouterTransaction.with(ConversationsListController())
+ RouterTransaction.with(ConversationsListController(Bundle()))
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
)
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java
index 7a4fec8b0..5cc616ad3 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java
+++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java
@@ -69,6 +69,7 @@ import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
+import androidx.appcompat.view.ContextThemeWrapper;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.emoji.widget.EmojiTextView;
@@ -407,7 +408,19 @@ public abstract class MagicPreviewMessageViewHolder extends MessageHolders.Incom
return;
}
- PopupMenu popupMenu = new PopupMenu(this.context, itemView, Gravity.START);
+ Context viewContext;
+
+ if (itemView != null && itemView.getContext() != null) {
+ viewContext = itemView.getContext();
+ } else {
+ viewContext = this.context;
+ }
+
+ PopupMenu popupMenu = new PopupMenu(
+ new ContextThemeWrapper(viewContext, R.style.appActionBarPopupMenu),
+ itemView,
+ Gravity.START
+ );
popupMenu.inflate(R.menu.chat_preview_message_menu);
popupMenu.setOnMenuItemClickListener(item -> {
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
index 4401e6796..09a882fe4 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
@@ -443,7 +443,7 @@ public class AccountVerificationController extends BaseController {
getActivity().runOnUiThread(() -> {
if (userUtils.getUsers().size() == 1) {
getRouter().setRoot(RouterTransaction.with(new
- ConversationsListController())
+ ConversationsListController(new Bundle()))
.pushChangeHandler(new HorizontalChangeHandler())
.popChangeHandler(new HorizontalChangeHandler()));
} else {
@@ -524,7 +524,7 @@ public class AccountVerificationController extends BaseController {
} else {
if (userUtils.anyUserExists()) {
- getRouter().setRoot(RouterTransaction.with(new ConversationsListController())
+ getRouter().setRoot(RouterTransaction.with(new ConversationsListController(new Bundle()))
.pushChangeHandler(new HorizontalChangeHandler())
.popChangeHandler(new HorizontalChangeHandler()));
} else {
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
index da4a949fa..cc40cd19d 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
@@ -95,6 +95,7 @@ import com.facebook.imagepipeline.image.CloseableImage
import com.google.android.flexbox.FlexboxLayout
import com.nextcloud.talk.R
import com.nextcloud.talk.activities.MagicCallActivity
+import com.nextcloud.talk.activities.MainActivity
import com.nextcloud.talk.adapters.messages.IncomingLocationMessageViewHolder
import com.nextcloud.talk.adapters.messages.IncomingPreviewMessageViewHolder
import com.nextcloud.talk.adapters.messages.IncomingVoiceMessageViewHolder
@@ -2061,7 +2062,7 @@ class ChatController(args: Bundle) :
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
- router.popCurrentController()
+ (activity as MainActivity).resetConversationsList()
return true
}
R.id.conversation_video_call -> {
@@ -2165,6 +2166,17 @@ class ChatController(args: Bundle) :
clipboardManager.setPrimaryClip(clipData)
true
}
+ R.id.action_forward_message -> {
+ val bundle = Bundle()
+ bundle.putBoolean(BundleKeys.KEY_FORWARD_MSG_FLAG, true)
+ bundle.putString(BundleKeys.KEY_FORWARD_MSG_TEXT, message?.text)
+ getRouter().pushController(
+ RouterTransaction.with(ConversationsListController(bundle))
+ .pushChangeHandler(HorizontalChangeHandler())
+ .popChangeHandler(HorizontalChangeHandler())
+ )
+ true
+ }
R.id.action_reply_to_message -> {
val chatMessage = message as ChatMessage?
replyToMessage(chatMessage, message?.jsonMessageId)
@@ -2303,6 +2315,10 @@ class ChatController(args: Bundle) :
(message as ChatMessage).user.id.substring(6) != currentConversation?.actorId &&
currentConversation?.type != Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL
menu.findItem(R.id.action_delete_message).isVisible = isShowMessageDeletionButton(message)
+ menu.findItem(R.id.action_forward_message).isVisible = ChatMessage.MessageType.REGULAR_TEXT_MESSAGE.equals(
+ (message as ChatMessage)
+ .getMessageType()
+ )
if (menu.hasVisibleItems()) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
setForceShowIcon(true)
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java
index 673635ae4..fd24e0c49 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java
@@ -139,6 +139,7 @@ public class ConversationsListController extends BaseController implements Searc
public static final String TAG = "ConvListController";
public static final int ID_DELETE_CONVERSATION_DIALOG = 0;
private static final String KEY_SEARCH_QUERY = "ContactsController.searchQuery";
+ private final Bundle bundle;
@Inject
UserUtils userUtils;
@@ -203,9 +204,13 @@ public class ConversationsListController extends BaseController implements Searc
private String textToPaste = "";
- public ConversationsListController() {
+ private boolean forwardMessage = false;
+
+ public ConversationsListController(Bundle bundle) {
super();
setHasOptionsMenu(true);
+ forwardMessage = bundle.getBoolean(BundleKeys.INSTANCE.getKEY_FORWARD_MSG_FLAG());
+ this.bundle = bundle;
}
@Override
@@ -340,9 +345,13 @@ public class ConversationsListController extends BaseController implements Searc
showShareToScreen = !shareToScreenWasShown && hasActivityActionSendIntent();
+
if (showShareToScreen) {
hideSearchBar();
getActionBar().setTitle(R.string.send_to_three_dots);
+ } else if (forwardMessage) {
+ hideSearchBar();
+ getActionBar().setTitle(R.string.nc_forward_to_three_dots);
} else {
MainActivity activity = (MainActivity) getActivity();
@@ -752,6 +761,8 @@ public class ConversationsListController extends BaseController implements Searc
if (showShareToScreen) {
shareToScreenWasShown = true;
handleSharedData();
+ } else if (forwardMessage) {
+ openConversation(bundle.getString(BundleKeys.INSTANCE.getKEY_FORWARD_MSG_TEXT()));
} else {
openConversation();
}
diff --git a/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt b/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt
index a262c75e8..30518a126 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt
+++ b/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt
@@ -68,4 +68,6 @@ object BundleKeys {
val KEY_SHARED_TEXT = "KEY_SHARED_TEXT"
val KEY_GEOCODING_QUERY = "KEY_GEOCODING_QUERY"
val KEY_META_DATA = "KEY_META_DATA"
+ val KEY_FORWARD_MSG_FLAG = "KEY_FORWARD_MSG_FLAG"
+ val KEY_FORWARD_MSG_TEXT = "KEY_FORWARD_MSG_TEXT"
}
diff --git a/app/src/main/res/drawable/ic_share_action.xml b/app/src/main/res/drawable/ic_share_action.xml
new file mode 100644
index 000000000..2705dbb71
--- /dev/null
+++ b/app/src/main/res/drawable/ic_share_action.xml
@@ -0,0 +1,27 @@
+
+
+
+
diff --git a/app/src/main/res/menu/chat_message_menu.xml b/app/src/main/res/menu/chat_message_menu.xml
index 02036213e..17fe7420c 100644
--- a/app/src/main/res/menu/chat_message_menu.xml
+++ b/app/src/main/res/menu/chat_message_menu.xml
@@ -8,6 +8,12 @@
android:title="@string/nc_copy_message"
app:showAsAction="always" />
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5cdb6f278..807345106 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -189,6 +189,8 @@
Add to favorites
Remove from favorites
+ Forward to …
+
Select participants
Add participants
@@ -357,6 +359,7 @@
Copy
+ Forward
Reply
Reply privately
Delete