Fixed handling of tel and sip schemed URI + added missing sips scheme support
This commit is contained in:
parent
e12df37d2d
commit
a4e3abd4c4
4 changed files with 45 additions and 35 deletions
|
@ -79,11 +79,14 @@
|
|||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<action android:name="android.intent.action.DIAL" />
|
||||
<action android:name="android.intent.action.CALL" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="tel" />
|
||||
<data android:scheme="sip" />
|
||||
<data android:scheme="sips" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue