Fixed telecom manager setting disabled upon restart

This commit is contained in:
Sylvain Berfini 2021-10-11 09:15:23 +02:00
parent 336e8510b9
commit c1dafcb9b9
6 changed files with 11 additions and 14 deletions

View file

@ -5,7 +5,7 @@
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- Helps filling phone number and country code in assistant & for Telecom Manager --> <!-- Helps filling phone number and country code in assistant -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- Needed for auto start at boot and to ensure the service won't be killed by OS while in call --> <!-- Needed for auto start at boot and to ensure the service won't be killed by OS while in call -->
@ -27,6 +27,7 @@
<!-- Needed for Telecom Manager --> <!-- Needed for Telecom Manager -->
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/> <uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<!-- Needed for overlay --> <!-- Needed for overlay -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

View file

@ -41,10 +41,10 @@ abstract class AbstractPhoneFragment<T : ViewDataBinding> : GenericFragment<T>()
) { ) {
if (requestCode == 0) { if (requestCode == 0) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.i("[Assistant] READ_PHONE_NUMBERS permission granted") Log.i("[Assistant] READ_PHONE_STATE permission granted")
updateFromDeviceInfo() updateFromDeviceInfo()
} else { } else {
Log.w("[Assistant] READ_PHONE_NUMBERS permission denied") Log.w("[Assistant] READ_PHONE_STATE permission denied")
} }
} }
} }

View file

@ -96,11 +96,12 @@ class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>
it.consume { it.consume {
if (!PermissionHelper.get().hasTelecomManagerPermissions()) { if (!PermissionHelper.get().hasTelecomManagerPermissions()) {
val permissions = arrayOf( val permissions = arrayOf(
Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS,
Manifest.permission.MANAGE_OWN_CALLS Manifest.permission.MANAGE_OWN_CALLS
) )
requestPermissions(permissions, 1) requestPermissions(permissions, 1)
} else if (!TelecomHelper.exists()) { } else if (!TelecomHelper.exists()) {
corePreferences.useTelecomManager = true
Log.w("[Telecom Helper] Doesn't exists yet, creating it") Log.w("[Telecom Helper] Doesn't exists yet, creating it")
TelecomHelper.create(requireContext()) TelecomHelper.create(requireContext())
} }
@ -181,6 +182,7 @@ class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>
} }
} }
corePreferences.useTelecomManager = true
TelecomHelper.create(requireContext()) TelecomHelper.create(requireContext())
} }
} }

View file

@ -26,7 +26,6 @@ import org.linphone.core.MediaEncryption
import org.linphone.mediastream.Version import org.linphone.mediastream.Version
import org.linphone.telecom.TelecomHelper import org.linphone.telecom.TelecomHelper
import org.linphone.utils.Event import org.linphone.utils.Event
import org.linphone.utils.PermissionHelper
class CallSettingsViewModel : GenericSettingsViewModel() { class CallSettingsViewModel : GenericSettingsViewModel() {
val deviceRingtoneListener = object : SettingListenerStub() { val deviceRingtoneListener = object : SettingListenerStub() {
@ -65,16 +64,10 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
val useTelecomManagerListener = object : SettingListenerStub() { val useTelecomManagerListener = object : SettingListenerStub() {
override fun onBoolValueChanged(newValue: Boolean) { override fun onBoolValueChanged(newValue: Boolean) {
if (newValue && if (newValue) {
(
!PermissionHelper.get().hasTelecomManagerPermissions() ||
!TelecomHelper.exists() ||
!TelecomHelper.get().isAccountEnabled()
)
) {
enableTelecomManagerEvent.value = Event(true) enableTelecomManagerEvent.value = Event(true)
} else { } else {
if (!newValue && TelecomHelper.exists()) TelecomHelper.get().removeAccount() if (TelecomHelper.exists()) TelecomHelper.get().removeAccount()
prefs.useTelecomManager = newValue prefs.useTelecomManager = newValue
} }
} }

View file

@ -80,6 +80,7 @@ class TelecomHelper private constructor(context: Context) {
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")
fun findExistingAccount(context: Context): PhoneAccount? { fun findExistingAccount(context: Context): PhoneAccount? {
if (!PermissionHelper.exists()) PermissionHelper.create(context)
if (PermissionHelper.get().hasReadPhoneState()) { if (PermissionHelper.get().hasReadPhoneState()) {
var account: PhoneAccount? = null var account: PhoneAccount? = null
val phoneAccountHandleList: List<PhoneAccountHandle> = val phoneAccountHandleList: List<PhoneAccountHandle> =

View file

@ -71,7 +71,7 @@ class PermissionHelper private constructor(private val context: Context) {
} }
fun hasTelecomManagerPermissions(): Boolean { fun hasTelecomManagerPermissions(): Boolean {
return hasPermission(Manifest.permission.READ_PHONE_STATE) && return hasPermission(Manifest.permission.READ_PHONE_NUMBERS) &&
hasPermission(Manifest.permission.MANAGE_OWN_CALLS) hasPermission(Manifest.permission.MANAGE_OWN_CALLS)
} }
} }