diff --git a/zerver/lib/push_notifications.py b/zerver/lib/push_notifications.py index 578edb6601..df0f600473 100644 --- a/zerver/lib/push_notifications.py +++ b/zerver/lib/push_notifications.py @@ -549,7 +549,7 @@ def initialize_push_notifications() -> None: ) -def get_gcm_alert(message: Message) -> str: +def get_gcm_alert(message: Message, mentioned_user_group_name: Optional[str] = None) -> str: """ Determine what alert string to display based on the missed messages. """ @@ -560,7 +560,10 @@ def get_gcm_alert(message: Message) -> str: elif message.recipient.type == Recipient.PERSONAL and message.trigger == "private_message": return f"New private message from {sender_str}" elif message.is_stream_message() and message.trigger == "mentioned": - return f"{sender_str} mentioned you in #{display_recipient}" + if mentioned_user_group_name is None: + return f"{sender_str} mentioned you in #{display_recipient}" + else: + return f"{sender_str} mentioned @{mentioned_user_group_name} in #{display_recipient}" elif message.is_stream_message() and message.trigger == "wildcard_mentioned": return f"{sender_str} mentioned everyone in #{display_recipient}" else: @@ -777,8 +780,7 @@ def get_message_payload_apns( def get_message_payload_gcm( - user_profile: UserProfile, - message: Message, + user_profile: UserProfile, message: Message, mentioned_user_group_name: Optional[str] = None ) -> Tuple[Dict[str, Any], Dict[str, Any]]: """A `message` payload + options, for Android via GCM/FCM.""" data = get_message_payload(user_profile, message) @@ -787,7 +789,7 @@ def get_message_payload_gcm( content, truncated = truncate_content(get_mobile_push_content(message.rendered_content)) data.update( event="message", - alert=get_gcm_alert(message), + alert=get_gcm_alert(message, mentioned_user_group_name), zulip_message_id=message.id, # message_id is reserved for CCS time=datetime_to_timestamp(message.date_sent), content=content, @@ -925,7 +927,9 @@ def handle_push_notification(user_profile_id: int, missed_message: Dict[str, Any mentioned_user_group_name = user_group.name apns_payload = get_message_payload_apns(user_profile, message, mentioned_user_group_name) - gcm_payload, gcm_options = get_message_payload_gcm(user_profile, message) + gcm_payload, gcm_options = get_message_payload_gcm( + user_profile, message, mentioned_user_group_name + ) logger.info("Sending push notifications to mobile clients for user %s", user_profile_id) if uses_notification_bouncer(): diff --git a/zerver/tests/test_push_notifications.py b/zerver/tests/test_push_notifications.py index 07eeab293d..917a19b3ee 100644 --- a/zerver/tests/test_push_notifications.py +++ b/zerver/tests/test_push_notifications.py @@ -1740,7 +1740,9 @@ class TestGetAPNsPayload(PushNotificationTest): class TestGetGCMPayload(PushNotificationTest): - def _test_get_message_payload_gcm_mentions(self, trigger: str, alert: str) -> None: + def _test_get_message_payload_gcm_mentions( + self, trigger: str, alert: str, mentioned_user_group_name: Optional[str] = None + ) -> None: stream = Stream.objects.filter(name="Verona").get() message = self.get_message(Recipient.STREAM, stream.id) message.content = "a" * 210 @@ -1749,7 +1751,7 @@ class TestGetGCMPayload(PushNotificationTest): message.trigger = trigger hamlet = self.example_user("hamlet") - payload, gcm_options = get_message_payload_gcm(hamlet, message) + payload, gcm_options = get_message_payload_gcm(hamlet, message, mentioned_user_group_name) self.assertDictEqual( payload, { @@ -1784,6 +1786,11 @@ class TestGetGCMPayload(PushNotificationTest): "mentioned", "King Hamlet mentioned you in #Verona" ) + def test_get_message_payload_gcm_user_group_mention(self) -> None: + self._test_get_message_payload_gcm_mentions( + "mentioned", "King Hamlet mentioned @mobile_team in #Verona", "mobile_team" + ) + def test_get_message_payload_gcm_wildcard_mention(self) -> None: self._test_get_message_payload_gcm_mentions( "wildcard_mentioned", "King Hamlet mentioned everyone in #Verona"