├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── CISCO_API_LICENSE.pdf ├── IntegrationTesting.sh ├── LICENSE ├── README.md ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── sdk ├── .gitignore ├── build.gradle ├── libs │ └── utils-1.0.jar ├── proguard-rules.pro └── src │ ├── androidTest │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── ciscospark │ │ └── androidsdk │ │ ├── PhoneImplTest.java │ │ ├── SparkTest.java │ │ ├── SparkTestRunner.java │ │ ├── auth │ │ └── JWTAuthenticatorTest.java │ │ ├── membership │ │ └── MembershipClientTest.java │ │ ├── message │ │ └── MessageClientTest.java │ │ ├── people │ │ └── PeopleClientTest.java │ │ ├── room │ │ └── RoomClientTest.java │ │ ├── team │ │ └── TeamClientTest.java │ │ └── webhook │ │ └── WebhookClientTest.java │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── ciscospark │ │ └── androidsdk │ │ ├── CompletionHandler.java │ │ ├── Result.java │ │ ├── Spark.java │ │ ├── SparkError.java │ │ ├── auth │ │ ├── Authenticator.java │ │ ├── JWTAuthenticator.java │ │ ├── OAuthAuthenticator.java │ │ ├── OAuthTestUserAuthenticator.java │ │ ├── OAuthWebViewAuthenticator.java │ │ ├── SSOAuthenticator.java │ │ └── internal │ │ │ └── OAuthLauncher.java │ │ ├── internal │ │ ├── AcquirePermissionActivity.java │ │ ├── MetricsClient.java │ │ └── ResultImpl.java │ │ ├── membership │ │ ├── Membership.java │ │ ├── MembershipClient.java │ │ └── internal │ │ │ └── MembershipClientImpl.java │ │ ├── message │ │ ├── LocalFile.java │ │ ├── Mention.java │ │ ├── Message.java │ │ ├── MessageClient.java │ │ ├── MessageObserver.java │ │ ├── RemoteFile.java │ │ └── internal │ │ │ └── MessageClientImpl.java │ │ ├── people │ │ ├── Person.java │ │ ├── PersonClient.java │ │ └── internal │ │ │ └── PersonClientImpl.java │ │ ├── phone │ │ ├── Call.java │ │ ├── CallMembership.java │ │ ├── CallObserver.java │ │ ├── MediaOption.java │ │ ├── MediaRenderView.java │ │ ├── Phone.java │ │ └── internal │ │ │ ├── CallImpl.java │ │ │ ├── CallMembershipImpl.java │ │ │ ├── H264LicensePrompter.java │ │ │ ├── PhoneImpl.java │ │ │ └── RotationHandler.java │ │ ├── room │ │ ├── Room.java │ │ ├── RoomClient.java │ │ └── internal │ │ │ └── RoomClientImpl.java │ │ ├── team │ │ ├── Team.java │ │ ├── TeamClient.java │ │ ├── TeamMembership.java │ │ ├── TeamMembershipClient.java │ │ └── internal │ │ │ ├── TeamClientImpl.java │ │ │ └── TeamMembershipClientImpl.java │ │ ├── utils │ │ ├── Utils.java │ │ ├── http │ │ │ ├── DefaultHeadersInterceptor.java │ │ │ ├── ErrorHandlingAdapter.java │ │ │ ├── ListBody.java │ │ │ ├── ListCallback.java │ │ │ ├── ListenerCallback.java │ │ │ ├── ObjectCallback.java │ │ │ ├── RetryCallAdapterFactory.java │ │ │ └── ServiceBuilder.java │ │ └── log │ │ │ ├── DebugLn.java │ │ │ ├── LogCaptureUtil.java │ │ │ ├── MediaLog.java │ │ │ ├── NoLn.java │ │ │ └── WarningLn.java │ │ └── webhook │ │ ├── Webhook.java │ │ ├── WebhookClient.java │ │ └── internal │ │ └── WebhookClientImpl.java │ └── test │ └── java │ └── com │ └── ciscospark │ └── androidsdk │ ├── auth │ └── OAuthAuthenticatorTest.java │ ├── membership │ └── MembershipTest.java │ ├── people │ ├── PersonClientTest.java │ └── PersonTest.java │ └── utils │ └── ErrorHandlingAdapterTest.java └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Built application files 4 | *.apk 5 | *.ap_ 6 | 7 | # Files for the ART/Dalvik VM 8 | *.dex 9 | 10 | # Java class files 11 | *.class 12 | 13 | # Generated files 14 | bin/ 15 | gen/ 16 | out/ 17 | 18 | # Gradle files 19 | .gradle/ 20 | build/ 21 | 22 | # Local configuration file (sdk path, etc) 23 | local.properties 24 | 25 | # Proguard folder generated by Eclipse 26 | proguard/ 27 | 28 | # Log Files 29 | *.log 30 | 31 | # Android Studio Navigation editor temp files 32 | .navigation/ 33 | 34 | # Android Studio captures folder 35 | captures/ 36 | 37 | # Intellij 38 | *.iml 39 | .idea/* 40 | 41 | # Keystore files 42 | *.jks 43 | 44 | # External native build folder generated in Android Studio 2.2 and later 45 | .externalNativeBuild 46 | 47 | # Google Services (e.g. APIs or Firebase) 48 | google-services.json 49 | 50 | # Freeline 51 | freeline.py 52 | freeline/ 53 | freeline_project_description.json 54 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | android: 3 | components: 4 | # Uncomment the lines below if you want to 5 | # use the latest revision of Android SDK Tools 6 | # - tools 7 | # - platform-tools 8 | 9 | # The BuildTools version used by your project 10 | - build-tools-27.0.2 11 | 12 | # The SDK version used to compile your project 13 | - android-27 14 | before_install: 15 | - sudo apt-get -qq update 16 | - sudo apt-get install -y sendemail libnet-ssleay-perl libcrypt-ssleay-perl libnet-https-any-perl libio-socket-ssl-perl 17 | script: 18 | - ./gradlew clean sdk:testDebugUnitTest 19 | - travis_wait 50 bash IntegrationTesting.sh 20 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to this project will be documented in this file. 3 | 4 | #### 1.4.0 Releases 5 | - `1.4.0` Releases - [1.4.0](#140) 6 | 7 | #### 1.3.0 Releases 8 | - `1.3.0` Releases - [1.3.0](#130) 9 | 10 | #### 0.2.0 Releases 11 | 12 | - `0.2.0` Releases - [0.2.0](#020) 13 | 14 | --- 15 | ## [1.4.0](https://github.com/ciscospark/spark-android-sdk/releases/tag/1.4.0) 16 | Released on 2018-08-23. 17 | 18 | #### Added 19 | - Support screen sharing for both sending and receiving. 20 | - A new API to refresh token for authentication. 21 | - Two properties in Membership: personDisplayName, personOrgId. 22 | - Support real time message receiving. 23 | - Support message end to end encription. 24 | - A few new APIs to do message/file end to end encryption, Mention in message, upload and download encrypted files. 25 | - Five properties in Person: nickName, firstName, lastName, orgId, type. 26 | - Three functions to create/update/delete a person for organization's administrator. 27 | - Support room list ordered by either room ID, lastactivity time or creation time. 28 | - A new property in TeamMembership: personOrgId. 29 | - Two new parameters to update webhook : status and secret. 30 | 31 | #### Updated 32 | - Fixed sometimes cannot receive callback when hangup a call. 33 | - Fixed video call has bad video quality with Vuzix M300 smart glasses. 34 | - Fixed the order of redirectUri and scope are reversed in OAuthWebViewAuthenticator. 35 | 36 | ## [1.3.0](https://github.com/ciscospark/spark-android-sdk/releases/tag/1.3.0) 37 | Released on 2018-01-12. 38 | 39 | #### Added 40 | - Receive and display content-sharing stream 41 | - Support room calling/multi-party calling 42 | - Support Single-Sign-On authentication 43 | - Set the maximum bandwidth for Audio/Video/Content Sharing 44 | 45 | #### Updated 46 | - Fixed always receiving incoming room call even if there is nobody in the meeting room 47 | - Fixed unstable call state caused by race condition in call control events 48 | - Fixed random crash when logout 49 | - Updated the license by adding a term for H264 codec, and adding a new license file for "Cisco API" used in the project. 50 | 51 | #### Removed 52 | The following exclude is no longer needed in the packagingOptions (unless RxJava2 or its related library is involved in developers's app): 53 | 54 | packagingOptions { 55 | exclude 'META-INF/rxjava.properties' 56 | } 57 | 58 | ## [0.2.0](https://github.com/ciscospark/spark-android-sdk/releases/tag/0.2.0) 59 | Released on 2017-11-30. 60 | 61 | #### Added 62 | - Initial release of Cisco Spark SDK for Android. 63 | -------------------------------------------------------------------------------- /CISCO_API_LICENSE.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webex/spark-android-sdk/1bf40b272d63a07aa4ee778b4ad7e43e943a59af/CISCO_API_LICENSE.pdf -------------------------------------------------------------------------------- /IntegrationTesting.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ "$Email" == "" ]; then 3 | echo "lost email address!" 4 | exit 0 5 | fi 6 | 7 | if $IsIntegrationTestingTask -eq "true" ; then 8 | echo "start Integration testing..." 9 | sendemail -f "$Email" -t "$Email" -u "Jenkins build by Travis" -m "BranchName=$TRAVIS_BRANCH\nTravisNumber=$TRAVIS_JOB_ID\nPullRequestNumber=$TRAVIS_PULL_REQUEST" -s smtp.gmail.com:587 -o tls=yes -xu "$Email" -xp "$EmailPWD" 10 | else 11 | echo "not the integration test task return normal..." 12 | exit 0 13 | fi 14 | 15 | sleep 60 16 | 17 | for ((i=0; i<=25; i++)); do 18 | buildEmailTitle=`curl -u $Email:$EmailPWD --silent "https://mail.google.com/mail/feed/atom" | awk -F '
38 | * This may not mean the user has a valid access token yet, 39 | * but the authentication strategy should be able to obtain one without further user interaction. 40 | * 41 | * @return True if the user is logically authorized 42 | * @since 0.1 43 | */ 44 | boolean isAuthorized(); 45 | 46 | /** 47 | * Deauthorizes the current user and clears any persistent state with regards to the current user. 48 | * If the {@link com.ciscospark.androidsdk.phone.Phone} is registered, 49 | * it should be deregistered before calling this method. 50 | * 51 | * @since 0.1 52 | */ 53 | void deauthorize(); 54 | 55 | /** 56 | * Returns an access token of this authenticator. 57 | *
58 | * This may involve long-running operations such as service calls, but may also return immediately.
59 | * The application should not make assumptions about how quickly this completes.
60 | *
61 | * @param handler a callback to be executed when completed, with the access token if successfuly retrieved, otherwise nil.
62 | * @since 0.1
63 | */
64 | void getToken(CompletionHandler
69 | * This may involve long-running operations such as service calls, but may also return immediately.
70 | * The application should not make assumptions about how quickly this completes.
71 | *
72 | * @param handler a callback to be executed when completed, with the access token if successfuly retrieved, otherwise nil.
73 | * @since 1.4
74 | */
75 | void refreshToken(CompletionHandler