override fun onViewCreated()

in app/src/main/java/com/example/android/trackr/ui/tasks/TasksFragment.kt [57:153]


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        tasksAdapter = TasksAdapter(this, clock)

        binding.listener = this

        binding.tasksList.apply {
            val itemTouchHelper = ItemTouchHelper(SwipeAndDragCallback())
            itemTouchHelper.attachToRecyclerView(this)
            val linearLayoutManager = LinearLayoutManager(activity)
            layoutManager = linearLayoutManager
            adapter = tasksAdapter
            doOnScroll { _, _ ->
                updateStickyHeader()
            }

            doOnApplyWindowInsets { v, insets, padding, _ ->
                val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
                if (binding.bottomAppBar != null) {
                    // BottomAppBar has its own logic to adapt to window insets, but its height isn't
                    // updated until measurement, so wait for its next layout.
                    binding.bottomAppBar?.doOnNextLayout { bottomBar ->
                        v.updatePadding(
                            left = padding.left + systemBars.left,
                            right = padding.right + systemBars.right,
                            bottom = bottomBar.height
                        )
                    }
                } else {
                    v.updatePadding(
                        left = padding.left + systemBars.left,
                        right = padding.right + systemBars.right,
                        bottom = padding.bottom + systemBars.bottom
                    )
                }
                insets
            }
        }
        binding.add?.setOnClickListener {
            findNavController().navigate(R.id.nav_task_edit_graph)
        }
        binding.bottomAppBar?.setOnMenuItemClickListener { menuItem ->
            when (menuItem.itemId) {
                R.id.archive -> {
                    findNavController().navigate(R.id.nav_archives)
                    true
                }
                R.id.settings -> {
                    findNavController().navigate(R.id.nav_settings)
                    true
                }
                else -> false
            }
        }

        repeatWithViewLifecycle {
            launch {
                tasksViewModel.listItems.collect {
                    tasksAdapter.submitList(it) {
                        updateStickyHeader()
                    }
                }
            }
            launch {
                // Logic for presenting user the option to unarchive a previously archived task.
                tasksViewModel.archivedItem.collect { item ->
                    Snackbar
                        .make(
                            binding.coordinator,
                            getString(R.string.task_archived),
                            Snackbar.LENGTH_LONG
                        )
                        .setAction(getString(R.string.undo)) {
                            tasksViewModel.unarchiveTask(item)
                        }
                        .setAnchorView(binding.add)
                        .show()
                }
            }
            launch {
                tasksViewModel.undoReorderTasks.collect { undo ->
                    Snackbar
                        .make(
                            binding.coordinator,
                            R.string.task_position_changed,
                            Snackbar.LENGTH_LONG
                        )
                        .setAction(getString(R.string.undo)) {
                            tasksViewModel.undoReorderTasks(undo)
                        }
                        .setAnchorView(binding.add)
                        .show()
                }
            }
        }
    }