mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-05-19 12:04:29 +02:00
implement new group creation
This commit is contained in:
parent
6750512f11
commit
c3a148282f
@ -505,7 +505,7 @@ class EditContactActivity : ContactActivity() {
|
|||||||
removeContactEventButton.beGone()
|
removeContactEventButton.beGone()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun removeGroup(id: Int) {
|
private fun removeGroup(id: Long) {
|
||||||
contact!!.groups = contact!!.groups.filter { it.id != id } as ArrayList<Group>
|
contact!!.groups = contact!!.groups.filter { it.id != id } as ArrayList<Group>
|
||||||
setupGroups()
|
setupGroups()
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package com.simplemobiletools.contacts.dialogs
|
||||||
|
|
||||||
|
import android.support.v7.app.AlertDialog
|
||||||
|
import android.view.View
|
||||||
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
|
import com.simplemobiletools.commons.extensions.showKeyboard
|
||||||
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
|
import com.simplemobiletools.commons.extensions.value
|
||||||
|
import com.simplemobiletools.contacts.R
|
||||||
|
import com.simplemobiletools.contacts.helpers.ContactsHelper
|
||||||
|
import com.simplemobiletools.contacts.models.Group
|
||||||
|
import kotlinx.android.synthetic.main.dialog_create_new_group.view.*
|
||||||
|
|
||||||
|
class CreateNewGroupDialog(val activity: BaseSimpleActivity, val callback: (newGroup: Group) -> Unit) {
|
||||||
|
init {
|
||||||
|
val view = activity.layoutInflater.inflate(R.layout.dialog_create_new_group, null)
|
||||||
|
|
||||||
|
AlertDialog.Builder(activity)
|
||||||
|
.setPositiveButton(R.string.ok, null)
|
||||||
|
.setNegativeButton(R.string.cancel, null)
|
||||||
|
.create().apply {
|
||||||
|
activity.setupDialogStuff(view, this, R.string.create_new_group) {
|
||||||
|
showKeyboard(view.group_name)
|
||||||
|
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(View.OnClickListener {
|
||||||
|
val name = view.group_name.value
|
||||||
|
if (name.isEmpty()) {
|
||||||
|
activity.toast(R.string.empty_name)
|
||||||
|
return@OnClickListener
|
||||||
|
}
|
||||||
|
|
||||||
|
val newGroup = ContactsHelper(activity).createNewGroup(name)
|
||||||
|
if (newGroup != null) {
|
||||||
|
callback(newGroup)
|
||||||
|
}
|
||||||
|
dismiss()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ import com.simplemobiletools.commons.extensions.setupDialogStuff
|
|||||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||||
import com.simplemobiletools.contacts.R
|
import com.simplemobiletools.contacts.R
|
||||||
import com.simplemobiletools.contacts.activities.SimpleActivity
|
import com.simplemobiletools.contacts.activities.SimpleActivity
|
||||||
|
import com.simplemobiletools.contacts.extensions.config
|
||||||
import com.simplemobiletools.contacts.helpers.ContactsHelper
|
import com.simplemobiletools.contacts.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.contacts.models.Group
|
import com.simplemobiletools.contacts.models.Group
|
||||||
import kotlinx.android.synthetic.main.dialog_select_groups.view.*
|
import kotlinx.android.synthetic.main.dialog_select_groups.view.*
|
||||||
@ -14,38 +15,18 @@ import kotlinx.android.synthetic.main.item_textview.view.*
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class SelectGroupsDialog(val activity: SimpleActivity, val selectedGroups: ArrayList<Group>, val callback: (newGroups: ArrayList<Group>) -> Unit) {
|
class SelectGroupsDialog(val activity: SimpleActivity, val selectedGroups: ArrayList<Group>, val callback: (newGroups: ArrayList<Group>) -> Unit) {
|
||||||
private val NEW_GROUP_ID = -1
|
private val view = activity.layoutInflater.inflate(R.layout.dialog_select_groups, null) as ViewGroup
|
||||||
|
|
||||||
private val dialog: AlertDialog?
|
|
||||||
private val checkboxes = ArrayList<MyAppCompatCheckbox>()
|
private val checkboxes = ArrayList<MyAppCompatCheckbox>()
|
||||||
private val groups = ContactsHelper(activity).getStoredGroups()
|
private val groups = ContactsHelper(activity).getStoredGroups()
|
||||||
|
private val config = activity.config
|
||||||
|
private val dialog: AlertDialog?
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_groups, null) as ViewGroup
|
|
||||||
groups.forEach {
|
groups.forEach {
|
||||||
activity.layoutInflater.inflate(R.layout.item_checkbox, null, false).apply {
|
addGroupCheckbox(it)
|
||||||
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))
|
addCreateNewGroupButton()
|
||||||
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)
|
dialog = AlertDialog.Builder(activity)
|
||||||
.setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() })
|
.setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() })
|
||||||
@ -55,10 +36,45 @@ class SelectGroupsDialog(val activity: SimpleActivity, val selectedGroups: Array
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun addGroupCheckbox(group: Group) {
|
||||||
|
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(group)
|
||||||
|
text = group.title
|
||||||
|
tag = group.id
|
||||||
|
setColors(config.textColor, config.primaryColor, config.backgroundColor)
|
||||||
|
}
|
||||||
|
view.dialog_groups_holder.addView(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addCreateNewGroupButton() {
|
||||||
|
val newGroup = Group(0, 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
|
||||||
|
setTextColor(config.textColor)
|
||||||
|
view.dialog_groups_holder.addView(this)
|
||||||
|
setOnClickListener {
|
||||||
|
CreateNewGroupDialog(activity) {
|
||||||
|
selectedGroups.add(it)
|
||||||
|
groups.add(it)
|
||||||
|
view.dialog_groups_holder.removeViewAt(view.dialog_groups_holder.childCount - 1)
|
||||||
|
addGroupCheckbox(it)
|
||||||
|
addCreateNewGroupButton()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun dialogConfirmed() {
|
private fun dialogConfirmed() {
|
||||||
val selectedGroups = ArrayList<Group>()
|
val selectedGroups = ArrayList<Group>()
|
||||||
checkboxes.filter { it.isChecked }.forEach {
|
checkboxes.filter { it.isChecked }.forEach {
|
||||||
val groupId = it.tag as Int
|
val groupId = it.tag as Long
|
||||||
groups.firstOrNull { it.id == groupId }?.apply {
|
groups.firstOrNull { it.id == groupId }?.apply {
|
||||||
selectedGroups.add(this)
|
selectedGroups.add(this)
|
||||||
}
|
}
|
||||||
|
@ -13,10 +13,7 @@ import android.provider.ContactsContract.CommonDataKinds.Note
|
|||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
import com.simplemobiletools.commons.extensions.getIntValue
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.extensions.getStringValue
|
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME
|
import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME
|
import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_SURNAME
|
import com.simplemobiletools.commons.helpers.SORT_BY_SURNAME
|
||||||
@ -335,7 +332,7 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
|
|||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
||||||
val newRowId = cursor.getIntValue(ContactsContract.Data.DATA1)
|
val newRowId = cursor.getLongValue(ContactsContract.Data.DATA1)
|
||||||
|
|
||||||
if (groups[id] == null) {
|
if (groups[id] == null) {
|
||||||
groups.put(id, ArrayList())
|
groups.put(id, ArrayList())
|
||||||
@ -371,7 +368,7 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
|
|||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Groups._ID)
|
val id = cursor.getLongValue(ContactsContract.Groups._ID)
|
||||||
val title = cursor.getStringValue(ContactsContract.Groups.TITLE)
|
val title = cursor.getStringValue(ContactsContract.Groups.TITLE)
|
||||||
groups.add(Group(id, title))
|
groups.add(Group(id, title))
|
||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
@ -385,6 +382,23 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
|
|||||||
return groups
|
return groups
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun createNewGroup(title: String): Group? {
|
||||||
|
try {
|
||||||
|
val operations = ArrayList<ContentProviderOperation>()
|
||||||
|
ContentProviderOperation.newInsert(ContactsContract.Groups.CONTENT_URI).apply {
|
||||||
|
withValue(ContactsContract.Groups.TITLE, title)
|
||||||
|
operations.add(build())
|
||||||
|
}
|
||||||
|
|
||||||
|
val results = activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
|
val rawId = ContentUris.parseId(results[0].uri)
|
||||||
|
return Group(rawId, title)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
activity.showErrorToast(e)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
fun getContactWithId(id: Int, isLocalPrivate: Boolean): Contact? {
|
fun getContactWithId(id: Int, isLocalPrivate: Boolean): Contact? {
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
return null
|
return null
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.contacts.models
|
package com.simplemobiletools.contacts.models
|
||||||
|
|
||||||
data class Group(var id: Int, var title: String)
|
data class Group(var id: Long, var title: String)
|
||||||
|
28
app/src/main/res/layout/dialog_create_new_group.xml
Normal file
28
app/src/main/res/layout/dialog_create_new_group.xml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/dialog_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="@dimen/activity_margin"
|
||||||
|
android:paddingRight="@dimen/activity_margin"
|
||||||
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyTextView
|
||||||
|
android:id="@+id/group_label"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/name"/>
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyEditText
|
||||||
|
android:id="@+id/group_name"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="@dimen/activity_margin"
|
||||||
|
android:inputType="textCapSentences"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textCursorDrawable="@null"
|
||||||
|
android:textSize="@dimen/normal_text_size"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
Loading…
x
Reference in New Issue
Block a user