Skip to content

Commit a2b6d0b

Browse files
Merge pull request #63 from sendbird/release/3.26.0
3.26.0
2 parents fdb856a + fccabf3 commit a2b6d0b

16 files changed

Lines changed: 560 additions & 24 deletions

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# Changelog
2+
### v3.26.0 (Mar 18, 2026) with Chat SDK `v4.34.1`
3+
- Deprecated feedback and form related APIs.
4+
- Added `ChannelConfig.enableAutoscrollMessageOverflowToTop` configuration to automatically scroll to the top of a new incoming message when the message height overflows the visible screen.
5+
- Removed jitpack dependency.
26
### v3.25.3 (Jan 19, 2026) with Chat SDK `v4.32.4`
37
- Fixed issue where files sent via Platform API failed to download due to size mismatch between server metadata and actual file size.
48
### v3.25.2 (Dec 17, 2025) with Chat SDK `v4.32.4`

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ android.nonTransitiveRClass=false
2222
android.nonFinalResIds=false
2323
android.enableR8.fullMode=false
2424

25-
UIKIT_VERSION = 3.25.3
25+
UIKIT_VERSION = 3.26.0
2626
UIKIT_VERSION_CODE = 1

settings.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ dependencyResolutionManagement {
1111
google()
1212
mavenCentral()
1313
maven { url "https://repo.sendbird.com/public/maven" }
14-
maven { url "https://jitpack.io" }
1514
}
1615
}
1716

