fix #107, add a top menu item for using SIM 1 or 2

This commit is contained in:
tibbi 2020-12-31 18:39:18 +01:00
parent 0e115c35af
commit bc6d0d855c
6 changed files with 61 additions and 4 deletions

View File

@ -56,6 +56,6 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:5.32.18' implementation 'com.simplemobiletools:commons:5.32.19'
implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a' implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a'
} }

View File

@ -25,6 +25,8 @@ import com.simplemobiletools.commons.models.SimpleContact
import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.activities.SimpleActivity
import com.simplemobiletools.dialer.extensions.areMultipleSIMsAvailable
import com.simplemobiletools.dialer.extensions.callContactWithSim
import com.simplemobiletools.dialer.extensions.startContactDetailsIntent import com.simplemobiletools.dialer.extensions.startContactDetailsIntent
import com.simplemobiletools.dialer.interfaces.RefreshItemsListener import com.simplemobiletools.dialer.interfaces.RefreshItemsListener
@ -42,7 +44,12 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList<SimpleCo
override fun getActionMenuId() = R.menu.cab_contacts override fun getActionMenuId() = R.menu.cab_contacts
override fun prepareActionMode(menu: Menu) { override fun prepareActionMode(menu: Menu) {
val hasMultipleSIMs = activity.areMultipleSIMsAvailable()
menu.apply { menu.apply {
findItem(R.id.cab_call_sim_1).isVisible = hasMultipleSIMs && isOneItemSelected()
findItem(R.id.cab_call_sim_2).isVisible = hasMultipleSIMs && isOneItemSelected()
findItem(R.id.cab_delete).isVisible = showDeleteButton findItem(R.id.cab_delete).isVisible = showDeleteButton
findItem(R.id.cab_create_shortcut).isVisible = isOneItemSelected() && isOreoPlus() findItem(R.id.cab_create_shortcut).isVisible = isOneItemSelected() && isOreoPlus()
findItem(R.id.cab_view_details).isVisible = isOneItemSelected() findItem(R.id.cab_view_details).isVisible = isOneItemSelected()
@ -55,6 +62,8 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList<SimpleCo
} }
when (id) { when (id) {
R.id.cab_call_sim_1 -> callContact(true)
R.id.cab_call_sim_2 -> callContact(false)
R.id.cab_delete -> askConfirmDelete() R.id.cab_delete -> askConfirmDelete()
R.id.cab_send_sms -> sendSMS() R.id.cab_send_sms -> sendSMS()
R.id.cab_view_details -> viewContactDetails() R.id.cab_view_details -> viewContactDetails()
@ -98,6 +107,12 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList<SimpleCo
} }
} }
@SuppressLint("MissingPermission")
private fun callContact(useSimOne: Boolean) {
val contact = getSelectedItems().firstOrNull() ?: return
activity.callContactWithSim(contact.phoneNumbers.first(), useSimOne)
}
private fun sendSMS() { private fun sendSMS() {
val numbers = getSelectedItems().map { it.phoneNumbers.first() } val numbers = getSelectedItems().map { it.phoneNumbers.first() }
val recipient = TextUtils.join(";", numbers) val recipient = TextUtils.join(";", numbers)

View File

@ -18,6 +18,7 @@ import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.activities.SimpleActivity
import com.simplemobiletools.dialer.extensions.areMultipleSIMsAvailable import com.simplemobiletools.dialer.extensions.areMultipleSIMsAvailable
import com.simplemobiletools.dialer.extensions.callContactWithSim
import com.simplemobiletools.dialer.helpers.RecentsHelper import com.simplemobiletools.dialer.helpers.RecentsHelper
import com.simplemobiletools.dialer.interfaces.RefreshItemsListener import com.simplemobiletools.dialer.interfaces.RefreshItemsListener
import com.simplemobiletools.dialer.models.RecentCall import com.simplemobiletools.dialer.models.RecentCall
@ -43,7 +44,12 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<Re
override fun getActionMenuId() = R.menu.cab_recent_calls override fun getActionMenuId() = R.menu.cab_recent_calls
override fun prepareActionMode(menu: Menu) { override fun prepareActionMode(menu: Menu) {
val hasMultipleSIMs = activity.areMultipleSIMsAvailable()
menu.apply { menu.apply {
findItem(R.id.cab_call_sim_1).isVisible = hasMultipleSIMs && isOneItemSelected()
findItem(R.id.cab_call_sim_2).isVisible = hasMultipleSIMs && isOneItemSelected()
findItem(R.id.cab_block_number).isVisible = isNougatPlus() findItem(R.id.cab_block_number).isVisible = isNougatPlus()
findItem(R.id.cab_add_number).isVisible = isOneItemSelected() findItem(R.id.cab_add_number).isVisible = isOneItemSelected()
findItem(R.id.cab_copy_number).isVisible = isOneItemSelected() findItem(R.id.cab_copy_number).isVisible = isOneItemSelected()
@ -56,6 +62,8 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<Re
} }
when (id) { when (id) {
R.id.cab_call_sim_1 -> callContact(true)
R.id.cab_call_sim_2 -> callContact(false)
R.id.cab_block_number -> askConfirmBlock() R.id.cab_block_number -> askConfirmBlock()
R.id.cab_add_number -> addNumberToContact() R.id.cab_add_number -> addNumberToContact()
R.id.cab_send_sms -> sendSMS() R.id.cab_send_sms -> sendSMS()
@ -101,6 +109,11 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<Re
incomingMissedCallIcon = resources.getColoredDrawableWithColor(R.drawable.ic_incoming_call_vector, redColor) incomingMissedCallIcon = resources.getColoredDrawableWithColor(R.drawable.ic_incoming_call_vector, redColor)
} }
private fun callContact(useSimOne: Boolean) {
val recentCall = getSelectedItems().firstOrNull() ?: return
activity.callContactWithSim(recentCall.phoneNumber, useSimOne)
}
private fun askConfirmBlock() { private fun askConfirmBlock() {
val numbers = TextUtils.join(", ", getSelectedItems().distinctBy { it.phoneNumber }.map { it.phoneNumber }) val numbers = TextUtils.join(", ", getSelectedItems().distinctBy { it.phoneNumber }.map { it.phoneNumber })
val baseString = R.string.block_confirmation val baseString = R.string.block_confirmation

View File

@ -8,6 +8,7 @@ import android.provider.ContactsContract
import android.telecom.PhoneAccount import android.telecom.PhoneAccount
import android.telecom.PhoneAccountHandle import android.telecom.PhoneAccountHandle
import android.telecom.TelecomManager import android.telecom.TelecomManager
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.models.SimpleContact
@ -25,6 +26,14 @@ fun SimpleActivity.startCallIntent(recipient: String) {
} }
} }
fun BaseSimpleActivity.callContactWithSim(recipient: String, useSimOne: Boolean) {
handlePermission(PERMISSION_READ_PHONE_STATE) {
val wantedSimIndex = if (useSimOne) 0 else 1
val handle = getAvailableSIMCardLabels().sortedBy { it.id }[wantedSimIndex].handle
launchCallIntent(recipient, handle)
}
}
// handle private contacts differently, only Simple Contacts Pro can open them // handle private contacts differently, only Simple Contacts Pro can open them
fun Activity.startContactDetailsIntent(contact: SimpleContact) { fun Activity.startContactDetailsIntent(contact: SimpleContact) {
val simpleContacts = "com.simplemobiletools.contacts.pro" val simpleContacts = "com.simplemobiletools.contacts.pro"
@ -65,8 +74,8 @@ fun SimpleActivity.getHandleToUse(intent: Intent?, phoneNumber: String, callback
config.getCustomSIM(phoneNumber)?.isNotEmpty() == true -> { config.getCustomSIM(phoneNumber)?.isNotEmpty() == true -> {
val storedLabel = Uri.decode(config.getCustomSIM(phoneNumber)) val storedLabel = Uri.decode(config.getCustomSIM(phoneNumber))
val availableSIMs = getAvailableSIMCardLabels() val availableSIMs = getAvailableSIMCardLabels()
val firstornull = availableSIMs.firstOrNull { it.label == storedLabel }?.handle ?: availableSIMs.first().handle val firstOrNull = availableSIMs.firstOrNull { it.label == storedLabel }?.handle ?: availableSIMs.first().handle
callback(firstornull) callback(firstOrNull)
} }
defaultHandle != null -> callback(defaultHandle) defaultHandle != null -> callback(defaultHandle)
else -> { else -> {

View File

@ -1,6 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/cab_call_sim_1"
android:icon="@drawable/ic_phone_one_vector"
android:title="@string/call_from_sim_1"
app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_call_sim_2"
android:icon="@drawable/ic_phone_two_vector"
android:title="@string/call_from_sim_2"
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/cab_delete" android:id="@+id/cab_delete"
android:icon="@drawable/ic_delete_vector" android:icon="@drawable/ic_delete_vector"
@ -8,7 +18,7 @@
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/cab_view_details" android:id="@+id/cab_view_details"
android:icon="@drawable/ic_view_contact_details" android:icon="@drawable/ic_view_contact_details_vector"
android:title="@string/view_contact_details" android:title="@string/view_contact_details"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
<item <item

View File

@ -1,6 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/cab_call_sim_1"
android:icon="@drawable/ic_phone_one_vector"
android:title="@string/call_from_sim_1"
app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_call_sim_2"
android:icon="@drawable/ic_phone_two_vector"
android:title="@string/call_from_sim_2"
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/cab_add_number" android:id="@+id/cab_add_number"
android:icon="@drawable/ic_add_person_vector" android:icon="@drawable/ic_add_person_vector"