From 5ef3e16f1721dd001f44d8c013717c8505604a8e Mon Sep 17 00:00:00 2001 From: merkost <konstantinlikes@gmail.com> Date: Thu, 20 Jul 2023 12:16:46 +1000 Subject: [PATCH] Refactored and added column count animation --- .../contacts/pro/activities/MainActivity.kt | 16 +++++++-------- .../pro/fragments/FavoritesFragment.kt | 20 ++++++++++++++----- .../pro/fragments/MyViewPagerFragment.kt | 6 ++---- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt index 577a97c7..3182edc6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt @@ -240,6 +240,13 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } } + private fun changeViewType() { + ChangeViewTypeDialog(this) { + refreshMenuItems() + favorites_fragment?.updateFavouritesAdapter() + } + } + private fun changeColumnCount() { val items = (CONTACTS_GRID_MIN_COLUMNS_COUNT..CONTACTS_GRID_MAX_COLUMNS_COUNT).map { RadioItem(it, resources.getQuantityString(R.plurals.column_counts, it, it)) @@ -250,7 +257,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { val newColumnCount = it as Int if (currentColumnCount != newColumnCount) { config.contactsGridColumnCount = newColumnCount - favorites_fragment.updateFavoritesColumnCount() + favorites_fragment?.columnCountChanged() } } } @@ -683,11 +690,4 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { checkWhatsNew(this, BuildConfig.VERSION_CODE) } } - - private fun changeViewType() { - ChangeViewTypeDialog(this) { - refreshMenuItems() - favorites_fragment?.updateFavoritesColumnCount() - } - } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/FavoritesFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/FavoritesFragment.kt index 905a466c..0ee02c75 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/FavoritesFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/FavoritesFragment.kt @@ -24,6 +24,8 @@ import kotlinx.android.synthetic.main.fragment_favorites.view.favorites_fragment import kotlinx.android.synthetic.main.fragment_layout.view.fragment_list class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { + private var favouriteContacts = listOf<Contact>() + override fun fabClicked() { finishActMode() showAddFavoritesDialog() @@ -45,7 +47,8 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa } fun setupContactsFavoritesAdapter(contacts: List<Contact>) { - setupViewVisibility(contacts.isNotEmpty()) + favouriteContacts = contacts + setupViewVisibility(favouriteContacts.isNotEmpty()) val currAdapter = fragment_list.adapter val viewType = context.config.viewType @@ -57,7 +60,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa ContactsAdapter( activity = activity as SimpleActivity, - contactItems = contacts.toMutableList(), + contactItems = favouriteContacts.toMutableList(), refreshListener = activity as RefreshContactsListener, location = location, viewType = viewType, @@ -91,11 +94,15 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa showPhoneNumbers = context.config.showPhoneNumbers showContactThumbnails = context.config.showContactThumbnails this.viewType = viewType - updateItems(contacts) + updateItems(favouriteContacts) } } } + fun updateFavouritesAdapter() { + setupContactsFavoritesAdapter(favouriteContacts) + } + private fun setFavoritesViewType(viewType: Int) { val spanCount = context.config.contactsGridColumnCount @@ -109,8 +116,11 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa fragment_list.layoutManager = layoutManager } - fun updateFavoritesColumnCount() { - setupContactsFavoritesAdapter(favouriteContacts) + fun columnCountChanged() { + (fragment_list.layoutManager as MyGridLayoutManager).spanCount = context!!.config.contactsGridColumnCount + fragment_list?.adapter?.apply { + notifyItemRangeChanged(0, favouriteContacts.size) + } } private fun saveCustomOrderToPrefs(items: List<Contact>) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt index 37e2dbbd..5207e519 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt @@ -34,7 +34,6 @@ import java.util.Locale abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet) { protected var activity: SimpleActivity? = null protected var allContacts = ArrayList<Contact>() - protected var favouriteContacts = listOf<Contact>() private var lastHashCode = 0 private var contactsIgnoringSearch = listOf<Contact>() @@ -121,11 +120,10 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } allContacts = contacts - favouriteContacts = contacts.filter { it.starred == 1 }.sortFavourites(activity!!.config.isCustomOrderSelected) val filtered = when (this) { is GroupsFragment -> contacts is FavoritesFragment -> { - favouriteContacts + contacts.filter { it.starred == 1 }.sortFavourites(activity!!.config.isCustomOrderSelected) } else -> { @@ -139,7 +137,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) currentHash += it.getHashWithoutPrivatePhoto() } - if (currentHash != lastHashCode || skipHashComparing || filtered.size == 0) { + if (currentHash != lastHashCode || skipHashComparing || filtered.isEmpty()) { skipHashComparing = false lastHashCode = currentHash activity?.runOnUiThread {