uikit/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ dependencies {
7070
implementation fileTree(dir: 'libs', include: ['*.jar'])
7171

7272
// Sendbird
73-
api 'com.sendbird.sdk:sendbird-chat:4.32.4'
73+
api 'com.sendbird.sdk:sendbird-chat:4.34.1'
7474
implementation "com.sendbird.sdk:message-template:1.0.0"
7575

7676
implementation 'com.github.bumptech.glide:glide:4.16.0'
@@ -79,7 +79,6 @@ dependencies {
7979
implementation 'androidx.appcompat:appcompat:1.6.1'
8080
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
8181
implementation 'androidx.recyclerview:recyclerview:1.3.2'
82-
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
8382
implementation "androidx.viewpager2:viewpager2:1.1.0"
8483
implementation 'com.google.android.material:material:1.5.0'
8584
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"

uikit/src/main/java/com/sendbird/uikit/activities/adapter/BaseMessageListAdapter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,9 @@ public OnItemClickListener<User> getMentionClickListener() {
572572
*
573573
* @return {@link OnFeedbackRatingClickListener} to be invoked when the feedback rating is clicked.
574574
* since 3.13.0
575+
* @deprecated As of 3.26.0, this feature is no longer supported.
575576
*/
577+
@Deprecated
576578
@Nullable
577579
public OnFeedbackRatingClickListener getFeedbackRatingClickListener() {
578580
return feedbackRatingClickListener;
@@ -583,7 +585,9 @@ public OnFeedbackRatingClickListener getFeedbackRatingClickListener() {
583585
*
584586
* @param feedbackRatingClickListener The callback that will run
585587
* since 3.13.0
588+
* @deprecated As of 3.26.0, this feature is no longer supported.
586589
*/
590+
@Deprecated
587591
public void setFeedbackRatingClickListener(@Nullable OnFeedbackRatingClickListener feedbackRatingClickListener) {
588592
this.feedbackRatingClickListener = feedbackRatingClickListener;
589593
}

uikit/src/main/java/com/sendbird/uikit/fragments/ChannelFragment.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ public class ChannelFragment extends BaseMessageListFragment<MessageListAdapter,
148148
private final AtomicBoolean isInitCallFinished = new AtomicBoolean(false);
149149
@NonNull
150150
private final AtomicBoolean isThreadRedirected = new AtomicBoolean(false);
151+
private final boolean enableAutoscrollOverflowToTop =
152+
UIKitConfig.getGroupChannelConfig().getEnableAutoscrollMessageOverflowToTop();
151153

152154
@Nullable
153155
private OnMessageTemplateActionHandler messageTemplateActionHandler;
@@ -352,15 +354,21 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
352354
scrollToFirst();
353355
break;
354356
case StringSet.EVENT_MESSAGE_RECEIVED:
357+
// Only apply overflow-to-top scroll after initial load is complete.
358+
final boolean useOverflowScroll = isInitialCallFinished &&
359+
enableAutoscrollOverflowToTop;
360+
messageListComponent.notifyOtherMessageReceived(
361+
anchorDialogShowing.get(),
362+
useOverflowScroll
363+
);
364+
break;
355365
case StringSet.EVENT_MESSAGE_SENT:
356366
messageListComponent.notifyOtherMessageReceived(anchorDialogShowing.get());
357-
if (eventSource.equals(StringSet.EVENT_MESSAGE_SENT)) {
358-
final MessageListParams messageListParams = viewModel.getMessageListParams();
359-
final BaseMessage latestMessage = adapter.getItem(messageListParams != null && messageListParams.getReverse() ? 0 : adapter.getItemCount() - 1);
360-
if (latestMessage instanceof FileMessage) {
361-
// Download from files already sent for quick image loading.
362-
FileDownloader.downloadThumbnail(context, (FileMessage) latestMessage);
363-
}
367+
final MessageListParams messageListParams = viewModel.getMessageListParams();
368+
final BaseMessage latestMessage = adapter.getItem(messageListParams != null && messageListParams.getReverse() ? 0 : adapter.getItemCount() - 1);
369+
if (latestMessage instanceof FileMessage) {
370+
// Download from files already sent for quick image loading.
371+
FileDownloader.downloadThumbnail(context, (FileMessage) latestMessage);
364372
}
365373
break;
366374
case StringSet.MESSAGE_CHANGELOG:
@@ -630,7 +638,9 @@ protected void onSuggestedRepliesClicked(@NonNull String suggestedReply) {
630638
* @param message The message that contains the form
631639
* @param form The form to be submitted
632640
* since 3.12.1
641+
* @deprecated As of 3.26.0, this feature is no longer supported.
633642
*/
643+
@Deprecated
634644
protected void onFormSubmitButtonClicked(@NonNull BaseMessage message, @NonNull MessageForm form) {
635645
message.submitMessageForm((e) -> {
636646
if (e != null) {
@@ -645,7 +655,9 @@ protected void onFormSubmitButtonClicked(@NonNull BaseMessage message, @NonNull
645655
* @param message The message that contains feedback
646656
* @param feedbackRating The clicked feedback rating
647657
* since 3.13.0
658+
* @deprecated As of 3.26.0, this feature is no longer supported.
648659
*/
660+
@Deprecated
649661
protected void onFeedbackRatingClicked(@NonNull BaseMessage message, @NonNull FeedbackRating feedbackRating) {
650662
Feedback currentFeedback = message.getMyFeedback();
651663
if (currentFeedback != null) {

uikit/src/main/java/com/sendbird/uikit/fragments/MessageThreadFragment.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.sendbird.uikit.model.ReadyStatus;
5151
import com.sendbird.uikit.model.TextUIConfig;
5252
import com.sendbird.uikit.model.configurations.ChannelConfig;
53+
import com.sendbird.uikit.model.configurations.UIKitConfig;
5354
import com.sendbird.uikit.modules.MessageThreadModule;
5455
import com.sendbird.uikit.modules.components.MessageInputComponent;
5556
import com.sendbird.uikit.modules.components.MessageThreadHeaderComponent;
@@ -115,6 +116,8 @@ public class MessageThreadFragment extends BaseMessageListFragment<ThreadListAda
115116
private ThreadMessageListParams params;
116117
@NonNull
117118
private final AtomicBoolean isInitCallFinished = new AtomicBoolean(false);
119+
private final boolean enableAutoscrollOverflowToTop =
120+
UIKitConfig.getGroupChannelConfig().getEnableAutoscrollMessageOverflowToTop();
118121

119122
@NonNull
120123
@Override
@@ -255,14 +258,17 @@ protected void onBindThreadListComponent(@NonNull ThreadListComponent messageLis
255258
}
256259
break;
257260
case StringSet.EVENT_MESSAGE_RECEIVED:
261+
messageListComponent.notifyOtherMessageReceived(
262+
false,
263+
enableAutoscrollOverflowToTop
264+
);
265+
break;
258266
case StringSet.EVENT_MESSAGE_SENT:
259267
messageListComponent.notifyOtherMessageReceived(false);
260-
if (eventSource.equals(StringSet.EVENT_MESSAGE_SENT)) {
261-
final BaseMessage latestMessage = adapter.getItem(adapter.getItemCount() - 1);
262-
if (latestMessage instanceof FileMessage) {
263-
// Download from files already sent for quick image loading.
264-
FileDownloader.downloadThumbnail(context, (FileMessage) latestMessage);
265-
}
268+
final BaseMessage latestMessage = adapter.getItem(adapter.getItemCount() - 1);
269+
if (latestMessage instanceof FileMessage) {
270+
// Download from files already sent for quick image loading.
271+
FileDownloader.downloadThumbnail(context, (FileMessage) latestMessage);
266272
}
267273
break;
268274
case StringSet.ACTION_INIT_FROM_REMOTE:

uikit/src/main/java/com/sendbird/uikit/fragments/PhotoViewFragment.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import com.bumptech.glide.load.resource.gif.GifDrawable;
2828
import com.bumptech.glide.request.RequestListener;
2929
import com.bumptech.glide.request.target.Target;
30-
import com.github.chrisbanes.photoview.PhotoViewAttacher;
30+
import com.sendbird.uikit.internal.ui.widgets.ZoomableImageView;
3131
import com.sendbird.android.channel.BaseChannel;
3232
import com.sendbird.android.channel.ChannelType;
3333
import com.sendbird.android.channel.GroupChannel;
@@ -169,7 +169,7 @@ public boolean onResourceReady(T resource, Object model, Target<T> target, DataS
169169
protected void onDrawPage() {
170170
if (!isFragmentAlive()) return;
171171
Logger.d("PhotoViewFragment::onDrawPage() - nickname:" + senderNickname);
172-
final ImageView ivPhoto = binding.ivPhoto;
172+
final ZoomableImageView ivPhoto = binding.ivPhoto;
173173
final ImageView ivDelete = binding.ivDelete;
174174
final ImageView ivDownload = binding.ivDownload;
175175
final TextView tvTitle = binding.tvTitle;
@@ -227,8 +227,10 @@ protected void onDrawPage() {
227227
}
228228
});
229229

230-
PhotoViewAttacher attacher = new PhotoViewAttacher(ivPhoto);
231-
attacher.setOnPhotoTapListener((view, x, y) -> togglePhotoActionBar());
230+
ivPhoto.setOnSingleTapListener(() -> {
231+
togglePhotoActionBar();
232+
return kotlin.Unit.INSTANCE;
233+
});
232234
}
233235

234236
private void togglePhotoActionBar() {

uikit/src/main/java/com/sendbird/uikit/interfaces/FormSubmitButtonClickListener.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@ import com.sendbird.android.message.MessageForm
77
* Interface definition for a callback to be invoked when the submit button of the form is clicked.
88
*
99
* @since 3.12.1
10+
* @deprecated As of 3.26.0, this feature is no longer supported.
1011
*/
12+
@Deprecated("As of 3.26.0, this feature is no longer supported.")
1113
fun interface FormSubmitButtonClickListener {
1214
/**
1315
* Called when the submit button of the form is clicked.
1416
*
1517
* @param message the message that contains the form
1618
* @param form the form to be submitted
1719
* @since 3.12.1
20+
* @deprecated As of 3.26.0, this feature is no longer supported.
1821
*/
1922
fun onClicked(message: BaseMessage, form: MessageForm)
2023
}

uikit/src/main/java/com/sendbird/uikit/internal/interfaces/OnFeedbackRatingClickListener.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@ import com.sendbird.android.message.FeedbackRating
77
* Interface definition for a callback to be invoked when a feedback rating is clicked.
88
*
99
* @since 3.13.0
10+
* @deprecated As of 3.26.0, this feature is no longer supported.
1011
*/
12+
@Deprecated("As of 3.26.0, this feature is no longer supported.")
1113
fun interface OnFeedbackRatingClickListener {
1214
/**
1315
* Called when a feedback rating is clicked.
1416
*
1517
* @param message the message that contains Feedback.
1618
* @param rating the feedback rating.
1719
* @since 3.13.0
20+
* @deprecated As of 3.26.0, this feature is no longer supported.
1821
*/
1922
fun onFeedbackClicked(message: BaseMessage, rating: FeedbackRating)
2023
}

0 commit comments

Comments
 (0)