Change column count bug fixed

This commit is contained in:
merkost 2023-07-20 11:06:51 +10:00
parent 8f05285188
commit 6b33eb68a2
2 changed files with 40 additions and 43 deletions

View File

@ -44,7 +44,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
} }
} }
fun setupContactsFavoritesAdapter(contacts: ArrayList<Contact>) { fun setupContactsFavoritesAdapter(contacts: List<Contact>) {
setupViewVisibility(contacts.isNotEmpty()) setupViewVisibility(contacts.isNotEmpty())
val currAdapter = fragment_list.adapter val currAdapter = fragment_list.adapter
@ -57,7 +57,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
ContactsAdapter( ContactsAdapter(
activity = activity as SimpleActivity, activity = activity as SimpleActivity,
contactItems = contacts, contactItems = contacts.toMutableList(),
refreshListener = activity as RefreshContactsListener, refreshListener = activity as RefreshContactsListener,
location = location, location = location,
viewType = viewType, viewType = viewType,
@ -110,7 +110,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
} }
fun updateFavoritesColumnCount() { fun updateFavoritesColumnCount() {
setupContactsFavoritesAdapter(allContacts) setupContactsFavoritesAdapter(favouriteContacts)
} }
private fun saveCustomOrderToPrefs(items: List<Contact>) { private fun saveCustomOrderToPrefs(items: List<Contact>) {

View File

@ -5,11 +5,12 @@ import android.content.Intent
import android.util.AttributeSet import android.util.AttributeSet
import android.view.ViewGroup import android.view.ViewGroup
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import com.google.gson.Gson
import com.reddit.indicatorfastscroll.FastScrollItemIndicator import com.reddit.indicatorfastscroll.FastScrollItemIndicator
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.contacts.Contact
import com.simplemobiletools.commons.models.contacts.Group
import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.activities.GroupContactsActivity import com.simplemobiletools.contacts.pro.activities.GroupContactsActivity
import com.simplemobiletools.contacts.pro.activities.InsertOrEditContactActivity import com.simplemobiletools.contacts.pro.activities.InsertOrEditContactActivity
@ -17,29 +18,23 @@ import com.simplemobiletools.contacts.pro.activities.MainActivity
import com.simplemobiletools.contacts.pro.activities.SimpleActivity import com.simplemobiletools.contacts.pro.activities.SimpleActivity
import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
import com.simplemobiletools.contacts.pro.adapters.GroupsAdapter import com.simplemobiletools.contacts.pro.adapters.GroupsAdapter
import com.simplemobiletools.commons.helpers.Converters
import com.simplemobiletools.contacts.pro.helpers.*
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
import com.simplemobiletools.commons.models.contacts.*
import com.simplemobiletools.commons.views.MyGridLayoutManager
import com.simplemobiletools.commons.views.MyLinearLayoutManager
import com.simplemobiletools.contacts.pro.extensions.config import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.helpers.AVOID_CHANGING_TEXT_TAG
import com.simplemobiletools.contacts.pro.helpers.AVOID_CHANGING_VISIBILITY_TAG
import com.simplemobiletools.contacts.pro.helpers.Config
import com.simplemobiletools.contacts.pro.helpers.GROUP
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
import kotlinx.android.synthetic.main.dialog_select_contact.view.letter_fastscroller import kotlinx.android.synthetic.main.dialog_select_contact.view.letter_fastscroller
import kotlinx.android.synthetic.main.fragment_contacts.view.contacts_fragment import kotlinx.android.synthetic.main.fragment_contacts.view.contacts_fragment
import kotlinx.android.synthetic.main.fragment_favorites.view.favorites_fragment import kotlinx.android.synthetic.main.fragment_favorites.view.favorites_fragment
import kotlinx.android.synthetic.main.fragment_layout.view.* import kotlinx.android.synthetic.main.fragment_layout.view.*
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_fab import kotlinx.android.synthetic.main.fragment_letters_layout.view.letter_fastscroller_thumb
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_list import java.util.Locale
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_placeholder
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_placeholder_2
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_wrapper
import kotlinx.android.synthetic.main.fragment_letters_layout.view.*
import java.util.*
import kotlin.collections.ArrayList
abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet) { abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet) {
protected var activity: SimpleActivity? = null protected var activity: SimpleActivity? = null
protected var allContacts = ArrayList<Contact>() protected var allContacts = ArrayList<Contact>()
protected var favouriteContacts = listOf<Contact>()
private var lastHashCode = 0 private var lastHashCode = 0
private var contactsIgnoringSearch = listOf<Contact>() private var contactsIgnoringSearch = listOf<Contact>()
@ -68,11 +63,13 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
this is ContactsFragment -> { this is ContactsFragment -> {
fragment_fab.contentDescription = activity.getString(R.string.create_new_contact) fragment_fab.contentDescription = activity.getString(R.string.create_new_contact)
} }
this is FavoritesFragment -> { this is FavoritesFragment -> {
fragment_placeholder.text = activity.getString(R.string.no_favorites) fragment_placeholder.text = activity.getString(R.string.no_favorites)
fragment_placeholder_2.text = activity.getString(R.string.add_favorites) fragment_placeholder_2.text = activity.getString(R.string.add_favorites)
fragment_fab.contentDescription = activity.getString(R.string.add_favorites) fragment_fab.contentDescription = activity.getString(R.string.add_favorites)
} }
this is GroupsFragment -> { this is GroupsFragment -> {
fragment_placeholder.text = activity.getString(R.string.no_group_created) fragment_placeholder.text = activity.getString(R.string.no_group_created)
fragment_placeholder_2.text = activity.getString(R.string.create_group) fragment_placeholder_2.text = activity.getString(R.string.create_group)
@ -119,26 +116,21 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
} }
if (config.lastUsedContactSource.isEmpty()) { if (config.lastUsedContactSource.isEmpty()) {
val grouped = contacts.asSequence().groupBy { it.source }.maxWithOrNull(compareBy { it.value.size }) val grouped = contacts.groupBy { it.source }.maxWithOrNull(compareBy { it.value.size })
config.lastUsedContactSource = grouped?.key ?: "" config.lastUsedContactSource = grouped?.key ?: ""
} }
allContacts = contacts allContacts = contacts
favouriteContacts = contacts.filter { it.starred == 1 }.sortFavourites(activity!!.config.isCustomOrderSelected)
val filtered = when { val filtered = when (this) {
this is GroupsFragment -> contacts is GroupsFragment -> contacts
this is FavoritesFragment -> { is FavoritesFragment -> {
val favorites = contacts.filter { it.starred == 1 } as ArrayList<Contact> favouriteContacts
if (activity!!.config.isCustomOrderSelected) {
sortByCustomOrder(favorites)
} else {
favorites
}
} }
else -> { else -> {
val contactSources = activity!!.getVisibleContactSources() val contactSources = activity!!.getVisibleContactSources()
contacts.filter { contactSources.contains(it.source) } as ArrayList<Contact> contacts.filter { contactSources.contains(it.source) }
} }
} }
@ -163,33 +155,38 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
} }
} }
private fun sortByCustomOrder(starred: List<Contact>): ArrayList<Contact> { private fun List<Contact>.sortFavourites(shouldSort: Boolean = true): List<Contact> {
val favoritesOrder = activity!!.config.favoritesContactsOrder return if (shouldSort) {
val favoritesOrder = activity!!.config.favoritesContactsOrder
if (favoritesOrder.isEmpty()) { if (favoritesOrder.isEmpty()) {
return ArrayList(starred) return this
}
val orderList = Converters().jsonToStringList(favoritesOrder)
val map = orderList.withIndex().associate { it.value to it.index }
return sortedBy { map[it.id.toString()] }
} else {
this
} }
val orderList = Converters().jsonToStringList(favoritesOrder)
val map = orderList.withIndex().associate { it.value to it.index }
val sorted = starred.sortedBy { map[it.id.toString()] }
return ArrayList(sorted)
} }
private fun setupContacts(contacts: ArrayList<Contact>) { private fun setupContacts(contacts: List<Contact>) {
when (this) { when (this) {
is GroupsFragment -> { is GroupsFragment -> {
setupGroupsAdapter(contacts) { setupGroupsAdapter(contacts) {
groupsIgnoringSearch = (fragment_list?.adapter as? GroupsAdapter)?.groups ?: ArrayList() groupsIgnoringSearch = (fragment_list?.adapter as? GroupsAdapter)?.groups ?: ArrayList()
} }
} }
is FavoritesFragment -> { is FavoritesFragment -> {
favorites_fragment.setupContactsFavoritesAdapter(contacts) favorites_fragment.setupContactsFavoritesAdapter(contacts)
contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: listOf() contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: listOf()
setupLetterFastscroller(contacts) setupLetterFastscroller(contacts)
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller) letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
} }
else -> { else -> {
contacts_fragment.setupContactsAdapter(contacts) contacts_fragment.setupContactsAdapter(contacts)
contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList() contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList()
@ -199,7 +196,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
} }
} }
private fun setupGroupsAdapter(contacts: ArrayList<Contact>, callback: () -> Unit) { private fun setupGroupsAdapter(contacts: List<Contact>, callback: () -> Unit) {
ContactsHelper(activity!!).getStoredGroups { ContactsHelper(activity!!).getStoredGroups {
var storedGroups = it var storedGroups = it
contacts.forEach { contacts.forEach {