From 37b5a82d6702f868485eda43cf99a5706de9a910 Mon Sep 17 00:00:00 2001 From: annaksenova Date: Sat, 10 Jan 2026 17:03:05 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=201.=20=D0=90=D1=80=D1=85=D0=B8=D1=82=D0=B5=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B0=20MVVM=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=D0=B8=D0=B7=D0=B0=D1=80?= =?UTF-8?q?=D0=B4=D0=B0=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/otus/basicarchitecture/App.kt | 7 + .../ru/otus/basicarchitecture/MainActivity.kt | 2 + .../basicarchitecture/data/WizardCache.kt | 45 ++++++ .../basicarchitecture/ui/StepFourFragment.kt | 41 +++++ .../basicarchitecture/ui/StepOneFragment.kt | 103 ++++++++++++ .../basicarchitecture/ui/StepThreeFragment.kt | 53 +++++++ .../basicarchitecture/ui/StepTwoFragment.kt | 64 ++++++++ .../ru/otus/basicarchitecture/ui/ViewModel.kt | 148 ++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 8 + .../main/res/layout/fragment_step_four.xml | 116 ++++++++++++++ app/src/main/res/layout/fragment_step_one.xml | 49 ++++++ .../main/res/layout/fragment_step_three.xml | 44 ++++++ app/src/main/res/layout/fragment_step_two.xml | 49 ++++++ app/src/main/res/navigation/nav_graph.xml | 44 ++++++ app/src/main/res/values/dimens.xml | 4 + 15 files changed, 777 insertions(+) create mode 100644 app/src/main/java/ru/otus/basicarchitecture/App.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/data/WizardCache.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/ui/StepFourFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/ui/StepOneFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/ui/StepThreeFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/ui/StepTwoFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/ui/ViewModel.kt create mode 100644 app/src/main/res/layout/fragment_step_four.xml create mode 100644 app/src/main/res/layout/fragment_step_one.xml create mode 100644 app/src/main/res/layout/fragment_step_three.xml create mode 100644 app/src/main/res/layout/fragment_step_two.xml create mode 100644 app/src/main/res/navigation/nav_graph.xml create mode 100644 app/src/main/res/values/dimens.xml diff --git a/app/src/main/java/ru/otus/basicarchitecture/App.kt b/app/src/main/java/ru/otus/basicarchitecture/App.kt new file mode 100644 index 0000000..41902a3 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/App.kt @@ -0,0 +1,7 @@ +package ru.otus.basicarchitecture + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class App : Application() \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/MainActivity.kt b/app/src/main/java/ru/otus/basicarchitecture/MainActivity.kt index 623aba9..080ecdb 100644 --- a/app/src/main/java/ru/otus/basicarchitecture/MainActivity.kt +++ b/app/src/main/java/ru/otus/basicarchitecture/MainActivity.kt @@ -2,7 +2,9 @@ package ru.otus.basicarchitecture import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/ru/otus/basicarchitecture/data/WizardCache.kt b/app/src/main/java/ru/otus/basicarchitecture/data/WizardCache.kt new file mode 100644 index 0000000..a3a1baf --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/data/WizardCache.kt @@ -0,0 +1,45 @@ +package ru.otus.basicarchitecture.data + +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class WizardCache @Inject constructor() { + + private var _name: String = "" + val name: String get() = _name + + private var _surname: String = "" + val surname: String get() = _surname + + private var _birthDate: String = "" + val birthDate: String get() = _birthDate + + private var _country: String = "" + val country: String get() = _country + + private var _city: String = "" + val city: String get() = _city + + private var _address: String = "" + val address: String get() = _address + + private var _interests: List = emptyList() + val interests: List get() = _interests + + fun updatePersonalInfo(name: String, surname: String, birthDate: String) { + _name = name + _surname = surname + _birthDate = birthDate + } + + fun updateAddress(country: String, city: String, address: String) { + _country = country + _city = city + _address = address + } + + fun updateInterests(interests: List) { + _interests = interests + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/ui/StepFourFragment.kt b/app/src/main/java/ru/otus/basicarchitecture/ui/StepFourFragment.kt new file mode 100644 index 0000000..e72e2df --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/ui/StepFourFragment.kt @@ -0,0 +1,41 @@ +package ru.otus.basicarchitecture.ui + +import android.os.Bundle +import android.util.TypedValue +import android.view.View +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import com.google.android.material.chip.Chip +import com.google.android.material.chip.ChipGroup +import dagger.hilt.android.AndroidEntryPoint +import ru.otus.basicarchitecture.R + +@AndroidEntryPoint +class StepFourFragment : Fragment(R.layout.fragment_step_four) { + + private val viewModel: StepFourViewModel by viewModels() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + view.findViewById(R.id.tvName).text = viewModel.name + view.findViewById(R.id.tvSurname).text = viewModel.surname + view.findViewById(R.id.tvBirthDate).text = viewModel.birthDate + view.findViewById(R.id.tvAddress).text = viewModel.fullAddress + + val chipGroup = view.findViewById(R.id.cgInterests) + viewModel.interests.forEach { interest -> + val chip = Chip(requireContext()).apply { + text = interest + isCheckable = false + setChipBackgroundColorResource(android.R.color.transparent) + setChipStrokeColorResource(android.R.color.darker_gray) + chipStrokeWidth = TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, 2f, resources.displayMetrics + ) + } + chipGroup.addView(chip) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/ui/StepOneFragment.kt b/app/src/main/java/ru/otus/basicarchitecture/ui/StepOneFragment.kt new file mode 100644 index 0000000..186930d --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/ui/StepOneFragment.kt @@ -0,0 +1,103 @@ +package ru.otus.basicarchitecture.ui + +import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import android.widget.Button +import android.widget.EditText +import android.widget.Toast +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import androidx.navigation.fragment.findNavController +import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.launch +import ru.otus.basicarchitecture.R + +@AndroidEntryPoint +class StepOneFragment : Fragment(R.layout.fragment_step_one) { + private val viewModel: StepOneViewModel by viewModels() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val etName = view.findViewById(R.id.etName) + val etSurname = view.findViewById(R.id.etSurname) + val etBirthDate = view.findViewById(R.id.etBirthDate) + val btnNext = view.findViewById