From d67226e39d5ce0fc9482bc2fa8e6edaf9aee8cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Mon, 19 Jul 2021 11:24:34 +0200 Subject: [PATCH 1/7] Forwarding message to selected conversation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tim Krüger --- .../com/nextcloud/talk/activities/MainActivity.kt | 6 +++--- .../AccountVerificationController.java | 4 ++-- .../nextcloud/talk/controllers/ChatController.kt | 8 ++++++++ .../controllers/ConversationsListController.java | 15 ++++++++++++++- app/src/main/res/menu/chat_message_menu.xml | 6 ++++++ app/src/main/res/values/strings.xml | 3 +++ 6 files changed, 36 insertions(+), 6 deletions(-) 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/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..2875ea51d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2165,6 +2165,14 @@ class ChatController(args: Bundle) : clipboardManager.setPrimaryClip(clipData) true } + R.id.action_forward_message -> { + val bundle = Bundle() + bundle.putBoolean("forwardMessage", true) + 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) 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..90ca9a081 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -203,9 +203,12 @@ 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("forwardMessage"); } @Override @@ -340,9 +343,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 +759,8 @@ public class ConversationsListController extends BaseController implements Searc if (showShareToScreen) { shareToScreenWasShown = true; handleSharedData(); + }else if (forwardMessage) { + forwardMessage(); } else { openConversation(); } @@ -759,6 +768,10 @@ public class ConversationsListController extends BaseController implements Searc return true; } + private void forwardMessage() { + System.out.println("Add code to forward a message here"); + } + private void handleSharedData() { collectDataFromIntent(); if (!textToPaste.isEmpty()) { diff --git a/app/src/main/res/menu/chat_message_menu.xml b/app/src/main/res/menu/chat_message_menu.xml index 02036213e..339705442 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" /> + + Add to favorites Remove from favorites + Forward to … + Select participants Add participants @@ -357,6 +359,7 @@ Copy + Forward Reply Reply privately Delete From ac92e27ac0751469f8423459dd4daa47c714d676 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 19 Jul 2021 14:16:35 +0200 Subject: [PATCH 2/7] Align forward icon throughout the platforms Signed-off-by: Andy Scherzinger --- app/src/main/res/drawable/ic_share_action.xml | 26 +++++++++++++++++++ app/src/main/res/menu/chat_message_menu.xml | 4 +-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_share_action.xml 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..a68e433f5 --- /dev/null +++ b/app/src/main/res/drawable/ic_share_action.xml @@ -0,0 +1,26 @@ + + + + diff --git a/app/src/main/res/menu/chat_message_menu.xml b/app/src/main/res/menu/chat_message_menu.xml index 339705442..17fe7420c 100644 --- a/app/src/main/res/menu/chat_message_menu.xml +++ b/app/src/main/res/menu/chat_message_menu.xml @@ -10,7 +10,7 @@ @@ -31,4 +31,4 @@ android:icon="@drawable/ic_delete" android:title="@string/nc_delete_message" app:showAsAction="always" /> - \ No newline at end of file + From b3d0ebf5770be0ab511a582591d4753ffbb6c96b Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 19 Jul 2021 14:22:27 +0200 Subject: [PATCH 3/7] properly tint menu icon Signed-off-by: Andy Scherzinger --- app/src/main/res/drawable/ic_share_action.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/drawable/ic_share_action.xml b/app/src/main/res/drawable/ic_share_action.xml index a68e433f5..2705dbb71 100644 --- a/app/src/main/res/drawable/ic_share_action.xml +++ b/app/src/main/res/drawable/ic_share_action.xml @@ -18,6 +18,7 @@ android:width="24dp" android:height="24dp" android:autoMirrored="true" + android:tint="@color/medium_emphasis_text" android:viewportWidth="24" android:viewportHeight="24"> Date: Tue, 20 Jul 2021 10:46:43 +0200 Subject: [PATCH 4/7] Allow only forwarding of regualr text messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also go back directly to the conversation list. Go back history is reseted. Signed-off-by: Tim Krüger --- .../java/com/nextcloud/talk/controllers/ChatController.kt | 8 +++++++- .../talk/controllers/ConversationsListController.java | 8 +++----- 2 files changed, 10 insertions(+), 6 deletions(-) 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 2875ea51d..0976d71ce 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 -> { @@ -2168,6 +2169,7 @@ class ChatController(args: Bundle) : R.id.action_forward_message -> { val bundle = Bundle() bundle.putBoolean("forwardMessage", true) + bundle.putString("forwardMessageText", message?.text) getRouter().pushController( RouterTransaction.with(ConversationsListController(bundle)).pushChangeHandler (HorizontalChangeHandler()).popChangeHandler(HorizontalChangeHandler())) @@ -2311,6 +2313,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 90ca9a081..4462e4e75 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; @@ -209,6 +210,7 @@ public class ConversationsListController extends BaseController implements Searc super(); setHasOptionsMenu(true); forwardMessage = bundle.getBoolean("forwardMessage"); + this.bundle = bundle; } @Override @@ -760,7 +762,7 @@ public class ConversationsListController extends BaseController implements Searc shareToScreenWasShown = true; handleSharedData(); }else if (forwardMessage) { - forwardMessage(); + openConversation(bundle.getString("forwardMessageText")); } else { openConversation(); } @@ -768,10 +770,6 @@ public class ConversationsListController extends BaseController implements Searc return true; } - private void forwardMessage() { - System.out.println("Add code to forward a message here"); - } - private void handleSharedData() { collectDataFromIntent(); if (!textToPaste.isEmpty()) { From af31d8a7039e90cbeaddafea08a9fbdfac63d27f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Wed, 21 Jul 2021 16:06:26 +0200 Subject: [PATCH 5/7] Make klint happy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tim Krüger --- .../java/com/nextcloud/talk/controllers/ChatController.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 0976d71ce..201d9a266 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2171,8 +2171,10 @@ class ChatController(args: Bundle) : bundle.putBoolean("forwardMessage", true) bundle.putString("forwardMessageText", message?.text) getRouter().pushController( - RouterTransaction.with(ConversationsListController(bundle)).pushChangeHandler - (HorizontalChangeHandler()).popChangeHandler(HorizontalChangeHandler())) + RouterTransaction.with(ConversationsListController(bundle)) + .pushChangeHandler(HorizontalChangeHandler()) + .popChangeHandler(HorizontalChangeHandler()) + ) true } R.id.action_reply_to_message -> { From ed197922047863c06a228689f349c0fad4ea5300 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 22 Jul 2021 22:39:31 +0200 Subject: [PATCH 6/7] extract bundle keys Signed-off-by: Andy Scherzinger --- .../java/com/nextcloud/talk/controllers/ChatController.kt | 4 ++-- .../talk/controllers/ConversationsListController.java | 6 +++--- .../main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) 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 201d9a266..cc40cd19d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2168,8 +2168,8 @@ class ChatController(args: Bundle) : } R.id.action_forward_message -> { val bundle = Bundle() - bundle.putBoolean("forwardMessage", true) - bundle.putString("forwardMessageText", message?.text) + 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()) 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 4462e4e75..fd24e0c49 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -209,7 +209,7 @@ public class ConversationsListController extends BaseController implements Searc public ConversationsListController(Bundle bundle) { super(); setHasOptionsMenu(true); - forwardMessage = bundle.getBoolean("forwardMessage"); + forwardMessage = bundle.getBoolean(BundleKeys.INSTANCE.getKEY_FORWARD_MSG_FLAG()); this.bundle = bundle; } @@ -761,8 +761,8 @@ public class ConversationsListController extends BaseController implements Searc if (showShareToScreen) { shareToScreenWasShown = true; handleSharedData(); - }else if (forwardMessage) { - openConversation(bundle.getString("forwardMessageText")); + } 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" } From fd430b90846417d0ef77cb597ab0877bb370efea Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 22 Jul 2021 22:58:22 +0200 Subject: [PATCH 7/7] use proper context Signed-off-by: Andy Scherzinger --- .../messages/MagicPreviewMessageViewHolder.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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 -> {