Start Automatically setting now starts the app instead of notifying
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
context.startActivity(i)
|
||||||
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())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user