mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
Contacts favorites grid implemented
This commit is contained in:
@ -21,7 +21,12 @@ 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 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_favorites.view.favorites_fragment
|
||||
import kotlinx.android.synthetic.main.fragment_layout.view.*
|
||||
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_fab
|
||||
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_list
|
||||
@ -30,14 +35,15 @@ import kotlinx.android.synthetic.main.fragment_layout.view.fragment_placeholder_
|
||||
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) {
|
||||
protected var activity: SimpleActivity? = null
|
||||
protected var allContacts = ArrayList<Contact>()
|
||||
|
||||
private var lastHashCode = 0
|
||||
private var contactsIgnoringSearch = ArrayList<Contact>()
|
||||
private var groupsIgnoringSearch = ArrayList<Group>()
|
||||
private var contactsIgnoringSearch = listOf<Contact>()
|
||||
private var groupsIgnoringSearch = listOf<Group>()
|
||||
private lateinit var config: Config
|
||||
|
||||
var skipHashComparing = false
|
||||
@ -172,15 +178,24 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
}
|
||||
|
||||
private fun setupContacts(contacts: ArrayList<Contact>) {
|
||||
if (this is GroupsFragment) {
|
||||
setupGroupsAdapter(contacts) {
|
||||
groupsIgnoringSearch = (fragment_list?.adapter as? GroupsAdapter)?.groups ?: ArrayList()
|
||||
when (this) {
|
||||
is GroupsFragment -> {
|
||||
setupGroupsAdapter(contacts) {
|
||||
groupsIgnoringSearch = (fragment_list?.adapter as? GroupsAdapter)?.groups ?: ArrayList()
|
||||
}
|
||||
}
|
||||
is FavoritesFragment -> {
|
||||
favorites_fragment.setupContactsFavoritesAdapter(contacts)
|
||||
contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: listOf()
|
||||
setupLetterFastscroller(contacts)
|
||||
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
|
||||
}
|
||||
else -> {
|
||||
contacts_fragment.setupContactsAdapter(contacts)
|
||||
contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList()
|
||||
setupLetterFastscroller(contacts)
|
||||
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
|
||||
}
|
||||
} else {
|
||||
setupContactsFavoritesAdapter(contacts)
|
||||
contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList()
|
||||
setupLetterFastscroller(contacts)
|
||||
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
|
||||
}
|
||||
}
|
||||
|
||||
@ -227,63 +242,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupContactsFavoritesAdapter(contacts: ArrayList<Contact>) {
|
||||
setupViewVisibility(contacts.isNotEmpty())
|
||||
val currAdapter = fragment_list.adapter
|
||||
if (currAdapter == null || forceListRedraw) {
|
||||
forceListRedraw = false
|
||||
val location = when {
|
||||
activity is InsertOrEditContactActivity -> LOCATION_INSERT_OR_EDIT
|
||||
this is FavoritesFragment -> LOCATION_FAVORITES_TAB
|
||||
else -> LOCATION_CONTACTS_TAB
|
||||
}
|
||||
|
||||
val enableDragReorder = this is FavoritesFragment
|
||||
ContactsAdapter(
|
||||
activity = activity as SimpleActivity,
|
||||
contactItems = contacts,
|
||||
refreshListener = activity as RefreshContactsListener,
|
||||
location = location,
|
||||
removeListener = null,
|
||||
recyclerView = fragment_list,
|
||||
enableDrag = enableDragReorder,
|
||||
) {
|
||||
(activity as RefreshContactsListener).contactClicked(it as Contact)
|
||||
}.apply {
|
||||
fragment_list.adapter = this
|
||||
if (enableDragReorder) {
|
||||
onDragEndListener = {
|
||||
val adapter = fragment_list?.adapter
|
||||
if (adapter is ContactsAdapter) {
|
||||
val items = adapter.contactItems
|
||||
saveCustomOrderToPrefs(items)
|
||||
setupLetterFastscroller(items)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (context.areSystemAnimationsEnabled) {
|
||||
fragment_list.scheduleLayoutAnimation()
|
||||
}
|
||||
} else {
|
||||
(currAdapter as ContactsAdapter).apply {
|
||||
startNameWithSurname = config.startNameWithSurname
|
||||
showPhoneNumbers = config.showPhoneNumbers
|
||||
showContactThumbnails = config.showContactThumbnails
|
||||
updateItems(contacts)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveCustomOrderToPrefs(items: ArrayList<Contact>) {
|
||||
activity?.apply {
|
||||
val orderIds = items.map { it.id }
|
||||
val orderGsonString = Gson().toJson(orderIds)
|
||||
config.favoritesContactsOrder = orderGsonString
|
||||
}
|
||||
}
|
||||
|
||||
fun showContactThumbnailsChanged(showThumbnails: Boolean) {
|
||||
if (this is GroupsFragment) {
|
||||
(fragment_list.adapter as? GroupsAdapter)?.apply {
|
||||
@ -298,7 +256,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupLetterFastscroller(contacts: ArrayList<Contact>) {
|
||||
fun setupLetterFastscroller(contacts: List<Contact>) {
|
||||
val sorting = context.config.sorting
|
||||
letter_fastscroller.setupWithRecyclerView(fragment_list, { position ->
|
||||
try {
|
||||
@ -396,7 +354,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
setupLetterFastscroller(contactsIgnoringSearch)
|
||||
setupViewVisibility(contactsIgnoringSearch.isNotEmpty())
|
||||
} else if (fragment_list.adapter is GroupsAdapter) {
|
||||
(fragment_list.adapter as? GroupsAdapter)?.updateItems(groupsIgnoringSearch)
|
||||
(fragment_list.adapter as? GroupsAdapter)?.updateItems(ArrayList(groupsIgnoringSearch))
|
||||
setupViewVisibility(groupsIgnoringSearch.isNotEmpty())
|
||||
}
|
||||
|
||||
@ -405,7 +363,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupViewVisibility(hasItemsToShow: Boolean) {
|
||||
fun setupViewVisibility(hasItemsToShow: Boolean) {
|
||||
if (fragment_placeholder_2.tag != AVOID_CHANGING_VISIBILITY_TAG) {
|
||||
fragment_placeholder_2?.beVisibleIf(!hasItemsToShow)
|
||||
}
|
||||
|
Reference in New Issue
Block a user