Simple-Dialer/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt

111 lines
4.5 KiB
Kotlin

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.getMyContactsCursor
import com.simplemobiletools.commons.extensions.updateTextColors
import com.simplemobiletools.commons.extensions.viewBinding
import com.simplemobiletools.commons.helpers.ContactsHelper
import com.simplemobiletools.commons.helpers.MyContactsContentProvider
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.adapters.SpeedDialAdapter
import com.simplemobiletools.dialer.databinding.ActivityManageSpeedDialBinding
import com.simplemobiletools.dialer.dialogs.SelectContactDialog
import com.simplemobiletools.dialer.extensions.config
import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener
import com.simplemobiletools.dialer.models.SpeedDial
class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener {
private val binding by viewBinding(ActivityManageSpeedDialBinding::inflate)
private var allContacts = mutableListOf<Contact>()
private var speedDialValues = mutableListOf<SpeedDial>()
override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.apply {
updateMaterialActivityViews(manageSpeedDialCoordinator, manageSpeedDialHolder, useTransparentNavigation = true, useTopSearchMenu = false)
setupMaterialScrollListener(manageSpeedDialScrollview, manageSpeedDialToolbar)
}
speedDialValues = config.getSpeedDialValues()
updateAdapter()
ContactsHelper(this).getContacts(showOnlyContactsWithNumbers = true) { contacts ->
allContacts.addAll(contacts)
val privateCursor = getMyContactsCursor(false, true)
val privateContacts = MyContactsContentProvider.getContacts(this, privateCursor)
allContacts.addAll(privateContacts)
allContacts.sort()
}
updateTextColors(binding.manageSpeedDialScrollview)
}
override fun onResume() {
super.onResume()
setupToolbar(binding.manageSpeedDialToolbar, NavigationIcon.Arrow)
}
override fun onStop() {
super.onStop()
config.speedDial = Gson().toJson(speedDialValues)
}
private fun updateAdapter() {
SpeedDialAdapter(this, speedDialValues, this, binding.speedDialList) {
val clickedContact = it as SpeedDial
if (allContacts.isEmpty()) {
return@SpeedDialAdapter
}
SelectContactDialog(this, allContacts) { selectedContact ->
if (selectedContact.phoneNumbers.size > 1) {
val radioItems = selectedContact.phoneNumbers.mapIndexed { index, item ->
RadioItem(index, item.normalizedNumber, item)
}
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()
number = selectedNumber.normalizedNumber
}
updateAdapter()
}
} else {
speedDialValues.first { it.id == clickedContact.id }.apply {
displayName = selectedContact.getNameToDisplay()
number = selectedContact.phoneNumbers.first().normalizedNumber
}
updateAdapter()
}
}
}.apply {
binding.speedDialList.adapter = this
}
}
override fun removeSpeedDial(ids: ArrayList<Int>) {
ids.forEach {
val dialId = it
speedDialValues.first { it.id == dialId }.apply {
displayName = ""
number = ""
}
}
updateAdapter()
}
}