mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-04-17 03:27:20 +02:00
92 lines
3.6 KiB
Kotlin
92 lines
3.6 KiB
Kotlin
package com.simplemobiletools.dialer.extensions
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.app.Activity
|
|
import android.content.Intent
|
|
import android.net.Uri
|
|
import android.provider.ContactsContract
|
|
import android.telecom.PhoneAccount
|
|
import android.telecom.PhoneAccountHandle
|
|
import android.telecom.TelecomManager
|
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
|
import com.simplemobiletools.commons.extensions.*
|
|
import com.simplemobiletools.commons.helpers.*
|
|
import com.simplemobiletools.commons.models.SimpleContact
|
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
|
import com.simplemobiletools.dialer.dialogs.SelectSIMDialog
|
|
|
|
fun SimpleActivity.startCallIntent(recipient: String) {
|
|
if (isDefaultDialer()) {
|
|
getHandleToUse(null, recipient) { handle ->
|
|
launchCallIntent(recipient, handle)
|
|
}
|
|
} else {
|
|
launchCallIntent(recipient, null)
|
|
}
|
|
}
|
|
|
|
fun SimpleActivity.launchCreateNewContactIntent() {
|
|
Intent().apply {
|
|
action = Intent.ACTION_INSERT
|
|
data = ContactsContract.Contacts.CONTENT_URI
|
|
launchActivityIntent(this)
|
|
}
|
|
}
|
|
|
|
fun BaseSimpleActivity.callContactWithSim(recipient: String, useMainSIM: Boolean) {
|
|
handlePermission(PERMISSION_READ_PHONE_STATE) {
|
|
val wantedSimIndex = if (useMainSIM) 0 else 1
|
|
val handle = getAvailableSIMCardLabels().sortedBy { it.id }.getOrNull(wantedSimIndex)?.handle
|
|
launchCallIntent(recipient, handle)
|
|
}
|
|
}
|
|
|
|
// handle private contacts differently, only Simple Contacts Pro can open them
|
|
fun Activity.startContactDetailsIntent(contact: SimpleContact) {
|
|
val simpleContacts = "com.simplemobiletools.contacts.pro"
|
|
val simpleContactsDebug = "com.simplemobiletools.contacts.pro.debug"
|
|
if (contact.rawId > 1000000 && contact.contactId > 1000000 && contact.rawId == contact.contactId &&
|
|
(isPackageInstalled(simpleContacts) || isPackageInstalled(simpleContactsDebug))
|
|
) {
|
|
Intent().apply {
|
|
action = Intent.ACTION_VIEW
|
|
putExtra(CONTACT_ID, contact.rawId)
|
|
putExtra(IS_PRIVATE, true)
|
|
`package` = if (isPackageInstalled(simpleContacts)) simpleContacts else simpleContactsDebug
|
|
setDataAndType(ContactsContract.Contacts.CONTENT_LOOKUP_URI, "vnd.android.cursor.dir/person")
|
|
launchActivityIntent(this)
|
|
}
|
|
} else {
|
|
ensureBackgroundThread {
|
|
val lookupKey = SimpleContactsHelper(this).getContactLookupKey((contact).rawId.toString())
|
|
val publicUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
|
runOnUiThread {
|
|
launchViewContactIntent(publicUri)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// used at devices with multiple SIM cards
|
|
@SuppressLint("MissingPermission")
|
|
fun SimpleActivity.getHandleToUse(intent: Intent?, phoneNumber: String, callback: (handle: PhoneAccountHandle?) -> Unit) {
|
|
handlePermission(PERMISSION_READ_PHONE_STATE) {
|
|
if (it) {
|
|
val defaultHandle = telecomManager.getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_TEL)
|
|
when {
|
|
intent?.hasExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE) == true -> callback(intent.getParcelableExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE)!!)
|
|
config.getCustomSIM() != null -> {
|
|
callback(config.getCustomSIM())
|
|
}
|
|
|
|
defaultHandle != null -> callback(defaultHandle)
|
|
else -> {
|
|
SelectSIMDialog(this, phoneNumber) { handle ->
|
|
callback(handle)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|