HomeAppsAdapter.kt 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package com.sduduzog.slimlauncher.ui.main
  2. import android.content.ActivityNotFoundException
  3. import android.content.ComponentName
  4. import android.content.Intent
  5. import android.util.Log
  6. import android.view.LayoutInflater
  7. import android.view.View
  8. import android.view.ViewGroup
  9. import android.widget.TextView
  10. import android.widget.Toast
  11. import androidx.lifecycle.Observer
  12. import androidx.lifecycle.ViewModelProviders
  13. import androidx.recyclerview.widget.RecyclerView
  14. import com.sduduzog.slimlauncher.R
  15. import com.sduduzog.slimlauncher.data.HomeApp
  16. class HomeAppsAdapter(private var fragment: MainFragment)
  17. : RecyclerView.Adapter<HomeAppsAdapter.ViewHolder>() {
  18. private var apps: List<HomeApp> = listOf()
  19. private var viewModel = ViewModelProviders.of(fragment).get(MainViewModel::class.java)
  20. init {
  21. viewModel.homeApps.observe(fragment, Observer {
  22. if (it != null) {
  23. apps = it
  24. notifyDataSetChanged()
  25. }
  26. })
  27. }
  28. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeAppsAdapter.ViewHolder {
  29. val view = LayoutInflater.from(parent.context)
  30. .inflate(R.layout.main_list_item, parent, false)
  31. return ViewHolder(view)
  32. }
  33. override fun onBindViewHolder(holder: HomeAppsAdapter.ViewHolder, position: Int) {
  34. val item = apps.elementAt(position)
  35. holder.mLabelView.text = item.appName
  36. holder.mLabelView.setOnClickListener {
  37. val name = ComponentName(item.packageName, item.activityName)
  38. val intent = Intent()
  39. intent.action = Intent.ACTION_MAIN
  40. intent.addCategory(Intent.CATEGORY_LAUNCHER)
  41. intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
  42. intent.component = name
  43. try {
  44. fragment.startActivity(intent)
  45. } catch (e: ActivityNotFoundException) {
  46. Toast.makeText(fragment.context, "${item.appName} seems to be uninstalled, removing from list", Toast.LENGTH_LONG).show()
  47. viewModel.deleteApp(item)
  48. }
  49. }
  50. }
  51. override fun getItemCount(): Int = apps.size
  52. inner class ViewHolder(mView: View) : RecyclerView.ViewHolder(mView) {
  53. val mLabelView: TextView = mView.findViewById(R.id.main_label)
  54. override fun toString(): String {
  55. return super.toString() + " '" + mLabelView.text + "'"
  56. }
  57. }
  58. }