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()
}
}
}
}