Skip to content

Commit

Permalink
Added 3.5.3
Browse files Browse the repository at this point in the history
  • Loading branch information
rimdoo committed Apr 13, 2023
1 parent 0dd8754 commit f020669
Show file tree
Hide file tree
Showing 32 changed files with 441 additions and 183 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# Changelog
### v3.5.3 (Apr 12, 2023) with Chat SDK `v4.6.1`
* Added `setOnMessageMentionClickListener(OnItemClickListener<User>)` in `ChannelFragment.Builder`
* Added `setOnMessageMentionClickListener(OnItemClickListener<User>)` in `MessageThreadFragment.Builder`
* Improved stability

### v3.5.2 (Apr 6, 2023) with Chat SDK `v4.6.1`
* Added `setUseHeaderLeftButton(boolean)` in `FeedNotificationChannelFragment.Builder`
* Added `setUseHeaderLeftButton(boolean)` in `ChatNotificationChannelFragment.Builder`
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.2
UIKIT_VERSION = 3.5.3
UIKIT_VERSION_CODE = 1
2 changes: 1 addition & 1 deletion uikit/src/main/java/com/sendbird/uikit/SendbirdUIKit.java
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ static void clearAll() {
SendbirdUIKit.customUserListQueryHandler = null;
defaultThemeMode = ThemeMode.Light;
UIKitPrefs.clearAll();
NotificationChannelManager.dispose();
NotificationChannelManager.clearAll();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.sendbird.android.channel.GroupChannel;
import com.sendbird.android.message.BaseMessage;
import com.sendbird.android.message.Reaction;
import com.sendbird.android.user.User;
import com.sendbird.uikit.R;
import com.sendbird.uikit.SendbirdUIKit;
import com.sendbird.uikit.activities.viewholder.GroupChannelMessageViewHolder;
Expand All @@ -29,6 +30,8 @@
import com.sendbird.uikit.interfaces.OnIdentifiableItemLongClickListener;
import com.sendbird.uikit.interfaces.OnItemClickListener;
import com.sendbird.uikit.interfaces.OnMessageListUpdateHandler;
import com.sendbird.uikit.internal.ui.viewholders.MyUserMessageViewHolder;
import com.sendbird.uikit.internal.ui.viewholders.OtherUserMessageViewHolder;
import com.sendbird.uikit.log.Logger;
import com.sendbird.uikit.model.MessageListUIParams;
import com.sendbird.uikit.model.MessageUIConfig;
Expand Down Expand Up @@ -59,6 +62,8 @@ abstract public class BaseMessageListAdapter extends BaseMessageAdapter<BaseMess
private OnIdentifiableItemClickListener<BaseMessage> listItemClickListener;
@Nullable
private OnIdentifiableItemLongClickListener<BaseMessage> listItemLongClickListener;
@Nullable
protected OnItemClickListener<User> mentionClickListener;
@NonNull
private final MessageListUIParams messageListUIParams;
@Nullable
Expand Down Expand Up @@ -250,6 +255,26 @@ public void onBindViewHolder(@NonNull MessageViewHolder holder, final int positi
});
}

if (holder instanceof MyUserMessageViewHolder) {
MyUserMessageViewHolder myUserMessageViewHolder = (MyUserMessageViewHolder) holder;
myUserMessageViewHolder.setOnMentionClickListener((view, pos, mentionedUser) -> {
int messagePosition = holder.getBindingAdapterPosition();
if (messagePosition != NO_POSITION && mentionClickListener != null) {
mentionClickListener.onItemClick(view, messagePosition, mentionedUser);
}
});
}

if (holder instanceof OtherUserMessageViewHolder) {
OtherUserMessageViewHolder otherUserMessageViewHolder = (OtherUserMessageViewHolder) holder;
otherUserMessageViewHolder.setOnMentionClickListener((view, pos, mentionedUser) -> {
int messagePosition = holder.getBindingAdapterPosition();
if (messagePosition != NO_POSITION && mentionClickListener != null) {
mentionClickListener.onItemClick(view, messagePosition, mentionedUser);
}
});
}

if (channel != null) {
holder.onBindViewHolder(channel, prev, current, next);
}
Expand Down Expand Up @@ -505,6 +530,27 @@ public OnItemClickListener<BaseMessage> getEmojiReactionMoreButtonClickListener(
return emojiReactionMoreButtonClickListener;
}

/**
* Register a callback to be invoked when the mentioned user is clicked.
*
* @param listener The callback that will run
* @since 3.5.3
*/
public void setMentionClickListener(@Nullable OnItemClickListener<User> listener) {
this.mentionClickListener = listener;
}

/**
* Returns a callback to be invoked when the mentioned user is clicked.
*
* @return {OnItemClickListener<User>} to be invoked when the mentioned user is clicked.
* @since 3.5.3
*/
@Nullable
public OnItemClickListener<User> getMentionClickListener() {
return mentionClickListener;
}

