diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0ec17de66..951efadc0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,6 +54,11 @@
+
+
+
+
() {
// Don't check the following the previous permissions are being asked
checkTelecomManagerPermissions()
}
+
+ // See https://developer.android.com/about/versions/14/behavior-changes-14#fgs-types
+ if (Version.sdkAboveOrEqual(Version.API34_ANDROID_14_UPSIDE_DOWN_CAKE)) {
+ val fullScreenIntentPermission = Compatibility.hasFullScreenIntentPermission(
+ requireContext()
+ )
+ Log.i(
+ "[Dialer] Android 14 or above detected: full-screen intent permission is ${if (fullScreenIntentPermission) "granted" else "not granted"}"
+ )
+ if (!fullScreenIntentPermission) {
+ (requireActivity() as MainActivity).showSnackBar(
+ R.string.android_14_full_screen_intent_permission_not_granted,
+ R.string.android_14_go_to_full_screen_intent_permission_setting
+ ) {
+ Compatibility.requestFullScreenIntentPermission(requireContext())
+ }
+ }
+ }
}
@TargetApi(Version.API26_O_80)
diff --git a/app/src/main/java/org/linphone/compatibility/Api34Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api34Compatibility.kt
new file mode 100644
index 000000000..b325806a5
--- /dev/null
+++ b/app/src/main/java/org/linphone/compatibility/Api34Compatibility.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2010-2023 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-android
+ * (see https://www.linphone.org).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.linphone.compatibility
+
+import android.annotation.TargetApi
+import android.app.NotificationManager
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import android.provider.Settings
+import androidx.core.content.ContextCompat
+
+@TargetApi(34)
+class Api34Compatibility {
+ companion object {
+ fun hasFullScreenIntentPermission(context: Context): Boolean {
+ val notificationManager = context.getSystemService(NotificationManager::class.java) as NotificationManager
+ // See https://developer.android.com/reference/android/app/NotificationManager#canUseFullScreenIntent%28%29
+ return notificationManager.canUseFullScreenIntent()
+ }
+
+ fun requestFullScreenIntentPermission(context: Context) {
+ val intent = Intent()
+ // See https://developer.android.com/reference/android/provider/Settings#ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT
+ intent.action = Settings.ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT
+ intent.data = Uri.parse("package:${context.packageName}")
+ intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
+ ContextCompat.startActivity(context, intent, null)
+ }
+ }
+}
diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt
index e7d940694..cab4ff7cf 100644
--- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt
+++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt
@@ -462,5 +462,20 @@ class Compatibility {
Api28Compatibility.clearClipboard(clipboard)
}
}
+
+ fun hasFullScreenIntentPermission(context: Context): Boolean {
+ if (Version.sdkAboveOrEqual(Version.API34_ANDROID_14_UPSIDE_DOWN_CAKE)) {
+ return Api34Compatibility.hasFullScreenIntentPermission(context)
+ }
+ return true
+ }
+
+ fun requestFullScreenIntentPermission(context: Context): Boolean {
+ if (Version.sdkAboveOrEqual(Version.API34_ANDROID_14_UPSIDE_DOWN_CAKE)) {
+ Api34Compatibility.requestFullScreenIntentPermission(context)
+ return true
+ }
+ return false
+ }
}
}
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 44b1da943..5313d2021 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -788,4 +788,6 @@
La connexion a échouée car l\'authentification est manquante ou invalide pour le compte\n%s.\n\nVous pouvez fournir le mot de passe à nouveau ou vérifier la configuration de votre compte dans les paramètres.
Confirmer
Change la visibilité du selectionneur d\'emoji
+ Permission requise pour afficher les appels entrant non accordée
+ Afficher
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b8ecdf5d9..5958d297f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -777,6 +777,9 @@
Connection failed because authentication is missing or invalid for account \n%s.\n\nYou can provide password again, or check your account configuration in the settings.
Confirm
+ Permission required to show incoming calls not granted yet
+ Show
+
Add a SIP address field
Add a phone number field