Feature: Added the ability to close app draw by scrolling down from the top.
This commit is contained in:
@@ -16,6 +16,7 @@ import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
||||
import com.github.droidworksstudio.common.hideKeyboard
|
||||
import com.github.droidworksstudio.common.launchApp
|
||||
@@ -98,6 +99,7 @@ class DrawFragment : Fragment(),
|
||||
setupSearch()
|
||||
observeClickListener()
|
||||
observeSwipeTouchListener()
|
||||
observeScrollTouchListener()
|
||||
|
||||
// Initialize observation of drawer apps
|
||||
observeDrawerApps()
|
||||
@@ -174,6 +176,41 @@ class DrawFragment : Fragment(),
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
private fun observeScrollTouchListener() {
|
||||
binding.apply {
|
||||
drawAdapter.addOnScrollListener(getRecyclerViewOnScrollListener())
|
||||
}
|
||||
}
|
||||
|
||||
private fun getRecyclerViewOnScrollListener(): RecyclerView.OnScrollListener {
|
||||
return object : RecyclerView.OnScrollListener() {
|
||||
var onTop = false
|
||||
|
||||
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
||||
super.onScrollStateChanged(recyclerView, newState)
|
||||
when (newState) {
|
||||
RecyclerView.SCROLL_STATE_DRAGGING -> {
|
||||
onTop = !recyclerView.canScrollVertically(-1)
|
||||
if (onTop) binding.searchViewText.hideKeyboard()
|
||||
if (onTop && !recyclerView.canScrollVertically(1))
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
RecyclerView.SCROLL_STATE_IDLE -> {
|
||||
if (!recyclerView.canScrollVertically(1)) {
|
||||
binding.searchViewText.hideKeyboard()
|
||||
} else if (!recyclerView.canScrollVertically(-1)) {
|
||||
if (onTop) findNavController().popBackStack()
|
||||
else binding.searchViewText.showKeyboard()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun getSwipeGestureListener(context: Context): View.OnTouchListener {
|
||||
return object : OnSwipeTouchListener(context) {
|
||||
override fun onSwipeLeft() {
|
||||
|
||||
@@ -195,32 +195,31 @@ class HomeFragment : Fragment(),
|
||||
}
|
||||
|
||||
private fun setupRecyclerView() {
|
||||
val marginTopInPixels = 128
|
||||
val params: ViewGroup.LayoutParams = binding.appListAdapter.layoutParams
|
||||
val layoutParam = if (params is LinearLayout.LayoutParams) {
|
||||
params
|
||||
} else {
|
||||
LinearLayout.LayoutParams(params)
|
||||
}
|
||||
layoutParam.topMargin = marginTopInPixels
|
||||
val marginInPixels = 128
|
||||
|
||||
when (preferenceHelper.homeAppAlignment) {
|
||||
Gravity.START -> {
|
||||
layoutParam.gravity = Gravity.START
|
||||
}
|
||||
// Ensure correct type for layout params
|
||||
val layoutParams = (binding.appListAdapter.layoutParams as? LinearLayout.LayoutParams)
|
||||
?: LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
|
||||
Gravity.CENTER -> {
|
||||
layoutParam.gravity = Gravity.CENTER
|
||||
}
|
||||
// Set the bottom margin instead of top
|
||||
layoutParams.bottomMargin = marginInPixels
|
||||
layoutParams.topMargin = marginInPixels
|
||||
|
||||
Gravity.END -> {
|
||||
layoutParam.gravity = Gravity.END
|
||||
}
|
||||
// Set gravity to align RecyclerView to the bottom
|
||||
layoutParams.gravity = when (preferenceHelper.homeAppAlignment) {
|
||||
Gravity.START -> Gravity.START or Gravity.BOTTOM
|
||||
Gravity.CENTER -> Gravity.CENTER or Gravity.BOTTOM
|
||||
Gravity.END -> Gravity.END or Gravity.BOTTOM
|
||||
else -> Gravity.BOTTOM
|
||||
}
|
||||
|
||||
// Apply configurations to RecyclerView
|
||||
binding.appListAdapter.apply {
|
||||
adapter = homeAdapter
|
||||
layoutParams = layoutParam
|
||||
this.layoutParams = layoutParams
|
||||
setHasFixedSize(false)
|
||||
layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)
|
||||
isNestedScrollingEnabled = false
|
||||
|
||||
@@ -78,11 +78,9 @@ class HomeViewHolder @Inject constructor(
|
||||
}
|
||||
|
||||
else -> {
|
||||
appHomeIcon.visibility = View.GONE
|
||||
parentLayout.addView(appHomeName)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
appHomeIcon.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user