From d2daf6efdbb98616289da27acfbe7421d8412ec7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 20 Mar 2018 17:30:13 +0100 Subject: [PATCH] make GroupsFragment inherit from MyViewPagerFragment too --- .../contacts/activities/MainActivity.kt | 13 +- .../contacts/adapters/ViewPagerAdapter.kt | 4 +- .../contacts/fragments/GroupsFragment.kt | 136 ++---------------- .../contacts/fragments/MyViewPagerFragment.kt | 114 ++++++++++++--- .../contacts/interfaces/FragmentInterface.kt | 26 ---- app/src/main/res/layout/fragment_groups.xml | 62 +------- 6 files changed, 111 insertions(+), 244 deletions(-) delete mode 100644 app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt 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 a677e002..63a6cbdb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -28,7 +28,6 @@ import com.simplemobiletools.contacts.extensions.dbHelper import com.simplemobiletools.contacts.extensions.getTempFile import com.simplemobiletools.contacts.helpers.ContactsHelper import com.simplemobiletools.contacts.helpers.VcfExporter -import com.simplemobiletools.contacts.interfaces.FragmentInterface import com.simplemobiletools.contacts.interfaces.RefreshContactsListener import com.simplemobiletools.contacts.models.Contact import kotlinx.android.synthetic.main.activity_main.* @@ -94,7 +93,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { val configShowContactThumbnails = config.showContactThumbnails if (storedShowContactThumbnails != configShowContactThumbnails) { getAllFragments().forEach { - (it as? FragmentInterface)?.showContactThumbnailsChanged(configShowContactThumbnails) + it?.showContactThumbnailsChanged(configShowContactThumbnails) } } @@ -104,7 +103,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { main_tabs_holder.getTabAt(it)?.icon?.applyColorFilter(configTextColor) } getAllFragments().forEach { - (it as? FragmentInterface)?.textColorChanged(configTextColor) + it?.textColorChanged(configTextColor) } } @@ -118,7 +117,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { main_tabs_holder.setSelectedTabIndicatorColor(getAdjustedPrimaryColor()) main_tabs_holder.getTabAt(viewpager.currentItem)?.icon?.applyColorFilter(getAdjustedPrimaryColor()) getAllFragments().forEach { - (it as? FragmentInterface)?.primaryColorChanged(configPrimaryColor) + it?.primaryColorChanged(configPrimaryColor) } } @@ -134,7 +133,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } getAllFragments().forEach { - (it as? FragmentInterface)?.onActivityResume() + it?.onActivityResume() } refreshContacts(true, true) } @@ -219,7 +218,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { }) } - private fun getCurrentFragment(): FragmentInterface? = when (viewpager.currentItem) { + private fun getCurrentFragment() = when (viewpager.currentItem) { 0 -> contacts_fragment 1 -> favorites_fragment else -> groups_fragment @@ -286,7 +285,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { override fun onPageSelected(position: Int) { main_tabs_holder.getTabAt(position)?.select() getAllFragments().forEach { - (it as? FragmentInterface)?.finishActMode() + it?.finishActMode() } invalidateOptionsMenu() } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt index 1adebd21..beb17f42 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt @@ -5,7 +5,7 @@ import android.view.View import android.view.ViewGroup import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.activities.MainActivity -import com.simplemobiletools.contacts.interfaces.FragmentInterface +import com.simplemobiletools.contacts.fragments.MyViewPagerFragment import com.simplemobiletools.contacts.models.Contact class ViewPagerAdapter(val activity: MainActivity, val contacts: ArrayList) : PagerAdapter() { @@ -14,7 +14,7 @@ class ViewPagerAdapter(val activity: MainActivity, val contacts: ArrayList() - - override fun setupFragment(activity: MainActivity) { - if (this.activity == null) { - this.activity = activity - groups_fab.setOnClickListener { - fabClicked() - } - - groups_placeholder_2.setOnClickListener { - fabClicked() - } - - groups_placeholder_2.underlineText() - updateViewStuff() - } +class GroupsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { + override fun fabClicked() { + finishActMode() + showNewGroupsDialog() } - private fun fabClicked() { + override fun placeholderClicked() { + showNewGroupsDialog() + } + + private fun showNewGroupsDialog() { CreateNewGroupDialog(activity as SimpleActivity) { - refreshContacts(lastContacts) + refreshContacts(allContacts) } } - - override fun textColorChanged(color: Int) { - (groups_list.adapter as GroupsAdapter).updateTextColor(color) - } - - override fun primaryColorChanged(color: Int) { - groups_fastscroller.apply { - updatePrimaryColor() - updateBubblePrimaryColor() - } - } - - override fun refreshContacts(contacts: ArrayList) { - if (activity == null) { - return - } - - lastContacts = contacts - var storedGroups = ContactsHelper(activity!!).getStoredGroups() - contacts.forEach { - it.groups.forEach { - val group = it - val storedGroup = storedGroups.firstOrNull { it.id == group.id } - storedGroup?.addContact() - } - } - - storedGroups = storedGroups.sortedWith(compareBy { it.title }).toList() as? ArrayList ?: ArrayList() - - groups_placeholder_2.beVisibleIf(storedGroups.isEmpty()) - groups_placeholder.beVisibleIf(storedGroups.isEmpty()) - groups_list.beVisibleIf(storedGroups.isNotEmpty()) - - val currAdapter = groups_list.adapter - if (currAdapter == null) { - GroupsAdapter(activity as SimpleActivity, storedGroups, groups_list, groups_fastscroller) { - Intent(activity, GroupContactsActivity::class.java).apply { - putExtra(GROUP, it as Group) - activity!!.startActivity(this) - } - }.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() - } - } - - override fun onActivityResume() { - updateViewStuff() - } - - override fun finishActMode() { - (groups_list.adapter as? GroupsAdapter)?.finishActMode() - } - - override fun onSearchQueryChanged(text: String) { - } - - override fun onSearchOpened() { - } - - override fun onSearchClosed() { - } - - private fun updateViewStuff() { - context.updateTextColors(groups_wrapper.parent as ViewGroup) - groups_fastscroller.updateBubbleColors() - groups_fastscroller.allowBubbleDisplay = context.config.showInfoBubble - groups_placeholder_2.setTextColor(context.getAdjustedPrimaryColor()) - } } 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 83b61c8f..12cf23ca 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt @@ -1,26 +1,30 @@ package com.simplemobiletools.contacts.fragments import android.content.Context +import android.content.Intent import android.support.design.widget.CoordinatorLayout import android.util.AttributeSet import android.view.ViewGroup +import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME import com.simplemobiletools.commons.helpers.SORT_BY_SURNAME import com.simplemobiletools.contacts.R +import com.simplemobiletools.contacts.activities.GroupContactsActivity import com.simplemobiletools.contacts.activities.MainActivity import com.simplemobiletools.contacts.activities.SimpleActivity import com.simplemobiletools.contacts.adapters.ContactsAdapter +import com.simplemobiletools.contacts.adapters.GroupsAdapter import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.extensions.editContact import com.simplemobiletools.contacts.extensions.tryStartCall import com.simplemobiletools.contacts.extensions.viewContact import com.simplemobiletools.contacts.helpers.* -import com.simplemobiletools.contacts.interfaces.FragmentInterface import com.simplemobiletools.contacts.models.Contact +import com.simplemobiletools.contacts.models.Group import kotlinx.android.synthetic.main.fragment_layout.view.* -abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet), FragmentInterface { +abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet) { protected var activity: MainActivity? = null protected var allContacts = ArrayList() @@ -30,7 +34,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) var forceListRedraw = false - override fun setupFragment(activity: MainActivity) { + fun setupFragment(activity: MainActivity) { config = activity.config if (this.activity == null) { this.activity = activity @@ -48,30 +52,39 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) if (this is FavoritesFragment) { fragment_placeholder.text = activity.getString(R.string.no_favorites) fragment_placeholder_2.text = activity.getString(R.string.add_favorites) + } else if (this is GroupsFragment) { + fragment_placeholder.text = activity.getString(R.string.no_group_created) + fragment_placeholder_2.text = activity.getString(R.string.create_group) } } } - override fun textColorChanged(color: Int) { - (fragment_list.adapter as ContactsAdapter).apply { - updateTextColor(color) - initDrawables() + fun textColorChanged(color: Int) { + if (this is GroupsFragment) { + (fragment_list.adapter as GroupsAdapter).updateTextColor(color) + } else { + (fragment_list.adapter as ContactsAdapter).apply { + updateTextColor(color) + initDrawables() + } } } - override fun primaryColorChanged(color: Int) { + fun primaryColorChanged(color: Int) { fragment_fastscroller.updatePrimaryColor() fragment_fastscroller.updateBubblePrimaryColor() } fun startNameWithSurnameChanged(startNameWithSurname: Boolean) { - (fragment_list.adapter as ContactsAdapter).apply { - config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME - this@MyViewPagerFragment.activity!!.refreshContacts(true, true) + if (this !is GroupsFragment) { + (fragment_list.adapter as ContactsAdapter).apply { + config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME + this@MyViewPagerFragment.activity!!.refreshContacts(true, true) + } } } - override fun refreshContacts(contacts: ArrayList) { + fun refreshContacts(contacts: ArrayList) { if (config.lastUsedContactSource.isEmpty()) { val grouped = contacts.groupBy { it.source }.maxWith(compareBy { it.value.size }) config.lastUsedContactSource = grouped?.key ?: "" @@ -101,6 +114,56 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } private fun setupContacts(contacts: ArrayList) { + if (this is GroupsFragment) { + setupGroupsAdapter(contacts) + } else { + setupContactsFavoritesAdapter(contacts) + } + } + + private fun setupGroupsAdapter(contacts: ArrayList) { + var storedGroups = ContactsHelper(activity!!).getStoredGroups() + contacts.forEach { + it.groups.forEach { + val group = it + val storedGroup = storedGroups.firstOrNull { it.id == group.id } + storedGroup?.addContact() + } + } + + storedGroups = storedGroups.sortedWith(compareBy { it.title }).toList() as? ArrayList ?: ArrayList() + + fragment_placeholder_2.beVisibleIf(storedGroups.isEmpty()) + fragment_placeholder.beVisibleIf(storedGroups.isEmpty()) + fragment_list.beVisibleIf(storedGroups.isNotEmpty()) + + val currAdapter = fragment_list.adapter + if (currAdapter == null) { + GroupsAdapter(activity as SimpleActivity, storedGroups, fragment_list, fragment_fastscroller) { + Intent(activity, GroupContactsActivity::class.java).apply { + putExtra(GROUP, it as Group) + activity!!.startActivity(this) + } + }.apply { + setupDragListener(true) + addVerticalDividers(true) + fragment_list.adapter = this + } + + fragment_fastscroller.setScrollTo(0) + fragment_fastscroller.setViews(fragment_list) { + val item = (fragment_list.adapter as GroupsAdapter).groups.getOrNull(it) + fragment_fastscroller.updateBubbleText(item?.getBubbleText() ?: "") + } + } else { + (currAdapter as GroupsAdapter).apply { + showContactThumbnails = activity.config.showContactThumbnails + updateItems(storedGroups) + } + } + } + + private fun setupContactsFavoritesAdapter(contacts: ArrayList) { fragment_placeholder_2.beVisibleIf(contacts.isEmpty()) fragment_placeholder.beVisibleIf(contacts.isEmpty()) fragment_list.beVisibleIf(contacts.isNotEmpty()) @@ -143,22 +206,29 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } } - override fun showContactThumbnailsChanged(showThumbnails: Boolean) { - (fragment_list.adapter as? ContactsAdapter)?.apply { - showContactThumbnails = showThumbnails - notifyDataSetChanged() + fun showContactThumbnailsChanged(showThumbnails: Boolean) { + if (this is GroupsFragment) { + (fragment_list.adapter as? GroupsAdapter)?.apply { + showContactThumbnails = showThumbnails + notifyDataSetChanged() + } + } else { + (fragment_list.adapter as? ContactsAdapter)?.apply { + showContactThumbnails = showThumbnails + notifyDataSetChanged() + } } } - override fun onActivityResume() { + fun onActivityResume() { updateViewStuff() } - override fun finishActMode() { - (fragment_list.adapter as? ContactsAdapter)?.finishActMode() + fun finishActMode() { + (fragment_list.adapter as? MyRecyclerViewAdapter)?.finishActMode() } - override fun onSearchQueryChanged(text: String) { + fun onSearchQueryChanged(text: String) { (fragment_list.adapter as? ContactsAdapter)?.apply { val filtered = contactsIgnoringSearch.filter { it.getFullName(startNameWithSurname).contains(text, true) || @@ -181,11 +251,11 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } } - override fun onSearchOpened() { + fun onSearchOpened() { contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList() } - override fun onSearchClosed() { + fun onSearchClosed() { (fragment_list.adapter as? ContactsAdapter)?.updateItems(contactsIgnoringSearch) if (this is FavoritesFragment) { fragment_placeholder.text = activity?.getString(R.string.no_favorites) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt deleted file mode 100644 index fb785c7a..00000000 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/interfaces/FragmentInterface.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.simplemobiletools.contacts.interfaces - -import com.simplemobiletools.contacts.activities.MainActivity -import com.simplemobiletools.contacts.models.Contact - -interface FragmentInterface { - fun setupFragment(activity: MainActivity) - - fun onActivityResume() - - fun textColorChanged(color: Int) - - fun primaryColorChanged(color: Int) - - fun refreshContacts(contacts: ArrayList) - - fun showContactThumbnailsChanged(showThumbnails: Boolean) - - fun finishActMode() - - fun onSearchQueryChanged(text: String) - - fun onSearchOpened() - - fun onSearchClosed() -} diff --git a/app/src/main/res/layout/fragment_groups.xml b/app/src/main/res/layout/fragment_groups.xml index 4d7ca134..75390472 100644 --- a/app/src/main/res/layout/fragment_groups.xml +++ b/app/src/main/res/layout/fragment_groups.xml @@ -1,70 +1,10 @@ - - - - - - - - - - - - - - - - +