From be419277e374866f4938035cc3a4eb2dc9c27dc9 Mon Sep 17 00:00:00 2001 From: Savelii Morozov Date: Wed, 14 Aug 2024 17:09:28 +0200 Subject: [PATCH 1/5] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 15 +++++++ app/src/main/AndroidManifest.xml | 2 +- .../ru/otus/basicarchitecture/WizardCache.kt | 9 +++++ .../domain/usecase/GetUserBirthday.kt | 4 ++ .../domain/usecase/GetUserNameUseCase.kt | 4 ++ .../domain/usecase/GetUserSurnameUseCase.kt | 4 ++ .../{ => presentation}/MainActivity.kt | 9 ++++- .../addressFragment/AddressFragment.kt | 31 +++++++++++++++ .../addressFragment/AddressViewModel.kt | 7 ++++ .../interestsFragment/InterestsFragment.kt | 31 +++++++++++++++ .../interestsFragment/InterestsViewModel.kt | 7 ++++ .../PersonalInfoFragment.kt | 31 +++++++++++++++ .../PersonalInfoViewModel.kt | 7 ++++ .../summaryFragment/SummaryFragment.kt | 31 +++++++++++++++ .../summaryFragment/SummaryViewModel.kt | 7 ++++ app/src/main/res/layout/activity_main.xml | 8 ++-- app/src/main/res/layout/fragment_address.xml | 39 +++++++++++++++++++ .../main/res/layout/fragment_interests.xml | 22 +++++++++++ .../res/layout/fragment_personal_info.xml | 38 ++++++++++++++++++ app/src/main/res/layout/fragment_summary.xml | 30 ++++++++++++++ app/src/main/res/navigation/nav_graph.xml | 13 +++++++ app/src/main/res/values/dimens.xml | 3 ++ app/src/main/res/values/strings.xml | 2 + 23 files changed, 348 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/ru/otus/basicarchitecture/WizardCache.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserBirthday.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserNameUseCase.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserSurnameUseCase.kt rename app/src/main/java/ru/otus/basicarchitecture/{ => presentation}/MainActivity.kt (65%) create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressViewModel.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsViewModel.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoViewModel.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryFragment.kt create mode 100644 app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryViewModel.kt create mode 100644 app/src/main/res/layout/fragment_address.xml create mode 100644 app/src/main/res/layout/fragment_interests.xml create mode 100644 app/src/main/res/layout/fragment_personal_info.xml create mode 100644 app/src/main/res/layout/fragment_summary.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/build.gradle b/app/build.gradle index 9c99d98..fbeedb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' + id 'kotlin-kapt' } android { @@ -30,6 +31,9 @@ android { kotlinOptions { jvmTarget = '1.8' } + buildFeatures { + viewBinding true + } } dependencies { @@ -38,7 +42,18 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.annotation:annotation:1.8.1' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.8.4' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.4' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.fragment:fragment-ktx:1.8.2' + implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7' + implementation 'androidx.navigation:navigation-ui-ktx:2.7.7' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + + //Hilt + implementation "com.google.dagger:hilt-android:2.47" + kapt "com.google.dagger:hilt-compiler:2.47" } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1e81fea..80369e1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ android:theme="@style/Theme.BasicArchitecture" tools:targetApi="31"> diff --git a/app/src/main/java/ru/otus/basicarchitecture/WizardCache.kt b/app/src/main/java/ru/otus/basicarchitecture/WizardCache.kt new file mode 100644 index 0000000..0f67a20 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/WizardCache.kt @@ -0,0 +1,9 @@ +package ru.otus.basicarchitecture + +import javax.inject.Inject + +class WizardCache @Inject constructor() { + + + +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserBirthday.kt b/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserBirthday.kt new file mode 100644 index 0000000..b1263fb --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserBirthday.kt @@ -0,0 +1,4 @@ +package ru.otus.basicarchitecture.domain.usecase + +class GetUserBirthday { +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserNameUseCase.kt b/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserNameUseCase.kt new file mode 100644 index 0000000..bff5f89 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserNameUseCase.kt @@ -0,0 +1,4 @@ +package ru.otus.basicarchitecture.domain.usecase + +class GetUserNameUseCase { +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserSurnameUseCase.kt b/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserSurnameUseCase.kt new file mode 100644 index 0000000..bbbf344 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/domain/usecase/GetUserSurnameUseCase.kt @@ -0,0 +1,4 @@ +package ru.otus.basicarchitecture.domain.usecase + +class GetUserSurnameUseCase { +} \ 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/presentation/MainActivity.kt similarity index 65% rename from app/src/main/java/ru/otus/basicarchitecture/MainActivity.kt rename to app/src/main/java/ru/otus/basicarchitecture/presentation/MainActivity.kt index 623aba9..dcf9f3b 100644 --- a/app/src/main/java/ru/otus/basicarchitecture/MainActivity.kt +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/MainActivity.kt @@ -1,11 +1,16 @@ -package ru.otus.basicarchitecture +package ru.otus.basicarchitecture.presentation import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import dagger.hilt.android.HiltAndroidApp +import ru.otus.basicarchitecture.R +@HiltAndroidApp class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + + } -} \ No newline at end of file +} diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressFragment.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressFragment.kt new file mode 100644 index 0000000..daba22e --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressFragment.kt @@ -0,0 +1,31 @@ +package ru.otus.basicarchitecture.presentation.addressFragment + +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 ru.otus.basicarchitecture.R + +class AddressFragment : Fragment() { + + companion object { + fun newInstance() = AddressFragment() + } + + private val viewModel: AddressViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // TODO: Use the ViewModel + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + return inflater.inflate(R.layout.fragment_address, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressViewModel.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressViewModel.kt new file mode 100644 index 0000000..9b7a9b2 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/addressFragment/AddressViewModel.kt @@ -0,0 +1,7 @@ +package ru.otus.basicarchitecture.presentation.addressFragment + +import androidx.lifecycle.ViewModel + +class AddressViewModel : ViewModel() { + // TODO: Implement the ViewModel +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsFragment.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsFragment.kt new file mode 100644 index 0000000..cd4fd14 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsFragment.kt @@ -0,0 +1,31 @@ +package ru.otus.basicarchitecture.presentation.interestsFragment + +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 ru.otus.basicarchitecture.R + +class InterestsFragment : Fragment() { + + companion object { + fun newInstance() = InterestsFragment() + } + + private val viewModel: InterestsViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // TODO: Use the ViewModel + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + return inflater.inflate(R.layout.fragment_interests, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsViewModel.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsViewModel.kt new file mode 100644 index 0000000..6a372d8 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/interestsFragment/InterestsViewModel.kt @@ -0,0 +1,7 @@ +package ru.otus.basicarchitecture.presentation.interestsFragment + +import androidx.lifecycle.ViewModel + +class InterestsViewModel : ViewModel() { + // TODO: Implement the ViewModel +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoFragment.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoFragment.kt new file mode 100644 index 0000000..b43575c --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoFragment.kt @@ -0,0 +1,31 @@ +package ru.otus.basicarchitecture.presentation.personalInfoFragment + +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 ru.otus.basicarchitecture.R + +class PersonalInfoFragment : Fragment() { + + companion object { + fun newInstance() = PersonalInfoFragment() + } + + private val viewModel: PersonalInfoViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // TODO: Use the ViewModel + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + return inflater.inflate(R.layout.fragment_personal_info, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoViewModel.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoViewModel.kt new file mode 100644 index 0000000..2ba596a --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/personalInfoFragment/PersonalInfoViewModel.kt @@ -0,0 +1,7 @@ +package ru.otus.basicarchitecture.presentation.personalInfoFragment + +import androidx.lifecycle.ViewModel + +class PersonalInfoViewModel : ViewModel() { + // TODO: Implement the ViewModel +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryFragment.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryFragment.kt new file mode 100644 index 0000000..d7e3d51 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryFragment.kt @@ -0,0 +1,31 @@ +package ru.otus.basicarchitecture.presentation.summaryFragment + +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 ru.otus.basicarchitecture.R + +class SummaryFragment : Fragment() { + + companion object { + fun newInstance() = SummaryFragment() + } + + private val viewModel: SummaryViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // TODO: Use the ViewModel + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + return inflater.inflate(R.layout.fragment_summary, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryViewModel.kt b/app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryViewModel.kt new file mode 100644 index 0000000..762b8b0 --- /dev/null +++ b/app/src/main/java/ru/otus/basicarchitecture/presentation/summaryFragment/SummaryViewModel.kt @@ -0,0 +1,7 @@ +package ru.otus.basicarchitecture.presentation.summaryFragment + +import androidx.lifecycle.ViewModel + +class SummaryViewModel : ViewModel() { + // TODO: Implement the ViewModel +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0b15a20..ab48e78 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,9 +1,11 @@ - + tools:context=".presentation.MainActivity"> - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_address.xml b/app/src/main/res/layout/fragment_address.xml new file mode 100644 index 0000000..1d4b3db --- /dev/null +++ b/app/src/main/res/layout/fragment_address.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + +