Skip to content

Commit

Permalink
Implement navigation animations
Browse files Browse the repository at this point in the history
  • Loading branch information
alialbaali committed Apr 7, 2020
1 parent f11fc90 commit cf9b955
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 41 deletions.
46 changes: 26 additions & 20 deletions app/src/main/java/com/apps/chatychaty/ui/ChatFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
import com.apps.chatychaty.DURATION
import com.apps.chatychaty.R
import com.apps.chatychaty.*
import com.apps.chatychaty.adapter.ChatRVAdapter
import com.apps.chatychaty.databinding.FragmentChatBinding
import com.apps.chatychaty.getPref
import com.apps.chatychaty.network.Repos
import com.apps.chatychaty.snackbar
import com.apps.chatychaty.util.ExceptionHandler
import com.apps.chatychaty.util.getPref
import com.apps.chatychaty.util.snackbar
import com.apps.chatychaty.viewModel.Error
import com.apps.chatychaty.viewModel.SharedViewModel
import com.apps.chatychaty.viewModel.SharedViewModelFactory
Expand All @@ -39,36 +39,42 @@ import kotlinx.coroutines.launch
*/
class ChatFragment : Fragment(), Error {

private lateinit var binding: FragmentChatBinding
private val binding by lazy {
FragmentChatBinding.inflate(layoutInflater).also {
it.lifecycleOwner = this
}
}

private val viewModel by viewModels<SharedViewModel> {
SharedViewModelFactory(Repos.chatRepository, Repos.messageRepository, this)
}

private val args by navArgs<ChatFragmentArgs>()

private lateinit var adapter: ChatRVAdapter
private val adapter by lazy { ChatRVAdapter(activity?.getPref("username")!!) }

private val imm by lazy {
activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentChatBinding.inflate(inflater, container, false)

val imm = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
ExceptionHandler.error = this

enterTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Z, true).apply {
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.X, true).apply {
duration = DURATION
}

adapter = ChatRVAdapter(activity?.getPref("username")!!)
exitTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.X, false).apply {
duration = DURATION
}

// Binding
binding.let {
it.lifecycleOwner = this
it.viewModel = viewModel
}
binding.viewModel = viewModel

binding.tbTv.text = args.name

Expand Down Expand Up @@ -121,10 +127,10 @@ class ChatFragment : Fragment(), Error {
binding.img.setOnClickListener {
imm.hideSoftInputFromWindow(binding.et.windowToken, 0)

exitTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.X, true).apply {
duration = DURATION
}
enterTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, false)

exitTransition = MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, true)

