Skip to content

Commit bb26bcd

Browse files
authored
Support Amazon Connect Participant (#1319)
* [Connect Participant] Add connect participant module
1 parent 22d1b2a commit bb26bcd

File tree

66 files changed

+8336
-0
lines changed

Some content is hidden

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

66 files changed

+8336
-0
lines changed

.circleci/config.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,16 @@ workflows:
12151215
only:
12161216
- master
12171217
- develop
1218+
- integrationtest:
1219+
name: connectparticipant
1220+
testmodule: aws-android-sdk-connectparticipant-test
1221+
requires:
1222+
- pre_integrationtest
1223+
filters:
1224+
branches:
1225+
only:
1226+
- master
1227+
- develop
12181228
- integrationtest:
12191229
name: ddb-mapper
12201230
testmodule: aws-android-sdk-ddb-mapper-test
@@ -1471,6 +1481,7 @@ workflows:
14711481
# - kinesisvideo
14721482
- mobile-client
14731483
- connect
1484+
- connectparticipant
14741485
- textract
14751486
- translate
14761487
- transcribe
@@ -1601,6 +1612,16 @@ workflows:
16011612
ignore: /.*/
16021613
tags:
16031614
only: /^(release|beta)_v[0-9]+.[0-9]+.[0-9]+$/
1615+
- integrationtest:
1616+
name: connectparticipant
1617+
testmodule: aws-android-sdk-connectparticipant-test
1618+
requires:
1619+
- pre_integrationtest
1620+
filters:
1621+
branches:
1622+
ignore: /.*/
1623+
tags:
1624+
only: /^(release|beta)_v[0-9]+.[0-9]+.[0-9]+$/
16041625
- integrationtest:
16051626
name: ddb-mapper
16061627
testmodule: aws-android-sdk-ddb-mapper-test
@@ -1858,6 +1879,7 @@ workflows:
18581879
# - kinesisvideo
18591880
- mobile-client
18601881
- connect
1882+
- connectparticipant
18611883
- textract
18621884
- translate
18631885
- transcribe

.idea/modules.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CircleciScripts/ReleaseConfiguration.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"aws-android-sdk-cognitoidentityprovider",
2020
"aws-android-sdk-comprehend",
2121
"aws-android-sdk-connect",
22+
"aws-android-sdk-connectparticipant",
2223
"aws-android-sdk-core",
2324
"aws-android-sdk-ddb",
2425
"aws-android-sdk-ddb-document",
@@ -222,6 +223,12 @@
222223
"${service.prefix}.connect*"
223224
]
224225
},
226+
{
227+
title : "Amazon Connect Participant" ,
228+
packages : [
229+
"${service.prefix}.connectparticipant*"
230+
]
231+
},
225232
{
226233
title : "Amazon EC2" ,
227234
packages : [
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
apply plugin: 'com.android.library'
2+
3+
android {
4+
compileSdkVersion 27
5+
6+
defaultConfig {
7+
minSdkVersion 15
8+
targetSdkVersion 27
9+
versionCode 1
10+
versionName "1.0"
11+
12+
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13+
}
14+
15+
buildTypes {
16+
release {
17+
minifyEnabled false
18+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
19+
}
20+
}
21+
}
22+
23+
dependencies {
24+
implementation fileTree(dir: 'libs', include: ['*.jar'])
25+
api (project(":aws-android-sdk-connectparticipant")) {
26+
exclude group: "com.google.android", module: "android"
27+
}
28+
implementation 'com.android.support:appcompat-v7:27.0.0'
29+
testImplementation 'junit:junit:4.12'
30+
androidTestImplementation 'com.android.support.test:runner:1.0.2'
31+
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
32+
androidTestImplementation project(":aws-android-sdk-testutils")
33+
androidTestImplementation (project(":aws-android-sdk-connect")) {
34+
exclude group: "com.google.android", module: "android"
35+
}
36+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Add project specific ProGuard rules here.
2+
# You can control the set of applied configuration files using the
3+
# proguardFiles setting in build.gradle.
4+
#
5+
# For more details, see
6+
# http://developer.android.com/guide/developing/tools/proguard.html
7+
8+
# If your project uses WebView with JS, uncomment the following
9+
# and specify the fully qualified class name to the JavaScript interface
10+
# class:
11+
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12+
# public *;
13+
#}
14+
15+
# Uncomment this to preserve the line number information for
16+
# debugging stack traces.
17+
#-keepattributes SourceFile,LineNumberTable
18+
19+
# If you keep the line number information, uncomment this to
20+
# hide the original source file name.
21+
#-renamesourcefileattribute SourceFile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
/*
2+
* Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package com.amazonaws.services.connectparticipant;
17+
18+
import android.support.test.runner.AndroidJUnit4;
19+
20+
import com.amazonaws.AmazonServiceException;
21+
import com.amazonaws.services.connect.AmazonConnectClient;
22+
import com.amazonaws.services.connect.model.ParticipantDetails;
23+
import com.amazonaws.services.connect.model.StartChatContactRequest;
24+
import com.amazonaws.services.connectparticipant.model.CreateParticipantConnectionRequest;
25+
import com.amazonaws.services.connectparticipant.model.DisconnectParticipantRequest;
26+
import com.amazonaws.services.connectparticipant.model.GetTranscriptRequest;
27+
import com.amazonaws.services.connectparticipant.model.SendMessageRequest;
28+
import com.amazonaws.services.connectparticipant.model.SendMessageResult;
29+
import com.amazonaws.testutils.AWSTestBase;
30+
31+
import org.junit.After;
32+
import org.junit.Before;
33+
import org.junit.Test;
34+
import org.junit.runner.RunWith;
35+
36+
import static org.junit.Assert.fail;
37+
38+
/**
39+
* Instrumented test, which will execute on an Android device.
40+
*
41+
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
42+
*/
43+
@RunWith(AndroidJUnit4.class)
44+
public class ConnectParticipantInstrumentedTest extends AWSTestBase {
45+
46+
private AmazonConnectClient connectClient;
47+
private AmazonConnectParticipantClient chatClient;
48+
49+
private String instanceId;
50+
private String adminUserName;
51+
private String contactFlowId;
52+
53+
private String participantToken;
54+
private String connectionToken;
55+
56+
private boolean isDisconnected = true;
57+
58+
private String TAG = ConnectParticipantInstrumentedTest.class.getSimpleName();
59+
60+
@Before
61+
public void setUp() throws Exception {
62+
setUpCredentials();
63+
connectClient = new AmazonConnectClient(credentials);
64+
chatClient = new AmazonConnectParticipantClient();
65+
instanceId = getPackageConfigure("connect").getString("instanceId");
66+
adminUserName = getPackageConfigure("connect").getString("adminUserName");
67+
contactFlowId = getPackageConfigure("connect").getString("contactFlowId");
68+
69+
StartChatContactRequest startchatContactRequest = new StartChatContactRequest();
70+
ParticipantDetails participantDetails = new ParticipantDetails();
71+
participantDetails.setDisplayName(adminUserName);
72+
73+
participantToken = connectClient.startChatContact(startchatContactRequest
74+
.withInstanceId(instanceId)
75+
.withContactFlowId(contactFlowId)
76+
.withParticipantDetails(participantDetails)
77+
).getParticipantToken();
78+
}
79+
80+
@After
81+
public void tearDown() {
82+
disconnect();
83+
}
84+
85+
@Test
86+
public void testCreateConnection() {
87+
assertNotEmpty(getConnectionToken());
88+
}
89+
90+
@Test
91+
public void testDisconnect() {
92+
getConnectionToken();
93+
disconnect();
94+
try {
95+
chatClient.getTranscript(new GetTranscriptRequest().withConnectionToken(participantToken));
96+
fail("Disconnected participant should not be able to invoke an API");
97+
} catch (AmazonServiceException e) {
98+
assertValidException(e);
99+
}
100+
}
101+
102+
@Test
103+
public void testSendChatMessage() {
104+
final String message = "This is a test message";
105+
106+
SendMessageRequest sendMessageRequest = new SendMessageRequest()
107+
.withConnectionToken(getConnectionToken())
108+
.withContent(message)
109+
.withContentType("text/plain");
110+
SendMessageResult sendMessageResult = chatClient.sendMessage(sendMessageRequest);
111+
112+
assertNotEmpty(sendMessageResult.getId());
113+
}
114+
115+
// Generates a singleton connection authentication token to use in this test
116+
private String getConnectionToken() {
117+
if (connectionToken == null || isDisconnected) {
118+
CreateParticipantConnectionRequest createParticipantConnectionRequest = new CreateParticipantConnectionRequest()
119+
.withParticipantToken(participantToken)
120+
.withType("CONNECTION_CREDENTIALS");
121+
connectionToken = chatClient.createParticipantConnection(createParticipantConnectionRequest)
122+
.getConnectionCredentials()
123+
.getConnectionToken();
124+
isDisconnected = false;
125+
}
126+
return connectionToken;
127+
}
128+
129+
// Disconnect and invalidate participant token
130+
private void disconnect() {
131+
if (isDisconnected) {
132+
return;
133+
}
134+
DisconnectParticipantRequest disconnectParticipantRequest = new DisconnectParticipantRequest();
135+
disconnectParticipantRequest.setConnectionToken(participantToken);
136+
chatClient.disconnectParticipant(disconnectParticipantRequest);
137+
isDisconnected = true;
138+
}
139+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2+
package="com.amazonaws.services.connectparticipant" >
3+
<uses-permission android:name="android.permission.INTERNET" />
4+
</manifest>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apply plugin: 'java-library'
2+
3+
dependencies {
4+
implementation fileTree(dir: 'libs', include: ['*.jar'])
5+
6+
api project(":aws-android-sdk-core")
7+
}
8+
9+
sourceCompatibility = "1.6"
10+
targetCompatibility = "1.6"

0 commit comments

Comments
 (0)