populate Groups tab with the contact groups

This commit is contained in:
tibbi
2018-03-19 16:44:03 +01:00
parent 707f3ee4a0
commit 796cb13c9c
16 changed files with 305 additions and 40 deletions

View File

@ -29,7 +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 kotlinx.android.synthetic.main.item_edit_group.view.*
import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat
import java.util.*
@ -331,7 +331,7 @@ class EditContactActivity : ContactActivity() {
groups.forEachIndexed { index, group ->
var groupHolder = contact_groups_holder.getChildAt(index)
if (groupHolder == null) {
groupHolder = layoutInflater.inflate(R.layout.item_group, contact_groups_holder, false)
groupHolder = layoutInflater.inflate(R.layout.item_edit_group, contact_groups_holder, false)
contact_groups_holder.addView(groupHolder)
}
@ -359,7 +359,7 @@ class EditContactActivity : ContactActivity() {
}
if (groups.isEmpty()) {
layoutInflater.inflate(R.layout.item_group, contact_groups_holder, false).apply {
layoutInflater.inflate(R.layout.item_edit_group, contact_groups_holder, false).apply {
contact_group.apply {
alpha = 0.5f
text = getString(R.string.no_groups)

View File

@ -95,6 +95,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
if (storedShowContactThumbnails != configShowContactThumbnails) {
contacts_fragment?.showContactThumbnailsChanged(configShowContactThumbnails)
favorites_fragment?.showContactThumbnailsChanged(configShowContactThumbnails)
groups_fragment?.showContactThumbnailsChanged(configShowContactThumbnails)
}
val configTextColor = config.textColor
@ -104,6 +105,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
}
contacts_fragment?.textColorChanged(configTextColor)
favorites_fragment?.textColorChanged(configTextColor)
groups_fragment?.textColorChanged(configTextColor)
}
val configBackgroundColor = config.backgroundColor
@ -117,6 +119,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
main_tabs_holder.getTabAt(viewpager.currentItem)?.icon?.applyColorFilter(getAdjustedPrimaryColor())
contacts_fragment?.primaryColorChanged(configPrimaryColor)
favorites_fragment?.primaryColorChanged(configPrimaryColor)
groups_fragment?.primaryColorChanged(configPrimaryColor)
}
val configStartNameWithSurname = config.startNameWithSurname
@ -132,6 +135,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
contacts_fragment?.onActivityResume()
favorites_fragment?.onActivityResume()
groups_fragment?.onActivityResume()
refreshContacts(true, true)
}

View File

@ -32,7 +32,7 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
private lateinit var contactDrawable: Drawable
var config = activity.config
private var config = activity.config
var startNameWithSurname: Boolean
var showContactThumbnails: Boolean
var showPhoneNumbers: Boolean

View File

@ -0,0 +1,104 @@
package com.simplemobiletools.contacts.adapters
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.contacts.R
import com.simplemobiletools.contacts.activities.SimpleActivity
import com.simplemobiletools.contacts.extensions.config
import com.simplemobiletools.contacts.models.Group
import kotlinx.android.synthetic.main.item_group.view.*
import java.util.*
class GroupsAdapter(activity: SimpleActivity, var groups: ArrayList<Group>, recyclerView: MyRecyclerView, fastScroller: FastScroller,
itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
private var config = activity.config
private var smallPadding = activity.resources.getDimension(R.dimen.small_margin).toInt()
private var bigPadding = activity.resources.getDimension(R.dimen.normal_margin).toInt()
var showContactThumbnails = config.showContactThumbnails
override fun getActionMenuId() = R.menu.cab_groups
override fun prepareActionMode(menu: Menu) {
menu.apply {
findItem(R.id.cab_edit).isVisible = isOneItemSelected()
}
}
override fun prepareItemSelection(view: View) {}
override fun markItemSelection(select: Boolean, view: View?) {
view?.group_frame?.isSelected = select
}
override fun actionItemPressed(id: Int) {
if (selectedPositions.isEmpty()) {
return
}
when (id) {
R.id.cab_edit -> editGroup()
R.id.cab_select_all -> selectAll()
R.id.cab_delete -> askConfirmDelete()
}
}
override fun getSelectableItemCount() = groups.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_group, parent)
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val group = groups[position]
val view = holder.bindView(group, true) { itemView, layoutPosition ->
setupView(itemView, group)
}
bindViewHolder(holder, position, view)
}
override fun getItemCount() = groups.size
fun updateItems(newItems: ArrayList<Group>) {
groups = newItems
notifyDataSetChanged()
finishActMode()
}
private fun editGroup() {
}
private fun askConfirmDelete() {
ConfirmationDialog(activity) {
deleteContacts()
}
}
private fun deleteContacts() {
if (selectedPositions.isEmpty()) {
return
}
}
private fun setupView(view: View, group: Group) {
view.apply {
group_name.apply {
setTextColor(textColor)
text = String.format(activity.getString(R.string.groups_placeholder), group.title, group.contactsCount.toString())
setPadding(if (showContactThumbnails) smallPadding else bigPadding, smallPadding, smallPadding, 0)
}
group_tmb.beVisibleIf(showContactThumbnails)
if (showContactThumbnails) {
group_tmb.applyColorFilter(textColor)
}
}
}
}

