diff --git a/app/build.gradle b/app/build.gradle index d9638340..d54446df 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,11 +2,11 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { - compileSdkVersion = 30 + compileSdkVersion = 31 defaultConfig { applicationId = 'com.tutpro.baresip' minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 versionCode = 182 versionName = '35.2.0' externalNativeBuild { @@ -54,7 +54,7 @@ dependencies { implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.preference:preference-ktx:1.1.1" implementation "androidx.exifinterface:exifinterface:1.3.3" - implementation "androidx.core:core-ktx:1.6.0" + implementation "androidx.core:core-ktx:1.7.0" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1' implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9886f1ed..dfb7aa91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,12 +3,14 @@ xmlns:tools="http://schemas.android.com/tools" package="com.tutpro.baresip"> + + diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 32c31191..f448c815 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -5,6 +5,7 @@ import android.annotation.SuppressLint import android.annotation.TargetApi import android.app.* import android.bluetooth.BluetoothAdapter +import android.bluetooth.BluetoothManager import android.bluetooth.BluetoothHeadset import android.content.* import android.media.* @@ -13,7 +14,6 @@ import android.net.wifi.WifiManager import android.os.* import android.os.Build.VERSION import android.provider.Settings -import android.telephony.TelephonyManager import android.text.Spannable import android.text.SpannableString import android.text.style.ForegroundColorSpan @@ -35,6 +35,7 @@ import kotlin.collections.ArrayList import kotlin.concurrent.schedule import kotlin.math.roundToInt import android.media.MediaPlayer +import android.telecom.TelecomManager class BaresipService: Service() { @@ -47,7 +48,8 @@ class BaresipService: Service() { private lateinit var cm: ConnectivityManager private lateinit var pm: PowerManager private lateinit var wm: WifiManager - private lateinit var tm: TelephonyManager + private lateinit var tm: TelecomManager + private lateinit var btm: BluetoothManager private lateinit var partialWakeLock: PowerManager.WakeLock private lateinit var proximityWakeLock: PowerManager.WakeLock private lateinit var wifiLock: WifiManager.WifiLock @@ -58,7 +60,7 @@ class BaresipService: Service() { private var audioFocusRequest: AudioFocusRequest? = null private var audioFocusUsage = -1 private var origVolume = mutableMapOf() - private val btAdapter = BluetoothAdapter.getDefaultAdapter() + private var btAdapter: BluetoothAdapter? = null private var linkAddresses = mutableMapOf() private var activeNetwork: Network? = null private var hotSpotIsEnabled = false @@ -195,7 +197,10 @@ class BaresipService: Service() { this.registerReceiver(hotSpotReceiver, IntentFilter("android.net.wifi.WIFI_AP_STATE_CHANGED")) - tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager + tm = getSystemService(Context.TELECOM_SERVICE) as TelecomManager + + btm = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager + btAdapter = btm.adapter proximityWakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "com.tutpro.baresip:proximity_wakelog") @@ -556,10 +561,10 @@ class BaresipService: Service() { } "call incoming" -> { val peerUri = Api.call_peeruri(callp) - if ((Call.calls().size > 0) || - (tm.callState != TelephonyManager.CALL_STATE_IDLE) || - !Utils.checkPermission(applicationContext, - Manifest.permission.RECORD_AUDIO)) { + if (Call.calls().size > 0 || + (Utils.checkPermission(this, Manifest.permission.READ_PHONE_STATE) && + tm.isInCall) || + !Utils.checkPermission(applicationContext, Manifest.permission.RECORD_AUDIO)) { Log.d(TAG, "Auto-rejecting incoming call $uap/$callp/$peerUri") Api.ua_hangup(uap, callp, 486, "Busy Here") if (ua.account.callHistory) { @@ -1090,8 +1095,8 @@ class BaresipService: Service() { } private fun isBluetoothHeadsetConnected(): Boolean { - return (btAdapter != null) && btAdapter.isEnabled && - (btAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == + return (btAdapter != null) && btAdapter!!.isEnabled && + (btAdapter!!.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED) }