From a9c2d752ce9b1898537bc155aadbf8db9dec4933 Mon Sep 17 00:00:00 2001 From: merkost Date: Sat, 3 Jun 2023 12:20:16 +1000 Subject: [PATCH] Fixed speed dial when contact has multiple phone numbers --- .../activities/ManageSpeedDialActivity.kt | 20 ++++++++-- .../dialer/adapters/PhonesAdapter.kt | 40 +++++++++++++++++++ .../dialer/adapters/SpeedDialAdapter.kt | 5 +-- .../dialer/dialogs/SelectNumberDialog.kt | 30 ++++++++++++++ .../res/layout/dialog_select_phone_number.xml | 16 ++++++++ app/src/main/res/layout/item_phone_number.xml | 20 ++++++++++ 6 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt create mode 100644 app/src/main/res/layout/dialog_select_phone_number.xml create mode 100644 app/src/main/res/layout/item_phone_number.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt index 8d1f5961..38e0bb85 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt @@ -9,6 +9,7 @@ import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.SpeedDialAdapter import com.simplemobiletools.dialer.dialogs.SelectContactDialog +import com.simplemobiletools.dialer.dialogs.SelectNumberDialog import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener import com.simplemobiletools.dialer.models.SpeedDial @@ -53,11 +54,22 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { } SelectContactDialog(this, allContacts) { selectedContact -> - speedDialValues.first { it.id == clickedContact.id }.apply { - displayName = selectedContact.getNameToDisplay() - number = selectedContact.phoneNumbers.first().normalizedNumber + if (selectedContact.phoneNumbers.size > 1) { + SelectNumberDialog(this, selectedContact.phoneNumbers) { selectedNumber -> + speedDialValues.first { it.id == clickedContact.id }.apply { + displayName = selectedContact.getNameToDisplay() + number = selectedNumber.normalizedNumber + } + updateAdapter() + } + } else { + speedDialValues.first { it.id == clickedContact.id }.apply { + displayName = selectedContact.getNameToDisplay() + number = selectedContact.phoneNumbers.first().normalizedNumber + } + updateAdapter() } - updateAdapter() + } }.apply { speed_dial_list.adapter = this diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt new file mode 100644 index 00000000..823cb0f0 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt @@ -0,0 +1,40 @@ +package com.simplemobiletools.dialer.adapters + +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.simplemobiletools.commons.models.PhoneNumber +import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.SimpleActivity +import kotlinx.android.synthetic.main.item_phone_number.view.select_phone_number_holder +import kotlinx.android.synthetic.main.item_phone_number.view.select_phone_number_radio + +class PhonesAdapter( + val activity: SimpleActivity, + private val phones: ArrayList, + val onPhoneNumberSelected: (PhoneNumber) -> Unit, +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = activity.layoutInflater.inflate(R.layout.item_phone_number, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val phoneNumber = phones[position] + holder.bindView(phoneNumber) + } + + override fun getItemCount() = phones.size + + inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + fun bindView(phoneNumber: PhoneNumber): View { + itemView.apply { + val displayName = phoneNumber.normalizedNumber + select_phone_number_radio.text = displayName + select_phone_number_holder.setOnClickListener { onPhoneNumberSelected(phoneNumber) } + } + return itemView + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt index 7fed9b01..ac93f97b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt @@ -9,8 +9,7 @@ import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener import com.simplemobiletools.dialer.models.SpeedDial -import kotlinx.android.synthetic.main.item_speed_dial.view.* -import java.util.* +import kotlinx.android.synthetic.main.item_speed_dial.view.speed_dial_label class SpeedDialAdapter( activity: SimpleActivity, var speedDialValues: ArrayList, private val removeListener: RemoveSpeedDialListener, @@ -69,7 +68,7 @@ class SpeedDialAdapter( private fun setupView(view: View, speedDial: SpeedDial) { view.apply { var displayName = "${speedDial.id}. " - displayName += if (speedDial.isValid()) speedDial.displayName else "" + displayName += if (speedDial.isValid()) "${speedDial.displayName} (${speedDial.number})" else "" speed_dial_label.apply { text = displayName diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt new file mode 100644 index 00000000..ee9be504 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt @@ -0,0 +1,30 @@ +package com.simplemobiletools.dialer.dialogs + +import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder +import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.commons.models.PhoneNumber +import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.SimpleActivity +import com.simplemobiletools.dialer.adapters.PhonesAdapter +import kotlinx.android.synthetic.main.dialog_select_phone_number.view.select_phone_number_list + +class SelectNumberDialog(val activity: SimpleActivity, private val phoneNumbers: ArrayList, val callback: (selectedNumber: PhoneNumber) -> Unit) { + private var dialog: AlertDialog? = null + private var view = activity.layoutInflater.inflate(R.layout.dialog_select_phone_number, null) + + init { + view.apply { + select_phone_number_list.adapter = PhonesAdapter(activity, phoneNumbers) { + callback(it) + dialog?.dismiss() + } + } + + activity.getAlertDialogBuilder().setNegativeButton(R.string.cancel, null).apply { + activity.setupDialogStuff(view, this) { alertDialog -> + dialog = alertDialog + } + } + } +} diff --git a/app/src/main/res/layout/dialog_select_phone_number.xml b/app/src/main/res/layout/dialog_select_phone_number.xml new file mode 100644 index 00000000..c21b3ed3 --- /dev/null +++ b/app/src/main/res/layout/dialog_select_phone_number.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/layout/item_phone_number.xml b/app/src/main/res/layout/item_phone_number.xml new file mode 100644 index 00000000..b5d5c495 --- /dev/null +++ b/app/src/main/res/layout/item_phone_number.xml @@ -0,0 +1,20 @@ + + + + + +