Skip to content

Commit

Permalink
Added 3.5.7
Browse files Browse the repository at this point in the history
  • Loading branch information
rimdoo committed Jun 9, 2023
1 parent a416cc9 commit 5741151
Show file tree
Hide file tree
Showing 26 changed files with 359 additions and 22 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
# Changelog
### v3.5.7 (Jun 9, 2023) with Chat SDK `v4.9.0`
* An interface has been added to modify the data used for the Views displayed in the RecyclerView. Through each Provider, it is possible to change the data of the Views displayed in the RecyclerView.
* Added `setMessageListAdapter(MessageListAdapter, MessageDisplayDataProvider)` in `ChannelFragment.Builder`
* Added `setThreadListAdapter(ThreadListAdapter, MessageDisplayDataProvider)` in `MessageThreadFragment.Builder`
* Added `setMessageSearchAdapter(MessageSearchAdapter, MessageDisplayDataProvider)` in `MessageSearchFragment.Builder`
* Added `setChannelListAdapter(ChannelListAdapter, MessageDisplayDataProvider)` in `ChannelListFragment.Builder`
* Added `setMessageDisplayDataProvider(MessageDisplayDataProvider)` in `MessageListAdapter`, `ThreadListAdapter`, `MessageSearchAdapter` and `ChannelListAdapter`

### v3.5.6 (May 26, 2023) with Chat SDK `v4.8.3`
* UIKit common
* Improved voice recognition
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ org.gradle.jvmargs=-Xmx1536m
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true

UIKIT_VERSION = 3.5.6
UIKIT_VERSION = 3.5.7
UIKIT_VERSION_CODE = 1
2 changes: 1 addition & 1 deletion uikit/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

// Sendbird
api 'com.sendbird.sdk:sendbird-chat:4.8.3'
api 'com.sendbird.sdk:sendbird-chat:4.9.0'

