mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
implement a Group picker dialog
This commit is contained in:
@ -20,6 +20,7 @@ import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.contacts.R
|
||||
import com.simplemobiletools.contacts.dialogs.SelectGroupsDialog
|
||||
import com.simplemobiletools.contacts.extensions.*
|
||||
import com.simplemobiletools.contacts.helpers.*
|
||||
import com.simplemobiletools.contacts.models.*
|
||||
@ -28,6 +29,7 @@ import kotlinx.android.synthetic.main.item_edit_address.view.*
|
||||
import kotlinx.android.synthetic.main.item_edit_email.view.*
|
||||
import kotlinx.android.synthetic.main.item_edit_phone_number.view.*
|
||||
import kotlinx.android.synthetic.main.item_event.view.*
|
||||
import kotlinx.android.synthetic.main.item_group.view.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.format.DateTimeFormat
|
||||
import java.util.*
|
||||
@ -189,7 +191,7 @@ class EditContactActivity : ContactActivity() {
|
||||
contact_email_add_new.setOnClickListener { addNewEmailField() }
|
||||
contact_address_add_new.setOnClickListener { addNewAddressField() }
|
||||
contact_event_add_new.setOnClickListener { addNewEventField() }
|
||||
contact_groups_add_new.setOnClickListener { addNewGroupField() }
|
||||
contact_groups_add_new.setOnClickListener { showSelectGroupsDialog() }
|
||||
|
||||
contact_toggle_favorite.apply {
|
||||
setImageDrawable(getStarDrawable(contact!!.starred == 1))
|
||||
@ -363,6 +365,13 @@ class EditContactActivity : ContactActivity() {
|
||||
setupEventTypePicker(this)
|
||||
}
|
||||
}
|
||||
|
||||
if (contact!!.groups.isEmpty()) {
|
||||
val groupsHolder = contact_groups_holder.getChildAt(0)
|
||||
(groupsHolder as? ViewGroup)?.contact_group?.apply {
|
||||
setupGroupsPicker(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupPhoneNumberTypePicker(numberTypeField: TextView, type: Int = DEFAULT_PHONE_NUMBER_TYPE) {
|
||||
@ -426,6 +435,16 @@ class EditContactActivity : ContactActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupGroupsPicker(groupTitleField: TextView, group: Group? = null) {
|
||||
groupTitleField.apply {
|
||||
text = group?.title ?: getString(R.string.no_groups)
|
||||
alpha = if (group == null) 0.5f else 1f
|
||||
setOnClickListener {
|
||||
showSelectGroupsDialog()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun resetContactEvent(contactEvent: TextView, removeContactEventButton: ImageView) {
|
||||
contactEvent.apply {
|
||||
text = getString(R.string.unknown)
|
||||
@ -493,6 +512,12 @@ class EditContactActivity : ContactActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun showSelectGroupsDialog() {
|
||||
SelectGroupsDialog(this@EditContactActivity, contact!!.groups) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveContact() {
|
||||
if (isSaving || contact == null) {
|
||||
return
|
||||
@ -657,10 +682,6 @@ class EditContactActivity : ContactActivity() {
|
||||
contact_events_holder.addView(eventHolder)
|
||||
}
|
||||
|
||||
private fun addNewGroupField() {
|
||||
|
||||
}
|
||||
|
||||
private fun toggleFavorite() {
|
||||
val isStarred = isContactStarred()
|
||||
contact_toggle_favorite.apply {
|
||||
|
@ -0,0 +1,69 @@
|
||||
package com.simplemobiletools.contacts.dialogs
|
||||
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
import com.simplemobiletools.contacts.R
|
||||
import com.simplemobiletools.contacts.activities.SimpleActivity
|
||||
import com.simplemobiletools.contacts.helpers.ContactsHelper
|
||||
import com.simplemobiletools.contacts.models.Group
|
||||
import kotlinx.android.synthetic.main.dialog_select_groups.view.*
|
||||
import kotlinx.android.synthetic.main.item_checkbox.view.*
|
||||
import kotlinx.android.synthetic.main.item_textview.view.*
|
||||
import java.util.*
|
||||
|
||||
class SelectGroupsDialog(val activity: SimpleActivity, val selectedGroups: ArrayList<Group>, val callback: (newGroups: ArrayList<Group>) -> Unit) {
|
||||
private val NEW_GROUP_ID = -1
|
||||
|
||||
private val dialog: AlertDialog?
|
||||
private val checkboxes = ArrayList<MyAppCompatCheckbox>()
|
||||
private val groups = ContactsHelper(activity).getStoredGroups()
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_groups, null) as ViewGroup
|
||||
groups.forEach {
|
||||
activity.layoutInflater.inflate(R.layout.item_checkbox, null, false).apply {
|
||||
checkboxes.add(item_checkbox)
|
||||
item_checkbox_holder.setOnClickListener {
|
||||
item_checkbox.toggle()
|
||||
}
|
||||
item_checkbox.apply {
|
||||
isChecked = selectedGroups.contains(it)
|
||||
text = it.title
|
||||
tag = it.id
|
||||
}
|
||||
view.dialog_groups_holder.addView(this)
|
||||
}
|
||||
}
|
||||
|
||||
val newGroup = Group(NEW_GROUP_ID, activity.getString(R.string.create_new_group))
|
||||
activity.layoutInflater.inflate(R.layout.item_textview, null, false).item_textview.apply {
|
||||
text = newGroup.title
|
||||
tag = newGroup.id
|
||||
view.dialog_groups_holder.addView(this)
|
||||
setOnClickListener {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() })
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this)
|
||||
}
|
||||
}
|
||||
|
||||
private fun dialogConfirmed() {
|
||||
val selectedGroups = ArrayList<Group>()
|
||||
checkboxes.filter { it.isChecked }.forEach {
|
||||
val groupId = it.tag as Int
|
||||
groups.firstOrNull { it.id == groupId }?.apply {
|
||||
selectedGroups.add(this)
|
||||
}
|
||||
}
|
||||
|
||||
callback(selectedGroups)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user