/**
* 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
@@ -1,5 +1,7 @@
package com.sendbird.uikit.activities.adapter;

import static androidx.recyclerview.widget.RecyclerView.NO_POSITION;

import android.view.ViewGroup;

import androidx.annotation.NonNull;
Expand All @@ -11,6 +13,7 @@
import com.sendbird.android.message.UserMessage;
import com.sendbird.uikit.activities.viewholder.MessageType;
import com.sendbird.uikit.activities.viewholder.MessageViewHolder;
import com.sendbird.uikit.internal.ui.viewholders.ParentMessageInfoViewHolder;
import com.sendbird.uikit.model.MessageListUIParams;
import com.sendbird.uikit.utils.MessageUtils;

Expand All @@ -31,6 +34,21 @@ public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewT
return super.onCreateViewHolder(parent, viewType);
}

@Override
public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {
if (holder instanceof ParentMessageInfoViewHolder) {
ParentMessageInfoViewHolder parentMessageInfoViewHolder = (ParentMessageInfoViewHolder) holder;
parentMessageInfoViewHolder.setOnMentionClickListener((view, pos, mentionedUser) -> {
int messagePosition = holder.getBindingAdapterPosition();
if (messagePosition != NO_POSITION && mentionClickListener != null) {
mentionClickListener.onItemClick(view, messagePosition, mentionedUser);
}
});
}

super.onBindViewHolder(holder, position);
}

@Override
public int getItemViewType(int position) {
final BaseMessage message = getItem(position);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public static MessageViewHolder createViewHolder(@NonNull LayoutInflater inflate
@NonNull ViewGroup parent,
@NonNull MessageType viewType,
boolean useMessageGroupUI) {
return createOpenChannelViewHolder(
return createViewHolder(
inflater,
parent,
viewType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ abstract public class BaseMessageListFragment<
@Nullable
private OnItemLongClickListener<BaseMessage> messageProfileLongClickListener;
@Nullable
private OnItemClickListener<User> messageMentionClickListener;
@Nullable
private LoadingDialogHandler loadingDialogHandler;
@Nullable
private LA adapter;
Expand Down Expand Up @@ -292,6 +294,23 @@ protected void onMessageProfileLongClicked(@NonNull View view, int position, @No
}
}

/**
* Called when the mentioned user of the message is clicked.
*
* @param view The View clicked
* @param position The position clicked
* @param user The user that the clicked item displays
* @since 3.5.3
*/
protected void onMessageMentionClicked(@NonNull View view, int position, @NonNull User user) {
if (messageMentionClickListener != null) {
messageMentionClickListener.onItemClick(view, position, user);
return;
}

showUserProfile(user);
}