implementation 'com.github.bumptech.glide:glide:4.13.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
Expand Down
2 changes: 2 additions & 0 deletions uikit/src/main/java/com/sendbird/uikit/SendbirdUIKit.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import com.sendbird.uikit.interfaces.CustomParamsHandler;
import com.sendbird.uikit.interfaces.CustomUserListQueryHandler;
import com.sendbird.uikit.interfaces.UserInfo;
import com.sendbird.uikit.internal.singleton.MessageDisplayDataManager;
import com.sendbird.uikit.internal.singleton.NotificationChannelManager;
import com.sendbird.uikit.internal.tasks.JobResultTask;
import com.sendbird.uikit.internal.tasks.TaskQueue;
Expand Down Expand Up @@ -226,6 +227,7 @@ static void clearAll() {
defaultThemeMode = ThemeMode.Light;
UIKitPrefs.clearAll();
NotificationChannelManager.clearAll();
MessageDisplayDataManager.clearAll();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,18 @@
import com.sendbird.uikit.activities.viewholder.MessageType;
import com.sendbird.uikit.activities.viewholder.MessageViewHolder;
import com.sendbird.uikit.activities.viewholder.MessageViewHolderFactory;
import com.sendbird.uikit.interfaces.MessageDisplayDataProvider;
import com.sendbird.uikit.interfaces.OnEmojiReactionClickListener;
import com.sendbird.uikit.interfaces.OnEmojiReactionLongClickListener;
import com.sendbird.uikit.interfaces.OnIdentifiableItemClickListener;
import com.sendbird.uikit.interfaces.OnIdentifiableItemLongClickListener;
import com.sendbird.uikit.interfaces.OnItemClickListener;
import com.sendbird.uikit.interfaces.OnMessageListUpdateHandler;
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitImpl;
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitWrapper;
import com.sendbird.uikit.internal.singleton.MessageDisplayDataManager;
import com.sendbird.uikit.internal.ui.viewholders.MyUserMessageViewHolder;
import com.sendbird.uikit.internal.ui.viewholders.OtherUserMessageViewHolder;
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitImpl;
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitWrapper;
import com.sendbird.uikit.log.Logger;
import com.sendbird.uikit.model.MessageListUIParams;
import com.sendbird.uikit.model.MessageUIConfig;
Expand Down Expand Up @@ -72,13 +74,15 @@ abstract public class BaseMessageListAdapter extends BaseMessageAdapter<BaseMess
private final MessageListUIParams messageListUIParams;
@Nullable
private MessageUIConfig messageUIConfig;
@Nullable
private MessageDisplayDataProvider messageDisplayDataProvider;

// the worker must be a single thread.
@NonNull
private final ExecutorService differWorker = Executors.newSingleThreadExecutor();

@NonNull
private final SendbirdUIKitWrapper sendbirdUIKit;
protected final SendbirdUIKitWrapper sendbirdUIKit;

/**
* Constructor
Expand Down Expand Up @@ -366,6 +370,19 @@ public void setChannel(@NonNull GroupChannel channel) {
* since 2.2.0
*/
public void setItems(@NonNull final GroupChannel channel, @NonNull final List<BaseMessage> messageList, @Nullable OnMessageListUpdateHandler callback) {
if (messageDisplayDataProvider == null || messageDisplayDataProvider.shouldRunOnUIThread()) {
if (messageDisplayDataProvider != null) MessageDisplayDataManager.checkAndGenerateDisplayData(messageList, messageDisplayDataProvider);
notifyMessageListChanged(channel, messageList, callback);
return;
}

messageDisplayDataProvider.threadPool().submit(() -> {
MessageDisplayDataManager.checkAndGenerateDisplayData(messageList, messageDisplayDataProvider);
notifyMessageListChanged(channel, messageList, callback);
});
}

private void notifyMessageListChanged(@NonNull GroupChannel channel, @NonNull List<BaseMessage> messageList, @Nullable OnMessageListUpdateHandler callback) {
final GroupChannel copiedChannel = GroupChannel.clone(channel);
final List<BaseMessage> copiedMessage = Collections.unmodifiableList(messageList);
differWorker.submit(() -> {
Expand Down Expand Up @@ -561,6 +578,15 @@ public OnItemClickListener<User> getMentionClickListener() {
return mentionClickListener;
}

/**
* Sets {@link MessageDisplayDataProvider}, which is used to generate data before they are sent or rendered.
* The generated value is primarily used when the view is rendered.
* since 3.5.7
*/
public void setMessageDisplayDataProvider(@Nullable MessageDisplayDataProvider messageDisplayDataProvider) {
this.messageDisplayDataProvider = messageDisplayDataProvider;
}

/**
* Returns the total number of items in the data set held by the adapter.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
import com.sendbird.uikit.SendbirdUIKit;
import com.sendbird.uikit.activities.viewholder.BaseViewHolder;
import com.sendbird.uikit.databinding.SbViewChannelPreviewBinding;
import com.sendbird.uikit.interfaces.MessageDisplayDataProvider;
import com.sendbird.uikit.interfaces.OnItemClickListener;
import com.sendbird.uikit.interfaces.OnItemLongClickListener;
import com.sendbird.uikit.internal.singleton.MessageDisplayDataManager;
import com.sendbird.uikit.utils.ChannelUtils;

import org.jetbrains.annotations.TestOnly;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand All @@ -45,6 +45,8 @@ public class ChannelListAdapter extends BaseAdapter<GroupChannel, BaseViewHolder
private OnItemClickListener<GroupChannel> listener;
@Nullable
private OnItemLongClickListener<GroupChannel> longClickListener;
@Nullable
private MessageDisplayDataProvider messageDisplayDataProvider;

/**
* Constructor
Expand Down Expand Up @@ -154,6 +156,16 @@ public OnItemLongClickListener<GroupChannel> getOnItemLongClickListener() {
return longClickListener;
}

/**
* Sets {@link MessageDisplayDataProvider}, which is used to generate data before they are sent or rendered.
* The generated value is primarily used when the view is rendered.
* The generated data will be applied to the last message of a channel in this adapter.
* since 3.5.7
*/
public void setMessageDisplayDataProvider(@Nullable MessageDisplayDataProvider messageDisplayDataProvider) {
this.messageDisplayDataProvider = messageDisplayDataProvider;
}

/**
* Returns the {@link List<GroupChannel>} in the data set held by the adapter.
*
Expand Down Expand Up @@ -204,6 +216,19 @@ public long getItemId(int position) {
* @param channelList list to be displayed
*/
public void setItems(@NonNull List<GroupChannel> channelList) {
if (messageDisplayDataProvider == null || messageDisplayDataProvider.shouldRunOnUIThread()) {
if (messageDisplayDataProvider != null) MessageDisplayDataManager.checkAndGenerateDisplayDataFromChannelList(channelList, messageDisplayDataProvider);
notifyChannelListChanged(channelList);
return;
}

messageDisplayDataProvider.threadPool().submit(() -> {
MessageDisplayDataManager.checkAndGenerateDisplayDataFromChannelList(channelList, messageDisplayDataProvider);
notifyChannelListChanged(channelList);
});
}

private void notifyChannelListChanged(@NonNull List<GroupChannel> channelList) {
final List<ChannelInfo> newChannelInfo = ChannelInfo.toChannelInfoList(channelList);
final ChannelDiffCallback diffCallback = new ChannelDiffCallback(this.cachedChannelList, newChannelInfo);
final DiffUtil.DiffResult diffResult = calculateDiff(diffCallback);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitWrapper;
import com.sendbird.uikit.model.MessageListUIParams;

import org.jetbrains.annotations.TestOnly;

/**
* MessageListAdapter provides a binding from a {@link BaseMessage} type data set to views that are displayed within a RecyclerView.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
import com.sendbird.uikit.R;
import com.sendbird.uikit.activities.viewholder.BaseViewHolder;
import com.sendbird.uikit.databinding.SbViewSearchResultPreviewBinding;
import com.sendbird.uikit.interfaces.MessageDisplayDataProvider;
import com.sendbird.uikit.interfaces.OnItemClickListener;
import com.sendbird.uikit.internal.singleton.MessageDisplayDataManager;

import java.util.ArrayList;
import java.util.Collections;
Expand All @@ -33,6 +35,8 @@ public class MessageSearchAdapter extends BaseAdapter<BaseMessage, BaseViewHolde
private final List<BaseMessage> items = new ArrayList<>();
@Nullable
private OnItemClickListener<BaseMessage> listener;
@Nullable
private MessageDisplayDataProvider messageDisplayDataProvider;

/**
* Called when RecyclerView needs a new {@code BaseViewHolder<BaseMessage>} of the given type to represent
Expand Down Expand Up @@ -120,6 +124,19 @@ public int getItemCount() {
* since 2.1.0
*/
public void setItems(@NonNull List<BaseMessage> items) {
if (messageDisplayDataProvider == null || messageDisplayDataProvider.shouldRunOnUIThread()) {
if (messageDisplayDataProvider != null) MessageDisplayDataManager.checkAndGenerateDisplayData(items, messageDisplayDataProvider);
notifyMessageListChanged(items);
return;
}

messageDisplayDataProvider.threadPool().submit(() -> {
MessageDisplayDataManager.checkAndGenerateDisplayData(items, messageDisplayDataProvider);
notifyMessageListChanged(items);
});
}

private void notifyMessageListChanged(@NonNull List<BaseMessage> items) {
final MessageSearchDiffCallback diffCallback = new MessageSearchDiffCallback(this.items, items);
final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(diffCallback);

Expand Down Expand Up @@ -149,6 +166,15 @@ public OnItemClickListener<BaseMessage> getOnItemClickListener() {
return listener;
}

/**
* Sets {@link MessageDisplayDataProvider}, which is used to generate data before they are sent or rendered.
* The generated value is primarily used when the view is rendered.
* since 3.5.7
*/
public void setMessageDisplayDataProvider(@Nullable MessageDisplayDataProvider messageDisplayDataProvider) {
this.messageDisplayDataProvider = messageDisplayDataProvider;
}

private class SearchResultViewHolder extends BaseViewHolder<BaseMessage> {
@NonNull
private final SbViewSearchResultPreviewBinding binding;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import com.sendbird.uikit.consts.StringSet;
import com.sendbird.uikit.consts.ThreadReplySelectType;
import com.sendbird.uikit.interfaces.LoadingDialogHandler;
import com.sendbird.uikit.interfaces.MessageDisplayDataProvider;
import com.sendbird.uikit.interfaces.OnConsumableClickListener;
import com.sendbird.uikit.interfaces.OnEmojiReactionClickListener;
import com.sendbird.uikit.interfaces.OnEmojiReactionLongClickListener;
Expand Down Expand Up @@ -1131,6 +1132,22 @@ public Builder setMessageListAdapter(@Nullable MessageListAdapter adapter) {
return this;
}

/**
* Sets the message list adapter and the message display data provider.
* The message display data provider is used to generate the data to display the message.
*
* @param adapter the adapter for the message list.
* @param provider the provider for the message display data.
* @return This Builder object to allow for chaining of calls to set methods.
* since 3.5.7
*/
@NonNull
public Builder setMessageListAdapter(@Nullable MessageListAdapter adapter, @Nullable MessageDisplayDataProvider provider) {
this.adapter = adapter;
if (this.adapter != null) this.adapter.setMessageDisplayDataProvider(provider);
return this;
}

/**
* Sets the click listener on the item of message list.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.sendbird.uikit.activities.adapter.ChannelListAdapter;
import com.sendbird.uikit.consts.CreatableChannelType;
import com.sendbird.uikit.consts.StringSet;
import com.sendbird.uikit.interfaces.MessageDisplayDataProvider;
import com.sendbird.uikit.interfaces.OnItemClickListener;
import com.sendbird.uikit.interfaces.OnItemLongClickListener;
import com.sendbird.uikit.internal.ui.widgets.SelectChannelTypeView;
Expand Down Expand Up @@ -471,6 +472,22 @@ public Builder setChannelListAdapter(@NonNull ChannelListAdapter adapter) {
return this;
}

/**
* Sets the channel list adapter and the message display data provider.
* The message display data provider is used to generate the data to display the last message in the channel.
*
* @param adapter the adapter for the channel list.
* @param provider the provider for the message display data.
* @return This Builder object to allow for chaining of calls to set methods.
* since 3.5.7
*/
@NonNull
public Builder setChannelListAdapter(@Nullable ChannelListAdapter adapter, @Nullable MessageDisplayDataProvider provider) {
this.adapter = adapter;
if (this.adapter != null) this.adapter.setMessageDisplayDataProvider(provider);
return this;
}

/**
* Sets the click listener on the item of channel list.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.sendbird.uikit.activities.adapter.MessageSearchAdapter;
import com.sendbird.uikit.consts.StringSet;
import com.sendbird.uikit.interfaces.LoadingDialogHandler;
import com.sendbird.uikit.interfaces.MessageDisplayDataProvider;
import com.sendbird.uikit.interfaces.OnInputTextChangedListener;
import com.sendbird.uikit.interfaces.OnItemClickListener;
import com.sendbird.uikit.interfaces.OnSearchEventListener;
Expand Down Expand Up @@ -428,6 +429,22 @@ public <T extends MessageSearchAdapter> Builder setMessageSearchAdapter(T adapte
return this;
}

/**
* Sets the message search adapter and the message display data provider.
* The message display data provider is used to generate the data to display the message.
*
* @param adapter he adapter for displaying the searched message list.
* @param provider the provider for the message display data.
* @return This Builder object to allow for chaining of calls to set methods.
* since 3.5.7
*/
@NonNull
public <T extends MessageSearchAdapter> Builder setMessageSearchAdapter(T adapter, @Nullable MessageDisplayDataProvider provider) {
this.adapter = adapter;
if (this.adapter != null) this.adapter.setMessageDisplayDataProvider(provider);
return this;
}

/**
* Sets the click listener on the item of the message search result list.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import com.sendbird.uikit.consts.KeyboardDisplayType;
import com.sendbird.uikit.consts.StringSet;
import com.sendbird.uikit.interfaces.LoadingDialogHandler;
import com.sendbird.uikit.interfaces.MessageDisplayDataProvider;
import com.sendbird.uikit.interfaces.OnEmojiReactionClickListener;
import com.sendbird.uikit.interfaces.OnEmojiReactionLongClickListener;
import com.sendbird.uikit.interfaces.OnInputModeChangedListener;
Expand Down Expand Up @@ -932,6 +933,22 @@ public Builder setThreadListAdapter(@Nullable ThreadListAdapter adapter) {
return this;
}

/**
* Sets the thread list adapter and the message display data provider.
* The message display data provider is used to generate the data to display the message.
*
* @param adapter the adapter for the thread list.
* @param provider the provider for the message display data.
* @return This Builder object to allow for chaining of calls to set methods.
* since 3.5.7
*/
@NonNull
public Builder setThreadListAdapter(@Nullable ThreadListAdapter adapter, @Nullable MessageDisplayDataProvider provider) {
this.adapter = adapter;
if (this.adapter != null) this.adapter.setMessageDisplayDataProvider(provider);
return this;
}

/**
* Sets the click listener on the item of message list.
*
Expand Down
Loading

0 comments on commit 5741151

Please sign in to comment.