|
@@ -1,14 +1,9 @@
|
|
|
package ru.mephi.voip.ui
|
|
|
|
|
|
import android.Manifest
|
|
|
-import android.annotation.TargetApi
|
|
|
-import android.app.AlertDialog
|
|
|
-import android.app.NotificationChannel
|
|
|
-import android.app.NotificationManager
|
|
|
-import android.app.PendingIntent
|
|
|
+import android.app.*
|
|
|
import android.content.Intent
|
|
|
import android.content.SharedPreferences
|
|
|
-import android.content.pm.PackageManager
|
|
|
import android.os.Build
|
|
|
import android.os.Bundle
|
|
|
import androidx.core.app.NotificationCompat
|
|
@@ -17,9 +12,9 @@ import androidx.navigation.NavController
|
|
|
import androidx.preference.PreferenceManager
|
|
|
import com.google.firebase.analytics.FirebaseAnalytics
|
|
|
import com.google.firebase.analytics.ktx.analytics
|
|
|
-import com.google.firebase.crashlytics.FirebaseCrashlytics
|
|
|
import com.google.firebase.ktx.Firebase
|
|
|
import com.vmadalin.easypermissions.EasyPermissions
|
|
|
+import com.vmadalin.easypermissions.dialogs.SettingsDialog
|
|
|
import org.abtollc.sdk.*
|
|
|
import org.abtollc.sdk.OnInitializeListener.InitializeState
|
|
|
import org.abtollc.utils.codec.Codec
|
|
@@ -29,7 +24,8 @@ import ru.mephi.voip.data.utils.*
|
|
|
import ru.mephi.voip.databinding.ActivityMainBinding
|
|
|
import timber.log.Timber
|
|
|
|
|
|
-class MainActivity : NetworkSensingBaseActivity(), OnInitializeListener, OnRegistrationListener {
|
|
|
+class MainActivity : NetworkSensingBaseActivity(), OnInitializeListener, OnRegistrationListener,
|
|
|
+ EasyPermissions.PermissionCallbacks {
|
|
|
private val CHANNEL_ID: String = "CHANNEL"
|
|
|
private lateinit var binding: ActivityMainBinding
|
|
|
private val REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124
|
|
@@ -67,6 +63,7 @@ class MainActivity : NetworkSensingBaseActivity(), OnInitializeListener, OnRegis
|
|
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
|
|
setContentView(binding.root)
|
|
|
|
|
|
+
|
|
|
firebaseAnalytics = Firebase.analytics
|
|
|
|
|
|
if (!hasPermissions())
|
|
@@ -120,69 +117,23 @@ class MainActivity : NetworkSensingBaseActivity(), OnInitializeListener, OnRegis
|
|
|
currentNavController = navController
|
|
|
}
|
|
|
|
|
|
- @TargetApi(23)
|
|
|
- override fun onRequestPermissionsResult(
|
|
|
- requestCode: Int,
|
|
|
- permissions: Array<String>,
|
|
|
- grantResults: IntArray
|
|
|
- ) {
|
|
|
- when (requestCode) {
|
|
|
- REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS -> {
|
|
|
- val perms: MutableMap<String, Int> = HashMap()
|
|
|
- //Initial
|
|
|
- perms[Manifest.permission.RECORD_AUDIO] = PackageManager.PERMISSION_GRANTED
|
|
|
- perms[Manifest.permission.WRITE_EXTERNAL_STORAGE] =
|
|
|
- PackageManager.PERMISSION_GRANTED
|
|
|
- perms[Manifest.permission.USE_SIP] = PackageManager.PERMISSION_GRANTED
|
|
|
-
|
|
|
- //Fill with results
|
|
|
- var i = 0
|
|
|
- while (i < permissions.size) {
|
|
|
- perms[permissions[i]] = grantResults[i]
|
|
|
- i++
|
|
|
- }
|
|
|
-
|
|
|
- //Check for ACCESS_FINE_LOCATION
|
|
|
- if (perms[Manifest.permission.RECORD_AUDIO] == PackageManager.PERMISSION_GRANTED
|
|
|
- && perms[Manifest.permission.WRITE_EXTERNAL_STORAGE] == PackageManager.PERMISSION_GRANTED
|
|
|
- && perms[Manifest.permission.USE_SIP] == PackageManager.PERMISSION_GRANTED
|
|
|
- ) {
|
|
|
- // All Permissions Granted
|
|
|
- initPhone()
|
|
|
- } else {
|
|
|
- // Permission Denied
|
|
|
- toast("Some permissions were denied")
|
|
|
- finish()
|
|
|
- }
|
|
|
- }
|
|
|
- else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun hasPermissions(): Boolean =
|
|
|
+ fun hasPermissions(): Boolean =
|
|
|
EasyPermissions.hasPermissions(
|
|
|
this,
|
|
|
Manifest.permission.RECORD_AUDIO,
|
|
|
Manifest.permission.USE_SIP
|
|
|
)
|
|
|
|
|
|
- private fun requestPermissions() {
|
|
|
+ fun requestPermissions() {
|
|
|
EasyPermissions.requestPermissions(
|
|
|
this,
|
|
|
"Это приложение требует разрешение на совершение звонков и использование микрофона",
|
|
|
- 1,
|
|
|
+ REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS,
|
|
|
Manifest.permission.RECORD_AUDIO,
|
|
|
Manifest.permission.USE_SIP
|
|
|
)
|
|
|
}
|
|
|
|
|
|
- // После отклонения входящего вызова из шторки потом не делает исходящий
|
|
|
- override fun onRestart() {
|
|
|
- super.onRestart()
|
|
|
-// initPhone()
|
|
|
-// initAccount()
|
|
|
- }
|
|
|
-
|
|
|
override fun onSupportNavigateUp(): Boolean {
|
|
|
return currentNavController?.value?.navigateUp() ?: false
|
|
|
}
|
|
@@ -191,9 +142,6 @@ class MainActivity : NetworkSensingBaseActivity(), OnInitializeListener, OnRegis
|
|
|
if (abtoPhone.isActive)
|
|
|
return
|
|
|
|
|
|
-// val accId = abtoPhone.currentAccountId.toInt()
|
|
|
-// accExpire = abtoPhone.config.getAccountExpire(accId.toLong())
|
|
|
-
|
|
|
val domain = SIP_DOMAIN
|
|
|
val account = getActiveAccount()
|
|
|
val username = account?.login
|
|
@@ -293,4 +241,29 @@ class MainActivity : NetworkSensingBaseActivity(), OnInitializeListener, OnRegis
|
|
|
override fun onRegistrationFailed(accId: Long, statusCode: Int, statusText: String?) {
|
|
|
toast("Аккаунт \"${abtoPhone.getSipUsername(accId) ?: "null"}\" не зарегистрирован. Причина: $statusText")
|
|
|
}
|
|
|
+
|
|
|
+ override fun onPermissionsDenied(requestCode: Int, perms: List<String>) {
|
|
|
+ if (EasyPermissions.somePermissionPermanentlyDenied(this@MainActivity, perms)) {
|
|
|
+ SettingsDialog.Builder(this)
|
|
|
+ .title("Запрос разрешений для SIP-звонков")
|
|
|
+ .rationale("Это приложение требует разрешения на совершение звонков и использование микрофона")
|
|
|
+ .negativeButtonText("Закрыть")
|
|
|
+ .positiveButtonText("Предоставить")
|
|
|
+ .build().show()
|
|
|
+ } else
|
|
|
+ requestPermissions()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onPermissionsGranted(requestCode: Int, perms: List<String>) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onRequestPermissionsResult(
|
|
|
+ requestCode: Int,
|
|
|
+ permissions: Array<out String>,
|
|
|
+ grantResults: IntArray
|
|
|
+ ) {
|
|
|
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
|
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
|
|
+ }
|
|
|
}
|