NotificationCompat.MessagingStyle

Added in 1.1.0

public class NotificationCompat.MessagingStyle extends NotificationCompat.Style


Helper class for generating large-format notifications that include multiple back-and-forth messages of varying types between any number of people. In order to get a backwards compatible behavior, the app needs to use the v7 version of the notification builder together with this style, otherwise the user will see the normal notification view. Use setConversationTitle to set a conversation title for group chats with more than two people. This could be the user-created name of the group or, if it doesn't have a specific name, a list of the participants in the conversation. Do not set a conversation title for one-on-one chats, since platforms use the existence of this field as a hint that the conversation is a group. This class is a "rebuilder": It attaches to a Builder object and modifies its behavior, like so:

Notification notification = new Notification.Builder()
    .setContentTitle("2 new messages with " + sender.toString())
    .setContentText(subject)
    .setSmallIcon(R.drawable.new_message)
    .setLargeIcon(aBitmap)
    .setStyle(new Notification.MessagingStyle(resources.getString(R.string.reply_name))
        .addMessage(messages[0].getText(), messages[0].getTime(), messages[0].getSender())
        .addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getSender()))
    .build();

Summary

Nested types

Constants

static final int

The maximum number of messages that will be retained in the Notification itself (the number displayed is up to the platform).

Public constructors

This method is deprecated.

Use #MessagingStyle(Person) instead.

Creates a new MessagingStyle object.

Public methods

void

This is called with the extras of the framework Notification during the build process, after apply() has been called.

@NonNull NotificationCompat.MessagingStyle

Adds a Message for historic context in this notification.

@NonNull NotificationCompat.MessagingStyle

Adds a Message for display in this notification.

@NonNull NotificationCompat.MessagingStyle
addMessage(
    @Nullable CharSequence text,
    long timestamp,
    @Nullable Person person
)

Adds a message for display by this notification.

@NonNull NotificationCompat.MessagingStyle
addMessage(
    @Nullable CharSequence text,
    long timestamp,
    @Nullable CharSequence sender
)

This method is deprecated.

Use addMessage or addMessage

static @Nullable NotificationCompat.MessagingStyle

Retrieves a MessagingStyle from a Notification, enabling an application that has set a MessagingStyle using NotificationCompat or Notification.Builder to send messaging information to another application using NotificationCompat, regardless of the API level of the system.

@Nullable CharSequence

Return the title to be displayed on this conversation.

@NonNull List<NotificationCompat.MessagingStyle.Message>

Gets the list of historic Messages in the notification.

@NonNull List<NotificationCompat.MessagingStyle.Message>

Gets the list of Message objects that represent the notification.

@NonNull Person

Returns the person to be used for any replies sent by the user.

@Nullable CharSequence

This method is deprecated.

Use getUser instead.

boolean

Returns true if this notification represents a group conversation, otherwise false.

@NonNull NotificationCompat.MessagingStyle

Sets the title to be displayed on this conversation.

@NonNull NotificationCompat.MessagingStyle
setGroupConversation(boolean isGroupConversation)

Sets whether this conversation notification represents a group.

Inherited methods

From androidx.core.app.NotificationCompat.Style
@Nullable Notification

If this Style object has been set on a notification builder, this method will build that notification and return it.

void

Link this rich notification style with a notification builder.

Constants

MAXIMUM_RETAINED_MESSAGES

Added in 1.1.0
public static final int MAXIMUM_RETAINED_MESSAGES = 25

The maximum number of messages that will be retained in the Notification itself (the number displayed is up to the platform).

Public constructors

MessagingStyle

Added in 1.1.0
Deprecated in 1.1.0
public MessagingStyle(@NonNull CharSequence userDisplayName)
Parameters
@NonNull CharSequence userDisplayName

Required - the name to be displayed for any replies sent by the user before the posting app reposts the notification with those messages after they've been actually sent and in previous messages sent by the user added in addMessage

MessagingStyle

Added in 1.1.0
public MessagingStyle(@NonNull Person user)

Creates a new MessagingStyle object. Note that Person must have a non-empty name.

Parameters
@NonNull Person user

This Person's name will be shown when this app's notification is being replied to. It's used temporarily so the app has time to process the send request and repost the notification with updates to the conversation.

Public methods

addCompatExtras

Added in 1.1.0
public void addCompatExtras(@NonNull Bundle extras)

This is called with the extras of the framework Notification during the build process, after apply() has been called. This means that you only need to add data which won't be populated by the framework Notification which was built so far. Moreover, recovering builders and styles is only supported at API 19 and above, no implementation is required for current BigTextStyle, BigPictureStyle, or InboxStyle.

addHistoricMessage

Added in 1.5.0
public @NonNull NotificationCompat.MessagingStyle addHistoricMessage(
    @Nullable NotificationCompat.MessagingStyle.Message message
)

Adds a Message for historic context in this notification.

