diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawFragment.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawFragment.kt index 85039af..654a91a 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawFragment.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawFragment.kt @@ -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() { diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt index be5f8fd..606cfcc 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt @@ -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 diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt index 17783d7..a923124 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt @@ -78,11 +78,9 @@ class HomeViewHolder @Inject constructor( } else -> { - appHomeIcon.visibility = View.GONE + parentLayout.addView(appHomeName) } } - } else { - appHomeIcon.visibility = View.GONE } }