Skip to content

Commit 138d452

Browse files
Added v3.14.0
1 parent 60cd795 commit 138d452

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+390
-216
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
# Changelog
2+
### v3.14.0 (Mar 19, 2024) with Chat SDK `v4.15.6`
3+
* A feedback feature has been added to give opinions on the message.
4+
* Added `setEmptyIcon(int)`, `setEmptyIcon(int, ColorStateList)`, `setEmptyText(int)`, and `setErrorText(int)` in `ChatNotificationChannelFragment`.
5+
* Added `setEmptyIcon(int)`, `setEmptyIcon(int, ColorStateList)`, `setEmptyText(int)`, and `setErrorText(int)` in `FeedNotificationChannelFragment`.
6+
* Simple example for creating `FeedNotificationChannelFragment` with empty icon and text.
7+
```kotlin
8+
val feedChannelFragment = FeedNotificationChannelFragment.Builder(channelUrl)
9+
.withArguments(args)
10+
.setEmptyIcon(R.drawable.icon_empty)
11+
.setEmptyText(R.string.text_empty_notification)
12+
.build()
13+
```
214
### v3.13.0 (Feb 1, 2024) with Chat SDK `v4.14.2`
315
* A feedback feature has been added to give opinions on the message.
416
* Added `enableFeedback` in `ChannelConfig`.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ org.gradle.jvmargs=-Xmx1536m
1616
# https://developer.android.com/topic/libraries/support-library/androidx-rn
1717
android.useAndroidX=true
1818

19-
UIKIT_VERSION = 3.13.0
19+
UIKIT_VERSION = 3.14.0
2020
UIKIT_VERSION_CODE = 1

uikit-samples/src/main/java/com/sendbird/uikit/samples/notification/NotificationHomeActivity.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package com.sendbird.uikit.samples.notification
33
import android.content.Intent
44
import android.os.Bundle
55
import android.view.View
6-
import androidx.appcompat.app.AppCompatActivity
7-
import androidx.viewbinding.ViewBinding
86
import com.sendbird.uikit.activities.FeedNotificationChannelActivity
97
import com.sendbird.uikit.samples.R
108
import com.sendbird.uikit.samples.common.ThemeHomeActivity