Messages should be added as historic if they are not the main subject of the notification but may give context to a conversation. The system may choose to present them only when relevant, e.g. when replying to a message through a RemoteInput.

The messages should be added in chronologic order, i.e. the oldest first, the newest last.

Parameters
@Nullable NotificationCompat.MessagingStyle.Message message

The historic Message to be added

Returns
@NonNull NotificationCompat.MessagingStyle

this object for method chaining

addMessage

Added in 1.1.0
public @NonNull NotificationCompat.MessagingStyle addMessage(@Nullable NotificationCompat.MessagingStyle.Message message)

Adds a Message for display in this notification.

Parameters
@Nullable NotificationCompat.MessagingStyle.Message message

The Message to be displayed

Returns
@NonNull NotificationCompat.MessagingStyle

this object for method chaining

addMessage

Added in 1.1.0
public @NonNull NotificationCompat.MessagingStyle addMessage(
    @Nullable CharSequence text,
    long timestamp,
    @Nullable Person person
)

Adds a message for display by this notification. Convenience call for addMessage.

Returns
@NonNull NotificationCompat.MessagingStyle

this for method chaining

See also
Message

addMessage

Added in 1.1.0
Deprecated in 1.1.0
public @NonNull NotificationCompat.MessagingStyle addMessage(
    @Nullable CharSequence text,
    long timestamp,
    @Nullable CharSequence sender
)

Adds a message for display by this notification. Convenience call for a simple Message in addMessage

Parameters
@Nullable CharSequence text

A CharSequence to be displayed as the message content

long timestamp

Time at which the message arrived in ms since Unix epoch

@Nullable CharSequence sender

A CharSequence to be used for displaying the name of the sender. Should be null for messages by the current user, in which case the platform will insert getUserDisplayName. Should be unique amongst all individuals in the conversation, and should be consistent during re-posts of the notification.

Returns
@NonNull NotificationCompat.MessagingStyle

this object for method chaining

See also
Message

extractMessagingStyleFromNotification

Added in 1.1.0
public static @Nullable NotificationCompat.MessagingStyle extractMessagingStyleFromNotification(
    @NonNull Notification notification
)

Retrieves a MessagingStyle from a Notification, enabling an application that has set a MessagingStyle using NotificationCompat or Notification.Builder to send messaging information to another application using NotificationCompat, regardless of the API level of the system.

Returns
@Nullable NotificationCompat.MessagingStyle

null if there is no MessagingStyle set, or if the SDK version is <16 (JellyBean).

getConversationTitle

Added in 1.1.0
public @Nullable CharSequence getConversationTitle()

Return the title to be displayed on this conversation. Can be null.

getHistoricMessages

Added in 1.5.0
public @NonNull List<NotificationCompat.MessagingStyle.MessagegetHistoricMessages()

Gets the list of historic Messages in the notification.

getMessages

Added in 1.1.0
public @NonNull List<NotificationCompat.MessagingStyle.MessagegetMessages()

Gets the list of Message objects that represent the notification.

getUser

Added in 1.1.0
public @NonNull Person getUser()

Returns the person to be used for any replies sent by the user.

getUserDisplayName

Added in 1.1.0
Deprecated in 1.1.0
public @Nullable CharSequence getUserDisplayName()

Returns the name to be displayed for any replies sent by the user.

isGroupConversation

Added in 1.1.0
public boolean isGroupConversation()

Returns true if this notification represents a group conversation, otherwise false.

If the application that generated this MessagingStyle targets an SDK version less than P and setGroupConversation was not called, this method becomes dependent on whether or not the conversation title is set; returning true if the conversation title is a non-null value, or false otherwise. This is to maintain backwards compatibility. Regardless, setGroupConversation has precedence over this legacy behavior. From P forward, setConversationTitle has no affect on group conversation status.

setConversationTitle

Added in 1.1.0
public @NonNull NotificationCompat.MessagingStyle setConversationTitle(@Nullable CharSequence conversationTitle)

Sets the title to be displayed on this conversation. May be set to null.

This API's behavior was changed in SDK version P. If your application's target version is less than P, setting a conversation title to a non-null value will make isGroupConversation return true and passing null will make it return false. This behavior can be overridden by calling setGroupConversation regardless of SDK version. In P and above, this method does not affect group conversation settings.

Parameters
@Nullable CharSequence conversationTitle

Title displayed for this conversation

Returns
@NonNull NotificationCompat.MessagingStyle

this object for method chaining

setGroupConversation

Added in 1.1.0
public @NonNull NotificationCompat.MessagingStyle setGroupConversation(boolean isGroupConversation)

Sets whether this conversation notification represents a group. An app should set isGroupConversation true to mark that the conversation involves multiple people.

Group conversation notifications may display additional group-related context not present in non-group notifications.

Parameters
boolean isGroupConversation

true if the conversation represents a group, false otherwise.

Returns
@NonNull NotificationCompat.MessagingStyle

this object for method chaining