mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-06-05 21:49:23 +02:00
Fixed speed dial when contact has multiple phone numbers
This commit is contained in:
@@ -9,6 +9,7 @@ import com.simplemobiletools.commons.models.contacts.Contact
|
|||||||
import com.simplemobiletools.dialer.R
|
import com.simplemobiletools.dialer.R
|
||||||
import com.simplemobiletools.dialer.adapters.SpeedDialAdapter
|
import com.simplemobiletools.dialer.adapters.SpeedDialAdapter
|
||||||
import com.simplemobiletools.dialer.dialogs.SelectContactDialog
|
import com.simplemobiletools.dialer.dialogs.SelectContactDialog
|
||||||
|
import com.simplemobiletools.dialer.dialogs.SelectNumberDialog
|
||||||
import com.simplemobiletools.dialer.extensions.config
|
import com.simplemobiletools.dialer.extensions.config
|
||||||
import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener
|
import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener
|
||||||
import com.simplemobiletools.dialer.models.SpeedDial
|
import com.simplemobiletools.dialer.models.SpeedDial
|
||||||
@@ -53,12 +54,23 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SelectContactDialog(this, allContacts) { selectedContact ->
|
SelectContactDialog(this, allContacts) { selectedContact ->
|
||||||
|
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 {
|
speedDialValues.first { it.id == clickedContact.id }.apply {
|
||||||
displayName = selectedContact.getNameToDisplay()
|
displayName = selectedContact.getNameToDisplay()
|
||||||
number = selectedContact.phoneNumbers.first().normalizedNumber
|
number = selectedContact.phoneNumbers.first().normalizedNumber
|
||||||
}
|
}
|
||||||
updateAdapter()
|
updateAdapter()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}.apply {
|
}.apply {
|
||||||
speed_dial_list.adapter = this
|
speed_dial_list.adapter = this
|
||||||
}
|
}
|
||||||
|
@@ -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<PhoneNumber>,
|
||||||
|
val onPhoneNumberSelected: (PhoneNumber) -> Unit,
|
||||||
|
) : RecyclerView.Adapter<PhonesAdapter.ViewHolder>() {
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -9,8 +9,7 @@ import com.simplemobiletools.dialer.R
|
|||||||
import com.simplemobiletools.dialer.activities.SimpleActivity
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener
|
import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener
|
||||||
import com.simplemobiletools.dialer.models.SpeedDial
|
import com.simplemobiletools.dialer.models.SpeedDial
|
||||||
import kotlinx.android.synthetic.main.item_speed_dial.view.*
|
import kotlinx.android.synthetic.main.item_speed_dial.view.speed_dial_label
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class SpeedDialAdapter(
|
class SpeedDialAdapter(
|
||||||
activity: SimpleActivity, var speedDialValues: ArrayList<SpeedDial>, private val removeListener: RemoveSpeedDialListener,
|
activity: SimpleActivity, var speedDialValues: ArrayList<SpeedDial>, private val removeListener: RemoveSpeedDialListener,
|
||||||
@@ -69,7 +68,7 @@ class SpeedDialAdapter(
|
|||||||
private fun setupView(view: View, speedDial: SpeedDial) {
|
private fun setupView(view: View, speedDial: SpeedDial) {
|
||||||
view.apply {
|
view.apply {
|
||||||
var displayName = "${speedDial.id}. "
|
var displayName = "${speedDial.id}. "
|
||||||
displayName += if (speedDial.isValid()) speedDial.displayName else ""
|
displayName += if (speedDial.isValid()) "${speedDial.displayName} (${speedDial.number})" else ""
|
||||||
|
|
||||||
speed_dial_label.apply {
|
speed_dial_label.apply {
|
||||||
text = displayName
|
text = displayName
|
||||||
|
@@ -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<PhoneNumber>, 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
app/src/main/res/layout/dialog_select_phone_number.xml
Normal file
16
app/src/main/res/layout/dialog_select_phone_number.xml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/select_phone_number_list_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
|
android:id="@+id/select_phone_number_list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:scrollbars="none"
|
||||||
|
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
20
app/src/main/res/layout/item_phone_number.xml
Normal file
20
app/src/main/res/layout/item_phone_number.xml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/select_phone_number_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingStart="@dimen/normal_margin"
|
||||||
|
android:paddingTop="@dimen/small_margin"
|
||||||
|
android:paddingEnd="@dimen/normal_margin"
|
||||||
|
android:paddingBottom="@dimen/small_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyCompatRadioButton
|
||||||
|
android:id="@+id/select_phone_number_radio"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:clickable="false"
|
||||||
|
android:paddingTop="@dimen/medium_margin"
|
||||||
|
android:paddingBottom="@dimen/medium_margin" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
Reference in New Issue
Block a user