diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5ed1462e..e89ec4eb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -61,6 +61,12 @@
+
+
= 23)
@@ -657,17 +664,18 @@ class BaresipService: Service() {
val caller = Utils.friendlyUri(ContactsActivity.contactName(peerUri),
Utils.aorDomain(aor))
nb.setSmallIcon(R.drawable.ic_stat_call)
- .setColor(ContextCompat.getColor(this, R.color.colorBaresip))
- .setContentIntent(pi)
- .setCategory(Notification.CATEGORY_CALL)
- .setAutoCancel(true)
- .setOngoing(true)
- .setContentTitle(getString(R.string.incoming_call_from))
- .setContentText(caller)
- .setWhen(System.currentTimeMillis())
- .setShowWhen(true)
- .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
- .setFullScreenIntent(pi, true)
+ .setColor(ContextCompat.getColor(this, R.color.colorBaresip))
+ .setContentIntent(pi)
+ .setCategory(Notification.CATEGORY_CALL)
+ .setAutoCancel(false)
+ .setOngoing(true)
+ .setContentTitle(getString(R.string.incoming_call_from))
+ .setContentText(caller)
+ .setWhen(System.currentTimeMillis())
+ .setShowWhen(true)
+ .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .setFullScreenIntent(pi, true)
if (VERSION.SDK_INT < 26) {
@Suppress("DEPRECATION")
nb.setVibrate(LongArray(0))
@@ -1447,6 +1455,7 @@ class BaresipService: Service() {
var sipTrace = false
var callActionUri = ""
var isMainVisible = false
+ var isMainAlive = false
var isMicMuted = false
val uas = ArrayList()
diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt
index cd52122e..b409ebb2 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt
@@ -121,12 +121,15 @@ class MainActivity : AppCompatActivity() {
if (intent?.action == ACTION_CALL && !BaresipService.isServiceRunning)
BaresipService.callActionUri = URLDecoder.decode(intent.data.toString(), "UTF-8")
- kgm = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
-
window.addFlags(WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES)
setContentView(binding.root)
+ // Must be done after view has been created
+ Utils.setShowWhenLocked(this, true)
+ Utils.setTurnScreenOn(this, true)
+ Utils.requestDismissKeyguard(this)
+
setSupportActionBar(binding.toolbar)
layout = binding.mainActivityLayout
@@ -154,6 +157,7 @@ class MainActivity : AppCompatActivity() {
imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
am = getSystemService(AUDIO_SERVICE) as AudioManager
+ kgm = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
serviceEventReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
@@ -161,16 +165,20 @@ class MainActivity : AppCompatActivity() {
intent.getStringArrayListExtra("params")!!)
}
}
+
LocalBroadcastManager.getInstance(this).registerReceiver(serviceEventReceiver,
IntentFilter("service event"))
screenEventReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val event = intent.getStringExtra("event")!!
- if (event == Intent.ACTION_SCREEN_ON && !Call.isStatus("incoming"))
- dismissKeyguard()
+ if (event == Intent.ACTION_SCREEN_ON && Call.calls().size == 0) {
+ Log.d(TAG, "setShowWhenLocked == falsed")
+ Utils.setShowWhenLocked(this@MainActivity, false)
+ }
}
}
+
LocalBroadcastManager.getInstance(this).registerReceiver(screenEventReceiver,
IntentFilter("screen event"))
@@ -603,7 +611,7 @@ class MainActivity : AppCompatActivity() {
if (intent.hasExtra("action"))
// MainActivity was not visible when call, message, or transfer request came in
- handleIntent(intent)
+ handleIntent(intent, intent.getStringExtra("action"))
else
if (!BaresipService.isServiceRunning)
if (File(filesDir.absolutePath + "/accounts").exists()) {
@@ -629,11 +637,13 @@ class MainActivity : AppCompatActivity() {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO),
MIC_PERMISSION_REQUEST_CODE)
+ BaresipService.isMainAlive = true
+
} // OnCreate
override fun onStart() {
- Log.d(TAG, "Main onStart")
super.onStart()
+ Log.d(TAG, "Main onStart")
}
override fun onResume() {
@@ -642,9 +652,10 @@ class MainActivity : AppCompatActivity() {
nm.cancelAll()
BaresipService.isMainVisible = true
when (resumeAction) {
- "call show" ->
- handleServiceEvent("call incoming",
- arrayListOf(resumeCall!!.ua.uap, resumeCall!!.callp))
+ "call show" -> {
+ handleServiceEvent ("call incoming",
+ arrayListOf(resumeCall!!.ua.uap, resumeCall!!.callp))
+ }
"call answer" -> {
answerButton.performClick()
showCall(resumeCall!!.ua)
@@ -692,32 +703,38 @@ class MainActivity : AppCompatActivity() {
}
override fun onPause() {
+ super.onPause()
Log.d(TAG, "Main onPause")
Utils.addActivity("main")
BaresipService.isMainVisible = false
saveCallUri()
- super.onPause()
}
override fun onStop() {
- Log.d(TAG, "Main onStop")
super.onStop()
+ Log.d(TAG, "Main onStop")
}
override fun onDestroy() {
- Log.d(TAG, "Main onDestroy")
- LocalBroadcastManager.getInstance(this).unregisterReceiver(serviceEventReceiver)
- BaresipService.activities.clear()
super.onDestroy()
+ Log.d(TAG, "Main onDestroy")
+
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(screenEventReceiver)
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(serviceEventReceiver)
+
+ BaresipService.activities.clear()
+ BaresipService.isMainAlive = false
+
}
override fun onNewIntent(intent: Intent) {
// Called when MainActivity already exists at the top of current task
super.onNewIntent(intent)
+
resumeAction = ""
resumeUri = ""
- Log.d(TAG, "onNewIntent ${intent.action} ${intent.data}")
if (intent.action == ACTION_CALL) {
+ Log.d(TAG, "onNewIntent $ACTION_CALL ${intent.data}")
if (Call.calls().isNotEmpty() || UserAgent.uas().isEmpty()) {
return
}
@@ -746,13 +763,14 @@ class MainActivity : AppCompatActivity() {
}
}
} else {
- if (intent.getStringExtra("action") != null)
- handleIntent(intent)
+ val action = intent.getStringExtra("action")
+ Log.d(TAG, "onNewIntent action `$action'")
+ if (action != null)
+ handleIntent(intent, action)
}
}
- private fun handleIntent(intent: Intent) {
- val action = intent.getStringExtra("action")
+ private fun handleIntent(intent: Intent, action: String?) {
Log.d(TAG, "Handling intent '$action'")
when (action) {
"accounts" -> {
@@ -765,7 +783,6 @@ class MainActivity : AppCompatActivity() {
}
"call" -> {
if (Call.calls().isNotEmpty()) {
-
Toast.makeText(applicationContext, getString(R.string.call_already_active),
Toast.LENGTH_SHORT).show()
return
@@ -1088,9 +1105,8 @@ class MainActivity : AppCompatActivity() {
Toast.LENGTH_LONG).show()
}
restoreActivities()
- if (Build.VERSION.SDK_INT >= 22 && kgm.isDeviceLocked && kgm.isKeyguardSecure) {
- dismissKeyguard()
- }
+ if (Build.VERSION.SDK_INT >= 22 && kgm.isDeviceLocked)
+ moveTaskToBack(true)
}
"message", "message show", "message reply" -> {
val peer = params[1]
@@ -1918,20 +1934,6 @@ class MainActivity : AppCompatActivity() {
}
}
- @Suppress("DEPRECATION")
- private fun dismissKeyguard() {
- Log.d(TAG, "Dismissing keyguard")
- if (Build.VERSION.SDK_INT >= 27) {
- setShowWhenLocked(true)
- setTurnScreenOn(true)
- kgm.requestDismissKeyguard(this, null)
- } else {
- window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
- WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
- WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
- }
- }
-
companion object {
var accountRequest: ActivityResultLauncher? = null
diff --git a/app/src/main/kotlin/com/tutpro/baresip/ProxyActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ProxyActivity.kt
new file mode 100644
index 00000000..1fdfaf5f
--- /dev/null
+++ b/app/src/main/kotlin/com/tutpro/baresip/ProxyActivity.kt
@@ -0,0 +1,30 @@
+package com.tutpro.baresip
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+
+class ProxyActivity : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+
+ super.onCreate(savedInstanceState)
+
+ Utils.setShowWhenLocked(this, true)
+ Utils.setTurnScreenOn(this, true)
+
+ Log.d(TAG, "ProxyActivity onCreate")
+
+ val intent = Intent(applicationContext, MainActivity::class.java)
+ intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or
+ Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
+ intent.putExtras(getIntent())
+ startActivity(intent)
+
+ finish()
+
+ }
+
+}
+
+
diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt
index cf2cbf5c..81393bac 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt
@@ -1,5 +1,7 @@
package com.tutpro.baresip
+import android.app.Activity
+import android.app.KeyguardManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
@@ -18,6 +20,7 @@ import android.provider.OpenableColumns
import android.text.Editable
import android.text.TextWatcher
import android.view.View
+import android.view.WindowManager
import android.widget.TextView
import androidx.activity.result.ActivityResultLauncher
import androidx.annotation.RequiresApi
@@ -660,6 +663,37 @@ object Utils {
BaresipService.activities.add(0, activity)
}
+ @Suppress("DEPRECATION")
+ fun setShowWhenLocked(activity: Activity, show: Boolean) {
+ when {
+ Build.VERSION.SDK_INT >= 27 -> activity.setShowWhenLocked(show)
+ show -> activity.window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
+ else -> activity.window.clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
+ }
+ }
+
+ fun setTurnScreenOn(activity: Activity, turn: Boolean) {
+ if (Build.VERSION.SDK_INT >= 27) {
+ activity.setTurnScreenOn(turn)
+ } else
+ @Suppress("DEPRECATION")
+ if (turn) {
+ activity.window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
+ } else {
+ activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
+ }
+ }
+
+ @Suppress("DEPRECATION")
+ fun requestDismissKeyguard(activity: Activity) {
+ if (Build.VERSION.SDK_INT >= 26) {
+ val keyguardManager = activity.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
+ keyguardManager.requestDismissKeyguard(activity, null)
+ } else {
+ activity.window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
+ }
+ }
+
@Suppress("unused")
fun darkTheme(ctx: Context): Boolean {
return ctx.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK) ==