mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
Moved grid zoom listener in fragment
This commit is contained in:
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user