Start Automatically setting now starts the app instead of notifying

This commit is contained in:
Juha Heinanen
2023-11-17 11:51:33 +02:00
parent 3e4d16440c
commit a9ab10682e
4 changed files with 61 additions and 31 deletions
@@ -1,23 +1,15 @@
package com.tutpro.baresip package com.tutpro.baresip
import android.annotation.SuppressLint 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.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.core.app.NotificationCompat
import java.nio.charset.StandardCharsets import java.nio.charset.StandardCharsets
class BootCompletedReceiver : BroadcastReceiver() { class BootCompletedReceiver : BroadcastReceiver() {
private val START_NOTIFICATION_IN = 105
@SuppressLint("UnspecifiedImmutableFlag") @SuppressLint("UnspecifiedImmutableFlag")
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
@@ -28,34 +20,14 @@ class BootCompletedReceiver : BroadcastReceiver() {
val asCv = Utils.getNameValue(config,"auto_start") val asCv = Utils.getNameValue(config,"auto_start")
if ((asCv.size > 0) && (asCv[0] == "yes")) { if ((asCv.size > 0) && (asCv[0] == "yes")) {
Log.i(TAG, "Start baresip upon boot completed") Log.i(TAG, "Start baresip upon boot completed")
val i = Intent(context, MainActivity::class.java).apply { val i = Intent(context, MainActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
val b = Bundle() val b = Bundle()
b.putBoolean("onStartup", true) b.putBoolean("onStartup", true)
putExtras(b) putExtras(b)
} }
if (Build.VERSION.SDK_INT < 29) {
context.startActivity(i) 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())
}
}
} }
} }
@@ -10,11 +10,18 @@ import android.content.pm.PackageManager
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.PowerManager import android.os.PowerManager
import android.provider.Settings
import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View 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.OnBackPressedCallback
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
@@ -29,7 +36,7 @@ import com.tutpro.baresip.Utils.showSnackBar
import com.tutpro.baresip.databinding.ActivityConfigBinding import com.tutpro.baresip.databinding.ActivityConfigBinding
import java.io.File import java.io.File
import java.io.FileInputStream import java.io.FileInputStream
import java.util.* import java.util.Locale
class ConfigActivity : AppCompatActivity() { class ConfigActivity : AppCompatActivity() {
@@ -59,6 +66,7 @@ class ConfigActivity : AppCompatActivity() {
private var oldAutoStart = "" private var oldAutoStart = ""
private var oldListenAddr = "" private var oldListenAddr = ""
private var managingOverlayPermission = false
private var oldDnsServers = "" private var oldDnsServers = ""
private var oldCertificateFile = false private var oldCertificateFile = false
private var oldVerifyServer = false private var oldVerifyServer = false
@@ -95,6 +103,41 @@ class ConfigActivity : AppCompatActivity() {
autoStart = binding.AutoStart autoStart = binding.AutoStart
oldAutoStart = Config.variable("auto_start") oldAutoStart = Config.variable("auto_start")
autoStart.isChecked = oldAutoStart == "yes" 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 pm = getSystemService(Context.POWER_SERVICE) as PowerManager
val androidSettingsRequest = registerForActivityResult( 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() { override fun onStart() {
super.onStart() super.onStart()
requestPermissionLauncher = requestPermissionLauncher =
@@ -636,6 +687,10 @@ class ConfigActivity : AppCompatActivity() {
} }
private fun isAppearOnTopPermissionGranted(ctx: Context): Boolean {
return Settings.canDrawOverlays(ctx)
}
private fun done() { private fun done() {
if (save) if (save)
+2
View File
@@ -306,6 +306,8 @@
<string name="start_automatically">Käynnistä automaattisesti</string> <string name="start_automatically">Käynnistä automaattisesti</string>
<string name="start_automatically_help">Jos merkitty, baresip <string name="start_automatically_help">Jos merkitty, baresip
käynnistyy automaattisesti, kun laite käynnistyy.</string> käynnistyy automaattisesti, kun laite käynnistyy.</string>
<string name="appear_on_top_permission">Automaattinen käynnistys vaatii "Näytä päällimmäisenä"
käyttöoikeuden.</string>
<string name="battery_optimizations">Akun käytön optimointi</string> <string name="battery_optimizations">Akun käytön optimointi</string>
<string name="battery_optimizations_help">Ota akun käytön optimointi pois päältä (suositeltu), <string name="battery_optimizations_help">Ota akun käytön optimointi pois päältä (suositeltu),
jos haluat vähentää todennäköisyyttä, että Android rajoittaa baresip-sovelluksen toimintaa jos haluat vähentää todennäköisyyttä, että Android rajoittaa baresip-sovelluksen toimintaa
+1
View File
@@ -288,6 +288,7 @@
<string name="configuration">Settings</string> <string name="configuration">Settings</string>
<string name="start_automatically">Start Automatically</string> <string name="start_automatically">Start Automatically</string>
<string name="start_automatically_help">If checked, baresip starts automatically after device (re)start.</string> <string name="start_automatically_help">If checked, baresip starts automatically after device (re)start.</string>
<string name="appear_on_top_permission">Automatic start needs Appear on Top permission.</string>
<string name="battery_optimizations">Battery Optimizations</string> <string name="battery_optimizations">Battery Optimizations</string>
<string name="battery_optimizations_help">Disable battery optimizations (recommended) if you want <string name="battery_optimizations_help">Disable battery optimizations (recommended) if you want
to reduce likelihood that Android restricts baresip\'s access to network or enters baresip to reduce likelihood that Android restricts baresip\'s access to network or enters baresip