Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions stream-chat-android-client/api/stream-chat-android-client.api
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun addMembers (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Lio/getstream/chat/android/models/Message;Ljava/lang/Boolean;Ljava/util/Date;Ljava/lang/Boolean;)Lio/getstream/result/call/Call;
public static synthetic fun addMembers$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Lio/getstream/chat/android/models/Message;Ljava/lang/Boolean;Ljava/util/Date;Ljava/lang/Boolean;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun addSocketListener (Lio/getstream/chat/android/client/socket/SocketListener;)V
public final fun addUserGroupMembers (Ljava/lang/String;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun addUserGroupMembers$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun appSettings ()Lio/getstream/result/call/Call;
public final fun archiveChannel (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public final fun banUser (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Lio/getstream/result/call/Call;
Expand Down Expand Up @@ -44,6 +46,8 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun createDraftMessage (Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/DraftMessage;)Lio/getstream/result/call/Call;
public final fun createPollOption (Ljava/lang/String;Lio/getstream/chat/android/models/PollOption;)Lio/getstream/result/call/Call;
public final fun createReminder (Ljava/lang/String;Ljava/util/Date;)Lio/getstream/result/call/Call;
public final fun createUserGroup (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Lio/getstream/result/call/Call;
public static synthetic fun createUserGroup$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun deleteChannel (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public final fun deleteDevice (Lio/getstream/chat/android/models/Device;)Lio/getstream/result/call/Call;
public final fun deleteDraftMessages (Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/DraftMessage;)Lio/getstream/result/call/Call;
Expand All @@ -60,6 +64,8 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun deleteReaction (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun deleteReaction$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun deleteReminder (Ljava/lang/String;)Lio/getstream/result/call/Call;
public final fun deleteUserGroup (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun deleteUserGroup$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun devToken (Ljava/lang/String;)Ljava/lang/String;
public final fun disableSlowMode (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public final fun disconnect (Z)Lio/getstream/result/call/Call;
Expand Down Expand Up @@ -103,6 +109,8 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun getThread (Ljava/lang/String;Lio/getstream/chat/android/client/api/models/GetThreadOptions;)Lio/getstream/result/call/Call;
public static synthetic fun getThread$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Lio/getstream/chat/android/client/api/models/GetThreadOptions;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun getUnreadCounts ()Lio/getstream/result/call/Call;
public final fun getUserGroup (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun getUserGroup$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public static final fun getVERSION_PREFIX_HEADER ()Lio/getstream/chat/android/client/header/VersionPrefixHeader;
public static final fun handlePushMessage (Lio/getstream/chat/android/models/PushMessage;)V
public final fun hideChannel (Ljava/lang/String;Ljava/lang/String;Z)Lio/getstream/result/call/Call;
Expand Down Expand Up @@ -170,6 +178,8 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun queryReminders (Lio/getstream/chat/android/models/FilterObject;ILjava/lang/String;Lio/getstream/chat/android/models/querysort/QuerySorter;)Lio/getstream/result/call/Call;
public static synthetic fun queryReminders$default (Lio/getstream/chat/android/client/ChatClient;Lio/getstream/chat/android/models/FilterObject;ILjava/lang/String;Lio/getstream/chat/android/models/querysort/QuerySorter;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun queryThreads (Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;)Lio/getstream/result/call/Call;
public final fun queryUserGroups (Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun queryUserGroups$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun queryUsers (Lio/getstream/chat/android/client/api/models/QueryUsersRequest;)Lio/getstream/result/call/Call;
public final fun reconnectSocket ()Lio/getstream/result/call/Call;
public final fun rejectInvite (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
Expand All @@ -178,8 +188,14 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun removePollVote (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public final fun removeShadowBan (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public final fun removeSocketListener (Lio/getstream/chat/android/client/socket/SocketListener;)V
public final fun removeUserGroupMembers (Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun removeUserGroupMembers$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun searchMessages (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/FilterObject;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Lio/getstream/chat/android/models/querysort/QuerySorter;)Lio/getstream/result/call/Call;
public static synthetic fun searchMessages$default (Lio/getstream/chat/android/client/ChatClient;Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/FilterObject;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Lio/getstream/chat/android/models/querysort/QuerySorter;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun searchRoles (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun searchRoles$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun searchUserGroups (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun searchUserGroups$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun sendAction (Lio/getstream/chat/android/client/api/models/SendActionRequest;)Lio/getstream/result/call/Call;
public final fun sendEvent (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lio/getstream/result/call/Call;
public static synthetic fun sendEvent$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/result/call/Call;
Expand All @@ -198,9 +214,11 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun sendReaction (Lio/getstream/chat/android/models/Reaction;ZLjava/lang/String;Z)Lio/getstream/result/call/Call;
public static synthetic fun sendReaction$default (Lio/getstream/chat/android/client/ChatClient;Lio/getstream/chat/android/models/Reaction;ZLjava/lang/String;ZILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun sendStaticLocation (Ljava/lang/String;DDLjava/lang/String;)Lio/getstream/result/call/Call;
public final fun setChannelChatPreferences (Ljava/lang/String;Lio/getstream/chat/android/models/ChatPreferences;)Lio/getstream/result/call/Call;
public final fun setChannelPushPreference (Ljava/lang/String;Lio/getstream/chat/android/models/PushPreferenceLevel;)Lio/getstream/result/call/Call;
public final fun setLogicRegistry (Lio/getstream/chat/android/client/channel/state/ChannelStateLogicProvider;)V
public static final fun setOFFLINE_SUPPORT_ENABLED (Z)V
public final fun setUserChatPreferences (Lio/getstream/chat/android/models/ChatPreferences;)Lio/getstream/result/call/Call;
public final fun setUserPushPreference (Lio/getstream/chat/android/models/PushPreferenceLevel;)Lio/getstream/result/call/Call;
public static final fun setVERSION_PREFIX_HEADER (Lio/getstream/chat/android/client/header/VersionPrefixHeader;)V
public final fun shadowBanUser (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Lio/getstream/result/call/Call;
Expand Down Expand Up @@ -251,6 +269,8 @@ public final class io/getstream/chat/android/client/ChatClient {
public final fun updatePollOption (Ljava/lang/String;Lio/getstream/chat/android/models/PollOption;)Lio/getstream/result/call/Call;
public final fun updateReminder (Ljava/lang/String;Ljava/util/Date;)Lio/getstream/result/call/Call;
public final fun updateUser (Lio/getstream/chat/android/models/User;)Lio/getstream/result/call/Call;
public final fun updateUserGroup (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
public static synthetic fun updateUserGroup$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
public final fun updateUsers (Ljava/util/List;)Lio/getstream/result/call/Call;
public final fun uploadFile (Ljava/io/File;)Lio/getstream/result/call/Call;
public final fun uploadFile (Ljava/io/File;Lio/getstream/chat/android/client/utils/ProgressCallback;)Lio/getstream/result/call/Call;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ import io.getstream.chat.android.models.Attachment
import io.getstream.chat.android.models.BannedUser
import io.getstream.chat.android.models.BannedUsersSort
import io.getstream.chat.android.models.Channel
import io.getstream.chat.android.models.ChatPreferences
import io.getstream.chat.android.models.ConnectionData
import io.getstream.chat.android.models.ConnectionState
import io.getstream.chat.android.models.CreatePollParams
Expand Down Expand Up @@ -212,6 +213,7 @@ import io.getstream.chat.android.models.QueryReactionsResult
import io.getstream.chat.android.models.QueryRemindersResult
import io.getstream.chat.android.models.QueryThreadsResult
import io.getstream.chat.android.models.Reaction
import io.getstream.chat.android.models.Role
import io.getstream.chat.android.models.SearchMessagesResult
import io.getstream.chat.android.models.Thread
import io.getstream.chat.android.models.ThreadInfo
Expand All @@ -220,6 +222,7 @@ import io.getstream.chat.android.models.UploadAttachmentsNetworkType
import io.getstream.chat.android.models.UploadedFile
import io.getstream.chat.android.models.User
import io.getstream.chat.android.models.UserBlock
import io.getstream.chat.android.models.UserGroup
import io.getstream.chat.android.models.Vote
import io.getstream.chat.android.models.querysort.QuerySortByField
import io.getstream.chat.android.models.querysort.QuerySorter
Expand Down Expand Up @@ -1730,6 +1733,228 @@ internal constructor(
}
}

/**
* Sets per-category push toggles for the current user. Use this when
* [setUserPushPreference] is too coarse. Setting either clears the other server-side.
*/
@CheckResult
public fun setUserChatPreferences(preferences: ChatPreferences): Call<PushPreference> {
return api.setUserChatPreferences(preferences)
.doOnResult(userScope) { result ->
if (result is Result.Success) {
val currentUser = mutableClientState.user.value ?: return@doOnResult
val updatedUser = currentUser.copy(pushPreference = result.value)
mutableClientState.setUser(updatedUser)
}
}
}

/**
* Per-channel version of [setUserChatPreferences].
*
* @param cid Full channel identifier (e.g. `messaging:123`).
*/
@CheckResult
public fun setChannelChatPreferences(cid: String, preferences: ChatPreferences): Call<PushPreference> {
return api.setChannelChatPreferences(cid, preferences)
.doOnResult(userScope) { result ->
plugins.forEach { it.onChannelChatPreferencesSet(cid, preferences, result) }
}
}
Comment thread
gpunto marked this conversation as resolved.

/**
* Creates a user group.
*
* @param name Display name (1–255 chars), unique within app/team.
* @param id Group ID (max 255 chars). A UUID v7 is generated server-side when null.
* @param description Optional description (max 1024 chars).
* @param teamId Team to scope the group to. Required when multi-tenancy is enabled.
* @param memberIds Initial member user IDs (max 100).
*/
@CheckResult
public fun createUserGroup(
name: String,
id: String? = null,
description: String? = null,
teamId: String? = null,
memberIds: List<String>? = null,
): Call<UserGroup> {
return api.createUserGroup(
name = name,
id = id,
description = description,
teamId = teamId,
memberIds = memberIds,
)
}

/**
* Lists user groups, ordered for cursor pagination.
*
* @param limit Max groups to return (1–100). Server default applies when null.
* @param idGt Cursor: groups whose ID sorts after this value.
* @param createdAtGt Cursor: groups created after this RFC3339 timestamp.
* @param teamId Restrict to a specific team.
*/
@CheckResult
public fun queryUserGroups(
limit: Int? = null,
idGt: String? = null,
createdAtGt: String? = null,
teamId: String? = null,
): Call<List<UserGroup>> {
return api.queryUserGroups(
limit = limit,
idGt = idGt,
createdAtGt = createdAtGt,
teamId = teamId,
)
}

/**
* Searches user groups by name prefix.
*
* @param query Search term (1–255 chars).
* @param limit Maximum number of groups to return (1–25). Server default applies when null.
* @param teamId Restrict the search to a specific team. Required when multi-tenancy is enabled.
* @param nameGt Cursor: groups whose name sorts after this value.
* @param idGt Cursor: groups whose ID sorts after this value.
*/
@CheckResult
public fun searchUserGroups(
query: String,
limit: Int? = null,
teamId: String? = null,
nameGt: String? = null,
idGt: String? = null,
): Call<List<UserGroup>> {
return api.searchUserGroups(
query = query,
limit = limit,
teamId = teamId,
nameGt = nameGt,
idGt = idGt,
)
}

/**
* Fetches a user group by ID.
*
* @param teamId Required when multi-tenancy is enabled.
*/
@CheckResult
public fun getUserGroup(
id: String,
teamId: String? = null,
): Call<UserGroup> {
return api.getUserGroup(id = id, teamId = teamId)
}

/**
* Updates a user group's metadata. Members are managed via [addUserGroupMembers] and
* [removeUserGroupMembers].
*
* @param name New display name (1–255 chars).
* @param description New description (max 1024 chars).
* @param teamId Required when multi-tenancy is enabled.
*/
@CheckResult
public fun updateUserGroup(
id: String,
name: String? = null,
description: String? = null,
teamId: String? = null,
): Call<UserGroup> {
return api.updateUserGroup(
id = id,
name = name,
description = description,
teamId = teamId,
)
}

/**
* Deletes a user group.
*
* @param teamId Required when multi-tenancy is enabled.
*/
@CheckResult
public fun deleteUserGroup(
id: String,
teamId: String? = null,
): Call<Unit> {
return api.deleteUserGroup(id = id, teamId = teamId)
}

/**
* Adds members to a user group.
*
* @param memberIds User IDs to add (1–100).
* @param asAdmin Whether to add the members as group admins.
* @param teamId Required when multi-tenancy is enabled.
*/
@CheckResult
public fun addUserGroupMembers(
id: String,
memberIds: List<String>,
asAdmin: Boolean? = null,
teamId: String? = null,
): Call<UserGroup> {
return api.addUserGroupMembers(
id = id,
memberIds = memberIds,
asAdmin = asAdmin,
teamId = teamId,
)
}

/**
* Removes members from a user group.
*
* @param memberIds User IDs to remove (1–100).
* @param teamId Required when multi-tenancy is enabled.
*/
@CheckResult
public fun removeUserGroupMembers(
id: String,
memberIds: List<String>,
teamId: String? = null,
): Call<UserGroup> {
return api.removeUserGroupMembers(
id = id,
memberIds = memberIds,
teamId = teamId,
)
}

/**
* Searches roles by name prefix.
*
* @param query Case-insensitive name prefix (1-255 chars).
* @param limit Max number of roles to return (1-25). Server default applies when null.
* @param roleType Optional filter: `"user"` for user-assignable roles, `"channel"` for
* channel-assignable roles. Both kinds are returned when null.
* @param includeGlobalRoles When `true`, include cross-team operator roles whose name starts
* with `global_`. Defaults to `false` server-side.
* @param nameGt Cursor: roles whose name sorts after this value.
*/
@CheckResult
public fun searchRoles(
query: String,
limit: Int? = null,
roleType: String? = null,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small thing: roleType is only ever "user" or "channel", but it's a plain String here. You wrap the other closed sets in this PR (ChatPreferenceToggle), and PushPreferenceLevel does the same, so this one is inconsistent. Since it's a public API, changing to a typed value later would be a breaking change. Want to wrap it now, or keep it as a String on purpose?

includeGlobalRoles: Boolean? = null,
nameGt: String? = null,
): Call<List<Role>> {
return api.searchRoles(
query = query,
limit = limit,
roleType = roleType,
includeGlobalRoles = includeGlobalRoles,
nameGt = nameGt,
)
}

/**
* Dismiss notifications from a given [channelType] and [channelId].
* Be sure to initialize ChatClient before calling this method!
Expand Down
Loading
Loading