diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt index a9f79510..099bbd5c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt @@ -13,10 +13,10 @@ import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.extensions.isDefaultDialer import com.simplemobiletools.contacts.pro.extensions.telecomManager +import com.simplemobiletools.contacts.pro.helpers.REQUEST_CODE_SET_DEFAULT_DIALER @TargetApi(Build.VERSION_CODES.M) class DialerActivity : SimpleActivity() { - private val REQUEST_CODE_SET_DEFAULT_DIALER = 1 private var callNumber: Uri? = null override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt index d9e3d4ee..c368aeb1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt @@ -1,23 +1,31 @@ package com.simplemobiletools.contacts.pro.activities +import android.annotation.TargetApi import android.content.Intent import android.graphics.Color import android.net.Uri +import android.os.Build import android.os.Bundle +import android.provider.Telephony.Sms.Intents.SECRET_CODE_ACTION +import android.telecom.TelecomManager +import android.telephony.TelephonyManager import android.view.KeyEvent import android.view.Menu import android.view.MenuItem import android.view.View import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter import com.simplemobiletools.contacts.pro.dialogs.CallConfirmationDialog import com.simplemobiletools.contacts.pro.extensions.callContact import com.simplemobiletools.contacts.pro.extensions.config +import com.simplemobiletools.contacts.pro.extensions.isDefaultDialer import com.simplemobiletools.contacts.pro.extensions.startCallIntent import com.simplemobiletools.contacts.pro.helpers.ContactsHelper import com.simplemobiletools.contacts.pro.helpers.KEY_PHONE import com.simplemobiletools.contacts.pro.helpers.LOCATION_DIALPAD +import com.simplemobiletools.contacts.pro.helpers.REQUEST_CODE_SET_DEFAULT_DIALER import com.simplemobiletools.contacts.pro.models.Contact import kotlinx.android.synthetic.main.activity_dialpad.* @@ -134,7 +142,25 @@ class DialpadActivity : SimpleActivity() { checkDialIntent() } + @TargetApi(Build.VERSION_CODES.O) private fun dialpadValueChanged(text: String) { + val len = text.length + if (len > 8 && text.startsWith("*#*#") && text.endsWith("#*#*")) { + val secretCode = text.substring(4, text.length - 4) + if (isOreoPlus()) { + if (isDefaultDialer()) { + getSystemService(TelephonyManager::class.java).sendDialerSpecialCode(secretCode) + } else { + val intent = Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER).putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName) + startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER) + } + } else { + val intent = Intent(SECRET_CODE_ACTION, Uri.parse("android_secret_code://$secretCode")) + sendBroadcast(intent) + } + return + } + (dialpad_list.adapter as? ContactsAdapter)?.finishActMode() val filtered = contacts.filter { it.doesContainPhoneNumber(text) } as ArrayList @@ -152,6 +178,13 @@ class DialpadActivity : SimpleActivity() { } } + override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { + super.onActivityResult(requestCode, resultCode, resultData) + if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER && isDefaultDialer()) { + dialpadValueChanged(dialpad_input.value) + } + } + private fun initCall() { val number = dialpad_input.value if (number.isNotEmpty()) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt index 9e28945f..68f7e912 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt @@ -293,7 +293,7 @@ fun Context.getVisibleContactSources(): ArrayList { @TargetApi(Build.VERSION_CODES.N) fun Context.getBlockedNumbers(): ArrayList { val blockedNumbers = ArrayList() - if (!isNougatPlus()) { + if (!isNougatPlus() || !isDefaultDialer()) { return blockedNumbers } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt index 458256b1..8826a543 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt @@ -27,6 +27,7 @@ const val IS_FROM_SIMPLE_CONTACTS = "is_from_simple_contacts" const val ADD_NEW_CONTACT_NUMBER = "add_new_contact_number" const val FIRST_CONTACT_ID = 1000000 const val FIRST_GROUP_ID = 10000L +const val REQUEST_CODE_SET_DEFAULT_DIALER = 1 // extras used at third party intents const val KEY_PHONE = "phone"