From 796cb13c9c9e510d17acc5f5bd4fae13bc26de73 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 19 Mar 2018 16:44:03 +0100 Subject: [PATCH] populate Groups tab with the contact groups --- .../activities/EditContactActivity.kt | 6 +- .../contacts/activities/MainActivity.kt | 4 + .../contacts/adapters/ContactsAdapter.kt | 2 +- .../contacts/adapters/GroupsAdapter.kt | 104 ++++++++++++++++++ .../contacts/fragments/GroupsFragment.kt | 57 +++++++++- .../contacts/fragments/MyViewPagerFragment.kt | 2 +- .../contacts/interfaces/FragmentInterface.kt | 2 + .../contacts/models/Group.kt | 2 + .../main/res/layout/activity_edit_contact.xml | 2 +- app/src/main/res/layout/fragment_groups.xml | 36 ++++++ .../layout/item_add_favorite_with_number.xml | 1 + .../item_add_favorite_without_number.xml | 1 + app/src/main/res/layout/item_edit_group.xml | 41 +++++++ app/src/main/res/layout/item_group.xml | 64 ++++++----- app/src/main/res/menu/cab_groups.xml | 19 ++++ app/src/main/res/values/donottranslate.xml | 2 + 16 files changed, 305 insertions(+), 40 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/contacts/adapters/GroupsAdapter.kt create mode 100644 app/src/main/res/layout/item_edit_group.xml create mode 100644 app/src/main/res/menu/cab_groups.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt index e5455c46..9729b28d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt @@ -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) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index 16392e06..dc0f6dbe 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -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) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt index 95a04a55..a58898c6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt @@ -32,7 +32,7 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList, 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) { + 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) + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt index f9a2a013..ea2f2731 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt @@ -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) { @@ -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 } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt index e273e94c..1eefc054 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt @@ -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() diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt index 0f49e205..801c22af 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt @@ -11,4 +11,6 @@ interface FragmentInterface { fun primaryColorChanged(color: Int) fun refreshContacts(contacts: ArrayList) + + fun showContactThumbnailsChanged(showThumbnails: Boolean) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt index cf8cc42e..d03775f7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt @@ -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 } diff --git a/app/src/main/res/layout/activity_edit_contact.xml b/app/src/main/res/layout/activity_edit_contact.xml index 66cbe244..f7a2fa11 100644 --- a/app/src/main/res/layout/activity_edit_contact.xml +++ b/app/src/main/res/layout/activity_edit_contact.xml @@ -333,7 +333,7 @@ android:layout_toRightOf="@+id/contact_name_image" android:orientation="vertical"> - + diff --git a/app/src/main/res/layout/fragment_groups.xml b/app/src/main/res/layout/fragment_groups.xml index 02751c10..771bc148 100644 --- a/app/src/main/res/layout/fragment_groups.xml +++ b/app/src/main/res/layout/fragment_groups.xml @@ -1,8 +1,44 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_add_favorite_with_number.xml b/app/src/main/res/layout/item_add_favorite_with_number.xml index 7747f757..c8544807 100644 --- a/app/src/main/res/layout/item_add_favorite_with_number.xml +++ b/app/src/main/res/layout/item_add_favorite_with_number.xml @@ -19,6 +19,7 @@ android:id="@+id/contact_tmb" android:layout_width="@dimen/normal_icon_size" android:layout_height="@dimen/normal_icon_size" + android:layout_centerVertical="true" android:padding="@dimen/medium_margin" android:src="@drawable/ic_person"/> diff --git a/app/src/main/res/layout/item_add_favorite_without_number.xml b/app/src/main/res/layout/item_add_favorite_without_number.xml index 30569bad..a9ecb39d 100644 --- a/app/src/main/res/layout/item_add_favorite_without_number.xml +++ b/app/src/main/res/layout/item_add_favorite_without_number.xml @@ -19,6 +19,7 @@ android:id="@+id/contact_tmb" android:layout_width="@dimen/normal_icon_size" android:layout_height="@dimen/normal_icon_size" + android:layout_centerVertical="true" android:padding="@dimen/medium_margin" android:src="@drawable/ic_person"/> diff --git a/app/src/main/res/layout/item_edit_group.xml b/app/src/main/res/layout/item_edit_group.xml new file mode 100644 index 00000000..5a5620e1 --- /dev/null +++ b/app/src/main/res/layout/item_edit_group.xml @@ -0,0 +1,41 @@ + + + + + + + + diff --git a/app/src/main/res/layout/item_group.xml b/app/src/main/res/layout/item_group.xml index 5a5620e1..d8106772 100644 --- a/app/src/main/res/layout/item_group.xml +++ b/app/src/main/res/layout/item_group.xml @@ -1,41 +1,39 @@ - + android:layout_height="wrap_content" + android:background="?attr/selectableItemBackground" + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/selector"> - + android:paddingRight="@dimen/activity_margin"> - + - + + + + diff --git a/app/src/main/res/menu/cab_groups.xml b/app/src/main/res/menu/cab_groups.xml new file mode 100644 index 00000000..49c496c7 --- /dev/null +++ b/app/src/main/res/menu/cab_groups.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 1943508d..fda11285 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -5,4 +5,6 @@ Added Address and Notes fields Allow storing contacts in a local database, hidden from other apps + %1$s (%2$s) +