diff --git a/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt b/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt index cc4d2ff..80d4a05 100644 --- a/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt +++ b/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt @@ -23,6 +23,8 @@ import ru.myitschool.work.ui.searchuser.SearchUserDestination import ru.myitschool.work.ui.searchuser.SearchUserFragment import ru.myitschool.work.ui.splash.SplashDestination import ru.myitschool.work.ui.splash.SplashFragment +import ru.myitschool.work.ui.userInfo.UserInfoDestination +import ru.myitschool.work.ui.userInfo.UserInfoFragment @AndroidEntryPoint class RootActivity : AppCompatActivity() { @@ -45,6 +47,7 @@ class RootActivity : AppCompatActivity() { fragment() fragment() fragment() + fragment() } } diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt index e76fdee..b38f857 100644 --- a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt @@ -99,7 +99,7 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) { is ProfileViewModel.Action.OpenSearch -> { findNavController().navigate(SearchUserDestination) { - popUpTo { inclusive = true } + popUpTo { inclusive = true } } } diff --git a/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserFragment.kt b/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserFragment.kt index 28d07db..c4b60cb 100644 --- a/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserFragment.kt @@ -1,28 +1,52 @@ package ru.myitschool.work.ui.searchuser -import androidx.fragment.app.viewModels import android.os.Bundle -import androidx.fragment.app.Fragment -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController import dagger.hilt.android.AndroidEntryPoint -import kotlinx.serialization.Serializable import ru.myitschool.work.R +import ru.myitschool.work.databinding.FragmentSearchUserBinding +import ru.myitschool.work.ui.profile.ProfileDestination +import ru.myitschool.work.utils.collectWhenStarted + -@Serializable @AndroidEntryPoint class SearchUserFragment : Fragment(R.layout.fragment_search_user) { - companion object { - fun newInstance() = SearchUserFragment() - } + private var _binding: FragmentSearchUserBinding? = null + private val binding: FragmentSearchUserBinding get() = _binding!! + private val viewModel: SearchUserViewModel by viewModels() - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentSearchUserBinding.bind(view) - // TODO: Use the ViewModel + initCallback() + subscribe() + + } + + private fun initCallback() { + binding.floatingActionButton2.setOnClickListener { viewModel.closeSearchUser() } } -} \ No newline at end of file + + private fun subscribe() { + viewModel.action.collectWhenStarted(this) { action -> + when (action) { + is SearchUserViewModel.Action.OpenProfile -> { + findNavController().navigate(ProfileDestination) { + popUpTo { inclusive = true } + } + } + } + } + } + + + } + + diff --git a/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserViewModel.kt index d6fcb7e..a0e8924 100644 --- a/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/searchuser/SearchUserViewModel.kt @@ -2,13 +2,27 @@ package ru.myitschool.work.ui.searchuser import android.content.Context import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.launch +import ru.myitschool.work.utils.MutablePublishFlow import javax.inject.Inject @HiltViewModel class SearchUserViewModel @Inject constructor( @ApplicationContext private val context: Context, ) : ViewModel() { - // TODO: Implement the ViewModel + private val _action = MutablePublishFlow() + val action = _action.asSharedFlow() + + fun closeSearchUser(){ + viewModelScope.launch { + _action.emit(Action.OpenProfile) + } + } + sealed interface Action { + data object OpenProfile: Action + } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoDestination.kt b/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoDestination.kt new file mode 100644 index 0000000..777d288 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoDestination.kt @@ -0,0 +1,6 @@ +package ru.myitschool.work.ui.userInfo + +import kotlinx.serialization.Serializable + +@Serializable +data object UserInfoDestination \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoFragment.kt b/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoFragment.kt new file mode 100644 index 0000000..a2d4840 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoFragment.kt @@ -0,0 +1,58 @@ +package ru.myitschool.work.ui.userInfo + +import ru.myitschool.work.ui.searchuser.SearchUserViewModel + + + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController +import dagger.hilt.android.AndroidEntryPoint +import ru.myitschool.work.R +import ru.myitschool.work.databinding.FragmentSearchUserBinding +import ru.myitschool.work.databinding.FragmentUserInfoBinding +import ru.myitschool.work.ui.profile.ProfileDestination +import ru.myitschool.work.ui.searchuser.SearchUserDestination +import ru.myitschool.work.utils.collectWhenStarted + + +@AndroidEntryPoint +class UserInfoFragment : Fragment(R.layout.fragment_user_info) { + + private var _binding: FragmentUserInfoBinding? = null + private val binding: FragmentUserInfoBinding get() = _binding!! + + + private val viewModel: UserInfoViewModel by viewModels() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentUserInfoBinding.bind(view) + + initCallback() + subscribe() + + } + + private fun initCallback() { + binding.floatingActionButton2.setOnClickListener { viewModel.closeSearchUser() } + } + + private fun subscribe() { + viewModel.action.collectWhenStarted(this) { action -> + when (action) { + is UserInfoViewModel.Action.OpenProfile -> { + findNavController().navigate(SearchUserDestination) { + popUpTo { inclusive = true } + } + } + } + } + } + + +} + + diff --git a/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoViewModel.kt new file mode 100644 index 0000000..905159a --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/userInfo/UserInfoViewModel.kt @@ -0,0 +1,28 @@ +package ru.myitschool.work.ui.userInfo + +import android.content.Context +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.launch +import ru.myitschool.work.utils.MutablePublishFlow +import javax.inject.Inject + +@HiltViewModel +class UserInfoViewModel @Inject constructor( + @ApplicationContext private val context: Context, +) : ViewModel() { + private val _action = MutablePublishFlow() + val action = _action.asSharedFlow() + + fun closeSearchUser(){ + viewModelScope.launch { + _action.emit(Action.OpenProfile) + } + } + sealed interface Action { + data object OpenProfile: Action + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_user_info.xml b/app/src/main/res/layout/fragment_user_info.xml new file mode 100644 index 0000000..069cc52 --- /dev/null +++ b/app/src/main/res/layout/fragment_user_info.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + +