From a9c2d752ce9b1898537bc155aadbf8db9dec4933 Mon Sep 17 00:00:00 2001 From: merkost Date: Sat, 3 Jun 2023 12:20:16 +1000 Subject: [PATCH 1/7] 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 @@ + + + + + + From 444ac03727ab2f56fac8d66cafbc0784daa1704e Mon Sep 17 00:00:00 2001 From: merkost Date: Thu, 8 Jun 2023 13:06:57 +1000 Subject: [PATCH 2/7] Changed custom dialog to RadioGroupDialog --- .../activities/ManageSpeedDialActivity.kt | 10 +++++-- .../dialer/dialogs/SelectNumberDialog.kt | 30 ------------------- .../res/layout/dialog_select_phone_number.xml | 16 ---------- 3 files changed, 8 insertions(+), 48 deletions(-) delete mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt delete mode 100644 app/src/main/res/layout/dialog_select_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 38e0bb85..4f04090c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt @@ -2,14 +2,16 @@ package com.simplemobiletools.dialer.activities import android.os.Bundle import com.google.gson.Gson +import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.updateTextColors import com.simplemobiletools.commons.helpers.ContactsHelper import com.simplemobiletools.commons.helpers.NavigationIcon +import com.simplemobiletools.commons.models.PhoneNumber +import com.simplemobiletools.commons.models.RadioItem 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 @@ -55,7 +57,11 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { SelectContactDialog(this, allContacts) { selectedContact -> if (selectedContact.phoneNumbers.size > 1) { - SelectNumberDialog(this, selectedContact.phoneNumbers) { selectedNumber -> + val radioItems = selectedContact.phoneNumbers.mapIndexed { index, item -> + RadioItem(index, item.normalizedNumber, item) + } + RadioGroupDialog(this, ArrayList(radioItems)) { selectedValue -> + val selectedNumber = selectedValue as PhoneNumber speedDialValues.first { it.id == clickedContact.id }.apply { displayName = selectedContact.getNameToDisplay() number = selectedNumber.normalizedNumber diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt deleted file mode 100644 index ee9be504..00000000 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectNumberDialog.kt +++ /dev/null @@ -1,30 +0,0 @@ -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 deleted file mode 100644 index c21b3ed3..00000000 --- a/app/src/main/res/layout/dialog_select_phone_number.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - From 2aa07c54e5c6b1593bdde269aa861e16a75d2dd3 Mon Sep 17 00:00:00 2001 From: merkost Date: Thu, 8 Jun 2023 13:10:09 +1000 Subject: [PATCH 3/7] Deleted showing number with the name in ManageSpeedDial screen --- .../com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ac93f97b..e3fd1777 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt @@ -68,7 +68,7 @@ class SpeedDialAdapter( private fun setupView(view: View, speedDial: SpeedDial) { view.apply { var displayName = "${speedDial.id}. " - displayName += if (speedDial.isValid()) "${speedDial.displayName} (${speedDial.number})" else "" + displayName += if (speedDial.isValid()) speedDial.displayName else "" speed_dial_label.apply { text = displayName From 0e703c29420ebe0b4108a1ff1dfab55257e9789b Mon Sep 17 00:00:00 2001 From: merkost Date: Thu, 8 Jun 2023 13:14:48 +1000 Subject: [PATCH 4/7] Added selected number visibility in dialog --- .../dialer/activities/ManageSpeedDialActivity.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 4f04090c..40959a25 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt @@ -60,7 +60,9 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { val radioItems = selectedContact.phoneNumbers.mapIndexed { index, item -> RadioItem(index, item.normalizedNumber, item) } - RadioGroupDialog(this, ArrayList(radioItems)) { selectedValue -> + val userPhoneNumbersList = selectedContact.phoneNumbers.map { it.value } + val checkedItemId = userPhoneNumbersList.indexOf(clickedContact.number) + RadioGroupDialog(this, ArrayList(radioItems), checkedItemId = checkedItemId) { selectedValue -> val selectedNumber = selectedValue as PhoneNumber speedDialValues.first { it.id == clickedContact.id }.apply { displayName = selectedContact.getNameToDisplay() From e5b5a55b57aea7e0643ff746e3aa2994b1985725 Mon Sep 17 00:00:00 2001 From: Tibor Kaputa Date: Thu, 8 Jun 2023 16:55:39 +0200 Subject: [PATCH 5/7] Delete PhonesAdapter.kt --- .../dialer/adapters/PhonesAdapter.kt | 40 ------------------- 1 file changed, 40 deletions(-) delete mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt deleted file mode 100644 index 823cb0f0..00000000 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/PhonesAdapter.kt +++ /dev/null @@ -1,40 +0,0 @@ -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 - } - } -} From 6bf4f6bc16354a358f4437ede7dba52e5308cb38 Mon Sep 17 00:00:00 2001 From: Tibor Kaputa Date: Thu, 8 Jun 2023 16:55:46 +0200 Subject: [PATCH 6/7] Delete item_phone_number.xml --- app/src/main/res/layout/item_phone_number.xml | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 app/src/main/res/layout/item_phone_number.xml diff --git a/app/src/main/res/layout/item_phone_number.xml b/app/src/main/res/layout/item_phone_number.xml deleted file mode 100644 index b5d5c495..00000000 --- a/app/src/main/res/layout/item_phone_number.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - From 50f16ba1d132c5c52e92a839c02eb4df20d18e03 Mon Sep 17 00:00:00 2001 From: Tibor Kaputa Date: Thu, 8 Jun 2023 16:56:15 +0200 Subject: [PATCH 7/7] Update SpeedDialAdapter.kt --- .../com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e3fd1777..62391974 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt @@ -9,7 +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.speed_dial_label +import kotlinx.android.synthetic.main.item_speed_dial.view.* class SpeedDialAdapter( activity: SimpleActivity, var speedDialValues: ArrayList, private val removeListener: RemoveSpeedDialListener,