this.findNavController().navigate(
ChatFragmentDirections.actionChatFragmentToProfileFragment(
Expand Down Expand Up @@ -159,9 +165,9 @@ class ChatFragment : Fragment(), Error {
}

if (binding.et.text.isBlank()) {
TransitionManager.beginDelayedTransition(binding.linearLayout, exitAnimation)
binding.btnSend.isEnabled = false
binding.btnSend.visibility = View.GONE
TransitionManager.beginDelayedTransition(binding.linearLayout, exitAnimation)
}
binding.et.addTextChangedListener {
if (it?.isNotBlank() == true) {
Expand Down
63 changes: 49 additions & 14 deletions app/src/main/java/com/apps/chatychaty/ui/ListFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ import androidx.lifecycle.whenStarted
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
import com.apps.chatychaty.DURATION
import com.apps.chatychaty.R
import com.apps.chatychaty.*
import com.apps.chatychaty.util.ExceptionHandler
import com.apps.chatychaty.adapter.ListRVAdapter
import com.apps.chatychaty.adapter.NavigateToChat
import com.apps.chatychaty.databinding.FragmentListBinding
import com.apps.chatychaty.getPref
import com.apps.chatychaty.model.Chat
import com.apps.chatychaty.network.Repos
import com.apps.chatychaty.snackbar
import com.apps.chatychaty.util.getPref
import com.apps.chatychaty.util.snackbar
import com.apps.chatychaty.viewModel.Error
import com.apps.chatychaty.viewModel.SharedViewModel
import com.apps.chatychaty.viewModel.SharedViewModelFactory
Expand All @@ -31,14 +31,18 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

/**
* A simple [Fragment] subclass.
*/

class ListFragment : Fragment(), NavigateToChat, Error {

private lateinit var binding: FragmentListBinding
private val binding by lazy {
FragmentListBinding.inflate(layoutInflater).also {
it.lifecycleOwner = this
}
}

private lateinit var adapter: ListRVAdapter
private val adapter by lazy {
ListRVAdapter(this)
}

private val args by navArgs<ListFragmentArgs>()

Expand All @@ -50,11 +54,9 @@ class ListFragment : Fragment(), NavigateToChat, Error {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentListBinding.inflate(inflater, container, false)

binding.lifecycleOwner = this
viewModel.getChats()

adapter = ListRVAdapter(this)
ExceptionHandler.error = this

Glide.with(this)
.load(activity?.getPref("img_url"))
Expand All @@ -80,11 +82,17 @@ class ListFragment : Fragment(), NavigateToChat, Error {

binding.img.setOnClickListener {

enterTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, false).apply {
duration = DURATION
}

exitTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.X, true).apply {
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, true).apply {
duration = DURATION
}


val name = activity?.getPref("name")!!
val username = activity?.getPref("username")!!
val imgUrl = activity?.getPref("img_url")
Expand All @@ -100,6 +108,11 @@ class ListFragment : Fragment(), NavigateToChat, Error {

binding.fab.setOnClickListener {

enterTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, false).apply {
duration = DURATION
}

exitTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, true).apply {
duration = DURATION
Expand Down Expand Up @@ -129,6 +142,17 @@ class ListFragment : Fragment(), NavigateToChat, Error {
}

override fun navigate(chat: Chat) {

enterTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.X, false).apply {
duration = DURATION
}

exitTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.X, true).apply {
duration = DURATION
}

this.findNavController()
.navigate(
ListFragmentDirections.actionListFragmentToChatFragment(
Expand All @@ -141,6 +165,17 @@ class ListFragment : Fragment(), NavigateToChat, Error {
}

override fun navigateToUser(chat: Chat) {

enterTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, false).apply {
duration = DURATION
}

exitTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, true).apply {
duration = DURATION
}

this.findNavController().navigate(
ListFragmentDirections.actionListFragmentToProfileFragment(
chat.user.name,
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/com/apps/chatychaty/ui/SearchFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import android.view.inputmethod.InputMethodManager
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.apps.chatychaty.DURATION
import com.apps.chatychaty.R
import com.apps.chatychaty.adapter.SearchAdapter
import com.apps.chatychaty.databinding.FragmentSearchBinding
Expand All @@ -37,9 +36,10 @@ class SearchFragment : Fragment() {
binding = FragmentSearchBinding.inflate(inflater, container, false)

enterTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, true).apply {
duration = DURATION
}
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, true)

exitTransition =
MaterialSharedAxis.create(requireContext(), MaterialSharedAxis.Y, false)

binding.lifecycleOwner = this

Expand Down
7 changes: 5 additions & 2 deletions app/src/main/java/com/apps/chatychaty/ui/SignInFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.apps.chatychaty.*
import com.apps.chatychaty.DURATION
import com.apps.chatychaty.R
import com.apps.chatychaty.databinding.FragmentSignInBinding
import com.apps.chatychaty.network.Repos
import com.apps.chatychaty.util.getPref
import com.apps.chatychaty.util.setPref
import com.apps.chatychaty.util.snackbar
import com.apps.chatychaty.viewModel.Error
import com.apps.chatychaty.viewModel.Sign
import com.apps.chatychaty.viewModel.SignSharedViewModel
import com.apps.chatychaty.viewModel.SignSharedViewModelFactory
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.transition.MaterialFadeThrough
import com.google.android.material.transition.MaterialSharedAxis

Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/com/apps/chatychaty/ui/SignUpFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ import androidx.navigation.fragment.findNavController
import com.apps.chatychaty.*
import com.apps.chatychaty.databinding.FragmentSignUpBinding
import com.apps.chatychaty.network.Repos
import com.apps.chatychaty.util.getPref
import com.apps.chatychaty.util.setPref
import com.apps.chatychaty.util.snackbar
import com.apps.chatychaty.viewModel.Error
import com.apps.chatychaty.viewModel.Sign
import com.apps.chatychaty.viewModel.SignSharedViewModel
import com.apps.chatychaty.viewModel.SignSharedViewModelFactory
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.transition.MaterialFadeThrough
import com.google.android.material.transition.MaterialSharedAxis

Expand Down

0 comments on commit cf9b955

Please sign in to comment.