View File

@ -3,21 +3,37 @@ package com.simplemobiletools.contacts.fragments
import android.content.Context
import android.support.design.widget.CoordinatorLayout
import android.util.AttributeSet
import android.view.ViewGroup
import com.simplemobiletools.commons.extensions.updateTextColors
import com.simplemobiletools.contacts.activities.MainActivity
import com.simplemobiletools.contacts.activities.SimpleActivity
import com.simplemobiletools.contacts.adapters.GroupsAdapter
import com.simplemobiletools.contacts.extensions.config
import com.simplemobiletools.contacts.helpers.ContactsHelper
import com.simplemobiletools.contacts.interfaces.FragmentInterface
import com.simplemobiletools.contacts.models.Contact
import kotlinx.android.synthetic.main.fragment_groups.view.*
class GroupsFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet), FragmentInterface {
var activity: MainActivity? = null
override fun setupFragment(activity: MainActivity) {
this.activity = activity
if (this.activity == null) {
this.activity = activity
groups_fab.setOnClickListener {
}
updateViewStuff()
}
}
override fun textColorChanged(color: Int) {
(groups_list.adapter as GroupsAdapter).updateTextColor(color)
}
override fun primaryColorChanged(color: Int) {
groups_fastscroller.updatePrimaryColor()
groups_fastscroller.updateBubblePrimaryColor()
}
override fun refreshContacts(contacts: ArrayList<Contact>) {
@ -33,5 +49,44 @@ class GroupsFragment(context: Context, attributeSet: AttributeSet) : Coordinator
storedGroup?.addContact()
}
}
val currAdapter = groups_list.adapter
if (currAdapter == null) {
GroupsAdapter(activity as SimpleActivity, storedGroups, groups_list, groups_fastscroller) {
}.apply {
setupDragListener(true)
addVerticalDividers(true)
groups_list.adapter = this
}
groups_fastscroller.setScrollTo(0)
groups_fastscroller.setViews(groups_list) {
val item = (groups_list.adapter as GroupsAdapter).groups.getOrNull(it)
groups_fastscroller.updateBubbleText(item?.getBubbleText() ?: "")
}
} else {
(currAdapter as GroupsAdapter).apply {
showContactThumbnails = activity.config.showContactThumbnails
updateItems(storedGroups)
}
}
}
override fun showContactThumbnailsChanged(showThumbnails: Boolean) {
(groups_list.adapter as? GroupsAdapter)?.apply {
showContactThumbnails = showThumbnails
notifyDataSetChanged()
}
}
fun onActivityResume() {
updateViewStuff()
}
private fun updateViewStuff() {
context.updateTextColors(groups_wrapper.parent as ViewGroup)
groups_fastscroller.updateBubbleColors()
groups_fastscroller.allowBubbleDisplay = context.config.showInfoBubble
}
}

View File

@ -142,7 +142,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
}
}
fun showContactThumbnailsChanged(showThumbnails: Boolean) {
override fun showContactThumbnailsChanged(showThumbnails: Boolean) {
(fragment_list.adapter as? ContactsAdapter)?.apply {
showContactThumbnails = showThumbnails
notifyDataSetChanged()

View File

@ -11,4 +11,6 @@ interface FragmentInterface {
fun primaryColorChanged(color: Int)
fun refreshContacts(contacts: ArrayList<Contact>)
fun showContactThumbnailsChanged(showThumbnails: Boolean)
}

View File

@ -2,4 +2,6 @@ package com.simplemobiletools.contacts.models
data class Group(var id: Long, var title: String, var contactsCount: Int = 0) {
fun addContact() = contactsCount++
fun getBubbleText() = title
}