uikit/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ dependencies {
6464
implementation fileTree(dir: 'libs', include: ['*.jar'])
6565

6666
// Sendbird
67-
api 'com.sendbird.sdk:sendbird-chat:4.14.2'
67+
api 'com.sendbird.sdk:sendbird-chat:4.15.6'
6868

6969
implementation 'com.github.bumptech.glide:glide:4.13.0'
7070
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'

uikit/internal.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ dependencies {
4242
testImplementation "io.mockk:mockk:1.13.4"
4343
testImplementation 'androidx.arch.core:core-testing:2.2.0'
4444
testImplementation "org.jetbrains.kotlin:kotlin-reflect:1.8.20"
45+
testImplementation("pl.pragmatists:JUnitParams:1.1.0")
4546
}
4647

4748
tasks.register("ktlintCheck", JavaExec) {

uikit/src/main/java/com/sendbird/uikit/SendbirdUIKit.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@
4747
import com.sendbird.uikit.internal.singleton.NotificationChannelManager;
4848
import com.sendbird.uikit.internal.singleton.UIKitConfigRepository;
4949
import com.sendbird.uikit.internal.tasks.JobResultTask;
50-
import com.sendbird.uikit.internal.wrappers.SendbirdChatImpl;
51-
import com.sendbird.uikit.internal.wrappers.SendbirdChatWrapper;
52-
import com.sendbird.uikit.internal.wrappers.TaskQueueImpl;
53-
import com.sendbird.uikit.internal.wrappers.TaskQueueWrapper;
50+
import com.sendbird.uikit.internal.contracts.SendbirdChatImpl;
51+
import com.sendbird.uikit.internal.contracts.SendbirdChatContract;
52+
import com.sendbird.uikit.internal.contracts.TaskQueueImpl;
53+
import com.sendbird.uikit.internal.contracts.TaskQueueContract;
5454
import com.sendbird.uikit.log.Logger;
5555
import com.sendbird.uikit.model.EmojiManager;
5656
import com.sendbird.uikit.model.UserMentionConfig;
@@ -269,7 +269,7 @@ public synchronized static void initFromForeground(@NonNull SendbirdUIKitAdapter
269269

270270
@VisibleForTesting
271271
synchronized static void init(
272-
@NonNull SendbirdChatWrapper sendbirdChatWrapper,
272+
@NonNull SendbirdChatContract sendbirdChatContract,
273273
@NonNull SendbirdUIKitAdapter adapter,
274274
@NonNull UIKitConfigRepository uikitConfigRepo,
275275
@NonNull Context context,
@@ -296,7 +296,7 @@ public void onInitFailed(@NonNull SendbirdException e) {
296296
public void onInitSucceed() {
297297
Logger.d(">> onInitSucceed()");
298298
try {
299-
sendbirdChatWrapper.addExtension(StringSet.sb_uikit, BuildConfig.VERSION_NAME);
299+
sendbirdChatContract.addExtension(StringSet.sb_uikit, BuildConfig.VERSION_NAME);
300300
} catch (Throwable ignored) {
301301
}
302302
try {
@@ -305,7 +305,7 @@ public void onInitSucceed() {
305305
SendbirdPlatform.ANDROID,
306306
BuildConfig.VERSION_NAME
307307
);
308-
sendbirdChatWrapper.addSendbirdExtensions(Collections.singletonList(o), null);
308+
sendbirdChatContract.addSendbirdExtensions(Collections.singletonList(o), null);
309309
} catch (Throwable ignored) {
310310
}
311311

@@ -316,7 +316,7 @@ public void onInitSucceed() {
316316
final com.sendbird.android.LogLevel logLevel = BuildConfig.DEBUG ? com.sendbird.android.LogLevel.VERBOSE : com.sendbird.android.LogLevel.WARN;
317317
// useCaching=true is required for UIKit
318318
final InitParams initParams = new InitParams(adapter.getAppId(), context, true, logLevel, isForeground);
319-
sendbirdChatWrapper.init(initParams, initResultHandler);
319+
sendbirdChatContract.init(initParams, initResultHandler);
320320
FileUtils.removeDeletableDir(context.getApplicationContext());
321321
UIKitPrefs.init(context.getApplicationContext());
322322
NotificationChannelManager.init(context.getApplicationContext());
@@ -564,18 +564,18 @@ private enum ConnectType {
564564
}
565565

566566
@VisibleForTesting
567-
static void connectInternal(@NonNull SendbirdChatWrapper sendbirdChat,
568-
@NonNull TaskQueueWrapper taskQueueWrapper,
567+
static void connectInternal(@NonNull SendbirdChatContract sendbirdChat,
568+
@NonNull TaskQueueContract taskQueueContract,
569569
@Nullable ConnectHandler handler) {
570-
connectInternal(ConnectType.CONNECT, sendbirdChat, taskQueueWrapper, handler);
570+
connectInternal(ConnectType.CONNECT, sendbirdChat, taskQueueContract, handler);
571571
}
572572

573573
private static void connectInternal(
574574
@NonNull ConnectType connectType,
575-
@NonNull SendbirdChatWrapper sendbirdChat,
576-
@NonNull TaskQueueWrapper taskQueueWrapper,
575+
@NonNull SendbirdChatContract sendbirdChat,
576+
@NonNull TaskQueueContract taskQueueContract,
577577
@Nullable ConnectHandler handler) {
578-
taskQueueWrapper.addTask(new JobResultTask<Pair<User, SendbirdException>>() {
578+
taskQueueContract.addTask(new JobResultTask<Pair<User, SendbirdException>>() {
579579
@Override
580580
public Pair<User, SendbirdException> call() throws Exception {
581581
final Pair<User, SendbirdException> data;
@@ -654,7 +654,7 @@ public void onResultForUiThread(@Nullable Pair<User, SendbirdException> data, @N
654654
}
655655

656656
@NonNull
657-
private static Pair<User, SendbirdException> connectBlocking(@NonNull SendbirdChatWrapper sendbirdChat) throws InterruptedException {
657+
private static Pair<User, SendbirdException> connectBlocking(@NonNull SendbirdChatContract sendbirdChat) throws InterruptedException {
658658
AtomicReference<User> result = new AtomicReference<>();
659659
AtomicReference<SendbirdException> error = new AtomicReference<>();
660660
CountDownLatch latch = new CountDownLatch(1);
@@ -675,7 +675,7 @@ private static Pair<User, SendbirdException> connectBlocking(@NonNull SendbirdCh
675675
}
676676

677677
@NonNull
678-
private static Pair<User, SendbirdException> authenticateFeedBlocking(@NonNull SendbirdChatWrapper sendbirdChat) throws InterruptedException {
678+
private static Pair<User, SendbirdException> authenticateFeedBlocking(@NonNull SendbirdChatContract sendbirdChat) throws InterruptedException {
679679
AtomicReference<User> result = new AtomicReference<>();
680680
AtomicReference<SendbirdException> error = new AtomicReference<>();
681681
CountDownLatch latch = new CountDownLatch(1);
@@ -719,10 +719,10 @@ public static void updateUserInfo(@NonNull UserUpdateParams params, @Nullable Co
719719
SendbirdChat.updateCurrentUserInfo(params, handler);
720720
}
721721

722-
private static void updateUserInfoBlocking(@NonNull SendbirdChatWrapper sendbirdChatWrapper, @NonNull UserUpdateParams params) throws SendbirdException, InterruptedException {
722+
private static void updateUserInfoBlocking(@NonNull SendbirdChatContract sendbirdChatContract, @NonNull UserUpdateParams params) throws SendbirdException, InterruptedException {
723723
CountDownLatch latch = new CountDownLatch(1);
724724
AtomicReference<SendbirdException> error = new AtomicReference<>();
725-
sendbirdChatWrapper.updateCurrentUserInfo(params, e -> {
725+
sendbirdChatContract.updateCurrentUserInfo(params, e -> {
726726
if (e != null) error.set(e);
727727
latch.countDown();
728728
});

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
import com.sendbird.uikit.internal.singleton.MessageDisplayDataManager;
3636
import com.sendbird.uikit.internal.ui.viewholders.MyUserMessageViewHolder;
3737
import com.sendbird.uikit.internal.ui.viewholders.OtherUserMessageViewHolder;
38-
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitImpl;
39-
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitWrapper;
38+
import com.sendbird.uikit.internal.contracts.SendbirdUIKitImpl;
39+
import com.sendbird.uikit.internal.contracts.SendbirdUIKitContract;
4040
import com.sendbird.uikit.log.Logger;
4141
import com.sendbird.uikit.model.MessageListUIParams;
4242
import com.sendbird.uikit.model.MessageUIConfig;
@@ -86,7 +86,7 @@ abstract public class BaseMessageListAdapter extends BaseMessageAdapter<BaseMess
8686
private final ExecutorService differWorker = Executors.newSingleThreadExecutor();
8787

8888
@NonNull
89-
protected final SendbirdUIKitWrapper sendbirdUIKit;
89+
protected final SendbirdUIKitContract sendbirdUIKit;
9090

9191
/**
9292
* Constructor
@@ -145,7 +145,7 @@ public BaseMessageListAdapter(@Nullable GroupChannel channel, @NonNull MessageLi
145145
}
146146

147147
@VisibleForTesting
148-
BaseMessageListAdapter(@Nullable GroupChannel channel, @NonNull MessageListUIParams messageListUIParams, @NonNull SendbirdUIKitWrapper sendbirdUIKit) {
148+
BaseMessageListAdapter(@Nullable GroupChannel channel, @NonNull MessageListUIParams messageListUIParams, @NonNull SendbirdUIKitContract sendbirdUIKit) {
149149
if (channel != null) this.channel = GroupChannel.clone(channel);
150150
this.messageListUIParams = messageListUIParams;
151151
this.sendbirdUIKit = sendbirdUIKit;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
import com.sendbird.uikit.interfaces.FormSubmitButtonClickListener;
1414
import com.sendbird.uikit.internal.ui.viewholders.FormMessageViewHolder;
1515
import com.sendbird.uikit.internal.ui.viewholders.SuggestedRepliesViewHolder;
16-
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitImpl;
17-
import com.sendbird.uikit.internal.wrappers.SendbirdUIKitWrapper;
16+
import com.sendbird.uikit.internal.contracts.SendbirdUIKitImpl;
17+
import com.sendbird.uikit.internal.contracts.SendbirdUIKitContract;
1818
import com.sendbird.uikit.model.MessageListUIParams;
1919

2020
/**
@@ -46,7 +46,7 @@ public MessageListAdapter(@Nullable GroupChannel channel, @NonNull MessageListUI
4646
}
4747

4848
@VisibleForTesting
49-
MessageListAdapter(@Nullable GroupChannel channel, @NonNull MessageListUIParams messageListUIParams, @NonNull SendbirdUIKitWrapper sendbirdUIKit) {
49+
MessageListAdapter(@Nullable GroupChannel channel, @NonNull MessageListUIParams messageListUIParams, @NonNull SendbirdUIKitContract sendbirdUIKit) {
5050
super(channel,
5151
new MessageListUIParams.Builder(messageListUIParams)
5252
.setUseQuotedView(true)

uikit/src/main/java/com/sendbird/uikit/consts/StringSet.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ object StringSet {
136136
const val ThreadInfo = "ThreadInfo"
137137
const val ParentMessageMenu = "ParentMessageMenu"
138138
const val _AT = "@"
139+
const val disable_chat_input = "disable_chat_input"
139140

140141
// template message syntax
141142
const val web = "web"

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

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import android.content.ActivityNotFoundException;
44
import android.content.Intent;
5+
import android.content.res.ColorStateList;
56
import android.net.Uri;
67
import android.os.Bundle;
78
import android.view.View;
89

10+
import androidx.annotation.DrawableRes;
911
import androidx.annotation.NonNull;
1012
import androidx.annotation.Nullable;
13+
import androidx.annotation.StringRes;
1114
import androidx.annotation.StyleRes;
1215

1316
import com.sendbird.android.channel.GroupChannel;
@@ -388,6 +391,59 @@ public Builder setNotificationListParams(@NonNull MessageListParams params) {
388391
return this;
389392
}
390393

394+
/**
395+
* Sets the icon when the data is not exists.
396+
*
397+
* @param resId the resource identifier of the drawable.
398+
* @return This Builder object to allow for chaining of calls to set methods.
399+
* since 3.14.0
400+
*/
401+
@NonNull
402+
public Builder setEmptyIcon(@DrawableRes int resId) {
403+
return setEmptyIcon(resId, null);
404+
}
405+
406+
/**
407+
* Sets the icon when the data is not exists.
408+
*
409+
* @param resId the resource identifier of the drawable.
410+
* @param tint Color state list to use for tinting this resource, or null to clear the tint.
411+
* @return This Builder object to allow for chaining of calls to set methods.
412+
* since 3.14.0
413+
*/
414+
@NonNull
415+
public Builder setEmptyIcon(@DrawableRes int resId, @Nullable ColorStateList tint) {
416+
bundle.putInt(StringSet.KEY_EMPTY_ICON_RES_ID, resId);
417+
bundle.putParcelable(StringSet.KEY_EMPTY_ICON_TINT, tint);
418+
return this;
419+
}
420+
421+
/**
422+
* Sets the text when the data is not exists
423+
*
424+
* @param resId the resource identifier of text to be displayed.
425+
* @return This Builder object to allow for chaining of calls to set methods.
426+
* since 3.14.0
427+
*/
428+
@NonNull
429+
public Builder setEmptyText(@StringRes int resId) {
430+
bundle.putInt(StringSet.KEY_EMPTY_TEXT_RES_ID, resId);
431+
return this;
432+
}
433+
434+
/**
435+
* Sets the text when error occurs
436+
*
437+
* @param resId the resource identifier of text to be displayed.
438+
* @return This Builder object to allow for chaining of calls to set methods.
439+
* since 3.14.0
440+
*/
441+
@NonNull
442+
public Builder setErrorText(@StringRes int resId) {
443+
bundle.putInt(StringSet.KEY_ERROR_TEXT_RES_ID, resId);
444+
return this;
445+
}
446+
391447
/**
392448
* Creates an {@link ChatNotificationChannelFragment} with the arguments supplied to this
393449
* builder.

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

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import android.content.ActivityNotFoundException;
44
import android.content.Intent;
5+
import android.content.res.ColorStateList;
56
import android.net.Uri;
67
import android.os.Bundle;
78
import android.view.View;
89

10+
import androidx.annotation.DrawableRes;
911
import androidx.annotation.NonNull;
1012
import androidx.annotation.Nullable;
13+
import androidx.annotation.StringRes;
1114
import androidx.annotation.StyleRes;
1215

1316
import com.sendbird.android.channel.FeedChannel;
@@ -123,7 +126,7 @@ protected void onBindNotificationListComponent(@NonNull FeedNotificationListComp
123126
Logger.d(">> FeedNotificationChannelFragment::onBindFeedNotificationListComponent()");
124127
listComponent.setOnMessageTemplateActionHandler(actionHandler != null ? actionHandler : this::handleAction);
125128
listComponent.setOnTooltipClickListener(v -> listComponent.scrollToFirst());
126-
listComponent.setOnImpressionDetectedListener(viewModel::sendLogImpression);
129+
listComponent.setOnNotificationViewedDetectedListener(viewModel::sendLogImpression);
127130
listComponent.setOnNotificationCategorySelectListener(category -> {
128131
Logger.d("++ selected category = %s", category);
129132
listComponent.clearData();
@@ -416,6 +419,59 @@ public Builder setNotificationListParams(@NonNull MessageListParams params) {
416419
return this;
417420
}
418421

422+
/**
423+
* Sets the icon when the data is not exists.
424+
*
425+
* @param resId the resource identifier of the drawable.
426+
* @return This Builder object to allow for chaining of calls to set methods.
427+
* since 3.14.0
428+
*/
429+
@NonNull
430+
public Builder setEmptyIcon(@DrawableRes int resId) {
431+
return setEmptyIcon(resId, null);
432+
}
433+
434+
/**
435+
* Sets the icon when the data is not exists.
436+
*
437+
* @param resId the resource identifier of the drawable.
438+
* @param tint Color state list to use for tinting this resource, or null to clear the tint.
439+
* @return This Builder object to allow for chaining of calls to set methods.
440+
* since 3.14.0
441+
*/
442+
@NonNull
443+
public Builder setEmptyIcon(@DrawableRes int resId, @Nullable ColorStateList tint) {
444+
bundle.putInt(StringSet.KEY_EMPTY_ICON_RES_ID, resId);
445+
bundle.putParcelable(StringSet.KEY_EMPTY_ICON_TINT, tint);
446+
return this;
447+
}
448+
449+
/**
450+
* Sets the text when the data is not exists
451+
*
452+
* @param resId the resource identifier of text to be displayed.
453+
* @return This Builder object to allow for chaining of calls to set methods.
454+
* since 3.14.0
455+
*/
456+
@NonNull
457+
public Builder setEmptyText(@StringRes int resId) {
458+
bundle.putInt(StringSet.KEY_EMPTY_TEXT_RES_ID, resId);
459+
return this;
460+
}
461+
462+
/**
463+
* Sets the text when error occurs
464+
*
465+
* @param resId the resource identifier of text to be displayed.
466+
* @return This Builder object to allow for chaining of calls to set methods.
467+
* since 3.14.0
468+
*/
469+
@NonNull
470+
public Builder setErrorText(@StringRes int resId) {
471+
bundle.putInt(StringSet.KEY_ERROR_TEXT_RES_ID, resId);
472+
return this;
473+
}
474+
419475
/**
420476
* Creates an {@link FeedNotificationChannelFragment} with the arguments supplied to this
421477
* builder.

uikit/src/main/java/com/sendbird/uikit/internal/wrappers/GroupChannelCollectionWrapper.kt renamed to uikit/src/main/java/com/sendbird/uikit/internal/contracts/GroupChannelCollectionContract.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package com.sendbird.uikit.internal.wrappers
1+
package com.sendbird.uikit.internal.contracts
22

33
import com.sendbird.android.channel.GroupChannel
44
import com.sendbird.android.handler.GroupChannelCollectionHandler
55
import com.sendbird.android.handler.GroupChannelsCallbackHandler
66

7-
internal interface GroupChannelCollectionWrapper {
7+
internal interface GroupChannelCollectionContract {
88
fun setGroupChannelCollectionHandler(handler: GroupChannelCollectionHandler?)
99
fun loadMore(handler: GroupChannelsCallbackHandler)
1010
fun getChannelList(): List<GroupChannel>

0 commit comments

Comments
 (0)