CustomiseAppsFragment.kt 5.3 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.data.MainViewModel
  16. import com.sduduzog.slimlauncher.data.model.HomeApp
  17. import com.sduduzog.slimlauncher.dialogs.RenameAppDialog
  18. import com.sduduzog.slimlauncher.utils.BaseFragment
  19. import com.sduduzog.slimlauncher.utils.LoadInstalledApps
  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: MainViewModel
  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(MainViewModel::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. viewModel.apps.value?.let {
  50. viewModel.remove(*it.toTypedArray())
  51. }
  52. }
  53. LoadInstalledApps(viewModel).execute(context!!.packageManager)
  54. customise_apps_fragment_list.adapter = adapter
  55. val listener: OnItemActionListener = adapter
  56. val simpleItemTouchCallback = object : ItemTouchHelper.Callback() {
  57. override fun onChildDraw(c: Canvas, recyclerView: RecyclerView,
  58. viewHolder: RecyclerView.ViewHolder, dX: Float,
  59. dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
  60. if (isCurrentlyActive) {
  61. viewHolder.itemView.alpha = 0.5f
  62. } else {
  63. viewHolder.itemView.alpha = 1f
  64. }
  65. super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
  66. }
  67. override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
  68. super.clearView(recyclerView, viewHolder)
  69. listener.onViewIdle()
  70. }
  71. override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
  72. val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
  73. val swipeFlags = 0
  74. return makeMovementFlags(dragFlags, swipeFlags)
  75. }
  76. override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
  77. target: RecyclerView.ViewHolder): Boolean {
  78. return listener.onViewMoved(viewHolder.adapterPosition, target.adapterPosition)
  79. }
  80. override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
  81. listener.onViewSwiped(viewHolder.adapterPosition)
  82. }
  83. override fun isLongPressDragEnabled() = false
  84. }
  85. val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
  86. itemTouchHelper.attachToRecyclerView(customise_apps_fragment_list)
  87. adapter.setItemTouchHelper(itemTouchHelper)
  88. customise_apps_fragment_add.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_customiseAppsFragment_to_addAppFragment))
  89. }
  90. private fun showPopupMenu(view: View): PopupMenu {
  91. val popup = PopupMenu(context!!, view)
  92. popup.menuInflater.inflate(R.menu.customise_apps_popup_menu, popup.menu)
  93. popup.show()
  94. return popup
  95. }
  96. override fun onAppsUpdated(list: List<HomeApp>) {
  97. viewModel.update(*list.toTypedArray())
  98. }
  99. override fun onAppMenuClicked(view: View, app: HomeApp) {
  100. showPopupMenu(view).setOnMenuItemClickListener {
  101. when (it.itemId) {
  102. R.id.ca_menu_rename -> {
  103. RenameAppDialog.getInstance(app, viewModel).show(childFragmentManager, "SettingsListAdapter")
  104. }
  105. R.id.ca_menu_remove -> {
  106. viewModel.remove(app)
  107. }
  108. }
  109. true
  110. }
  111. }
  112. }