AppsFragment.kt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.sduduzog.slimlauncher.ui.apps
  2. import android.arch.lifecycle.Observer
  3. import android.arch.lifecycle.ViewModelProviders
  4. import android.content.Intent
  5. import android.content.pm.ResolveInfo
  6. import android.os.Bundle
  7. import android.support.v4.app.Fragment
  8. import android.support.v7.widget.RecyclerView
  9. import android.view.LayoutInflater
  10. import android.view.View
  11. import android.view.ViewGroup
  12. import androidx.navigation.Navigation
  13. import com.sduduzog.slimlauncher.R
  14. import com.sduduzog.slimlauncher.data.App
  15. import com.sduduzog.slimlauncher.data.HomeApp
  16. import com.sduduzog.slimlauncher.ui.main.MainViewModel
  17. import java.util.*
  18. class AppsFragment : Fragment() {
  19. private var apps: MutableList<App> = mutableListOf()
  20. private lateinit var viewModel: MainViewModel
  21. private lateinit var mAdapter: AppsListAdapter
  22. private lateinit var layout: RecyclerView
  23. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
  24. savedInstanceState: Bundle?): View? {
  25. val view = inflater.inflate(R.layout.fragment_apps_list, container, false)
  26. val pm = activity!!.packageManager
  27. val main = Intent(Intent.ACTION_MAIN, null)
  28. main.addCategory(Intent.CATEGORY_LAUNCHER)
  29. val launchables = pm.queryIntentActivities(main, 0)
  30. Collections.sort(launchables,
  31. ResolveInfo.DisplayNameComparator(pm))
  32. for (i in launchables.indices) {
  33. val item = launchables[i]
  34. val activity = item.activityInfo
  35. val app = App(activity.loadLabel(pm).toString(), activity.name, activity.applicationInfo.packageName)
  36. apps.add(app)
  37. }
  38. mAdapter = AppsListAdapter(listOf(), InteractionHandler())
  39. layout = view.findViewById(R.id.appList)
  40. layout.adapter = mAdapter
  41. return view
  42. }
  43. override fun onActivityCreated(savedInstanceState: Bundle?) {
  44. super.onActivityCreated(savedInstanceState)
  45. viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
  46. viewModel.apps.observe(this, Observer {
  47. if (it != null) {
  48. mAdapter.setList(it)
  49. }
  50. })
  51. }
  52. inner class InteractionHandler : OnListFragmentInteractionListener {
  53. override fun onListFragmentInteraction(app: App) {
  54. viewModel.addToHomeScreen(app)
  55. val nav = Navigation.findNavController(layout)
  56. nav.popBackStack()
  57. }
  58. }
  59. interface OnListFragmentInteractionListener {
  60. fun onListFragmentInteraction(app: App)
  61. }
  62. }