CustomiseAppsFragment.kt 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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.lifecycle.Observer
  9. import androidx.lifecycle.ViewModelProviders
  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.HomeApp
  16. import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
  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 kotlinx.android.synthetic.main.customise_apps_fragment.*
  23. class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
  24. override fun getFragmentView(): ViewGroup = customise_apps_fragment
  25. private lateinit var viewModel: CustomiseAppsViewModel
  26. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
  27. return inflater.inflate(R.layout.customise_apps_fragment, container, false)
  28. }
  29. override fun onActivityCreated(savedInstanceState: Bundle?) {
  30. super.onActivityCreated(savedInstanceState)
  31. val adapter = CustomAppsAdapter(this)
  32. activity?.let {
  33. viewModel = ViewModelProviders.of(it).get(CustomiseAppsViewModel::class.java)
  34. } ?: throw Error("Activity null, something here is fucked up")
  35. viewModel.apps.observe(this, Observer {
  36. it?.let { apps ->
  37. adapter.setItems(apps)
  38. when (apps.size) {
  39. in 0..6 -> {
  40. customise_apps_fragment_add.visibility = View.VISIBLE
  41. }
  42. else -> {
  43. customise_apps_fragment_add.visibility = View.GONE
  44. }
  45. }
  46. } ?: adapter.setItems(listOf())
  47. })
  48. customise_apps_fragment_remove_all.setOnClickListener {
  49. RemoveAllAppsDialog.getInstance(viewModel.apps.value!!, viewModel).show(fragmentManager, "REMOVE_APPS")
  50. }
  51. customise_apps_fragment_list.adapter = adapter
  52. val listener: OnItemActionListener = adapter
  53. val simpleItemTouchCallback = object : ItemTouchHelper.Callback() {
  54. override fun onChildDraw(c: Canvas, recyclerView: RecyclerView,
  55. viewHolder: RecyclerView.ViewHolder, dX: Float,
  56. dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
  57. if (isCurrentlyActive) {
  58. viewHolder.itemView.alpha = 0.5f
  59. } else {
  60. viewHolder.itemView.alpha = 1f
  61. }
  62. super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
  63. }
  64. override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
  65. super.clearView(recyclerView, viewHolder)
  66. listener.onViewIdle()
  67. }
  68. override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
  69. val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
  70. val swipeFlags = 0
  71. return makeMovementFlags(dragFlags, swipeFlags)
  72. }
  73. override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
  74. target: RecyclerView.ViewHolder): Boolean {
  75. return listener.onViewMoved(viewHolder.adapterPosition, target.adapterPosition)
  76. }
  77. override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
  78. listener.onViewSwiped(viewHolder.adapterPosition)
  79. }
  80. override fun isLongPressDragEnabled() = false
  81. }
  82. val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
  83. itemTouchHelper.attachToRecyclerView(customise_apps_fragment_list)
  84. adapter.setItemTouchHelper(itemTouchHelper)
  85. customise_apps_fragment_add.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_customiseAppsFragment_to_addAppFragment))
  86. }
  87. private fun showPopupMenu(view: View): PopupMenu {
  88. val popup = PopupMenu(context!!, view)
  89. popup.menuInflater.inflate(R.menu.customise_apps_popup_menu, popup.menu)
  90. popup.show()
  91. return popup
  92. }
  93. override fun onAppsUpdated(list: List<HomeApp>) {
  94. viewModel.update(*list.toTypedArray())
  95. }
  96. override fun onAppMenuClicked(view: View, app: HomeApp) {
  97. showPopupMenu(view).setOnMenuItemClickListener {
  98. when (it.itemId) {
  99. R.id.ca_menu_rename -> {
  100. RenameAppDialog.getInstance(app, viewModel).show(childFragmentManager, "SettingsListAdapter")
  101. }
  102. R.id.ca_menu_remove -> {
  103. viewModel.remove(app)
  104. }
  105. R.id.ca_menu_reset -> {
  106. viewModel.reset(app)
  107. }
  108. }
  109. true
  110. }
  111. }
  112. }