CustomiseAppsFragment.kt 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.sduduzog.slimlauncher.ui.options
  2. import android.graphics.Canvas
  3. import android.os.Bundle
  4. import android.view.LayoutInflater
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import androidx.appcompat.widget.PopupMenu
  8. import androidx.fragment.app.viewModels
  9. import androidx.lifecycle.Observer
  10. import androidx.navigation.Navigation
  11. import androidx.recyclerview.widget.ItemTouchHelper
  12. import androidx.recyclerview.widget.RecyclerView
  13. import com.sduduzog.slimlauncher.R
  14. import com.sduduzog.slimlauncher.adapters.CustomAppsAdapter
  15. import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
  16. import com.sduduzog.slimlauncher.models.HomeApp
  17. import com.sduduzog.slimlauncher.ui.dialogs.RemoveAllAppsDialog
  18. import com.sduduzog.slimlauncher.ui.dialogs.RenameAppDialog
  19. import com.sduduzog.slimlauncher.utils.BaseFragment
  20. import com.sduduzog.slimlauncher.utils.OnItemActionListener
  21. import com.sduduzog.slimlauncher.utils.OnShitDoneToAppsListener
  22. import dagger.hilt.android.AndroidEntryPoint
  23. import kotlinx.android.synthetic.main.customise_apps_fragment.*
  24. @AndroidEntryPoint
  25. class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
  26. override fun getFragmentView(): ViewGroup = customise_apps_fragment
  27. private val viewModel: CustomiseAppsViewModel by viewModels()
  28. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
  29. return inflater.inflate(R.layout.customise_apps_fragment, container, false)
  30. }
  31. override fun onActivityCreated(savedInstanceState: Bundle?) {
  32. super.onActivityCreated(savedInstanceState)
  33. val adapter = CustomAppsAdapter(this)
  34. viewModel.apps.observe(viewLifecycleOwner, Observer {
  35. it?.let { apps ->
  36. adapter.setItems(apps)
  37. customise_apps_fragment_add.visibility = if(apps.size < 6) View.VISIBLE else View.INVISIBLE
  38. } ?: adapter.setItems(listOf())
  39. })
  40. customise_apps_fragment_remove_all.setOnClickListener {
  41. RemoveAllAppsDialog.getInstance(viewModel.apps.value!!, viewModel).show(childFragmentManager, "REMOVE_APPS")
  42. }
  43. customise_apps_fragment_list.adapter = adapter
  44. val listener: OnItemActionListener = adapter
  45. val simpleItemTouchCallback = object : ItemTouchHelper.Callback() {
  46. override fun onChildDraw(c: Canvas, recyclerView: RecyclerView,
  47. viewHolder: RecyclerView.ViewHolder, dX: Float,
  48. dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
  49. if (isCurrentlyActive) {
  50. viewHolder.itemView.alpha = 0.5f
  51. } else {
  52. viewHolder.itemView.alpha = 1f
  53. }
  54. super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
  55. }
  56. override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
  57. super.clearView(recyclerView, viewHolder)
  58. listener.onViewIdle()
  59. }
  60. override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
  61. val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
  62. val swipeFlags = 0
  63. return makeMovementFlags(dragFlags, swipeFlags)
  64. }
  65. override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
  66. target: RecyclerView.ViewHolder): Boolean {
  67. return listener.onViewMoved(viewHolder.adapterPosition, target.adapterPosition)
  68. }
  69. override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
  70. listener.onViewSwiped(viewHolder.adapterPosition)
  71. }
  72. override fun isLongPressDragEnabled() = false
  73. }
  74. val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
  75. itemTouchHelper.attachToRecyclerView(customise_apps_fragment_list)
  76. adapter.setItemTouchHelper(itemTouchHelper)
  77. customise_apps_fragment_add.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_customiseAppsFragment_to_addAppFragment))
  78. }
  79. private fun showPopupMenu(view: View): PopupMenu {
  80. val popup = PopupMenu(requireContext(), view)
  81. popup.menuInflater.inflate(R.menu.customise_apps_popup_menu, popup.menu)
  82. popup.show()
  83. return popup
  84. }
  85. override fun onAppsUpdated(list: List<HomeApp>) {
  86. viewModel.update(*list.toTypedArray())
  87. }
  88. override fun onAppMenuClicked(view: View, app: HomeApp) {
  89. showPopupMenu(view).setOnMenuItemClickListener {
  90. when (it.itemId) {
  91. R.id.ca_menu_rename -> {
  92. RenameAppDialog.getInstance(app, viewModel).show(childFragmentManager, "SettingsListAdapter")
  93. }
  94. R.id.ca_menu_remove -> {
  95. viewModel.remove(app)
  96. }
  97. R.id.ca_menu_reset -> {
  98. viewModel.reset(app)
  99. }
  100. }
  101. true
  102. }
  103. }
  104. }