From 5dca9122776096c1814e046418955e89ecb58e6d Mon Sep 17 00:00:00 2001 From: v228a Date: Wed, 19 Feb 2025 14:21:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=B5=D1=82=D0=B5=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B0=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B2=D1=8C=D1=8E=D1=85=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/myitschool/work/core/Constants.kt | 2 +- .../work/ui/entrylist/EntryListFragment.kt | 23 ++++++++-- .../work/ui/entrylist/EntryListViewModel.kt | 43 ++++++++++++++++++- .../work/ui/profile/ProfileFragment.kt | 6 ++- .../work/ui/profile/ProfileViewModel.kt | 7 +-- 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/ru/myitschool/work/core/Constants.kt b/app/src/main/java/ru/myitschool/work/core/Constants.kt index 56697d1..d3fcf1e 100644 --- a/app/src/main/java/ru/myitschool/work/core/Constants.kt +++ b/app/src/main/java/ru/myitschool/work/core/Constants.kt @@ -1,6 +1,6 @@ package ru.myitschool.work.core object Constants { -// "http://localhost:8080" const val SERVER_ADDRESS = "http://10.0.2.2:8080" +// const val SERVER_ADDRESS = "https://nto.den4iksop.org" } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListFragment.kt b/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListFragment.kt index 6d65d57..09fd6a5 100644 --- a/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListFragment.kt @@ -6,17 +6,22 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.navigation.fragment.findNavController import ru.myitschool.work.R import ru.myitschool.work.databinding.FragmentEntryListBinding import ru.myitschool.work.databinding.FragmentLoginBinding +import ru.myitschool.work.ui.login.LoginDestination import ru.myitschool.work.ui.login.LoginViewModel +import ru.myitschool.work.ui.profile.ProfileDestination +import ru.myitschool.work.ui.profile.ProfileViewModel +import ru.myitschool.work.utils.collectWhenStarted class EntryListFragment : Fragment(R.layout.fragment_entry_list) { private var _binding: FragmentEntryListBinding? = null private val binding: FragmentEntryListBinding get() = _binding!! - private val viewModel: LoginViewModel by viewModels() + private val viewModel: EntryListViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -26,8 +31,20 @@ class EntryListFragment : Fragment(R.layout.fragment_entry_list) { } private fun initCallback (){ - + binding.floatingActionButton2.setOnClickListener { viewModel.closeEntryList() } } - private fun subscribe(){} + private fun subscribe(){ + viewModel.action.collectWhenStarted(this){ action -> + when(action) { + is EntryListViewModel.Action.OpenProfile -> { + findNavController().navigate(LoginDestination) { + popUpTo { inclusive = true } + } + } + } + + } + + } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListViewModel.kt index c700666..538a891 100644 --- a/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/entrylist/EntryListViewModel.kt @@ -1,7 +1,46 @@ package ru.myitschool.work.ui.entrylist +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.MutableStateFlow +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import ru.myitschool.work.ui.profile.ProfileViewModel +import ru.myitschool.work.ui.profile.ProfileViewModel.Action +import ru.myitschool.work.ui.profile.ProfileViewModel.State +import ru.myitschool.work.utils.MutablePublishFlow +import java.text.SimpleDateFormat +import java.util.Locale +import javax.inject.Inject -class EntryListViewModel : ViewModel() { - // TODO: Implement the ViewModel + +@HiltViewModel +class EntryListViewModel @Inject constructor( + @ApplicationContext private val context: Context, +) : ViewModel() { + private val _action = MutablePublishFlow() + val action = _action.asSharedFlow() + + private val _state = MutableStateFlow(initialState) + val state = _state.asStateFlow() + + fun closeEntryList(){ + viewModelScope.launch { + _action.emit(Action.OpenProfile) + } + } + + + sealed interface Action { + data object OpenProfile: Action + } + + + companion object { + val initialState = State.Loading + } } \ No newline at end of file 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 171f134..56e3e12 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 @@ -57,9 +57,13 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) { } is ProfileViewModel.State.Show -> { swipeRefreshLayout.isRefreshing = false - binding.fullname.text = state.fullname binding.position.text = state.position binding.lastEntry.text = state.lastEntry + if (state.admin){ + binding.fullname.text = state.fullname + " admin" + }else{ + binding.fullname.text = state.fullname + } Picasso.get() .load(state.imageUrl) .error(R.drawable.ic_no_img) diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt index 4c2144c..e1d1b35 100644 --- a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt @@ -66,7 +66,8 @@ class ProfileViewModel @Inject constructor( fullname = value.fullname, imageUrl = value.imageUrl, position = value.position, - lastEntry = simpleDateFormat.format(Date(value.lastEntryMillis)) + lastEntry = simpleDateFormat.format(Date(value.lastEntryMillis)), + admin = false ) } }, @@ -84,7 +85,6 @@ class ProfileViewModel @Inject constructor( sealed interface State { data object Loading : State - data class Error( val errorText: String, ) : State @@ -94,6 +94,7 @@ class ProfileViewModel @Inject constructor( val imageUrl: String, val position: String, val lastEntry: String, + val admin: Boolean, ) : State } @@ -103,7 +104,7 @@ class ProfileViewModel @Inject constructor( data object OpenLog : Action } - private companion object { + companion object { private val simpleDateFormat = SimpleDateFormat( "yyyy-MM-DD HH:mm", Locale.US