diff --git a/app/src/main/kotlin/com/tutpro/baresip/BootCompletedReceiver.kt b/app/src/main/kotlin/com/tutpro/baresip/BootCompletedReceiver.kt
index 3e6da5b3..a9bbfa9e 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/BootCompletedReceiver.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/BootCompletedReceiver.kt
@@ -1,23 +1,15 @@
package com.tutpro.baresip
import android.annotation.SuppressLint
-import android.app.NotificationChannel
-import android.app.NotificationManager
-import android.app.PendingIntent
-import android.app.Service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import android.os.Build
import android.os.Bundle
-import androidx.core.app.NotificationCompat
import java.nio.charset.StandardCharsets
class BootCompletedReceiver : BroadcastReceiver() {
- private val START_NOTIFICATION_IN = 105
-
@SuppressLint("UnspecifiedImmutableFlag")
override fun onReceive(context: Context, intent: Intent) {
@@ -28,34 +20,14 @@ class BootCompletedReceiver : BroadcastReceiver() {
val asCv = Utils.getNameValue(config,"auto_start")
if ((asCv.size > 0) && (asCv[0] == "yes")) {
-
Log.i(TAG, "Start baresip upon boot completed")
-
val i = Intent(context, MainActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
val b = Bundle()
b.putBoolean("onStartup", true)
putExtras(b)
}
-
- if (Build.VERSION.SDK_INT < 29) {
- context.startActivity(i)
- } else {
- val nm = context.getSystemService(Service.NOTIFICATION_SERVICE) as NotificationManager
- val channel = NotificationChannel("default", "default",
- NotificationManager.IMPORTANCE_DEFAULT)
- nm.createNotificationChannel(channel)
- val pi = PendingIntent.getActivity(context, 0, i,
- PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_ONE_SHOT)
- with(NotificationCompat.Builder(context, "default")) {
- setSmallIcon(R.drawable.ic_stat)
- setContentTitle(context.getString(R.string.app_name))
- setContentText(context.getString(R.string.tap_to_start))
- setContentIntent(pi)
- setAutoCancel(true)
- nm.notify(START_NOTIFICATION_IN, build())
- }
- }
+ context.startActivity(i)
}
}
diff --git a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt
index 7f557c67..02e782b7 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt
@@ -10,11 +10,18 @@ import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.os.PowerManager
+import android.provider.Settings
import android.text.method.LinkMovementMethod
import android.view.Menu
import android.view.MenuItem
import android.view.View
-import android.widget.*
+import android.widget.AdapterView
+import android.widget.ArrayAdapter
+import android.widget.CheckBox
+import android.widget.EditText
+import android.widget.ScrollView
+import android.widget.Spinner
+import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
@@ -29,7 +36,7 @@ import com.tutpro.baresip.Utils.showSnackBar
import com.tutpro.baresip.databinding.ActivityConfigBinding
import java.io.File
import java.io.FileInputStream
-import java.util.*
+import java.util.Locale
class ConfigActivity : AppCompatActivity() {
@@ -59,6 +66,7 @@ class ConfigActivity : AppCompatActivity() {
private var oldAutoStart = ""
private var oldListenAddr = ""
+ private var managingOverlayPermission = false
private var oldDnsServers = ""
private var oldCertificateFile = false
private var oldVerifyServer = false
@@ -95,6 +103,41 @@ class ConfigActivity : AppCompatActivity() {
autoStart = binding.AutoStart
oldAutoStart = Config.variable("auto_start")
autoStart.isChecked = oldAutoStart == "yes"
+ if (autoStart.isChecked && !isAppearOnTopPermissionGranted(this)) {
+ Config.replaceVariable("auto_start", "no")
+ oldAutoStart = "no"
+ save = true
+ autoStart.isChecked = false
+ }
+ autoStart.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ if (!isAppearOnTopPermissionGranted(this)) {
+ with(
+ MaterialAlertDialogBuilder(
+ this@ConfigActivity,
+ R.style.AlertDialogTheme
+ )
+ ) {
+ setTitle(getText(R.string.notice))
+ setMessage(getText(R.string.appear_on_top_permission))
+ setPositiveButton(getText(R.string.ok)) { dialog, _ ->
+ dialog.dismiss()
+ managingOverlayPermission = true
+ val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
+ startActivity(intent)
+ }
+ setNegativeButton(getText(R.string.cancel)) { dialog, _ ->
+ dialog.dismiss()
+ }
+ val dialog = this.create()
+ dialog.setCancelable(false)
+ dialog.setCanceledOnTouchOutside(false)
+ dialog.show()
+ }
+ autoStart.isChecked = false
+ }
+ }
+ }
val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
val androidSettingsRequest = registerForActivityResult(
@@ -436,6 +479,14 @@ class ConfigActivity : AppCompatActivity() {
}
+ override fun onResume() {
+ super.onResume()
+ if (managingOverlayPermission) {
+ managingOverlayPermission = false
+ autoStart.isChecked = isAppearOnTopPermissionGranted(this)
+ }
+ }
+
override fun onStart() {
super.onStart()
requestPermissionLauncher =
@@ -636,6 +687,10 @@ class ConfigActivity : AppCompatActivity() {
}
+ private fun isAppearOnTopPermissionGranted(ctx: Context): Boolean {
+ return Settings.canDrawOverlays(ctx)
+ }
+
private fun done() {
if (save)
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 1326cc7b..0f3a0e44 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -306,6 +306,8 @@
Käynnistä automaattisesti
Jos merkitty, baresip
käynnistyy automaattisesti, kun laite käynnistyy.
+ Automaattinen käynnistys vaatii "Näytä päällimmäisenä"
+ käyttöoikeuden.
Akun käytön optimointi
Ota akun käytön optimointi pois päältä (suositeltu),
jos haluat vähentää todennäköisyyttä, että Android rajoittaa baresip-sovelluksen toimintaa
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1eab74fa..17fcbb1d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -288,6 +288,7 @@
Settings
Start Automatically
If checked, baresip starts automatically after device (re)start.
+ Automatic start needs Appear on Top permission.
Battery Optimizations
Disable battery optimizations (recommended) if you want
to reduce likelihood that Android restricts baresip\'s access to network or enters baresip