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 {
implementation 'com.simplemobiletools:commons:5.32.18'
implementation 'com.simplemobiletools:commons:5.32.19'
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.dialer.R
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.interfaces.RefreshItemsListener
@ -42,7 +44,12 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList<SimpleCo
override fun getActionMenuId() = R.menu.cab_contacts
override fun prepareActionMode(menu: Menu) {
val hasMultipleSIMs = activity.areMultipleSIMsAvailable()
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_create_shortcut).isVisible = isOneItemSelected() && isOreoPlus()
findItem(R.id.cab_view_details).isVisible = isOneItemSelected()
@ -55,6 +62,8 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList<SimpleCo
}
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_send_sms -> sendSMS()
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() {
val numbers = getSelectedItems().map { it.phoneNumbers.first() }
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.activities.SimpleActivity
import com.simplemobiletools.dialer.extensions.areMultipleSIMsAvailable
import com.simplemobiletools.dialer.extensions.callContactWithSim
import com.simplemobiletools.dialer.helpers.RecentsHelper
import com.simplemobiletools.dialer.interfaces.RefreshItemsListener
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 prepareActionMode(menu: Menu) {
val hasMultipleSIMs = activity.areMultipleSIMsAvailable()
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_add_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) {
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_add_number -> addNumberToContact()
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)
}
private fun callContact(useSimOne: Boolean) {
val recentCall = getSelectedItems().firstOrNull() ?: return
activity.callContactWithSim(recentCall.phoneNumber, useSimOne)
}
private fun askConfirmBlock() {
val numbers = TextUtils.join(", ", getSelectedItems().distinctBy { it.phoneNumber }.map { it.phoneNumber })
val baseString = R.string.block_confirmation

View File

@ -8,6 +8,7 @@ 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
@ -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
fun Activity.startContactDetailsIntent(contact: SimpleContact) {
val simpleContacts = "com.simplemobiletools.contacts.pro"
@ -65,8 +74,8 @@ fun SimpleActivity.getHandleToUse(intent: Intent?, phoneNumber: String, callback
config.getCustomSIM(phoneNumber)?.isNotEmpty() == true -> {
val storedLabel = Uri.decode(config.getCustomSIM(phoneNumber))
val availableSIMs = getAvailableSIMCardLabels()
val firstornull = availableSIMs.firstOrNull { it.label == storedLabel }?.handle ?: availableSIMs.first().handle
callback(firstornull)
val firstOrNull = availableSIMs.firstOrNull { it.label == storedLabel }?.handle ?: availableSIMs.first().handle
callback(firstOrNull)
}
defaultHandle != null -> callback(defaultHandle)
else -> {

View File

@ -1,6 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
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
android:id="@+id/cab_delete"
android:icon="@drawable/ic_delete_vector"
@ -8,7 +18,7 @@
app:showAsAction="ifRoom" />
<item
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"
app:showAsAction="ifRoom" />
<item

View File

@ -1,6 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
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
android:id="@+id/cab_add_number"
android:icon="@drawable/ic_add_person_vector"