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.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
|
||||
|
@@ -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.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<SpeedDial>, 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
|
||||
|
@@ -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