From a4e3abd4c44b236830ab92d9c9bd78b3ad2ac007 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 3 Nov 2020 10:19:03 +0100 Subject: [PATCH] Fixed handling of tel and sip schemed URI + added missing sips scheme support --- app/src/main/AndroidManifest.xml | 3 ++ .../linphone/activities/main/MainActivity.kt | 49 +++++++++++-------- .../java/org/linphone/core/CoreContext.kt | 2 +- .../java/org/linphone/core/CorePreferences.kt | 26 +++++----- 4 files changed, 45 insertions(+), 35 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 10b27e5e2..26a2c8c0a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -79,11 +79,14 @@ + + + diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index fc3600dd4..6a9d2cfb7 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -189,38 +189,26 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin } } Intent.ACTION_VIEW -> { + val uri = intent.data if (intent.type == AppUtils.getString(R.string.linphone_address_mime_type)) { - val contactUri = intent.data - if (contactUri != null) { - val contactId = coreContext.contactsManager.getAndroidContactIdFromUri(contactUri) + if (uri != null) { + val contactId = coreContext.contactsManager.getAndroidContactIdFromUri(uri) if (contactId != null) { val deepLink = "linphone-android://contact/view/$contactId" - Log.i("[Main Activity] Found contact URI parameter in intent: $contactUri, starting deep link: $deepLink") + Log.i("[Main Activity] Found contact URI parameter in intent: $uri, starting deep link: $deepLink") findNavController(R.id.nav_host_fragment).navigate(Uri.parse(deepLink)) } } + } else { + if (uri != null) { + handleTelOrSipUri(uri) + } } } Intent.ACTION_DIAL, Intent.ACTION_CALL -> { val uri = intent.data if (uri != null) { - Log.i("[Main Activity] Found uri: $uri to call") - val stringUri = uri.toString() - var addressToCall: String = stringUri - try { - addressToCall = URLDecoder.decode(stringUri, "UTF-8") - } catch (e: UnsupportedEncodingException) { } - - if (addressToCall.startsWith("sip:")) { - addressToCall = addressToCall.substring("sip:".length) - } else if (addressToCall.startsWith("tel:")) { - addressToCall = addressToCall.substring("tel:".length) - } - - Log.i("[Main Activity] Starting dialer with pre-filled URI $addressToCall") - val args = Bundle() - args.putString("URI", addressToCall) - navigateToDialer(args) + handleTelOrSipUri(uri) } } else -> { @@ -254,6 +242,25 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin } } + private fun handleTelOrSipUri(uri: Uri) { + Log.i("[Main Activity] Found uri: $uri to call") + val stringUri = uri.toString() + var addressToCall: String = stringUri + try { + addressToCall = URLDecoder.decode(stringUri, "UTF-8") + } catch (e: UnsupportedEncodingException) { } + + if (addressToCall.startsWith("tel:")) { + Log.i("[Main Activity] Removing tel: prefix") + addressToCall = addressToCall.substring("tel:".length) + } + + Log.i("[Main Activity] Starting dialer with pre-filled URI $addressToCall") + val args = Bundle() + args.putString("URI", addressToCall) + navigateToDialer(args) + } + private fun handleSendText(intent: Intent) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { sharedViewModel.textToShare.value = it diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 00758f8c2..68c33d7ed 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -255,7 +255,7 @@ class CoreContext(val context: Context, coreConfig: Config) { core.zrtpSecretsFile = corePreferences.zrtpSecretsPath core.callLogsDatabasePath = corePreferences.callHistoryDatabasePath - core.staticPicture = corePreferences.staticPicture + core.staticPicture = corePreferences.staticPicturePath initUserCertificates() diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index f6f92ff26..3414e8f8f 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -253,6 +253,12 @@ class CorePreferences constructor(private val context: Context) { config.setBool("net", "use_legacy_push_notification_params", value) } + var defaultAccountAvatarPath: String? + get() = config.getString("app", "default_avatar_path", null) + set(value) { + config.setString("app", "default_avatar_path", value) + } + /* Read only application settings, some were previously in non_localizable_custom */ val defaultDomain: String @@ -289,7 +295,7 @@ class CorePreferences constructor(private val context: Context) { get() = config.getBool("app", "show_border_on_big_contact_avatar", true) val checkIfUpdateAvailableUrl: String? - get() = config.getString("misc", "version_check_url_root", null) + get() = config.getString("misc", "version_check_url_root", "https://linphone.org/releases/android/RELEASE") val checkUpdateAvailableInterval: Int get() = config.getInt("app", "version_check_interval", 86400000) @@ -321,12 +327,6 @@ class CorePreferences constructor(private val context: Context) { /* Side Menu */ - var defaultAccountAvatarPath: String? - get() = config.getString("app", "default_avatar_path", null) - set(value) { - config.setString("app", "default_avatar_path", value) - } - val showAccountsInSideMenu: Boolean get() = config.getBool("app", "side_menu_accounts", true) @@ -374,11 +374,6 @@ class CorePreferences constructor(private val context: Context) { val showAdvancedSettings: Boolean get() = config.getBool("app", "settings_advanced", true) - /* Other stuff */ - - private val darkModeAllowed: Boolean - get() = config.getBool("app", "dark_mode_allowed", true) - /* Assets stuff */ val configPath: String @@ -405,9 +400,14 @@ class CorePreferences constructor(private val context: Context) { val callHistoryDatabasePath: String get() = context.filesDir.absolutePath + "/linphone-log-history.db" - val staticPicture: String + val staticPicturePath: String get() = context.filesDir.absolutePath + "/share/images/nowebcamcif.jpg" + /* Other stuff */ + + private val darkModeAllowed: Boolean + get() = config.getBool("app", "dark_mode_allowed", true) + fun copyAssetsFromPackage() { copy("linphonerc_default", configPath) copy("linphonerc_factory", factoryConfigPath, true)