Skip to content

Commit 5af47a2

Browse files
authored
Merge pull request #35 from webex/sdk-3.2.0-release
Sdk 3.2.0 release
2 parents d21c343 + 3838008 commit 5af47a2

File tree

61 files changed

+2612
-194
lines changed

Some content is hidden

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

61 files changed

+2612
-194
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ This demo support Android device with **Android 7.0** or later
6868
6969
```
7070
dependencies {
71-
implementation 'com.ciscowebex:androidsdk:3.1.0@aar'
71+
implementation 'com.ciscowebex:androidsdk:3.2.0@aar'
7272
}
7373
```
7474

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ android {
1919
applicationId "com.cisco.sdk_android"
2020
minSdkVersion Versions.minSdk
2121
targetSdkVersion Versions.targetSdk
22-
versionCode 30003
23-
versionName "3.1.0"
22+
versionCode 32000
23+
versionName "3.2.0"
2424

2525
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2626
buildConfigField "String", "CLIENT_ID", "${CLIENT_ID}"
@@ -62,7 +62,7 @@ android {
6262
}
6363

6464
dependencies {
65-
implementation 'com.ciscowebex:androidsdk:3.1.0@aar'
65+
implementation 'com.ciscowebex:androidsdk:3.2.0@aar'
6666

6767
implementation fileTree(dir: "libs", include: ["*.jar"])
6868
implementation Dependencies.kotlinStdLib

app/src/main/AndroidManifest.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@
8585
<activity
8686
android:name=".auth.JWTLoginActivity"
8787
android:screenOrientation="portrait" />
88+
<activity
89+
android:name=".auth.AccessTokenLoginActivity"
90+
android:screenOrientation="portrait" />
8891
<activity
8992
android:name=".auth.OAuthWebLoginActivity"
9093
android:screenOrientation="portrait" />
@@ -134,6 +137,9 @@
134137
<activity
135138
android:name=".setup.SetupActivity"
136139
android:screenOrientation="portrait" />
140+
<activity
141+
android:name=".setup.SetupCameraActivity"
142+
android:screenOrientation="portrait" />
137143
<activity
138144
android:name=".calling.DialerActivity"
139145
android:screenOrientation="portrait" />
@@ -156,6 +162,9 @@
156162
android:name=".webhooks.WebhooksActivity"
157163
android:screenOrientation="portrait" />
158164

165+
<activity android:name=".calling.calendarMeeting.details.CalendarMeetingDetailsActivity"
166+
android:screenOrientation="portrait" />
167+
159168
<service
160169
android:name=".firebase.KitchenSinkFCMService"
161170
android:exported="false">
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.ciscowebex.androidsdk.kitchensink
2+
3+
import com.ciscowebex.androidsdk.Webex
4+
import com.ciscowebex.androidsdk.auth.JWTAuthenticator
5+
import com.ciscowebex.androidsdk.auth.TokenAuthenticator
6+
import org.koin.android.ext.koin.androidApplication
7+
import org.koin.dsl.module
8+
9+
val AccessTokenWebexModule = module {
10+
11+
factory {
12+
Webex(androidApplication(), TokenAuthenticator())
13+
}
14+
}

app/src/main/java/com/ciscowebex/androidsdk/kitchensink/HomeActivity.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import android.util.Log
77
import android.view.View
88
import androidx.databinding.DataBindingUtil
99
import androidx.lifecycle.Observer
10+
import com.ciscowebex.androidsdk.CompletionHandler
1011
import com.ciscowebex.androidsdk.auth.OAuthWebViewAuthenticator
12+
import com.ciscowebex.androidsdk.auth.TokenAuthenticator
1113
import com.ciscowebex.androidsdk.kitchensink.auth.LoginActivity
1214
import com.ciscowebex.androidsdk.kitchensink.databinding.ActivityHomeBinding
1315
import com.ciscowebex.androidsdk.kitchensink.messaging.MessagingActivity
@@ -24,6 +26,9 @@ import com.ciscowebex.androidsdk.kitchensink.calling.CallActivity
2426
import com.ciscowebex.androidsdk.kitchensink.extras.ExtrasActivity
2527
import com.ciscowebex.androidsdk.kitchensink.search.SearchActivity
2628
import com.ciscowebex.androidsdk.kitchensink.setup.SetupActivity
29+
import com.ciscowebex.androidsdk.kitchensink.utils.FileUtils
30+
import com.ciscowebex.androidsdk.kitchensink.utils.SharedPrefUtils
31+
import com.ciscowebex.androidsdk.message.LocalFile
2732
import com.ciscowebex.androidsdk.phone.Phone
2833
import org.koin.android.ext.android.inject
2934

@@ -51,6 +56,10 @@ class HomeActivity : BaseActivity() {
5156
is OAuthWebViewAuthenticator -> {
5257
saveLoginTypePref(this, LoginActivity.LoginType.OAuth)
5358
}
59+
is TokenAuthenticator -> {
60+
saveLoginTypePref(this, LoginActivity.LoginType.AccessToken)
61+
webexViewModel.setOnTokenExpiredListener()
62+
}
5463
else -> {
5564
saveLoginTypePref(this, LoginActivity.LoginType.JWT)
5665
}
@@ -156,6 +165,7 @@ class HomeActivity : BaseActivity() {
156165
webexViewModel.setSpaceObserver()
157166
webexViewModel.setMembershipObserver()
158167
webexViewModel.setMessageObserver()
168+
webexViewModel.setCalendarMeetingObserver()
159169
}
160170

161171
override fun onBackPressed() {
@@ -188,6 +198,7 @@ class HomeActivity : BaseActivity() {
188198
super.onResume()
189199
updateUCData()
190200
webexViewModel.setGlobalIncomingListener()
201+
addVirtualBackground()
191202
}
192203

193204
private fun updateUCData() {
@@ -213,4 +224,24 @@ class HomeActivity : BaseActivity() {
213224
}
214225
}
215226
}
227+
228+
private fun addVirtualBackground() {
229+
if (SharedPrefUtils.isVirtualBgAdded(this)) {
230+
Log.d(tag, "Virtual Bg is already added")
231+
} else {
232+
233+
val thumbnailFile = FileUtils.getFileFromResource(this, "nature-thumb")
234+
val file = FileUtils.getFileFromResource(this, "nature")
235+
val thumbnail = LocalFile.Thumbnail(thumbnailFile, null,
236+
resources.getInteger(R.integer.virtual_bg_thumbnail_width),
237+
resources.getInteger(R.integer.virtual_bg_thumbnail_height))
238+
239+
val localFile = LocalFile(file, null, thumbnail, null)
240+
webexViewModel.addVirtualBackground(localFile, CompletionHandler {
241+
if (it.isSuccessful && it.data != null) {
242+
SharedPrefUtils.setVirtualBgAdded(this, true)
243+
}
244+
})
245+
}
246+
}
216247
}

app/src/main/java/com/ciscowebex/androidsdk/kitchensink/KitchenSinkApp.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.lifecycle.ProcessLifecycleOwner
99
import com.ciscowebex.androidsdk.kitchensink.auth.LoginActivity
1010
import com.ciscowebex.androidsdk.kitchensink.auth.loginModule
1111
import com.ciscowebex.androidsdk.kitchensink.calling.callModule
12+
import com.ciscowebex.androidsdk.kitchensink.calling.calendarMeeting.calendarMeetingsModule
1213
import com.ciscowebex.androidsdk.kitchensink.extras.extrasModule
1314
import com.ciscowebex.androidsdk.kitchensink.messaging.messagingModule
1415
import com.ciscowebex.androidsdk.kitchensink.messaging.search.searchPeopleModule
@@ -72,15 +73,18 @@ class KitchenSinkApp : Application(), LifecycleObserver {
7273
fun loadKoinModules(type: LoginActivity.LoginType) {
7374
when (type) {
7475
LoginActivity.LoginType.JWT -> {
75-
loadKoinModules(listOf(mainAppModule, webexModule, loginModule, JWTWebexModule, searchModule, callModule, messagingModule, personModule, searchPeopleModule, webhooksModule, extrasModule))
76+
loadKoinModules(listOf(mainAppModule, webexModule, loginModule, JWTWebexModule, searchModule, callModule, messagingModule, personModule, searchPeopleModule, webhooksModule, extrasModule, calendarMeetingsModule))
77+
}
78+
LoginActivity.LoginType.AccessToken -> {
79+
loadKoinModules(listOf(mainAppModule, webexModule, loginModule, AccessTokenWebexModule, searchModule, callModule, messagingModule, personModule, searchPeopleModule, webhooksModule, extrasModule, calendarMeetingsModule))
7680
}
7781
else -> {
78-
loadKoinModules(listOf(mainAppModule, webexModule, loginModule, OAuthWebexModule, searchModule, callModule, messagingModule, personModule, searchPeopleModule, webhooksModule, extrasModule))
82+
loadKoinModules(listOf(mainAppModule, webexModule, loginModule, OAuthWebexModule, searchModule, callModule, messagingModule, personModule, searchPeopleModule, webhooksModule, extrasModule, calendarMeetingsModule))
7983
}
8084
}
8185
}
8286

8387
fun unloadKoinModules() {
84-
unloadKoinModules(listOf(mainAppModule, webexModule, loginModule, JWTWebexModule, OAuthWebexModule, searchModule, callModule, messagingModule, personModule, searchPeopleModule, webhooksModule, extrasModule))
88+
unloadKoinModules(listOf(mainAppModule, webexModule, loginModule, JWTWebexModule, AccessTokenWebexModule, OAuthWebexModule, searchModule, callModule, messagingModule, personModule, searchPeopleModule, webhooksModule, extrasModule, calendarMeetingsModule))
8589
}
8690
}

app/src/main/java/com/ciscowebex/androidsdk/kitchensink/WebexRepository.kt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,18 @@ import com.ciscowebex.androidsdk.CompletionHandler
1111
import com.ciscowebex.androidsdk.auth.PhoneServiceRegistrationFailureReason
1212
import com.ciscowebex.androidsdk.auth.UCLoginServerConnectionStatus
1313
import com.ciscowebex.androidsdk.kitchensink.utils.CallObjectStorage
14+
import com.ciscowebex.androidsdk.calendarMeeting.CalendarMeetingObserver
1415
import com.ciscowebex.androidsdk.membership.Membership
1516
import com.ciscowebex.androidsdk.membership.MembershipObserver
17+
import com.ciscowebex.androidsdk.message.LocalFile
1618
import com.ciscowebex.androidsdk.message.MessageObserver
1719
import com.ciscowebex.androidsdk.phone.CallMembership
1820
import com.ciscowebex.androidsdk.phone.CallObserver
1921
import com.ciscowebex.androidsdk.phone.NotificationCallType
2022
import com.ciscowebex.androidsdk.phone.Call
2123
import com.ciscowebex.androidsdk.phone.MediaOption
2224
import com.ciscowebex.androidsdk.phone.Phone
25+
import com.ciscowebex.androidsdk.phone.VirtualBackground
2326
import com.ciscowebex.androidsdk.space.SpaceObserver
2427

2528
class WebexRepository(val webex: Webex) : WebexUCLoginDelegate {
@@ -79,6 +82,12 @@ class WebexRepository(val webex: Webex) : WebexUCLoginDelegate {
7982
MeetingPinOrPasswordRequired
8083
}
8184

85+
enum class CalendarMeetingEvent {
86+
Created,
87+
Updated,
88+
Deleted
89+
}
90+
8291
data class CallLiveData(val event: CallEvent,
8392
val call: Call? = null,
8493
val sharingLabel: String? = null,
@@ -99,6 +108,7 @@ class WebexRepository(val webex: Webex) : WebexUCLoginDelegate {
99108
var enableBgStreamtoggle = true
100109
var enableBgConnectiontoggle = true
101110
var enablePhoneStatePermission = true
111+
var enableHWAcceltoggle = true
102112
var logFilter = LogLevel.ALL.name
103113
var isConsoleLoggerEnabled = true
104114
var callCapability: CallCap = CallCap.Audio_Video
@@ -124,6 +134,7 @@ class WebexRepository(val webex: Webex) : WebexUCLoginDelegate {
124134
var _spaceEventLiveData: MutableLiveData<Pair<SpaceEvent, Any?>>? = null
125135
var _membershipEventLiveData: MutableLiveData<Pair<MembershipEvent, Membership?>>? = null
126136
var _messageEventLiveData: MutableLiveData<Pair<MessageEvent, Any?>>? = null
137+
var _calendarMeetingEventLiveData: MutableLiveData<Pair<CalendarMeetingEvent, Any>>? = null
127138

128139
init {
129140
webex.delegate = this
@@ -223,6 +234,31 @@ class WebexRepository(val webex: Webex) : WebexUCLoginDelegate {
223234
})
224235
}
225236

237+
fun setCalendarMeetingObserver() {
238+
webex.calendarMeetings.setObserver(object : CalendarMeetingObserver
239+
{
240+
override fun onEvent(event: CalendarMeetingObserver.CalendarMeetingEvent) {
241+
Log.d(tag, "onCalendarMeetingEvent: $event")
242+
when (event) {
243+
is CalendarMeetingObserver.CalendarMeetingAdded -> {
244+
_calendarMeetingEventLiveData?.postValue(Pair(CalendarMeetingEvent.Created, event.getCalendarMeeting()))
245+
}
246+
is CalendarMeetingObserver.CalendarMeetingUpdated -> {
247+
_calendarMeetingEventLiveData?.postValue(Pair(CalendarMeetingEvent.Updated, event.getCalendarMeeting()))
248+
}
249+
is CalendarMeetingObserver.CalendarMeetingRemoved -> {
250+
_calendarMeetingEventLiveData?.postValue(Pair(CalendarMeetingEvent.Deleted, event.getCalendarMeetingId()))
251+
}
252+
}
253+
}
254+
})
255+
}
256+
257+
fun removeCalendarMeetingObserver() {
258+
_calendarMeetingEventLiveData = null
259+
webex.calendarMeetings.setObserver(null)
260+
}
261+
226262
fun setIncomingListener() {
227263
Log.d(tag, "setIncomingListener")
228264
if (webex.phone.getIncomingCallListener() != null) {
@@ -264,6 +300,30 @@ class WebexRepository(val webex: Webex) : WebexUCLoginDelegate {
264300
webex.messages.list(spaceId, null, 10000, null, handler)
265301
}
266302

303+
fun getVirtualBackgrounds(handler: CompletionHandler<List<VirtualBackground>> ) {
304+
webex.phone.fetchVirtualBackgrounds(handler)
305+
}
306+
307+
fun addVirtualBackground(imgFile: LocalFile, handler: CompletionHandler<VirtualBackground>) {
308+
webex.phone.addVirtualBackground(imgFile, handler)
309+
}
310+
311+
fun applyVirtualBackground(background: VirtualBackground, mode: Phone.VirtualBackgroundMode, handler: CompletionHandler<Boolean>) {
312+
webex.phone.applyVirtualBackground(background, mode, handler)
313+
}
314+
315+
fun removeVirtualBackground(background: VirtualBackground, handler: CompletionHandler<Boolean>) {
316+
webex.phone.removeVirtualBackground(background, handler)
317+
}
318+
319+
fun setMaxVirtualBackgrounds(limit: Int) {
320+
webex.phone.setMaxVirtualBackgroundItems(limit)
321+
}
322+
323+
fun getMaxVirtualBackgrounds(): Int {
324+
return webex.phone.getMaxVirtualBackgroundItems()
325+
}
326+
267327
// Callbacks
268328
override fun showUCSSOLoginView(ssoUrl: String) {
269329
_cucmLiveData?.postValue(Pair(CucmEvent.ShowSSOLogin, ssoUrl))

0 commit comments

Comments
 (0)