@NonNull
OnItemClickListener<DialogListItem> createMessageActionListener(@NonNull BaseMessage message) {
return (view, position, item) -> onMessageContextMenuItemClicked(message, view, position, item);
Expand Down Expand Up @@ -872,6 +891,16 @@ void setOnMessageProfileClickListener(@Nullable OnItemClickListener<BaseMessage>
this.messageProfileClickListener = messageProfileClickListener;
}

/**
* Sets the click listener on the mentioned user of message.
*
* @param messageMentionClickListener The callback that will run.
* @since 3.5.3
*/
void setOnMessageMentionClickListener(@Nullable OnItemClickListener<User> messageMentionClickListener) {
this.messageMentionClickListener = messageMentionClickListener;
}

/**
* Sets the long click listener on the item of message list.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ protected void onBindMessageListComponent(@NonNull MessageListComponent messageL
messageListComponent.setOnMessageProfileLongClickListener(this::onMessageProfileLongClicked);
messageListComponent.setOnMessageProfileClickListener(this::onMessageProfileClicked);
messageListComponent.setOnMessageLongClickListener(this::onMessageLongClicked);
messageListComponent.setOnMessageMentionClickListener(this::onMessageMentionClicked);
messageListComponent.setOnEmojiReactionClickListener(emojiReactionClickListener != null ? emojiReactionClickListener : (view, position, message, reactionKey) -> toggleReaction(view, message, reactionKey));
messageListComponent.setOnEmojiReactionLongClickListener(emojiReactionLongClickListener != null ? emojiReactionLongClickListener : (view, position, message, reactionKey) -> showEmojiReactionDialog(message, position));
messageListComponent.setOnEmojiReactionMoreButtonClickListener(emojiReactionMoreButtonClickListener != null ? emojiReactionMoreButtonClickListener : (view, position, message) -> showEmojiListDialog(message));
Expand Down Expand Up @@ -825,6 +826,8 @@ public static class Builder {
@Nullable
private View.OnClickListener voiceRecorderButtonClickListener;
@Nullable
private OnItemClickListener<User> messageMentionClickListener;
@Nullable
private ChannelFragment customFragment;


Expand Down Expand Up @@ -1780,6 +1783,19 @@ public Builder setOnVoiceRecorderButtonClickListener(@Nullable View.OnClickListe
return this;
}

/**
* Sets the click listener on the mentioned user of message.
*
* @param mentionClickListener The callback that will run.
* @return This Builder object to allow for chaining of calls to set methods.
* @since 3.5.3
*/
@NonNull
public Builder setOnMessageMentionClickListener(@NonNull OnItemClickListener<User> mentionClickListener) {
this.messageMentionClickListener = mentionClickListener;
return this;
}

/**
* Creates an {@link ChannelFragment} with the arguments supplied to this
* builder.
Expand Down Expand Up @@ -1818,6 +1834,7 @@ public ChannelFragment build() {
fragment.params = params;
fragment.threadInfoClickListener = threadInfoClickListener;
fragment.onVoiceRecorderButtonClickListener = voiceRecorderButtonClickListener;
fragment.setOnMessageMentionClickListener(messageMentionClickListener);

// set animation flag to TRUE to animate searched text.
if (bundle.containsKey(StringSet.KEY_TRY_ANIMATE_WHEN_MESSAGE_LOADED)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ protected void onBindThreadListComponent(@NonNull ThreadListComponent messageLis
messageListComponent.setOnMessageProfileLongClickListener(this::onMessageProfileLongClicked);
messageListComponent.setOnMessageProfileClickListener(this::onMessageProfileClicked);
messageListComponent.setOnMessageLongClickListener(this::onMessageLongClicked);
messageListComponent.setOnMessageMentionClickListener(this::onMessageMentionClicked);
messageListComponent.setOnEmojiReactionClickListener(emojiReactionClickListener != null ? emojiReactionClickListener : (view, position, message, reactionKey) -> toggleReaction(view, message, reactionKey));
messageListComponent.setOnEmojiReactionLongClickListener(emojiReactionLongClickListener != null ? emojiReactionLongClickListener : (view, position, message, reactionKey) -> showEmojiReactionDialog(message, position));
messageListComponent.setOnEmojiReactionMoreButtonClickListener(emojiReactionMoreButtonClickListener != null ? emojiReactionMoreButtonClickListener : (view, position, message) -> showEmojiListDialog(message));
Expand Down Expand Up @@ -596,6 +597,8 @@ public static class Builder {
@Nullable
private View.OnClickListener voiceRecorderButtonClickListener;
@Nullable
private OnItemClickListener<User> messageMentionClickListener;
@Nullable
private MessageThreadFragment customFragment;


Expand Down Expand Up @@ -1447,6 +1450,19 @@ public Builder setOnVoiceRecorderButtonClickListener(@Nullable View.OnClickListe
return this;
}

/**
* Sets the click listener on the mentioned user of message.
*
* @param mentionClickListener The callback that will run.
* @return This Builder object to allow for chaining of calls to set methods.
* @since 3.5.3
*/
@NonNull
public Builder setOnMessageMentionClickListener(@NonNull OnItemClickListener<User> mentionClickListener) {
this.messageMentionClickListener = mentionClickListener;
return this;
}

/**
* Creates an {@link MessageThreadFragment} with the arguments supplied to this
* builder.
Expand Down Expand Up @@ -1479,6 +1495,7 @@ public MessageThreadFragment build() {
fragment.editModeSaveButtonClickListener = editModeSaveButtonClickListener;
fragment.inputModeChangedListener = inputModeChangedListener;
fragment.voiceRecorderButtonClickListener = voiceRecorderButtonClickListener;
fragment.setOnMessageMentionClickListener(messageMentionClickListener);
fragment.setAdapter(adapter);
fragment.params = params;
return fragment;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.sendbird.uikit.internal.interfaces

import com.sendbird.android.exception.SendbirdException

internal interface GetTemplateResultHandler {
fun onResult(jsonTemplate: String?, e: SendbirdException?)
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.sendbird.uikit.internal.model.template_messages

import android.content.res.ColorStateList
import android.graphics.Color
import android.graphics.PorterDuff
import android.graphics.drawable.GradientDrawable
import android.util.TypedValue
import android.view.View
Expand Down Expand Up @@ -39,7 +39,7 @@ internal data class ImageStyle(
) {
fun apply(view: ImageView): ImageStyle {
contentMode?.let { view.scaleType = it.scaleType }
tintColor?.let { view.imageTintList = ColorStateList.valueOf(it) }
tintColor?.let { view.setColorFilter(it, PorterDuff.Mode.SRC_ATOP) }
return this
}
}
Expand Down
Loading

0 comments on commit f020669

Please sign in to comment.