Skip to content

Commit 91500e5

Browse files
authored
Fix issue in APIView feedback (#796)
* Fix issue in APIView feedback * Remove credential policy * Make ChatError & AddChatParticipantsResult Immutable, add retryPolicy for builder * Update addEventHandler to return listener id * Add @throw annotations, make communicationTokenCredential mandatory in builder, put authorizationPolicy after retryPolicy in builder * Fix unit test with mock android.util.Base64 * Add copyright * fix comment & README.md * Update mock class license * Update signaling client initialization process * Update ChatEvent getThreadId to getChatThreadId * Update addEventHandler behavior * Update release date
1 parent 209ef5b commit 91500e5

File tree

30 files changed

+657
-585
lines changed

30 files changed

+657
-585
lines changed

samples/sample-chat-app/src/main/java/com/azure/android/communication/chat/sampleapp/MainActivity.java

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@
3030
import com.azure.android.communication.chat.models.ParticipantsAddedEvent;
3131
import com.azure.android.communication.chat.models.ParticipantsRemovedEvent;
3232
import com.azure.android.communication.chat.models.ReadReceiptReceivedEvent;
33+
import com.azure.android.communication.chat.models.RealTimeNotificationCallback;
3334
import com.azure.android.communication.chat.models.SendChatMessageOptions;
34-
import com.azure.android.communication.chat.models.BaseEvent;
35+
import com.azure.android.communication.chat.models.ChatEvent;
3536
import com.azure.android.communication.chat.models.TypingIndicatorReceivedEvent;
37+
import com.azure.android.communication.common.CommunicationTokenCredential;
3638
import com.azure.android.communication.common.CommunicationUserIdentifier;
37-
import com.azure.android.core.credential.AccessToken;
38-
import com.azure.android.core.http.policy.BearerTokenAuthenticationPolicy;
3939
import com.azure.android.core.http.policy.HttpLogDetailLevel;
4040
import com.azure.android.core.http.policy.HttpLogOptions;
4141
import com.azure.android.core.http.policy.UserAgentPolicy;
@@ -45,8 +45,6 @@
4545
import com.azure.android.core.util.RequestContext;
4646
import com.jakewharton.threetenabp.AndroidThreeTen;
4747

48-
import org.threeten.bp.OffsetDateTime;
49-
5048
import java.util.ArrayList;
5149
import java.util.List;
5250
import java.util.Objects;
@@ -82,12 +80,12 @@ public class MainActivity extends AppCompatActivity {
8280
private String threadId = "<to-be-updated-below>";
8381
private String chatMessageId = "<to-be-updated-below>";
8482
private final String endpoint = "";
85-
private final String listenerId = "testListener";
86-
private final String sdkVersion = "1.0.0-beta.8";
83+
private final String sdkVersion = "1.0.0";
8784
private static final String SDK_NAME = "azure-communication-com.azure.android.communication.chat";
8885
private static final String APPLICATION_ID = "Chat Test App";
8986
private static final String TAG = "[Chat Test App]";
9087
private final Queue<String> unreadMessages = new ConcurrentLinkedQueue<>();
88+
private static RealTimeNotificationCallback messageReceivedHandler;
9189

9290
@Override
9391
protected void onCreate(Bundle savedInstanceState) {
@@ -102,13 +100,11 @@ public void createChatAsyncClient() {
102100
try {
103101
chatAsyncClient = new ChatClientBuilder()
104102
.endpoint(endpoint)
105-
.credentialPolicy(new BearerTokenAuthenticationPolicy((request, callback) ->
106-
callback.onSuccess(new AccessToken(firstUserAccessToken, OffsetDateTime.now().plusDays(1)))))
103+
.credential(new CommunicationTokenCredential(firstUserAccessToken))
107104
.addPolicy(new UserAgentPolicy(APPLICATION_ID, SDK_NAME, sdkVersion))
108105
.httpLogOptions(new HttpLogOptions()
109106
.setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)
110107
.addAllowedHeaderName("MS-CV"))
111-
.realtimeNotificationParams(getApplicationContext(), firstUserAccessToken)
112108
.buildAsyncClient();
113109

114110
Log.d(TAG, "Created ChatAsyncClient");
@@ -165,7 +161,7 @@ private void logAndToast(String msg) {
165161
public void startRealTimeNotification(View view) {
166162
logAndToast( "Starting real time notification");
167163
try {
168-
chatAsyncClient.startRealtimeNotifications();
164+
chatAsyncClient.startRealtimeNotifications(firstUserAccessToken, getApplicationContext());
169165
} catch (Exception e) {
170166
Log.e(TAG, e.getMessage());
171167
}
@@ -175,90 +171,92 @@ public void registerRealTimeNotificationListener(View view) {
175171
logAndToast("Register a test listener");
176172
JacksonSerder jacksonSerder = JacksonSerder.createDefault();
177173

178-
chatAsyncClient.on(CHAT_MESSAGE_RECEIVED, "chatMessageReceived", (BaseEvent payload) -> {
174+
messageReceivedHandler = (ChatEvent payload) -> {
179175
eventHandlerCalled++;
180176

181177
Log.i(TAG, eventHandlerCalled + " messages handled.");
182178
ChatMessageReceivedEvent event = (ChatMessageReceivedEvent) payload;
183-
Log.i(TAG, "Message created! ThreadId: " + event.getThreadId());
184-
});
179+
Log.i(TAG, "Message created! ThreadId: " + event.getChatThreadId());
180+
};
181+
182+
chatAsyncClient.addEventHandler(CHAT_MESSAGE_RECEIVED, messageReceivedHandler);
185183

186-
chatAsyncClient.on(CHAT_MESSAGE_EDITED, "chatMessageEdited", (BaseEvent payload) -> {
184+
chatAsyncClient.addEventHandler(CHAT_MESSAGE_EDITED, (ChatEvent payload) -> {
187185
eventHandlerCalled++;
188186

189187
Log.i(TAG, eventHandlerCalled + " messages handled.");
190188
ChatMessageEditedEvent event = (ChatMessageEditedEvent) payload;
191-
Log.i(TAG, "Message edited! ThreadId: " + event.getThreadId());
189+
Log.i(TAG, "Message edited! ThreadId: " + event.getChatThreadId());
192190
});
193191

194-
chatAsyncClient.on(CHAT_MESSAGE_DELETED, "chatMessageDeleted", (BaseEvent payload) -> {
192+
chatAsyncClient.addEventHandler(CHAT_MESSAGE_DELETED, (ChatEvent payload) -> {
195193
eventHandlerCalled++;
196194

197195
Log.i(TAG, eventHandlerCalled + " messages handled.");
198196
ChatMessageDeletedEvent event = (ChatMessageDeletedEvent) payload;
199-
Log.i(TAG, "Message deleted! ThreadId: " + event.getThreadId());
197+
Log.i(TAG, "Message deleted! ThreadId: " + event.getChatThreadId());
200198
});
201199

202-
chatAsyncClient.on(TYPING_INDICATOR_RECEIVED, "typingIndicatorReceived", (BaseEvent payload) -> {
200+
chatAsyncClient.addEventHandler(TYPING_INDICATOR_RECEIVED, (ChatEvent payload) -> {
203201
eventHandlerCalled++;
204202

205203
Log.i(TAG, eventHandlerCalled + " messages handled.");
206204
TypingIndicatorReceivedEvent event = (TypingIndicatorReceivedEvent) payload;
207-
Log.i(TAG, "Typing indicator received! ThreadId: " + event.getThreadId());
205+
Log.i(TAG, "Typing indicator received! ThreadId: " + event.getChatThreadId());
208206
});
209207

210-
chatAsyncClient.on(READ_RECEIPT_RECEIVED, "readReceiptReceived", (BaseEvent payload) -> {
208+
chatAsyncClient.addEventHandler(READ_RECEIPT_RECEIVED, (ChatEvent payload) -> {
211209
eventHandlerCalled++;
212210

213211
Log.i(TAG, eventHandlerCalled + " messages handled.");
214212
ReadReceiptReceivedEvent event = (ReadReceiptReceivedEvent) payload;
215-
Log.i(TAG, "Read receipt received! ThreadId: " + event.getThreadId());
213+
Log.i(TAG, "Read receipt received! ThreadId: " + event.getChatThreadId());
216214
});
217215

218-
chatAsyncClient.on(CHAT_THREAD_CREATED, "chatThreadCreated", (BaseEvent payload) -> {
216+
chatAsyncClient.addEventHandler(CHAT_THREAD_CREATED, (ChatEvent payload) -> {
219217
eventHandlerCalled++;
220218

221219
Log.i(TAG, eventHandlerCalled + " messages handled.");
222220
ChatThreadCreatedEvent event = (ChatThreadCreatedEvent) payload;
223-
Log.i(TAG, "Chat thread created! ThreadId: " + event.getThreadId());
221+
Log.i(TAG, "Chat thread created! ThreadId: " + event.getChatThreadId());
224222
});
225223

226-
chatAsyncClient.on(CHAT_THREAD_DELETED, "chatThreadDeleted", (BaseEvent payload) -> {
224+
chatAsyncClient.addEventHandler(CHAT_THREAD_DELETED, (ChatEvent payload) -> {
227225
eventHandlerCalled++;
228226

229227
Log.i(TAG, eventHandlerCalled + " messages handled.");
230228
ChatThreadDeletedEvent event = (ChatThreadDeletedEvent) payload;
231-
Log.i(TAG, "Chat thread deleted! ThreadId: " + event.getThreadId());
229+
Log.i(TAG, "Chat thread deleted! ThreadId: " + event.getChatThreadId());
232230
});
233231

234-
chatAsyncClient.on(CHAT_THREAD_PROPERTIES_UPDATED, "chatThreadPropertiesUpdated", (BaseEvent payload) -> {
232+
chatAsyncClient.addEventHandler(CHAT_THREAD_PROPERTIES_UPDATED, (ChatEvent payload) -> {
235233
eventHandlerCalled++;
236234

237235
Log.i(TAG, eventHandlerCalled + " messages handled.");
238236
ChatThreadPropertiesUpdatedEvent event = (ChatThreadPropertiesUpdatedEvent) payload;
239-
Log.i(TAG, "Chat thread properties updated! ThreadId: " + event.getThreadId());
237+
Log.i(TAG, "Chat thread properties updated! ThreadId: " + event.getChatThreadId());
240238
});
241239

242-
chatAsyncClient.on(PARTICIPANTS_ADDED, "participantsAdded", (BaseEvent payload) -> {
240+
chatAsyncClient.addEventHandler(PARTICIPANTS_ADDED, (ChatEvent payload) -> {
243241
eventHandlerCalled++;
244242

245243
Log.i(TAG, eventHandlerCalled + " messages handled.");
246244
ParticipantsAddedEvent event = (ParticipantsAddedEvent) payload;
247-
Log.i(TAG, "Participants added! ThreadId: " + event.getThreadId());
245+
Log.i(TAG, "Participants added! ThreadId: " + event.getChatThreadId());
248246
});
249247

250-
chatAsyncClient.on(PARTICIPANTS_REMOVED, "participantsRemoved", (BaseEvent payload) -> {
248+
chatAsyncClient.addEventHandler(PARTICIPANTS_REMOVED, (ChatEvent payload) -> {
251249
eventHandlerCalled++;
252250

253251
Log.i(TAG, eventHandlerCalled + " messages handled.");
254252
ParticipantsRemovedEvent event = (ParticipantsRemovedEvent) payload;
255-
Log.i(TAG, "Participants removed! ThreadId: " + event.getThreadId());
253+
Log.i(TAG, "Participants removed! ThreadId: " + event.getChatThreadId());
256254
});
257255
}
258256

259257
public void unregisterRealTimeNotificationListener(View view) {
260258
logAndToast("Unregister a test listener");
261-
chatAsyncClient.off(CHAT_MESSAGE_RECEIVED, listenerId);
259+
chatAsyncClient.removeEventHandler(CHAT_MESSAGE_RECEIVED, messageReceivedHandler);
262260
}
263261

264262
public void sendChatMessage(View view) {

sdk/communication/azure-communication-chat/CHANGELOG.md

Lines changed: 78 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,97 @@
11
# Release History
2-
## 1.0.0 (2021-06-09)
2+
## 1.0.0 (2021-06-15)
33
### New Features
44
- Added `ChatServiceVersion` and the ability to set it on `ChatClientBuilder` and `ChatThreadClientBuilder`.
55

66
### Breaking Changes
7+
- ChatClientBuilder:
8+
- Added `retryPolicy`.
9+
- Removed `credentialPolicy`.
10+
- Removed `realtimeNotificationParams`.
11+
- ChatThreadClientBuilder:
12+
- Added `retryPolicy`.
13+
- Removed `credentialPolicy`.
14+
- Removed `realtimeNotificationParams`.
715
- ChatClient:
8-
- Added `listChatThreads`
9-
- Removed `getChatThreadsFirstPage`
10-
- Removed `getChatThreadsFirstPageWithResponse`
11-
- Removed `getChatThreadsNextPage`
12-
- Removed `getChatThreadsNextPageWithResponse`
13-
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`
16+
- Added `listChatThreads`.
17+
- Changed `startRealtimeNotifications` with adding parameter `String skypeUserToken` and `Context context`.
18+
- Removed `getChatThreadsFirstPage`.
19+
- Removed `getChatThreadsFirstPageWithResponse`.
20+
- Removed `getChatThreadsNextPage`.
21+
- Removed `getChatThreadsNextPageWithResponse`.
22+
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`.
23+
- Replaced `on` with `addEventHandler`.
24+
- Replaced `off` with `removeEventHandler`.
1425
- ChatAsyncClient:
15-
- Added `listChatThreads`
16-
- Removed `getChatThreadsFirstPage`
17-
- Removed `getChatThreadsFirstPageWithResponse`
18-
- Removed `getChatThreadsNextPage`
19-
- Removed `getChatThreadsNextPageWithResponse`
20-
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`
26+
- Added `listChatThreads`.
27+
- Changed `startRealtimeNotifications` with adding parameter `String skypeUserToken` and `Context context`.
28+
- Removed `getChatThreadsFirstPage`.
29+
- Removed `getChatThreadsFirstPageWithResponse`.
30+
- Removed `getChatThreadsNextPage`.
31+
- Removed `getChatThreadsNextPageWithResponse`.
32+
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`.
33+
- Replaced `on` with `addEventHandler`.
34+
- Replaced `off` with `removeEventHandler`.
2135
- ChatThreadClient:
22-
- Added `listParticipants`
23-
- Added `listMessages`
24-
- Added `listReadReceipts`
25-
- Changed returning `AddChatParticipantsResult` instead of `void` for `addParticipants`
26-
- Changed taking parameter `Iterable<ChatParticipant> participants` instead of `AddChatParticipantsOptions options` for `addParticipants` and `addParticipantsWithResponse`
27-
- Removed `getParticipantsFirstPage`
28-
- Removed `getParticipantsFirstPageWithResponse`
29-
- Removed `getParticipantsNextPage`
30-
- Removed `getParticipantsNextPageWithResponse`
31-
- Removed `getMessagesFirstPage`
32-
- Removed `getMessagesFirstPageWithResponse`
33-
- Removed `getMessagesNextPage`
34-
- Removed `getMessagesNextPageWithResponse`
35-
- Removed `getReadReceiptsFirstPage`
36-
- Removed `getReadReceiptsFirstPageWithResponse`
37-
- Removed `getReadReceiptsNextPage`
38-
- Removed `getReadReceiptsNextPageWithResponse`
39-
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`
36+
- Added `listParticipants`.
37+
- Added `listMessages`.
38+
- Added `listReadReceipts`.
39+
- Changed returning `AddChatParticipantsResult` instead of `void` for `addParticipants`.
40+
- Changed taking parameter `Iterable<ChatParticipant> participants` instead of `AddChatParticipantsOptions options` for `addParticipants` and `addParticipantsWithResponse`.
41+
- Removed `getParticipantsFirstPage`.
42+
- Removed `getParticipantsFirstPageWithResponse`.
43+
- Removed `getParticipantsNextPage`.
44+
- Removed `getParticipantsNextPageWithResponse`.
45+
- Removed `getMessagesFirstPage`.
46+
- Removed `getMessagesFirstPageWithResponse`.
47+
- Removed `getMessagesNextPage`.
48+
- Removed `getMessagesNextPageWithResponse`.
49+
- Removed `getReadReceiptsFirstPage`.
50+
- Removed `getReadReceiptsFirstPageWithResponse`.
51+
- Removed `getReadReceiptsNextPage`.
52+
- Removed `getReadReceiptsNextPageWithResponse`.
53+
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`.
4054
- ChatThreadAsyncClient:
41-
- Added `listParticipants`
42-
- Added `listMessages`
43-
- Added `listReadReceipts`
44-
- Changed returning `CompletableFuture<AddChatParticipantsResult>` instead of `CompletableFuture<Void>` for `addParticipants`
45-
- Changed taking parameter `Iterable<ChatParticipant> participants` instead of `AddChatParticipantsOptions options` for `addParticipants` and `addParticipantsWithResponse`
46-
- Removed `getParticipantsFirstPage`
47-
- Removed `getParticipantsFirstPageWithResponse`
48-
- Removed `getParticipantsNextPage`
49-
- Removed `getParticipantsNextPageWithResponse`
50-
- Removed `getMessagesFirstPage`
51-
- Removed `getMessagesFirstPageWithResponse`
52-
- Removed `getMessagesNextPage`
53-
- Removed `getMessagesNextPageWithResponse`
54-
- Removed `getReadReceiptsFirstPage`
55-
- Removed `getReadReceiptsFirstPageWithResponse`
56-
- Removed `getReadReceiptsNextPage`
57-
- Removed `getReadReceiptsNextPageWithResponse`
58-
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`
55+
- Added `listParticipants`.
56+
- Added `listMessages`.
57+
- Added `listReadReceipts`.
58+
- Changed returning `CompletableFuture<AddChatParticipantsResult>` instead of `CompletableFuture<Void>` for `addParticipants`.
59+
- Changed taking parameter `Iterable<ChatParticipant> participants` instead of `AddChatParticipantsOptions options` for `addParticipants` and `addParticipantsWithResponse`.
60+
- Removed `getParticipantsFirstPage`.
61+
- Removed `getParticipantsFirstPageWithResponse`.
62+
- Removed `getParticipantsNextPage`.
63+
- Removed `getParticipantsNextPageWithResponse`.
64+
- Removed `getMessagesFirstPage`.
65+
- Removed `getMessagesFirstPageWithResponse`.
66+
- Removed `getMessagesNextPage`.
67+
- Removed `getMessagesNextPageWithResponse`.
68+
- Removed `getReadReceiptsFirstPage`.
69+
- Removed `getReadReceiptsFirstPageWithResponse`.
70+
- Removed `getReadReceiptsNextPage`.
71+
- Removed `getReadReceiptsNextPageWithResponse`.
72+
- Replaced `azure.core.util.Context` in the APIs with `azure.core.util.RequestContext`.
5973
- Removed `com.azure.android.communication.chat.signaling.chatevents.ChatParticipant`.
6074
- Removed `com.azure.android.communication.chat.signaling.chatevents.ChatThreadProperties`.
6175
- Removed `com.azure.android.communication.chat.models.AddChatParticipantsOptions`.
76+
- Removed setters for `AddChatParticipantsResult`.
77+
- Removed setters for `ChatError`.
6278
- Changed `com.azure.android.communication.chat.signaling.chatevents.*` to `com.azure.android.communication.chat.models.*`.
6379
- Changed `httpClient` to an optional component for `ChatClientBuilder`/`ChatThreadClientBuilder` to create corresponding client.
64-
- Changed `ChatEventId` to `ChatEventKind`.
65-
- Changed `ChatMessageReceivedEvent` createdOn type from `String` to `OffsetDateTime`
66-
- Changed `ChatMessageEditedEvent` createdOn and editedOn type from `String` to `OffsetDateTime`
67-
- Changed `ChatMessageDeletedEvent` createdOn and deletedOn type from `String` to `OffsetDateTime`
68-
- Changed `ReadReceiptReceivedEvent` readOn type from `String` to `OffsetDateTime`
69-
- Changed `TypingIndicatorReceivedEvent` receivedOn type from `String` to `OffsetDateTime`
70-
- Changed `ChatThreadCreatedEvent` createdOn type from `String` to `OffsetDateTime`
71-
- Changed `ChatThreadDeletedEvent` deletedOn type from `String` to `OffsetDateTime`
72-
- Changed `ChatThreadPropertiesUpdatedEvent` updatedOn type from `String` to `OffsetDateTime`
73-
- Changed `ParticipantsAddedEvent` addedOn type from `String` to `OffsetDateTime`
74-
- Changed `ParticipantsRemovedEvent` removedOn type from `String` to `OffsetDateTime`
80+
- Changed `ChatEventId` to `ChatEventType`.
81+
- Changed `BaseEvent` to `ChatEvent`.
82+
- Changed `ChatMessageReceivedEvent` createdOn type from `String` to `OffsetDateTime`.
83+
- Changed `ChatMessageEditedEvent` createdOn and editedOn type from `String` to `OffsetDateTime`.
84+
- Changed `ChatMessageDeletedEvent` createdOn and deletedOn type from `String` to `OffsetDateTime`.
85+
- Changed `ReadReceiptReceivedEvent` readOn type from `String` to `OffsetDateTime`.
86+
- Changed `TypingIndicatorReceivedEvent` receivedOn type from `String` to `OffsetDateTime`.
87+
- Changed `ChatThreadCreatedEvent` createdOn type from `String` to `OffsetDateTime`.
88+
- Changed `ChatThreadDeletedEvent` deletedOn type from `String` to `OffsetDateTime`.
89+
- Changed `ChatThreadPropertiesUpdatedEvent` updatedOn type from `String` to `OffsetDateTime`.
90+
- Changed `ParticipantsAddedEvent` addedOn type from `String` to `OffsetDateTime`.
91+
- Changed `ParticipantsRemovedEvent` removedOn type from `String` to `OffsetDateTime`.
7592

7693
### Dependency Updates
77-
- Updated `com.azure.android.core` from `1.0.0-beta.5` to `1.0.0-beta.6`
94+
- Updated `com.azure.android.core` from `1.0.0-beta.5` to `1.0.0-beta.6`.
7895

7996

8097
## 1.0.0-beta.8 (2021-03-29)

0 commit comments

Comments
 (0)