code: Вроде как сделал 3 экран

This commit is contained in:
DKaverznev 2025-02-19 10:33:08 +03:00
parent 486320b688
commit 1d46891456
2 changed files with 25 additions and 20 deletions

View File

@ -6,13 +6,13 @@ import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import ru.myitschool.work.R import ru.myitschool.work.R
import androidx.navigation.fragment.findNavController import ru.myitschool.work.api.scan.CodeJson
import androidx.transition.Visibility
import ru.myitschool.work.databinding.FragmentScanResultBinding import ru.myitschool.work.databinding.FragmentScanResultBinding
import ru.myitschool.work.ui.login.LoginViewModel
import ru.myitschool.work.ui.main.MainDestination import ru.myitschool.work.ui.main.MainDestination
import ru.myitschool.work.ui.qr.scan.QrScanDestination
import ru.myitschool.work.utils.AuthPreferences import ru.myitschool.work.utils.AuthPreferences
import ru.myitschool.work.utils.collectWhenStarted import ru.myitschool.work.utils.collectWhenStarted
import ru.myitschool.work.utils.visibleOrGone import ru.myitschool.work.utils.visibleOrGone
@ -22,40 +22,47 @@ class ResultFragment : Fragment(R.layout.fragment_scan_result) {
private var _binding: FragmentScanResultBinding? = null private var _binding: FragmentScanResultBinding? = null
private val binding: FragmentScanResultBinding get() = _binding!! private val binding: FragmentScanResultBinding get() = _binding!!
private val viewModel: ResultViewModel by viewModels() private val viewModel: ResultViewModel by viewModels()
private lateinit var authPreferences: AuthPreferences
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
authPreferences = AuthPreferences(requireContext())
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = FragmentScanResultBinding.bind(view) _binding = FragmentScanResultBinding.bind(view)
setupLoginComponents() setupOpenComponents()
observeOpenState()
} }
private fun setupLoginComponents() { private fun setupOpenComponents() {
binding.apply { binding.apply {
result.visibleOrGone(false) result.visibleOrGone(false)
successIcon.visibleOrGone(false) successIcon.visibleOrGone(false)
close.setOnClickListener {
navigateToMainScreen()
} }
} }
private fun observeLoginState() { val qrData = QrScanDestination.getDataIfExist(arguments ?: Bundle())
authPreferences.getLogin()?.let { viewModel.open(it, CodeJson(qrData)) }
}
private fun observeOpenState() {
viewModel.state.collectWhenStarted(this) { state -> viewModel.state.collectWhenStarted(this) { state ->
when (state) { when (state) {
is ResultViewModel.ResultState.Loading -> { is ResultViewModel.ResultState.Loading -> {
binding.result.visibleOrGone(false) binding.result.visibleOrGone(false)
binding.successIcon.visibleOrGone(false) binding.successIcon.visibleOrGone(false)
binding.error.visibleOrGone(false) binding.error.visibleOrGone(false)
binding.loading.visibleOrGone(true) binding.loading.visibleOrGone(true)
} }
is ResultViewModel.ResultState.Success -> { is ResultViewModel.ResultState.Success -> {
binding.result.visibleOrGone(true) binding.result.visibleOrGone(true)
binding.successIcon.visibleOrGone(true) binding.successIcon.visibleOrGone(true)
binding.error.visibleOrGone(false) binding.error.visibleOrGone(false)
binding.loading.visibleOrGone(false) binding.loading.visibleOrGone(false)
} }
@ -63,19 +70,17 @@ class ResultFragment : Fragment(R.layout.fragment_scan_result) {
binding.result.visibleOrGone(false) binding.result.visibleOrGone(false)
binding.successIcon.visibleOrGone(false) binding.successIcon.visibleOrGone(false)
binding.loading.visibleOrGone(false) binding.loading.visibleOrGone(false)
binding.error.visibleOrGone(true) binding.error.visibleOrGone(true)
} }
is ResultViewModel.ResultState.Error -> { is ResultViewModel.ResultState.Error -> {
binding.loading.visibleOrGone(false) binding.loading.visibleOrGone(false)
binding.result.apply { binding.result.apply {
visibleOrGone(true) visibleOrGone(true)
text = RiootoString(R.string.userNotFing) text = getText(R.string.userNotFing)
} }
Log.d("Authentication", "Ошибка сканирования") Log.d("Authentication", getText(R.string.userNotFing).toString())
} }
ResultViewModel.ResultState.Initial -> binding.loading.visibleOrGone(false)
LoginViewModel.LoginState.Initial -> binding.loading.visibleOrGone(false)
} }
} }
} }
@ -88,7 +93,7 @@ class ResultFragment : Fragment(R.layout.fragment_scan_result) {
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e("ResultFragment", "Navigation error", e) Log.e("ResultFragment", "Navigation error", e)
Toast.makeText(context, "Ошибка перехода", Toast.LENGTH_SHORT).show() Toast.makeText(context, getText(R.string.errorGoText).toString(), Toast.LENGTH_SHORT).show()
} }
} }

View File

@ -1,6 +1,6 @@
<resources> <resources>
<string name="app_name">NTO Pass</string> <string name="app_name">NTO Pass</string>
<string name="loginText">логин</string> <string name="loginText">Логин</string>
<string name="welcomeText">Добро пожаловать!</string> <string name="welcomeText">Добро пожаловать!</string>
<string name="inputLoginText">Введите свой логин</string> <string name="inputLoginText">Введите свой логин</string>
<string name="welcomeDescriptionLoginText">для авторизации в приложении</string> <string name="welcomeDescriptionLoginText">для авторизации в приложении</string>
@ -17,10 +17,10 @@
<string name="contentDescriptionPhoto">photo</string> <string name="contentDescriptionPhoto">photo</string>
<string name="resulText">Вход выполнен успешно</string> <string name="resulText">Вход выполнен успешно</string>
<string name="closeText">Закрыть/Close</string> <string name="closeText">Закрыть/Close</string>
<string name="errorGoText">Ошибка перехода</string>
<string name="errorLoginText">Ошибка входа</string> <string name="errorLoginText">Ошибка входа</string>
<string name="text_last_enter">Последний вход 12.12.1212</string> <string name="text_last_enter">Последний вход 12.12.1212</string>
<string name="text_scan_time">Время сканирования 12:12</string> <string name="serverError">Ошибка сервера</string>
<string name="text_identificator">Идентификатор</string> <string name="userNotFing">Пользователь не найден</string>
<string name="text_type">Тип прохода</string> <string name="passwordText">Пароль</string>
<string name="passwordText">пароль</string>
</resources> </resources>