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) } } } } } }