implement a Group picker dialog

This commit is contained in:
tibbi 2018-03-18 16:57:50 +01:00
parent 27855ca574
commit b31e7b0086
14 changed files with 150 additions and 5 deletions

View File

@ -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 {

View File

@ -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)
}
}

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_radio_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/dialog_groups_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin"
android:paddingTop="@dimen/normal_margin"/>
</ScrollView>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_checkbox_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/normal_margin"
android:paddingTop="@dimen/normal_margin">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/item_checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"/>
</RelativeLayout>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.commons.views.MyTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/activity_margin"
android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/medium_margin"
android:paddingTop="@dimen/activity_margin"/>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Gerätespeicher</string>
<string name="phone_storage_hidden">Gerätespeicher (nicht sichtbar für andere Apps)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">Neuer Kontakt</string>
<string name="edit_contact">Kontakt bearbeiten</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Stockage du téléphone</string>
<string name="phone_storage_hidden">Stockage du téléphone (non visible par d\'autres applis)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">Nouveau contact</string>
<string name="edit_contact">Modifier contact</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Phone storage</string>
<string name="phone_storage_hidden">Phone storage (not visible by other apps)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">새로운 연락처</string>
<string name="edit_contact">연락처 수정</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Armazenamento do telefone</string>
<string name="phone_storage_hidden">Armazenamento do telefone (não visível por outras alicações)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">Novo contacto</string>
<string name="edit_contact">Editar contacto</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Память устройства</string>
<string name="phone_storage_hidden">Память устройства (не видна другим приложениям)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">Новый контакт</string>
<string name="edit_contact">Редактировать контакт</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Úložisko mobilu</string>
<string name="phone_storage_hidden">Úložisko mobilu (neviditeľné pre ostatné apky)</string>
<string name="no_groups">Žiadne skupiny</string>
<string name="create_new_group">Vytvoriť novú skupinu</string>
<string name="new_contact">Nový kontakt</string>
<string name="edit_contact">Upraviť kontakt</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Telefonens lagringsutrymme</string>
<string name="phone_storage_hidden">Telefonens lagringsutrymme (inte synligt för andra appar)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">Ny kontakt</string>
<string name="edit_contact">Redigera kontakt</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">手機空間</string>
<string name="phone_storage_hidden">手機空間 (其他程式不可見)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">新聯絡人</string>
<string name="edit_contact">編輯聯絡人</string>

View File

@ -7,6 +7,7 @@
<string name="phone_storage">Phone storage</string>
<string name="phone_storage_hidden">Phone storage (not visible by other apps)</string>
<string name="no_groups">No groups</string>
<string name="create_new_group">Create a new group</string>
<string name="new_contact">New contact</string>
<string name="edit_contact">Edit contact</string>