Moved grid zoom listener in fragment

This commit is contained in:
merkost
2023-07-23 11:30:38 +10:00
parent 26cb28bd4a
commit f78edda1c4
2 changed files with 52 additions and 41 deletions

View File

@ -16,7 +16,6 @@ import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
@ -56,8 +55,7 @@ class ContactsAdapter(
private val removeListener: RemoveFromGroupListener?, private val removeListener: RemoveFromGroupListener?,
private val enableDrag: Boolean = false, private val enableDrag: Boolean = false,
itemClick: (Any) -> Unit itemClick: (Any) -> Unit
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate, ItemTouchHelperContract, ) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate, ItemTouchHelperContract {
MyRecyclerView.MyZoomListener {
private val NEW_GROUP_ID = -1 private val NEW_GROUP_ID = -1
@ -69,16 +67,12 @@ class ContactsAdapter(
var showPhoneNumbers = config.showPhoneNumbers var showPhoneNumbers = config.showPhoneNumbers
var fontSize = activity.getTextSize() var fontSize = activity.getTextSize()
var onDragEndListener: (() -> Unit)? = null var onDragEndListener: (() -> Unit)? = null
var onColumnCountListener: (Int) -> Unit = {}
private var touchHelper: ItemTouchHelper? = null private var touchHelper: ItemTouchHelper? = null
private var startReorderDragListener: StartReorderDragListener? = null private var startReorderDragListener: StartReorderDragListener? = null
init { init {
setupDragListener(true) setupDragListener(true)
if (recyclerView.layoutManager is GridLayoutManager) {
setupZoomListener(this)
}
if (enableDrag) { if (enableDrag) {
touchHelper = ItemTouchHelper(ItemMoveCallback(this, viewType == VIEW_TYPE_GRID)) touchHelper = ItemTouchHelper(ItemMoveCallback(this, viewType == VIEW_TYPE_GRID))
@ -491,26 +485,4 @@ class ContactsAdapter(
override fun onRowClear(myViewHolder: ViewHolder?) { override fun onRowClear(myViewHolder: ViewHolder?) {
onDragEndListener?.invoke() onDragEndListener?.invoke()
} }
override fun zoomIn() {
val layoutManager = recyclerView.layoutManager
if (layoutManager is GridLayoutManager) {
val currentSpanCount = layoutManager.spanCount
val newSpanCount = (currentSpanCount - 1).coerceIn(1, CONTACTS_GRID_MAX_COLUMNS_COUNT)
layoutManager.spanCount = newSpanCount
recyclerView.requestLayout()
onColumnCountListener(newSpanCount)
}
}
override fun zoomOut() {
val layoutManager = recyclerView.layoutManager
if (layoutManager is GridLayoutManager) {
val currentSpanCount = layoutManager.spanCount
val newSpanCount = (currentSpanCount + 1).coerceIn(1, CONTACTS_GRID_MAX_COLUMNS_COUNT)
layoutManager.spanCount = newSpanCount
recyclerView.requestLayout()
onColumnCountListener(newSpanCount)
}
}
} }

View File

@ -6,12 +6,14 @@ import com.google.gson.Gson
import com.simplemobiletools.commons.extensions.areSystemAnimationsEnabled import com.simplemobiletools.commons.extensions.areSystemAnimationsEnabled
import com.simplemobiletools.commons.extensions.beGone import com.simplemobiletools.commons.extensions.beGone
import com.simplemobiletools.commons.extensions.beVisible import com.simplemobiletools.commons.extensions.beVisible
import com.simplemobiletools.commons.helpers.CONTACTS_GRID_MAX_COLUMNS_COUNT
import com.simplemobiletools.commons.helpers.ContactsHelper import com.simplemobiletools.commons.helpers.ContactsHelper
import com.simplemobiletools.commons.helpers.TAB_FAVORITES import com.simplemobiletools.commons.helpers.TAB_FAVORITES
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.commons.models.contacts.Contact
import com.simplemobiletools.commons.views.MyGridLayoutManager import com.simplemobiletools.commons.views.MyGridLayoutManager
import com.simplemobiletools.commons.views.MyLinearLayoutManager import com.simplemobiletools.commons.views.MyLinearLayoutManager
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.contacts.pro.activities.MainActivity 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
@ -25,6 +27,7 @@ import kotlinx.android.synthetic.main.fragment_layout.view.fragment_list
class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
private var favouriteContacts = listOf<Contact>() private var favouriteContacts = listOf<Contact>()
private var zoomListener: MyRecyclerView.MyZoomListener? = null
override fun fabClicked() { override fun fabClicked() {
finishActMode() finishActMode()
@ -35,6 +38,8 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
showAddFavoritesDialog() showAddFavoritesDialog()
} }
private fun getRecyclerAdapter() = fragment_list.adapter as? ContactsAdapter
private fun showAddFavoritesDialog() { private fun showAddFavoritesDialog() {
SelectContactsDialog(activity!!, allContacts, true, false) { addedContacts, removedContacts -> SelectContactsDialog(activity!!, allContacts, true, false) { addedContacts, removedContacts ->
ContactsHelper(activity as SimpleActivity).apply { ContactsHelper(activity as SimpleActivity).apply {
@ -49,10 +54,11 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
fun setupContactsFavoritesAdapter(contacts: List<Contact>) { fun setupContactsFavoritesAdapter(contacts: List<Contact>) {
favouriteContacts = contacts favouriteContacts = contacts
setupViewVisibility(favouriteContacts.isNotEmpty()) setupViewVisibility(favouriteContacts.isNotEmpty())
val currAdapter = fragment_list.adapter val currAdapter = getRecyclerAdapter()
val viewType = context.config.viewType val viewType = context.config.viewType
setFavoritesViewType(viewType) setFavoritesViewType(viewType)
initZoomListener(viewType)
if (currAdapter == null || forceListRedraw) { if (currAdapter == null || forceListRedraw) {
forceListRedraw = false forceListRedraw = false
@ -71,6 +77,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
(activity as RefreshContactsListener).contactClicked(it as Contact) (activity as RefreshContactsListener).contactClicked(it as Contact)
}.apply { }.apply {
fragment_list.adapter = this fragment_list.adapter = this
setupZoomListener(zoomListener)
onDragEndListener = { onDragEndListener = {
val adapter = fragment_list?.adapter val adapter = fragment_list?.adapter
if (adapter is ContactsAdapter) { if (adapter is ContactsAdapter) {
@ -79,17 +86,13 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
setupLetterFastscroller(items) setupLetterFastscroller(items)
} }
} }
onColumnCountListener = { newColumnCount ->
context.config.contactsGridColumnCount = newColumnCount
}
} }
if (context.areSystemAnimationsEnabled) { if (context.areSystemAnimationsEnabled) {
fragment_list.scheduleLayoutAnimation() fragment_list.scheduleLayoutAnimation()
} }
} else { } else {
(currAdapter as ContactsAdapter).apply { currAdapter.apply {
startNameWithSurname = context.config.startNameWithSurname startNameWithSurname = context.config.startNameWithSurname
showPhoneNumbers = context.config.showPhoneNumbers showPhoneNumbers = context.config.showPhoneNumbers
showContactThumbnails = context.config.showContactThumbnails showContactThumbnails = context.config.showContactThumbnails
@ -106,19 +109,55 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
private fun setFavoritesViewType(viewType: Int) { private fun setFavoritesViewType(viewType: Int) {
val spanCount = context.config.contactsGridColumnCount val spanCount = context.config.contactsGridColumnCount
val layoutManager = if (viewType == VIEW_TYPE_GRID) { if (viewType == VIEW_TYPE_GRID) {
favorites_fragment.letter_fastscroller.beGone() favorites_fragment.letter_fastscroller.beGone()
MyGridLayoutManager(context, spanCount) fragment_list.layoutManager = MyGridLayoutManager(context, spanCount)
} else { } else {
favorites_fragment.letter_fastscroller.beVisible() favorites_fragment.letter_fastscroller.beVisible()
MyLinearLayoutManager(context) fragment_list.layoutManager = MyLinearLayoutManager(context)
}
}
private fun initZoomListener(viewType: Int) {
if (viewType == VIEW_TYPE_GRID) {
val layoutManager = fragment_list.layoutManager as MyGridLayoutManager
zoomListener = object : MyRecyclerView.MyZoomListener {
override fun zoomIn() {
if (layoutManager.spanCount > 1) {
reduceColumnCount()
getRecyclerAdapter()?.finishActMode()
}
}
override fun zoomOut() {
if (layoutManager.spanCount < CONTACTS_GRID_MAX_COLUMNS_COUNT) {
increaseColumnCount()
getRecyclerAdapter()?.finishActMode()
}
}
}
} else {
zoomListener = null
}
}
private fun increaseColumnCount() {
if (context.config.viewType == VIEW_TYPE_GRID) {
context!!.config.contactsGridColumnCount += 1
columnCountChanged()
}
}
private fun reduceColumnCount() {
if (context.config.viewType == VIEW_TYPE_GRID) {
context!!.config.contactsGridColumnCount -= 1
columnCountChanged()
} }
fragment_list.layoutManager = layoutManager
} }
fun columnCountChanged() { fun columnCountChanged() {
(fragment_list.layoutManager as MyGridLayoutManager).spanCount = context!!.config.contactsGridColumnCount (fragment_list.layoutManager as? MyGridLayoutManager)?.spanCount = context!!.config.contactsGridColumnCount
fragment_list?.adapter?.apply { getRecyclerAdapter()?.apply {
notifyItemRangeChanged(0, favouriteContacts.size) notifyItemRangeChanged(0, favouriteContacts.size)
} }
} }