diff --git a/app/src/main/java/ru/myitschool/work/data/user/UserNetworkDataSource.kt b/app/src/main/java/ru/myitschool/work/data/user/UserNetworkDataSource.kt index ecf8c9f..4087e65 100644 --- a/app/src/main/java/ru/myitschool/work/data/user/UserNetworkDataSource.kt +++ b/app/src/main/java/ru/myitschool/work/data/user/UserNetworkDataSource.kt @@ -16,7 +16,7 @@ import ru.myitschool.work.data.auth.Network.client class UserNetworkDataSource { suspend fun getUser(login : String): Result = withContext(Dispatchers.IO) { - //runCatching { + runCatching { val result = client.get("$SERVER_ADDRESS/api/${login}/info") { header(HttpHeaders.Authorization, token) @@ -31,7 +31,7 @@ class UserNetworkDataSource { } Log.d("result", result.bodyAsText()) result.body() - // } + } } suspend fun getEntrancesList(login : String) : Result> = withContext(Dispatchers.IO){ diff --git a/app/src/main/java/ru/myitschool/work/domain/auth/IsUserExistUseCase.kt b/app/src/main/java/ru/myitschool/work/domain/auth/IsUserExistUseCase.kt deleted file mode 100644 index 25ebb15..0000000 --- a/app/src/main/java/ru/myitschool/work/domain/auth/IsUserExistUseCase.kt +++ /dev/null @@ -1,12 +0,0 @@ -package ru.myitschool.work.domain.auth - -import javax.inject.Inject - - -/*class IsUserExistUseCase ( - private val authRepo : AuthRepo -) { - suspend operator fun invoke(email : String) : Result { - return authRepo.isUserExist(email) - } -}*/ \ No newline at end of file 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 92a26b7..715ce0f 100644 --- a/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt +++ b/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt @@ -49,17 +49,17 @@ class RootActivity : AppCompatActivity() { - /*onBackPressedDispatcher.addCallback( + onBackPressedDispatcher.addCallback( this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { onSupportNavigateUp() } } - )*/ + ) } - /*override fun onSupportNavigateUp(): Boolean { + override fun onSupportNavigateUp(): Boolean { val navController = findNavController(R.id.nav_host_fragment) val popBackResult = if (navController.previousBackStackEntry != null) { navController.popBackStack() @@ -67,6 +67,6 @@ class RootActivity : AppCompatActivity() { false } return popBackResult || super.onSupportNavigateUp() - }*/ + } } \ 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 bcacf61..5cff13f 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 @@ -48,6 +48,8 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) { viewBinding.loading.visibility = if (state is ProfileViewModel.State.Loading) View.VISIBLE else View.GONE viewBinding.profile.visibility = if (state is ProfileViewModel.State.Show) View.VISIBLE else View.GONE + + when(state) { is ProfileViewModel.State.Loading -> Unit is ProfileViewModel.State.Show -> { diff --git a/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultFragment.kt b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultFragment.kt new file mode 100644 index 0000000..141dab0 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultFragment.kt @@ -0,0 +1,71 @@ +package ru.myitschool.work.ui.qr.result + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController +import com.squareup.picasso.Picasso +import ru.myitschool.work.R +import ru.myitschool.work.databinding.FragmentProfileBinding +import ru.myitschool.work.databinding.FragmentQrResultBinding +import ru.myitschool.work.ui.profile.ProfileViewModel +import ru.myitschool.work.ui.qr.scan.QrScanDestination +import ru.myitschool.work.utils.collectWithLifecycle + +class QrResultFragment : Fragment(R.layout.fragment_qr_result) { + private var _viewBinding: FragmentQrResultBinding? = null + private val viewBinding: FragmentQrResultBinding get() = _viewBinding!! + + private val viewModel by viewModels { QrResultViewModel.Factory } + + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + _viewBinding = FragmentQrResultBinding.bind(view) + super.onViewCreated(view, savedInstanceState) + + parentFragmentManager.setFragmentResultListener( + QrScanDestination.REQUEST_KEY, viewLifecycleOwner + ) { + key, bundle -> + if (key == QrScanDestination.REQUEST_KEY) { + val code = QrScanDestination.getDataIfExist(bundle) + if (code != null) { + viewModel.sendResult(code.toLong()) + } + } + } + viewBinding.close.setOnClickListener { + findNavController().navigate(R.id.action_fragment_qr_result_to_fragment_profile) + } + + viewModel.state.collectWithLifecycle(this) { state -> + + viewBinding.error.visibility = if (state is QrResultViewModel.State.Error) View.VISIBLE else View.GONE + viewBinding.loading.visibility = if (state is QrResultViewModel.State.Loading) View.VISIBLE else View.GONE + viewBinding.result.visibility = if (state is QrResultViewModel.State.Show) View.VISIBLE else View.GONE + + + when(state) { + is QrResultViewModel.State.Loading -> Unit + is QrResultViewModel.State.Show -> { + viewBinding.result.text = state.result + + } + is QrResultViewModel.State.Error -> { + viewBinding.errorText.text = state.text + + } + } + + } + } + + override fun onDestroyView() { + _viewBinding = null + super.onDestroyView() + } + +} + + diff --git a/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultViewModel.kt new file mode 100644 index 0000000..e53cf68 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultViewModel.kt @@ -0,0 +1,90 @@ +package ru.myitschool.work.ui.qr.result + +import android.content.Context +import android.util.Log +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewModelScope +import androidx.lifecycle.viewmodel.CreationExtras +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import ru.myitschool.work.R +import ru.myitschool.work.data.auth.AuthStorageDataSource +import ru.myitschool.work.data.user.UserNetworkDataSource +import ru.myitschool.work.data.user.UserRepoImpl +import ru.myitschool.work.domain.user.EnterUseCase +import ru.myitschool.work.domain.user.EntranceEntity +import ru.myitschool.work.domain.user.GetUserUseCase +import ru.myitschool.work.domain.user.UserEntity + +class QrResultViewModel( + @ApplicationContext private val context: Context, + private val enterUseCase: EnterUseCase +) : ViewModel() { + private val _state = MutableStateFlow(State.Loading) + val state = _state.asStateFlow() + + fun updateState(code: Long?) { + viewModelScope.launch { + _state.emit(State.Loading) + if (code == null) { + _state.emit(State.Error(context.getString(R.string.qr_null_result))) + } + else { + _state.emit( + enterUseCase.invoke(code).fold( + onSuccess = { data -> + Log.d("uraa", "успех успех ${data.toString()}") + when (data) { + true -> State.Show(context.getString(R.string.qr_success_result)) + false -> State.Show(context.getString(R.string.qr_wrong_result)) + null -> State.Show(context.getString(R.string.qr_wrong_result)) + } + }, + onFailure = { error -> + Log.d("kaput", error.message.toString()) + State.Error(error.message.toString()) + } + ) + ) + } + //_state.emit(State.Error("о нет ошибка ошибка помогите")) + } + } + + fun sendResult(code : Long) { + updateState(code) + } + + + + sealed interface State { + data object Loading: State + data class Show( + val result : String + ) : State + data class Error( + val text: String + ) : State + } + companion object { + val Factory : ViewModelProvider.Factory = object : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") + override fun create(modelClass: Class, extras: CreationExtras): T { + val application = extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]!! + return QrResultViewModel( + context = application, + enterUseCase = EnterUseCase( + repo = UserRepoImpl( + userNetworkDataSource = UserNetworkDataSource() + ), + authStorageDataSource = AuthStorageDataSource + ) + ) as T + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_qr_result.xml b/app/src/main/res/layout/fragment_qr_result.xml new file mode 100644 index 0000000..07f8935 --- /dev/null +++ b/app/src/main/res/layout/fragment_qr_result.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + +