From 488a5d902596332928ab72b99a95084c310b48b6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 30 Dec 2017 16:35:47 +0100 Subject: [PATCH] move the contacts fragment handling in the shared parent fragment --- .../contacts/fragments/ContactsFragment.kt | 134 +---------------- .../contacts/fragments/FavoritesFragment.kt | 38 +---- .../contacts/fragments/MyViewPagerFragment.kt | 136 +++++++++++++++++- app/src/main/res/layout/fragment_contacts.xml | 60 +------- .../main/res/layout/fragment_favorites.xml | 15 +- app/src/main/res/layout/fragment_layout.xml | 65 +++++++++ 6 files changed, 204 insertions(+), 244 deletions(-) create mode 100644 app/src/main/res/layout/fragment_layout.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/ContactsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/ContactsFragment.kt index 4749689f..4525a534 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/ContactsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/ContactsFragment.kt @@ -2,141 +2,11 @@ package com.simplemobiletools.contacts.fragments import android.content.Context import android.content.Intent -import android.graphics.Paint import android.util.AttributeSet -import com.simplemobiletools.commons.extensions.beVisibleIf -import com.simplemobiletools.commons.extensions.isActivityDestroyed -import com.simplemobiletools.commons.extensions.toast -import com.simplemobiletools.commons.extensions.updateTextColors -import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME -import com.simplemobiletools.commons.helpers.SORT_BY_SURNAME -import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener -import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.activities.ContactActivity -import com.simplemobiletools.contacts.activities.MainActivity -import com.simplemobiletools.contacts.activities.SimpleActivity -import com.simplemobiletools.contacts.adapters.ContactsAdapter -import com.simplemobiletools.contacts.extensions.openContact -import com.simplemobiletools.contacts.extensions.tryStartCall -import com.simplemobiletools.contacts.helpers.ContactsHelper -import com.simplemobiletools.contacts.models.Contact -import kotlinx.android.synthetic.main.fragment_contacts.view.* -class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), RefreshRecyclerViewListener { - var activity: MainActivity? = null - - override fun initFragment(activity: MainActivity) { - if (this.activity == null) { - this.activity = activity - contacts_fab.setOnClickListener { - addNewContact() - } - - contacts_placeholder_2.setOnClickListener { - activity.showFilterDialog() - } - - contacts_placeholder_2.paintFlags = contacts_placeholder_2.paintFlags or Paint.UNDERLINE_TEXT_FLAG - updateViewStuff() - } - - initContacts() - } - - override fun textColorChanged(color: Int) { - (contacts_list.adapter as ContactsAdapter).apply { - updateTextColor(color) - initDrawables() - } - } - - override fun primaryColorChanged(color: Int) { - contacts_fastscroller.updatePrimaryColor() - contacts_fab.setColors(config.textColor, color, config.backgroundColor) - contacts_fastscroller.updateBubblePrimaryColor() - } - - override fun startNameWithSurnameChanged(startNameWithSurname: Boolean) { - (contacts_list.adapter as ContactsAdapter).apply { - config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME - initContacts() - } - } - - override fun onActivityResume() { - updateViewStuff() - } - - private fun updateViewStuff() { - context.updateTextColors(contacts_fragment) - contacts_fastscroller.updateBubbleColors() - contacts_fastscroller.allowBubbleDisplay = config.showInfoBubble - contacts_placeholder_2.setTextColor(config.primaryColor) - } - - fun initContacts() { - if (activity == null || activity!!.isActivityDestroyed()) { - return - } - - ContactsHelper(activity!!).getContacts { - if (activity == null || activity!!.isActivityDestroyed()) { - return@getContacts - } - - if (config.lastUsedContactSource.isEmpty()) { - val grouped = it.groupBy { it.source }.maxWith(compareBy { it.value.size }) - config.lastUsedContactSource = grouped?.key ?: "" - } - - Contact.sorting = config.sorting - it.sort() - - if (it.hashCode() != (contacts_list.adapter as? ContactsAdapter)?.contactItems?.hashCode()) { - activity!!.runOnUiThread { - setupContacts(it) - } - } - } - } - - private fun setupContacts(contacts: ArrayList) { - contacts_placeholder_2.beVisibleIf(contacts.isEmpty()) - contacts_placeholder.beVisibleIf(contacts.isEmpty()) - - val currAdapter = contacts_list.adapter - if (currAdapter == null) { - ContactsAdapter(activity as SimpleActivity, contacts, this, contacts_list) { - if (config.callContact) { - val contact = it as Contact - if (contact.phoneNumbers.isNotEmpty()) { - (activity as SimpleActivity).tryStartCall(it) - } else { - activity!!.toast(R.string.no_phone_number_found) - } - } else { - context!!.openContact(it as Contact) - } - }.apply { - setupDragListener(true) - addVerticalDividers(true) - contacts_list.adapter = this - } - - contacts_fastscroller.setViews(contacts_list) { - val item = (contacts_list.adapter as ContactsAdapter).contactItems.getOrNull(it) - contacts_fastscroller.updateBubbleText(item?.getBubbleText() ?: "") - } - } else { - (currAdapter as ContactsAdapter).apply { - startNameWithSurname = config.startNameWithSurname - showPhoneNumbers = config.showPhoneNumbers - updateItems(contacts) - } - } - } - - private fun addNewContact() { +class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { + override fun fabClicked() { Intent(context, ContactActivity::class.java).apply { context.startActivity(this) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/FavoritesFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/FavoritesFragment.kt index 7d374a43..b9a79dd5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/FavoritesFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/FavoritesFragment.kt @@ -2,42 +2,16 @@ package com.simplemobiletools.contacts.fragments import android.content.Context import android.util.AttributeSet -import com.simplemobiletools.contacts.activities.MainActivity import com.simplemobiletools.contacts.dialogs.AddFavoritesDialog -import kotlinx.android.synthetic.main.fragment_favorites.view.* class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { - var activity: MainActivity? = null - override fun initFragment(activity: MainActivity) { - if (this.activity == null) { - this.activity = activity - favorites_fab.setOnClickListener { - addNewFavorites() - } - } - - initFavorites() - } - - override fun textColorChanged(color: Int) { - } - - override fun primaryColorChanged(color: Int) { - } - - override fun startNameWithSurnameChanged(startNameWithSurname: Boolean) { - } - - override fun onActivityResume() { - } - - private fun initFavorites() { - - } - - private fun addNewFavorites() { + override fun fabClicked() { AddFavoritesDialog(activity!!) { - initFavorites() + initContacts() } } + + override fun refreshItems() { + initContacts() + } } 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 c19f3b9c..dcc1f257 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt @@ -1,27 +1,149 @@ package com.simplemobiletools.contacts.fragments import android.content.Context +import android.graphics.Paint import android.support.design.widget.CoordinatorLayout import android.util.AttributeSet +import com.simplemobiletools.commons.extensions.beVisibleIf +import com.simplemobiletools.commons.extensions.isActivityDestroyed +import com.simplemobiletools.commons.extensions.toast +import com.simplemobiletools.commons.extensions.updateTextColors +import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME +import com.simplemobiletools.commons.helpers.SORT_BY_SURNAME +import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener +import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.activities.MainActivity +import com.simplemobiletools.contacts.activities.SimpleActivity +import com.simplemobiletools.contacts.adapters.ContactsAdapter import com.simplemobiletools.contacts.extensions.config +import com.simplemobiletools.contacts.extensions.openContact +import com.simplemobiletools.contacts.extensions.tryStartCall import com.simplemobiletools.contacts.helpers.Config +import com.simplemobiletools.contacts.helpers.ContactsHelper +import com.simplemobiletools.contacts.models.Contact +import kotlinx.android.synthetic.main.fragment_layout.view.* -abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet) { +abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet), RefreshRecyclerViewListener { + var activity: MainActivity? = null lateinit var config: Config fun setupFragment(activity: MainActivity) { config = activity.config - initFragment(activity) + if (this.activity == null) { + this.activity = activity + fragment_fab.setOnClickListener { + fabClicked() + } + + fragment_placeholder_2.setOnClickListener { + activity.showFilterDialog() + } + + fragment_placeholder_2.paintFlags = fragment_placeholder_2.paintFlags or Paint.UNDERLINE_TEXT_FLAG + updateViewStuff() + } + + initContacts() } - abstract fun initFragment(activity: MainActivity) + fun textColorChanged(color: Int) { + (fragment_list.adapter as ContactsAdapter).apply { + updateTextColor(color) + initDrawables() + } + } - abstract fun textColorChanged(color: Int) + fun primaryColorChanged(color: Int) { + fragment_fastscroller.updatePrimaryColor() + fragment_fab.setColors(config.textColor, color, config.backgroundColor) + fragment_fastscroller.updateBubblePrimaryColor() + } - abstract fun primaryColorChanged(color: Int) + fun startNameWithSurnameChanged(startNameWithSurname: Boolean) { + (fragment_list.adapter as ContactsAdapter).apply { + config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME + initContacts() + } + } - abstract fun startNameWithSurnameChanged(startNameWithSurname: Boolean) + fun initContacts() { + if (activity == null || activity!!.isActivityDestroyed()) { + return + } - abstract fun onActivityResume() + ContactsHelper(activity!!).getContacts { + var contacts = it + if (activity == null || activity!!.isActivityDestroyed()) { + return@getContacts + } + + if (config.lastUsedContactSource.isEmpty()) { + val grouped = contacts.groupBy { it.source }.maxWith(compareBy { it.value.size }) + config.lastUsedContactSource = grouped?.key ?: "" + } + + Contact.sorting = config.sorting + contacts.sort() + + if (this is FavoritesFragment) { + val favorites = config.favorites + contacts = contacts.filter { favorites.contains(it.id.toString()) } as ArrayList + } + + if (contacts.hashCode() != (fragment_list.adapter as? ContactsAdapter)?.contactItems?.hashCode()) { + activity!!.runOnUiThread { + setupContacts(contacts) + } + } + } + } + + private fun setupContacts(contacts: ArrayList) { + fragment_placeholder_2.beVisibleIf(contacts.isEmpty()) + fragment_placeholder.beVisibleIf(contacts.isEmpty()) + + val currAdapter = fragment_list.adapter + if (currAdapter == null) { + ContactsAdapter(activity as SimpleActivity, contacts, this, fragment_list) { + if (config.callContact) { + val contact = it as Contact + if (contact.phoneNumbers.isNotEmpty()) { + (activity as SimpleActivity).tryStartCall(it) + } else { + activity!!.toast(R.string.no_phone_number_found) + } + } else { + context!!.openContact(it as Contact) + } + }.apply { + setupDragListener(true) + addVerticalDividers(true) + fragment_list.adapter = this + } + + fragment_fastscroller.setViews(fragment_list) { + val item = (fragment_list.adapter as ContactsAdapter).contactItems.getOrNull(it) + fragment_fastscroller.updateBubbleText(item?.getBubbleText() ?: "") + } + } else { + (currAdapter as ContactsAdapter).apply { + startNameWithSurname = config.startNameWithSurname + showPhoneNumbers = config.showPhoneNumbers + updateItems(contacts) + } + } + } + + fun onActivityResume() { + updateViewStuff() + } + + private fun updateViewStuff() { + context.updateTextColors(fragment_wrapper) + fragment_fastscroller.updateBubbleColors() + fragment_fastscroller.allowBubbleDisplay = config.showInfoBubble + fragment_placeholder_2.setTextColor(config.primaryColor) + } + + abstract fun fabClicked() } diff --git a/app/src/main/res/layout/fragment_contacts.xml b/app/src/main/res/layout/fragment_contacts.xml index bf9f8cf6..f4856ff0 100644 --- a/app/src/main/res/layout/fragment_contacts.xml +++ b/app/src/main/res/layout/fragment_contacts.xml @@ -1,68 +1,10 @@ - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/fragment_favorites.xml b/app/src/main/res/layout/fragment_favorites.xml index f550b00f..8ba99a90 100644 --- a/app/src/main/res/layout/fragment_favorites.xml +++ b/app/src/main/res/layout/fragment_favorites.xml @@ -5,19 +5,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + diff --git a/app/src/main/res/layout/fragment_layout.xml b/app/src/main/res/layout/fragment_layout.xml new file mode 100644 index 00000000..e543b233 --- /dev/null +++ b/app/src/main/res/layout/fragment_layout.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + +