diff --git a/app-to-app-kotlin/app-to-app/app/build.gradle b/app-to-app-kotlin/app-to-app/app/build.gradle index 4712b17..2d1a500 100644 --- a/app-to-app-kotlin/app-to-app/app/build.gradle +++ b/app-to-app-kotlin/app-to-app/app/build.gradle @@ -4,13 +4,13 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 33 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.vonage.tutorial.apptoapp" minSdkVersion 23 - targetSdkVersion 30 + targetSdkVersion 33 versionCode 1 versionName "1.0" @@ -35,12 +35,13 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.5.0' - implementation 'androidx.appcompat:appcompat:1.3.0' - implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'com.google.android.material:material:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - implementation 'com.nexmo.android:client-sdk:4.0.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.4' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' + + implementation 'com.vonage:client-sdk-voice:0.1.3' } \ No newline at end of file diff --git a/app-to-app-kotlin/app-to-app/app/src/main/AndroidManifest.xml b/app-to-app-kotlin/app-to-app/app/src/main/AndroidManifest.xml index 4e77865..453615b 100644 --- a/app-to-app-kotlin/app-to-app/app/src/main/AndroidManifest.xml +++ b/app-to-app-kotlin/app-to-app/app/src/main/AndroidManifest.xml @@ -16,7 +16,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Apptoapp"> - + diff --git a/app-to-app-kotlin/app-to-app/app/src/main/java/com/vonage/tutorial/apptoapp/MainActivity.kt b/app-to-app-kotlin/app-to-app/app/src/main/java/com/vonage/tutorial/apptoapp/MainActivity.kt index adb3b99..ae36b4d 100644 --- a/app-to-app-kotlin/app-to-app/app/src/main/java/com/vonage/tutorial/apptoapp/MainActivity.kt +++ b/app-to-app-kotlin/app-to-app/app/src/main/java/com/vonage/tutorial/apptoapp/MainActivity.kt @@ -10,22 +10,16 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.view.forEach -import com.nexmo.client.NexmoCall -import com.nexmo.client.NexmoCallEventListener -import com.nexmo.client.NexmoCallHandler -import com.nexmo.client.NexmoMember -import com.nexmo.client.NexmoCallMemberStatus -import com.nexmo.client.NexmoClient -import com.nexmo.client.NexmoMediaActionState -import com.nexmo.client.request_listener.NexmoApiError -import com.nexmo.client.request_listener.NexmoConnectionListener -import com.nexmo.client.request_listener.NexmoRequestListener +import com.vonage.voice.api.* class MainActivity : AppCompatActivity() { - private lateinit var client: NexmoClient + private val aliceJWT = "" + private val bobJWT = "" + private lateinit var client: VoiceClient private var otherUser: String = "" - private var onGoingCall: NexmoCall? = null + private var onGoingCall: VoiceCall? = null + private var callInvite: VoiceInvite? = null private lateinit var connectionStatusTextView: TextView private lateinit var waitingForIncomingCallTextView: TextView @@ -35,7 +29,6 @@ class MainActivity : AppCompatActivity() { private lateinit var answerCallButton: Button private lateinit var rejectCallButton: Button private lateinit var endCallButton: Button - private lateinit var callListener: NexmoCallEventListener override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -62,49 +55,17 @@ class MainActivity : AppCompatActivity() { endCallButton.setOnClickListener { endCall() } startCallButton.setOnClickListener { startCall() } - client = NexmoClient.Builder().build(this) + client = VoiceClient(this.application.applicationContext) + client.setConfig(ClientConfig(ConfigRegion.US)) - client.setConnectionListener { connectionStatus, _ -> - runOnUiThread { connectionStatusTextView.text = connectionStatus.toString() } - - if (connectionStatus == NexmoConnectionListener.ConnectionStatus.CONNECTED) { - runOnUiThread { - hideUI() - connectionStatusTextView.visibility = View.VISIBLE - startCallButton.visibility = View.VISIBLE - waitingForIncomingCallTextView.visibility = View.VISIBLE - } - - return@setConnectionListener - } - } - - client.addIncomingCallListener { it -> - onGoingCall = it + client.setCallInviteListener { invite -> + callInvite = invite runOnUiThread { hideUI() answerCallButton.visibility = View.VISIBLE rejectCallButton.visibility = View.VISIBLE } } - - callListener = object: NexmoCallEventListener { - override fun onMemberStatusUpdated(callStatus: NexmoCallMemberStatus, callMember: NexmoMember) { - if (callStatus == NexmoCallMemberStatus.COMPLETED || callStatus == NexmoCallMemberStatus.CANCELLED) { - onGoingCall = null - - runOnUiThread { - hideUI() - startCallButton.visibility = View.VISIBLE - waitingForIncomingCallTextView.visibility = View.VISIBLE - } - } - } - - override fun onMuteChanged(nexmoMediaActionState: NexmoMediaActionState, callMember: NexmoMember) {} - override fun onEarmuffChanged(nexmoMediaActionState: NexmoMediaActionState, callMember: NexmoMember) {} - override fun onDTMF(dtmf: String, callMember: NexmoMember) {} - } } private fun hideUI() { @@ -114,81 +75,112 @@ class MainActivity : AppCompatActivity() { private fun loginAsAlice() { otherUser = "Bob" - client.login("ALICE_JWT") + client.createSession(aliceJWT, null) { + err, sessionId -> + when { + err != null -> { + hideUI() + connectionStatusTextView.visibility = View.VISIBLE + connectionStatusTextView.text = err.localizedMessage + } + else -> { + hideUI() + connectionStatusTextView.visibility = View.VISIBLE + connectionStatusTextView.text = "Connected" + startCallButton.visibility = View.VISIBLE + waitingForIncomingCallTextView.visibility = View.VISIBLE + } + } + } } private fun loginAsBob() { otherUser = "Alice" - client.login("BOB_JWT") + client.createSession(bobJWT, null) { + err, sessionId -> + when { + err != null -> { + hideUI() + connectionStatusTextView.visibility = View.VISIBLE + connectionStatusTextView.text = err.localizedMessage + } + else -> { + hideUI() + connectionStatusTextView.visibility = View.VISIBLE + connectionStatusTextView.text = "Connected" + startCallButton.visibility = View.VISIBLE + waitingForIncomingCallTextView.visibility = View.VISIBLE + } + } + } } @SuppressLint("MissingPermission") fun startCall() { - client.serverCall(otherUser, null, object : NexmoRequestListener { - override fun onSuccess(call: NexmoCall?) { - runOnUiThread { + client.serverCall(mapOf("callee" to otherUser)) { + err, outboundCall -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + onGoingCall = outboundCall hideUI() endCallButton.visibility = View.VISIBLE } - - onGoingCall = call - - onGoingCall?.addCallEventListener(callListener) } - - override fun onError(apiError: NexmoApiError) { - } - }) + } } @SuppressLint("MissingPermission") private fun answerCall() { - onGoingCall?.answer(object : NexmoRequestListener { - override fun onError(p0: NexmoApiError) { - } - - override fun onSuccess(p0: NexmoCall?) { - onGoingCall?.addCallEventListener(callListener) - runOnUiThread { + callInvite?.answer { + err, incomingCall -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + onGoingCall = incomingCall hideUI() endCallButton.visibility = View.VISIBLE } } - }) + } } private fun rejectCall() { - onGoingCall?.hangup(object : NexmoRequestListener { - override fun onError(p0: NexmoApiError) { - } - - override fun onSuccess(p0: NexmoCall?) { - runOnUiThread { + callInvite?.reject { + err -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { hideUI() startCallButton.visibility = View.VISIBLE waitingForIncomingCallTextView.visibility = View.VISIBLE } } - }) - + } onGoingCall = null } private fun endCall() { - onGoingCall?.hangup(object : NexmoRequestListener { - override fun onError(p0: NexmoApiError) { - } - - override fun onSuccess(p0: NexmoCall?) { - runOnUiThread { + onGoingCall?.hangup { + err -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { hideUI() startCallButton.visibility = View.VISIBLE waitingForIncomingCallTextView.visibility = View.VISIBLE } } - }) - + } onGoingCall = null } } diff --git a/app-to-app-kotlin/app-to-app/build.gradle b/app-to-app-kotlin/app-to-app/build.gradle index d3d097f..052adf0 100644 --- a/app-to-app-kotlin/app-to-app/build.gradle +++ b/app-to-app-kotlin/app-to-app/build.gradle @@ -1,12 +1,12 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = "1.5.0" + ext.kotlin_version = "1.7.20" repositories { google() mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:4.2.1" + classpath "com.android.tools.build:gradle:7.3.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/app-to-app-kotlin/app-to-app/gradle/wrapper/gradle-wrapper.properties b/app-to-app-kotlin/app-to-app/gradle/wrapper/gradle-wrapper.properties index fd8adc6..97ea8a3 100644 --- a/app-to-app-kotlin/app-to-app/gradle/wrapper/gradle-wrapper.properties +++ b/app-to-app-kotlin/app-to-app/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Mar 26 10:20:49 CET 2021 +#Mon Dec 12 11:50:57 GMT 2022 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/app-to-phone-kotlin/app-to-phone/app/build.gradle b/app-to-phone-kotlin/app-to-phone/app/build.gradle index 33876f4..b0ce57d 100644 --- a/app-to-phone-kotlin/app-to-phone/app/build.gradle +++ b/app-to-phone-kotlin/app-to-phone/app/build.gradle @@ -4,13 +4,13 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 33 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.vonage.tutorial.voice.apptophone" minSdkVersion 23 - targetSdkVersion 30 + targetSdkVersion 33 versionCode 1 versionName "1.0" @@ -30,17 +30,19 @@ android { kotlinOptions { jvmTarget = '1.8' } + namespace 'com.vonage.tutorial.voice.apptophone' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.5.0' - implementation 'androidx.appcompat:appcompat:1.3.0' - implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'com.google.android.material:material:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - implementation 'com.nexmo.android:client-sdk:4.0.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.4' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' + + implementation 'com.vonage:client-sdk-voice:0.1.3' } \ No newline at end of file diff --git a/app-to-phone-kotlin/app-to-phone/app/src/main/AndroidManifest.xml b/app-to-phone-kotlin/app-to-phone/app/src/main/AndroidManifest.xml index 8fce72d..857211b 100644 --- a/app-to-phone-kotlin/app-to-phone/app/src/main/AndroidManifest.xml +++ b/app-to-phone-kotlin/app-to-phone/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + @@ -16,7 +15,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.apptophone"> - + diff --git a/app-to-phone-kotlin/app-to-phone/app/src/main/java/com/vonage/tutorial/voice/apptophone/MainActivity.kt b/app-to-phone-kotlin/app-to-phone/app/src/main/java/com/vonage/tutorial/voice/apptophone/MainActivity.kt index c784a27..096d400 100644 --- a/app-to-phone-kotlin/app-to-phone/app/src/main/java/com/vonage/tutorial/voice/apptophone/MainActivity.kt +++ b/app-to-phone-kotlin/app-to-phone/app/src/main/java/com/vonage/tutorial/voice/apptophone/MainActivity.kt @@ -8,22 +8,17 @@ import android.widget.Button import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat -import com.nexmo.client.NexmoCall -import com.nexmo.client.NexmoCallEventListener -import com.nexmo.client.NexmoCallHandler -import com.nexmo.client.NexmoMember -import com.nexmo.client.NexmoCallMemberStatus -import com.nexmo.client.NexmoClient -import com.nexmo.client.NexmoMediaActionState -import com.nexmo.client.request_listener.NexmoApiError -import com.nexmo.client.request_listener.NexmoConnectionListener.ConnectionStatus -import com.nexmo.client.request_listener.NexmoRequestListener -import com.vonage.tutorial.voice.apptophone.R +import com.vonage.voice.api.ClientConfig +import com.vonage.voice.api.ConfigRegion +import com.vonage.voice.api.VoiceCall +import com.vonage.voice.api.VoiceClient class MainActivity : AppCompatActivity() { - private lateinit var client: NexmoClient - var onGoingCall: NexmoCall? = null + //Replace this with your generated JWT + private val aliceJWT = "" + private lateinit var client: VoiceClient + var onGoingCall: VoiceCall? = null private lateinit var startCallButton: Button private lateinit var endCallButton: Button @@ -50,65 +45,55 @@ class MainActivity : AppCompatActivity() { hangup() } - // init client - client = NexmoClient.Builder().build(this) + client = VoiceClient(this.application.applicationContext) + client.setConfig(ClientConfig(ConfigRegion.US)) - client.setConnectionListener { connectionStatus, _ -> - runOnUiThread { connectionStatusTextView.text = connectionStatus.toString() } - - if (connectionStatus == ConnectionStatus.CONNECTED) { - runOnUiThread { startCallButton.visibility = View.VISIBLE } - - return@setConnectionListener + client.createSession(aliceJWT, null) { + err, sessionId -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + startCallButton.visibility = View.INVISIBLE + endCallButton.visibility = View.INVISIBLE + } + else -> { + connectionStatusTextView.text = "Connected" + startCallButton.visibility = View.VISIBLE + endCallButton.visibility = View.INVISIBLE + } } } - - client.login("ALICE_JWT") } @SuppressLint("MissingPermission") fun startCall() { - client.serverCall("PHONE_NUMBER", null, object : NexmoRequestListener { - override fun onSuccess(call: NexmoCall?) { - runOnUiThread { - endCallButton.visibility = View.VISIBLE + client.serverCall(mapOf("to" to "+447528640068")) { + err, outboundCall -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + onGoingCall = outboundCall startCallButton.visibility = View.INVISIBLE + endCallButton.visibility = View.VISIBLE } - - onGoingCall = call - onGoingCall?.addCallEventListener(object : NexmoCallEventListener { - override fun onMemberStatusUpdated(callStatus: NexmoCallMemberStatus, callMember: NexmoMember) { - if (callStatus == NexmoCallMemberStatus.COMPLETED || callStatus == NexmoCallMemberStatus.CANCELLED) { - onGoingCall = null - - runOnUiThread { - endCallButton.visibility = View.INVISIBLE - startCallButton.visibility = View.VISIBLE - } - } - } - - override fun onMuteChanged(nexmoMediaActionState: NexmoMediaActionState, callMember: NexmoMember) {} - - override fun onEarmuffChanged(nexmoMediaActionState: NexmoMediaActionState, callMember: NexmoMember) {} - - override fun onDTMF(dtmf: String, callMember: NexmoMember) {} - }) } + } - override fun onError(apiError: NexmoApiError) { - } - }) } private fun hangup() { - onGoingCall?.hangup(object : NexmoRequestListener { - override fun onSuccess(call: NexmoCall?) { - onGoingCall = null - } - - override fun onError(apiError: NexmoApiError) { + onGoingCall?.hangup() { + err -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + onGoingCall = null + } } - }) + } } } \ No newline at end of file diff --git a/app-to-phone-kotlin/app-to-phone/build.gradle b/app-to-phone-kotlin/app-to-phone/build.gradle index 49247a6..e3583dd 100644 --- a/app-to-phone-kotlin/app-to-phone/build.gradle +++ b/app-to-phone-kotlin/app-to-phone/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = "1.5.0" + ext.kotlin_version = "1.7.20" repositories { google() mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:4.2.1" + classpath 'com.android.tools.build:gradle:7.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/app-to-phone-kotlin/app-to-phone/gradle/wrapper/gradle-wrapper.properties b/app-to-phone-kotlin/app-to-phone/gradle/wrapper/gradle-wrapper.properties index e70ecdb..e4e5daa 100644 --- a/app-to-phone-kotlin/app-to-phone/gradle/wrapper/gradle-wrapper.properties +++ b/app-to-phone-kotlin/app-to-phone/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip diff --git a/phone-to-app-kotlin/phone-to-app/app/build.gradle b/phone-to-app-kotlin/phone-to-app/app/build.gradle index d6afd65..b041a0d 100644 --- a/phone-to-app-kotlin/phone-to-app/app/build.gradle +++ b/phone-to-app-kotlin/phone-to-app/app/build.gradle @@ -4,13 +4,13 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 33 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.vonage.tutorial.phonetoapp" minSdkVersion 23 - targetSdkVersion 30 + targetSdkVersion 33 versionCode 1 versionName "1.0" @@ -35,12 +35,13 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.5.0' - implementation 'androidx.appcompat:appcompat:1.3.0' - implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'com.google.android.material:material:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - implementation 'com.nexmo.android:client-sdk:4.0.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.4' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' + + implementation 'com.vonage:client-sdk-voice:0.1.3' } \ No newline at end of file diff --git a/phone-to-app-kotlin/phone-to-app/app/src/main/AndroidManifest.xml b/phone-to-app-kotlin/phone-to-app/app/src/main/AndroidManifest.xml index 1a91741..6b3f335 100644 --- a/phone-to-app-kotlin/phone-to-app/app/src/main/AndroidManifest.xml +++ b/phone-to-app-kotlin/phone-to-app/app/src/main/AndroidManifest.xml @@ -16,7 +16,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Phonetoapp"> - + diff --git a/phone-to-app-kotlin/phone-to-app/app/src/main/java/com/vonage/tutorial/phonetoapp/MainActivity.kt b/phone-to-app-kotlin/phone-to-app/app/src/main/java/com/vonage/tutorial/phonetoapp/MainActivity.kt index f7ec18c..473f578 100644 --- a/phone-to-app-kotlin/phone-to-app/app/src/main/java/com/vonage/tutorial/phonetoapp/MainActivity.kt +++ b/phone-to-app-kotlin/phone-to-app/app/src/main/java/com/vonage/tutorial/phonetoapp/MainActivity.kt @@ -10,14 +10,14 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat -import com.nexmo.client.NexmoCall -import com.nexmo.client.NexmoClient -import com.nexmo.client.request_listener.NexmoApiError -import com.nexmo.client.request_listener.NexmoRequestListener +import com.vonage.voice.api.* class MainActivity : AppCompatActivity() { - private var call: NexmoCall? = null + private val aliceJWT = "" + private var onGoingCall: VoiceCall? = null + private var callInvite: VoiceInvite? = null + private lateinit var client: VoiceClient private lateinit var connectionStatusTextView: TextView private lateinit var answerCallButton: Button @@ -43,67 +43,80 @@ class MainActivity : AppCompatActivity() { rejectCallButton.setOnClickListener { rejectCall() } endCallButton.setOnClickListener { endCall() } - // init client - val client: NexmoClient = NexmoClient.Builder().build(this) + client = VoiceClient(this.application.applicationContext) + client.setConfig(ClientConfig(ConfigRegion.US)) - client.setConnectionListener { connectionStatus, _ -> + + client.setCallInviteListener { invite -> + callInvite = invite runOnUiThread { - connectionStatusTextView.text = connectionStatus.toString() + answerCallButton.visibility = View.VISIBLE + rejectCallButton.visibility = View.VISIBLE + endCallButton.visibility = View.GONE } } - client.addIncomingCallListener { it -> - call = it - - answerCallButton.visibility = View.VISIBLE - rejectCallButton.visibility = View.VISIBLE - endCallButton.visibility = View.GONE + client.createSession(aliceJWT, null) { + err, sessionId -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + connectionStatusTextView.text = "Connected" + } + } } - - client.login("ALICE_JWT") } @SuppressLint("MissingPermission") private fun answerCall() { - call?.answer(object : NexmoRequestListener { - override fun onError(p0: NexmoApiError) { + callInvite?.answer { + err, incomingCall -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + answerCallButton.visibility = View.GONE + rejectCallButton.visibility = View.GONE + endCallButton.visibility = View.VISIBLE + } } - - override fun onSuccess(p0: NexmoCall?) { - answerCallButton.visibility = View.GONE - rejectCallButton.visibility = View.GONE - endCallButton.visibility = View.VISIBLE - } - }) + } } private fun rejectCall() { - call?.hangup(object : NexmoRequestListener { - override fun onError(p0: NexmoApiError) { - } - - override fun onSuccess(p0: NexmoCall?) { - answerCallButton.visibility = View.GONE - rejectCallButton.visibility = View.GONE - endCallButton.visibility = View.GONE + callInvite?.reject { + err -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + answerCallButton.visibility = View.GONE + rejectCallButton.visibility = View.GONE + endCallButton.visibility = View.GONE + } } - }) - - call = null + } + onGoingCall = null } private fun endCall() { - call?.hangup(object : NexmoRequestListener { - override fun onError(p0: NexmoApiError) { + onGoingCall?.hangup { + err -> + when { + err != null -> { + connectionStatusTextView.text = err.localizedMessage + } + else -> { + answerCallButton.visibility = View.GONE + rejectCallButton.visibility = View.GONE + endCallButton.visibility = View.GONE + } } - - override fun onSuccess(p0: NexmoCall?) { - answerCallButton.visibility = View.GONE - rejectCallButton.visibility = View.GONE - endCallButton.visibility = View.GONE - } - }) - - call = null + } + onGoingCall = null } } \ No newline at end of file diff --git a/phone-to-app-kotlin/phone-to-app/build.gradle b/phone-to-app-kotlin/phone-to-app/build.gradle index d3d097f..052adf0 100644 --- a/phone-to-app-kotlin/phone-to-app/build.gradle +++ b/phone-to-app-kotlin/phone-to-app/build.gradle @@ -1,12 +1,12 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = "1.5.0" + ext.kotlin_version = "1.7.20" repositories { google() mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:4.2.1" + classpath "com.android.tools.build:gradle:7.3.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/phone-to-app-kotlin/phone-to-app/gradle/wrapper/gradle-wrapper.properties b/phone-to-app-kotlin/phone-to-app/gradle/wrapper/gradle-wrapper.properties index 000e067..6b259c9 100644 --- a/phone-to-app-kotlin/phone-to-app/gradle/wrapper/gradle-wrapper.properties +++ b/phone-to-app-kotlin/phone-to-app/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Mar 25 13:15:42 CET 2021 +#Mon Dec 12 13:58:53 GMT 2022 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip +zipStoreBase=GRADLE_USER_HOME